summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorscw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-05-16 16:10:54 +0800
committerscw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-05-16 16:10:54 +0800
commit62b898b733dd7b8acfaefc287c513668a007f232 (patch)
treeaa434cdbd6e88ef48a54f064219c99b81de42b56
parentd7b25620a24a18a551dcfee523902c3a5bb2f44d (diff)
downloadpttbbs-62b898b733dd7b8acfaefc287c513668a007f232.tar
pttbbs-62b898b733dd7b8acfaefc287c513668a007f232.tar.gz
pttbbs-62b898b733dd7b8acfaefc287c513668a007f232.tar.bz2
pttbbs-62b898b733dd7b8acfaefc287c513668a007f232.tar.lz
pttbbs-62b898b733dd7b8acfaefc287c513668a007f232.tar.xz
pttbbs-62b898b733dd7b8acfaefc287c513668a007f232.tar.zst
pttbbs-62b898b733dd7b8acfaefc287c513668a007f232.zip
All function implemented.
git-svn-id: http://opensvn.csie.org/pttbbs/branches/scw.angel@1993 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--mbbsd/talk.c35
1 files changed, 32 insertions, 3 deletions
diff --git a/mbbsd/talk.c b/mbbsd/talk.c
index 72220fde..22535b9e 100644
--- a/mbbsd/talk.c
+++ b/mbbsd/talk.c
@@ -776,6 +776,12 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin)
else if (uin->msgcount > 1 && uin->msgcount < MAX_MSGS &&
flag != WATERBALL_ALOHA)
outmsg("\033[1;33;44m¦A¸É¤W¤@²É! \033[37m*^o^*\033[m");
+
+#if defined(NOKILLWATERBALL) && defined(PLAY_ANGEL)
+ /* Questioning and answering should better deliver immediately. */
+ if ((flag == WATERBALL_ANGEL || flag == WATERBALL_ANSWER) && uin->pid)
+ kill(uin->pid, SIGUSR2);
+#endif
}
clrtoeol();
@@ -2810,9 +2816,32 @@ t_changeangel(){
static int
FindAngel(void){
- /* TODO: randomized choose an online angel, shouldn't be them self */
- //strlcpy(cuser.myangel, "scw", IDLEN + 1);
- //return 1;
+ /* TODO: randomized choose an online angel, shouldn't be themself */
+ int nAngel;
+ int i, j;
+ int choose;
+ int trial = 0;
+ do{
+ nAngel = 0;
+ j = SHM->currsorted;
+ for (i = 0; i < SHM->UTMPnumber; ++i)
+ if (SHM->sorted[j][0][i]->userlevel & PERM_ANGEL)
+ ++nAngel;
+
+ if (nAngel == 0)
+ return 0;
+
+ choose = rand() % nAngel + 1;
+ j = SHM->currsorted;
+ for (i = 0; i < SHM->UTMPnumber && choose; ++i)
+ if (SHM->sorted[j][0][i]->userlevel & PERM_ANGEL)
+ --choose;
+
+ if (choose == 0 && SHM->sorted[j][0][i - 1] != currutmp){
+ strlcpy(cuser.myangel, SHM->sorted[j][0][i - 1]->userid, IDLEN + 1);
+ return 1;
+ }
+ }while(++trial < 5);
return 0;
}