diff options
-rw-r--r-- | pttbbs/daemon/angelbeats/angelbeats.c | 10 | ||||
-rw-r--r-- | pttbbs/mbbsd/angel.c | 39 |
2 files changed, 27 insertions, 22 deletions
diff --git a/pttbbs/daemon/angelbeats/angelbeats.c b/pttbbs/daemon/angelbeats/angelbeats.c index 9bd38b77..4cf7c657 100644 --- a/pttbbs/daemon/angelbeats/angelbeats.c +++ b/pttbbs/daemon/angelbeats/angelbeats.c @@ -148,9 +148,11 @@ int angel_list_comp_advanced(const void *pva, const void *pvb) { time_t now = time(0), assign_a = pa->last_assigned, assign_b = pb->last_assigned; - if (now - assign_a >= ANGELBEATS_ASSIGN_PROBATION_PERIOD) + if (now - assign_a >= ANGELBEATS_ASSIGN_PROBATION_PERIOD || + pa->last_activity >= assign_a) assign_a -= assign_a % ANGELBEATS_REASSIGN_PERIOD; - if (now - assign_b >= ANGELBEATS_ASSIGN_PROBATION_PERIOD) + if (now - assign_b >= ANGELBEATS_ASSIGN_PROBATION_PERIOD || + pb->last_activity >= assign_b) assign_b -= assign_b % ANGELBEATS_REASSIGN_PERIOD; if (assign_a != assign_b) @@ -316,7 +318,9 @@ suggest_online_angel(int master_uid) { (int)(clk - kanade->last_activity), (int)(clk - kanade->last_assigned), ((int)(clk - kanade->last_assigned) < - ANGELBEATS_ASSIGN_PROBATION_PERIOD) ? "[probation]" : ""); + ANGELBEATS_ASSIGN_PROBATION_PERIOD && + kanade->last_activity < kanade->last_assigned) ? + "[probation]" : ""); #endif #if defined(ANGELBEATS_ASSIGN_BY_LAST_ACTIVITY) diff --git a/pttbbs/mbbsd/angel.c b/pttbbs/mbbsd/angel.c index a68f6197..ed1732a5 100644 --- a/pttbbs/mbbsd/angel.c +++ b/pttbbs/mbbsd/angel.c @@ -319,8 +319,8 @@ select_angel() { static int do_changeangel(int force) { char buf[4]; - static time_t last_time = 0; const char *prompt = "祅癘ЧΘΩ㊣穦眖絬ぱㄏい匡穝ぱㄏ"; + static int is_bad_master = -1; /* cuser.myangel == "-" means banned for calling angel */ if (cuser.myangel[0] == '-') @@ -336,27 +336,29 @@ do_changeangel(int force) { return 0; } -#ifdef ANGEL_CHANGE_TIMELIMIT_MINS - if (force || HasUserPerm(PERM_ADMIN)) - last_time = 0; - - if (last_time && - (now - last_time < ANGEL_CHANGE_TIMELIMIT_MINS * 60)) { - vmsgf("–Ω传ぱㄏ程ぶ丁筳 %d だ牧", - ANGEL_CHANGE_TIMELIMIT_MINS); - return 0; + // get/cache "bad_master" info + if (is_bad_master < 0) { + char bad_master_file[PATHLEN]; + setuserfile(bad_master_file, ".bad_master"); + is_bad_master = dashf(bad_master_file); } -#endif + +#ifdef ANGEL_CHANGE_TIMELIMIT_MINS + if (!(force || HasUserPerm(PERM_ADMIN))) { - static int is_bad_master = -1; - if (is_bad_master < 0) { - char bad_master_file[PATHLEN]; - setuserfile(bad_master_file, ".bad_master"); - is_bad_master = dashf(bad_master_file); - } - if (is_bad_master && !verify_captcha("磷秖獶タ盽传ぱㄏ\n")) + int duration = ANGEL_CHANGE_TIMELIMIT_MINS; + if (is_bad_master) + duration *= 3; + if (cuser.timesetangel && + (now - cuser.timesetangel < duration * 60)) { + vmsgf("–Ω传ぱㄏ程ぶ丁筳 %d だ牧", duration); return 0; + } } +#endif + + if (is_bad_master && !verify_captcha("磷秖獶タ盽传ぱㄏ\n")) + return 0; getdata(b_lines - 1, 0, "絋﹚璶传ぱㄏ [y/N]", buf, 3, LCECHO); if (buf[0] == 'y') { @@ -366,7 +368,6 @@ do_changeangel(int force) { angel_beats_do_request(ANGELBEATS_REQ_REMOVE_LINK, usernum, searchuser(cuser.myangel, NULL)); pwcuSetMyAngel(""); - last_time = now; vmsg(prompt); } return 0; |