summaryrefslogtreecommitdiffstats
path: root/mbbsd/angel.c
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-04-02 19:10:21 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-04-02 19:10:21 +0800
commit8035884632b7a12f04ce288986c1a8b8632beeb1 (patch)
tree6e87b0ba99997e22df2d6270301ead748c3d6cd2 /mbbsd/angel.c
parent702edad799fc813d84a29673de87d7e58854ed39 (diff)
downloadpttbbs-8035884632b7a12f04ce288986c1a8b8632beeb1.tar
pttbbs-8035884632b7a12f04ce288986c1a8b8632beeb1.tar.gz
pttbbs-8035884632b7a12f04ce288986c1a8b8632beeb1.tar.bz2
pttbbs-8035884632b7a12f04ce288986c1a8b8632beeb1.tar.lz
pttbbs-8035884632b7a12f04ce288986c1a8b8632beeb1.tar.xz
pttbbs-8035884632b7a12f04ce288986c1a8b8632beeb1.tar.zst
pttbbs-8035884632b7a12f04ce288986c1a8b8632beeb1.zip
- improve changing_angel algorithm to prevent paused angels receiving more clients
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@4065 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/angel.c')
-rw-r--r--mbbsd/angel.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/mbbsd/angel.c b/mbbsd/angel.c
index 6403b99b..2e918219 100644
--- a/mbbsd/angel.c
+++ b/mbbsd/angel.c
@@ -20,7 +20,7 @@ angel_toggle_pause()
void
angel_load_data()
{
- // TODO cache angel.msg here.
+ // TODO cache angelmsg here.
}
int
@@ -133,19 +133,19 @@ FindAngel(void){
int i, j;
int choose;
int trial = 0;
- int mask;
-
- if (cuser.sex < 6) /* ¥¿±`©Ê§O */
- mask = 1 | (2 << (cuser.sex & 1));
- else
- mask = 7;
+ 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)
- if (SHM->uinfo[SHM->sorted[j][0][i]].userlevel & PERM_ANGEL)
+ {
+ u = &SHM->uinfo[SHM->sorted[j][0][i]];
+ if ((u->userlevel & PERM_ANGEL) && (!u->angelpause) && (u->mode != DEBUGSLEEPING))
++nAngel;
+ }
if (nAngel == 0)
return 0;
@@ -153,13 +153,20 @@ FindAngel(void){
choose = random() % nAngel + 1;
j = SHM->currsorted;
for (i = 0; i < SHM->UTMPnumber && choose; ++i)
- if (SHM->uinfo[SHM->sorted[j][0][i]].userlevel & PERM_ANGEL)
+ {
+ u = &SHM->uinfo[SHM->sorted[j][0][i]];
+ if ((u->userlevel & PERM_ANGEL) && (!u->angelpause) && (u->mode != DEBUGSLEEPING))
--choose;
+ }
- if (choose == 0 && SHM->uinfo[SHM->sorted[j][0][i - 1]].uid != currutmp->uid
- && (SHM->uinfo[SHM->sorted[j][0][i - 1]].userlevel & PERM_ANGEL)
- && !angel_reject_me(&SHM->uinfo[SHM->sorted[j][0][i - 1]]) ){
- strlcpy(cuser.myangel, SHM->uinfo[SHM->sorted[j][0][i - 1]].userid, IDLEN + 1);
+ // 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]){
+ strlcpy(cuser.myangel, u->userid, sizeof(cuser.myangel));
passwd_update(usernum, &cuser);
return 1;
}