From 62b898b733dd7b8acfaefc287c513668a007f232 Mon Sep 17 00:00:00 2001 From: scw Date: Sun, 16 May 2004 08:10:54 +0000 Subject: All function implemented. git-svn-id: http://opensvn.csie.org/pttbbs/branches/scw.angel@1993 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/talk.c | 35 ++++++++++++++++++++++++++++++++--- 1 file 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; } -- cgit v1.2.3