diff options
-rw-r--r-- | pttbbs/mbbsd/angel.c | 66 |
1 files changed, 12 insertions, 54 deletions
diff --git a/pttbbs/mbbsd/angel.c b/pttbbs/mbbsd/angel.c index 8cdfc990..d66d3867 100644 --- a/pttbbs/mbbsd/angel.c +++ b/pttbbs/mbbsd/angel.c @@ -163,7 +163,7 @@ a_changeangel(){ char buf[4]; /* cuser.myangel == "-" means banned for calling angel */ - if (cuser.myangel[0] == '-' || cuser.myangel[1] == 0) return 0; + if (cuser.myangel[0] == '-') return 0; getdata(b_lines - 1, 0, "更換小天使後就無法換回了喔! 是否要更換小天使? [y/N]", @@ -367,52 +367,6 @@ angel_reject_me(userinfo_t * uin){ } static int -FindAngel_Old(void){ - int nAngel; - int i, j; - int choose; - int trial = 0; - userinfo_t *u; - - do{ - nAngel = 0; - // since we have many, many angels now, let's ignore angels in angelpause state. - j = SHM->currsorted; - u = NULL; - for (i = 0; i < SHM->UTMPnumber; ++i) - { - u = &SHM->uinfo[SHM->sorted[j][0][i]]; - if ((u->userlevel & PERM_ANGEL) && (!u->angelpause) && (u->mode != DEBUGSLEEPING)) - ++nAngel; - } - - if (nAngel == 0) - return 0; - - choose = random() % nAngel + 1; - j = SHM->currsorted; - for (i = 0; i < SHM->UTMPnumber && choose; ++i) - { - u = &SHM->uinfo[SHM->sorted[j][0][i]]; - if ((u->userlevel & PERM_ANGEL) && (!u->angelpause) && (u->mode != DEBUGSLEEPING)) - --choose; - } - - // u should be correct now! No need to check angelpause in this time. - // u = &(SHM->uinfo[SHM->sorted[j][0][i-1]]); - if (choose == 0 && u && - (u->uid != currutmp->uid) && - (u->userlevel & PERM_ANGEL) && - !angel_reject_me(u) && - u->userid[0]){ - pwcuSetMyAngel(u->userid); - return 1; - } - }while(++trial < 5); - return 0; -} - -static int FindAngel(void){ int angel_uid = 0; @@ -423,7 +377,7 @@ FindAngel(void){ angel_uid = angel_beats_do_request(ANGELBEATS_REQ_SUGGEST_AND_LINK, usernum, 0); if (angel_uid < 0) // connection failure - break; + return -1; if (angel_uid > 0) angel = search_ulist(angel_uid); } while ((retries-- < 1) && !(angel && (angel->userlevel & PERM_ANGEL))); @@ -434,8 +388,7 @@ FindAngel(void){ return 1; } - // not able to find angel beats? try traditional way. - return FindAngel_Old(); + return 0; } #ifdef BN_NEWBIE @@ -584,10 +537,15 @@ TalkToAngel(){ } AngelPermChecked = 1; - if (cuser.myangel[0] == 0 && !FindAngel()){ - lastuent = NULL; - NoAngelFound("現在沒有小天使在線上"); - return; + if (cuser.myangel[0] == 0) { + int ret = FindAngel(); + if (ret <= 0) { + lastuent = NULL; + NoAngelFound( + (ret < 0) ? "抱歉,天使系統故障,請至" BN_BUGREPORT "回報。" : + "現在沒有小天使在線上"); + return; + } } // now try to load angel data. |