summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorscw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-05-16 14:54:44 +0800
committerscw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-05-16 14:54:44 +0800
commitebe4b2cab9f196625a080c2b92399c06b004644b (patch)
tree6a4519c3c34a646e23914be4d474ee134a4bd1a6
parent567095c98731c804dab1c64cac7809aec1cc51d8 (diff)
downloadpttbbs-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
-rw-r--r--mbbsd/io.c23
-rw-r--r--mbbsd/mbbsd.c7
-rw-r--r--mbbsd/menu.c3
-rw-r--r--mbbsd/talk.c67
-rw-r--r--mbbsd/user.c4
-rw-r--r--mbbsd/var.c9
6 files changed, 93 insertions, 20 deletions
diff --git a/mbbsd/io.c b/mbbsd/io.c
index 6a10ffce..22de008f 100644
--- a/mbbsd/io.c
+++ b/mbbsd/io.c
@@ -252,7 +252,7 @@ igetch()
return (ch);
if (currutmp->msgs[0].pid &&
- WATERMODE(WATER_OFO) && wmofo == -1) {
+ WATERMODE(WATER_OFO) && wmofo == NOTREPLYING) {
int y, x, my_newfd;
screenline_t *screen0 = calloc(t_lines, sizeof(screenline_t));
memcpy(screen0, big_picture, t_lines * sizeof(screenline_t));
@@ -292,8 +292,25 @@ igetch()
i_newfd = 0;
show_call_in(0, 0);
watermode = 0;
- my_write(currutmp->msgs[0].pid, "水球丟過去 : ",
- currutmp->msgs[0].userid, WATERBALL_GENERAL, NULL);
+#ifndef PLAY_ANGEL
+ my_write(currutmp->msgs[0].pid, "水球丟過去: ",
+ currutmp->msgs[0].userid, WATERBALL_GENERAL, NULL);
+#else
+ switch (currutmp->msgs[0].msgmode){
+ case MSG_GENERAL:
+ my_write(currutmp->msgs[0].pid, "水球丟過去: ",
+ currutmp->msgs[0].userid, WATERBALL_GENERAL, NULL);
+ break;
+ case MSG_FROMANGEL:
+ my_write(currutmp->msgs[0].pid, "再問他一次: ",
+ currutmp->msgs[0].userid, WATERBALL_ANGEL, NULL);
+ break;
+ case MSG_TOANGEL:
+ my_write(currutmp->msgs[0].pid, "回答小主人: ",
+ currutmp->msgs[0].userid, WATERBALL_ANSWER, NULL);
+ break;
+ }
+#endif
i_newfd = my_newfd;
/* 還原螢幕 */
diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c
index 14f010d6..f8d2dc31 100644
--- a/mbbsd/mbbsd.c
+++ b/mbbsd/mbbsd.c
@@ -310,7 +310,12 @@ add_history(msgque_t * msg)
add_history_water(&water[0], msg);
if (WATERMODE(WATER_NEW) || WATERMODE(WATER_OFO)) {
for (i = 0; i < 5 && swater[i]; i++)
- if (swater[i]->pid == msg->pid)
+ if (swater[i]->pid == msg->pid
+#ifdef PLAY_ANGEL
+ && swater[i]->msg[0].msgmode == msg->msgmode
+ /* When throwing waterball to angel directly */
+#endif
+ )
break;
if (i == 5) {
waterinit = 1;
diff --git a/mbbsd/menu.c b/mbbsd/menu.c
index c621dac4..d77492ff 100644
--- a/mbbsd/menu.c
+++ b/mbbsd/menu.c
@@ -367,7 +367,8 @@ static commands_t talklist[] = {
{t_chat, PERM_CHAT, "CChat 找家茶坊喫茶去"},
{t_display, 0, "DDisplay 顯示上幾次熱訊"},
#ifdef PLAY_ANGEL
- {t_changeangel, PERM_BASIC, "AChange Angel 更換小天使"},
+ {t_switchangel, PERM_ANGEL, "SSwitch Be Angl 切換是否擔任小天使"},
+ {t_changeangel, PERM_BASIC, "UAChange Angel 更換小天使"},
#endif
{NULL, 0, NULL}
};
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
diff --git a/mbbsd/user.c b/mbbsd/user.c
index 55cb1ceb..6b141c38 100644
--- a/mbbsd/user.c
+++ b/mbbsd/user.c
@@ -290,11 +290,11 @@ static void Customize(void)
case 'F':
case 'f':
if( HAS_PERM(PERM_ANGEL) ){
- cuser.uflag2 ^= BEING_ANGEL;
- currutmp->being_angel ^= 1;
+ t_switchangel();
break;
}
#endif
+
default:
done = 1;
}
diff --git a/mbbsd/var.c b/mbbsd/var.c
index f3179f37..d239fbec 100644
--- a/mbbsd/var.c
+++ b/mbbsd/var.c
@@ -334,13 +334,14 @@ int automargins = 1;
time_t now;
int KEY_ESC_arg;
int watermode = -1;
-int wmofo = -1;
+int wmofo = NOTREPLYING;
/*
* WATERMODE(WATER_ORIG) | WATERMODE(WATER_NEW):
* ????????????????????
- * Ptt 水球回顧 e = -1
- * 沒在回水球 = 0 在回上一顆水球 (Ctrl-R) > 0 在回前 n 顆水球 (Ctrl-R
- * Ctrl-R)
+ * Ptt 水球回顧 (FIXME: guessed by scw)
+ * watermode = -1 沒在回水球
+ * = 0 在回上一顆水球 (Ctrl-R)
+ * > 0 在回前 n 顆水球 (Ctrl-R Ctrl-R)
*
* WATERMODE(WATER_OFO) by in2
* wmofo = NOTREPLYING 沒在回水球