diff options
author | scw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-05-16 14:54:44 +0800 |
---|---|---|
committer | scw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-05-16 14:54:44 +0800 |
commit | ebe4b2cab9f196625a080c2b92399c06b004644b (patch) | |
tree | 6a4519c3c34a646e23914be4d474ee134a4bd1a6 /mbbsd/talk.c | |
parent | 567095c98731c804dab1c64cac7809aec1cc51d8 (diff) | |
download | pttbbs-ebe4b2cab9f196625a080c2b92399c06b004644b.tar pttbbs-ebe4b2cab9f196625a080c2b92399c06b004644b.tar.gz pttbbs-ebe4b2cab9f196625a080c2b92399c06b004644b.tar.bz2 pttbbs-ebe4b2cab9f196625a080c2b92399c06b004644b.tar.lz pttbbs-ebe4b2cab9f196625a080c2b92399c06b004644b.tar.xz pttbbs-ebe4b2cab9f196625a080c2b92399c06b004644b.tar.zst pttbbs-ebe4b2cab9f196625a080c2b92399c06b004644b.zip |
Asking/answering works!
git-svn-id: http://opensvn.csie.org/pttbbs/branches/scw.angel@1991 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/talk.c')
-rw-r--r-- | mbbsd/talk.c | 67 |
1 files changed, 58 insertions, 9 deletions
diff --git a/mbbsd/talk.c b/mbbsd/talk.c index a724cf03..72220fde 100644 --- a/mbbsd/talk.c +++ b/mbbsd/talk.c @@ -480,7 +480,7 @@ my_write2(void) if (swater[0] == NULL) return; - wmofo = 0; + wmofo = REPLYING; currstat0 = currstat; c0 = currutmp->chatid[0]; mode0 = currutmp->mode; @@ -551,6 +551,7 @@ my_write2(void) move(0, 0); prints("\033[m"); clrtoeol(); +#ifndef PLAY_ANGEL snprintf(genbuf, sizeof(genbuf), "攻擊 %s:", tw->userid); if (!oldgetdata(0, 0, genbuf, msg, 80 - strlen(tw->userid) - 6, DOECHO)) @@ -560,6 +561,24 @@ my_write2(void) strncpy(tw->msg[5].last_call_in, t_last_write, sizeof(tw->msg[5].last_call_in)); break; +#else + if (tw->msg[0].msgmode == MSG_GENERAL){ + snprintf(genbuf, sizeof(genbuf), "攻擊 %s:", tw->userid); + if (!oldgetdata(0, 0, genbuf, msg, + 80 - strlen(tw->userid) - 6, DOECHO)) + break; + + if (my_write(tw->pid, msg, tw->userid, WATERBALL_CONFIRM, tw->uin)) + strncpy(tw->msg[5].last_call_in, t_last_write, + sizeof(tw->msg[5].last_call_in)); + break; + }else if (tw->msg[0].msgmode == MSG_TOANGEL) + my_write(tw->pid, "回答小主人: ", tw->userid, + WATERBALL_ANSWER, tw->uin); + else /* tw->msg[0].msgmode == MSG_FROMANGEL */ + my_write(tw->pid, "再問他一次: ", tw->userid, + WATERBALL_ANGEL, tw->uin); +#endif } } while (!done); @@ -597,8 +616,10 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin) uin = (puin != NULL) ? puin : (userinfo_t *) search_ulist_pid(pid); strlcpy(destid, id, sizeof(destid)); + /* if (strcmp(id, "小主人") == 0) flag = WATERBALL_ANSWER; + */ if (!uin && !(flag == WATERBALL_GENERAL && water_which->count > 0)) { outmsg("\033[1;33;41m糟糕! 對方已落跑了(不在站上)! \033[37m~>_<~\033[m"); @@ -615,7 +636,7 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin) if (flag == WATERBALL_GENERAL #ifdef PLAY_ANGEL - || flag == WATERBALL_ANGEL + || flag == WATERBALL_ANGEL || flag == WATERBALL_ANSWER #endif ) { /* 一般水球 */ @@ -647,7 +668,7 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin) if (uin && *uin->userid && (flag == WATERBALL_GENERAL || flag == WATERBALL_CONFIRM #ifdef PLAY_ANGEL - || flag == WATERBALL_ANGEL + || flag == WATERBALL_ANGEL || flag == WATERBALL_ANSWER #endif )) { snprintf(buf, sizeof(buf), "丟給 %s : %s [Y/n]?", destid, msg); @@ -666,7 +687,7 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin) watermode = -1; if (!uin || !*uin->userid || (strcasecmp(destid, uin->userid) #ifdef PLAY_ANGEL - && strcmp(destid, "小主人") + && flag != WATERBALL_ANSWER #endif )) { outmsg("\033[1;33;41m糟糕! 對方已落跑了(不在站上)! \033[37m~>_<~\033[m"); @@ -698,8 +719,9 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin) kill(uin->pid, SIGUSR1); } else if (flag != WATERBALL_ALOHA && #ifdef PLAY_ANGEL - flag != WATERBALL_ANGEL && - /* angel accept or not is checked outside */ + flag != WATERBALL_ANGEL && flag != WATERBALL_ANSWER && + /* Angel accept or not is checked outside. + * Avoiding new users don't know what pager is. */ #endif !HAS_PERM(PERM_SYSOP) && (uin->pager == 3 || @@ -725,6 +747,18 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin) sizeof(uin->msgs[write_pos].userid)); strlcpy(uin->msgs[write_pos].last_call_in, msg, sizeof(uin->msgs[write_pos].last_call_in)); +#ifdef PLAY_ANGEL + switch (flag){ + case WATERBALL_ANGEL: + uin->msgs[write_pos].msgmode = MSG_TOANGEL; + break; + case WATERBALL_ANSWER: + uin->msgs[write_pos].msgmode = MSG_FROMANGEL; + break; + default: + uin->msgs[write_pos].msgmode = MSG_GENERAL; + } +#endif uin->pager = pager0; } else if (flag != WATERBALL_ALOHA) outmsg("\033[1;33;41m糟糕! 對方不行了! (收到太多水球) \033[37m@_@\033[m"); @@ -1893,8 +1927,11 @@ draw_pickup(int drawall, pickup_t * pickup, int pickup_way, int call_in(userinfo_t * uentp, int fri_stat) { - if( ! strcasecmp(uentp->userid, cuser.myangel) ) + static int CallInAngelWarning = 1; + if( CallInAngelWarning && ! strcasecmp(uentp->userid, cuser.myangel) ){ outmsg("直接丟水球給小天使是會被知道 ID 的喔!"); + CallInAngelWarning = 0; + } if (iswritable_stat(uentp, fri_stat)) { char genbuf[60]; @@ -2768,7 +2805,7 @@ t_changeangel(){ cuser.myangel[0] = 0; outs("小天使更新完成,下次呼叫時會選出新的小天使"); } - return 0; + return XEASY; } static int @@ -2817,7 +2854,7 @@ TalkToAngel(){ } /* TODO: complete first name-hiden waterball */ - snprintf(buf, 128, "問小天使 %s:", cuser.myangel); + snprintf(buf, 128, "問小天使 %s: ", cuser.myangel); my_write(uent->pid, buf, cuser.myangel, WATERBALL_ANGEL, uent); return; } @@ -2836,4 +2873,16 @@ CallAngel(){ free(screen0); redoscr(); } + +void SwitchBeingAngel(){ + cuser.uflag2 ^= BEING_ANGEL; + currutmp->being_angel ^= 1; +} + +int t_switchangel(){ + SwitchBeingAngel(); + outs(cuser.uflag2 & BEING_ANGEL ? + "開放小主人問問題" : "休息一會兒"); + return XEASY; +} #endif |