summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pttbbs/daemon/angelbeats/angelbeats.c10
-rw-r--r--pttbbs/mbbsd/angel.c39
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;