summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorscw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-05-18 22:12:35 +0800
committerscw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-05-18 22:12:35 +0800
commit7b6f58be52d4a79a3020098a95ca05a536d881c0 (patch)
tree05636c3bcbaa8715ba39d67aef38466fb0b377fe
parentd00edbdbd10efdd918837b5958dba4577be59e84 (diff)
downloadpttbbs-7b6f58be52d4a79a3020098a95ca05a536d881c0.tar
pttbbs-7b6f58be52d4a79a3020098a95ca05a536d881c0.tar.gz
pttbbs-7b6f58be52d4a79a3020098a95ca05a536d881c0.tar.bz2
pttbbs-7b6f58be52d4a79a3020098a95ca05a536d881c0.tar.lz
pttbbs-7b6f58be52d4a79a3020098a95ca05a536d881c0.tar.xz
pttbbs-7b6f58be52d4a79a3020098a95ca05a536d881c0.tar.zst
pttbbs-7b6f58be52d4a79a3020098a95ca05a536d881c0.zip
Fix error under ofo water mode.
Hide angel id instead of host. git-svn-id: http://opensvn.csie.org/pttbbs/branches/scw.angel@2002 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--include/modes.h2
-rw-r--r--mbbsd/menu.c1
-rw-r--r--mbbsd/talk.c91
-rw-r--r--mbbsd/user.c2
4 files changed, 56 insertions, 40 deletions
diff --git a/include/modes.h b/include/modes.h
index 5fad422a..a2de94a0 100644
--- a/include/modes.h
+++ b/include/modes.h
@@ -165,6 +165,8 @@ enum {STRIP_ALL = 0, ONLY_COLOR, NO_RELOAD};
#ifdef PLAY_ANGEL
#define WATERBALL_ANGEL 5
#define WATERBALL_ANSWER 6
+#define WATERBALL_CONFIRM_ANGEL 7
+#define WATERBALL_CONFIRM_ANSWER 8
#endif
#endif
diff --git a/mbbsd/menu.c b/mbbsd/menu.c
index dd53655c..38a5801f 100644
--- a/mbbsd/menu.c
+++ b/mbbsd/menu.c
@@ -348,7 +348,6 @@ static commands_t talklist[] = {
{t_chat, PERM_CHAT, "CChat 找家茶坊喫茶去"},
{t_display, 0, "DDisplay 顯示上幾次熱訊"},
#ifdef PLAY_ANGEL
- {t_switchangel, PERM_ANGEL, "SSwitchBeAngel 切換是否擔任小天使"},
{t_changeangel, PERM_BASIC, "UAChange Angel 更換小天使"},
#endif
{NULL, 0, NULL}
diff --git a/mbbsd/talk.c b/mbbsd/talk.c
index 4495ce7c..63ce373a 100644
--- a/mbbsd/talk.c
+++ b/mbbsd/talk.c
@@ -553,32 +553,27 @@ my_write2(void)
clrtoeol();
#ifndef PLAY_ANGEL
snprintf(genbuf, sizeof(genbuf), "攻擊 %s:", tw->userid);
+ i = WATERBALL_CONFIRM;
+#else
+ if (tw->msg[0].msgmode == MSG_GENERAL){
+ snprintf(genbuf, sizeof(genbuf), "攻擊 %s:", tw->userid);
+ i = WATERBALL_CONFIRM;
+ }else if (tw->msg[0].msgmode == MSG_TOANGEL){
+ strcpy(genbuf, "回答 小主人:");
+ i = WATERBALL_CONFIRM_ANSWER;
+ }else{ /* tw->msg[0].msgmode == MSG_FROMANGEL */
+ strcpy(genbuf, "再問他一次:");
+ i = WATERBALL_CONFIRM_ANGEL;
+ }
+#endif
if (!oldgetdata(0, 0, genbuf, msg,
- 80 - strlen(tw->userid) - 6, DOECHO))
+ 80 - strlen(tw->userid) - 6, DOECHO))
break;
- if (my_write(tw->pid, msg, tw->userid, WATERBALL_CONFIRM, tw->uin))
+ if (my_write(tw->pid, msg, tw->userid, i, 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_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);
@@ -602,9 +597,13 @@ my_write2(void)
* 5. 丟水球 flag = WATERBALL_GENGRAL, 0
* 6. my_write2 flag = WATERBALL_CONFIRM, 4 (pre-edit but confirm)
* 7. (when defined PLAY_ANGEL)
- * 呼叫小天使 flag = WATERBALL_ANGEL, 5 (隱藏 id)
+ * 呼叫小天使 flag = WATERBALL_ANGEL, 5 (id = "小天使")
* 8. (when defined PLAY_ANGEL)
- * 回答小主人 flag = WATERBALL_ANSWER, 6
+ * 回答小主人 flag = WATERBALL_ANSWER, 6 (隱藏 id)
+ * 9. (when defined PLAY_ANGEL)
+ * 呼叫小天使 flag = WATERBALL_CONFIRM_ANGEL, 7 (pre-edit)
+ * 10. (when defined PLAY_ANGEL)
+ * 回答小主人 flag = WATERBALL_CONFIRM_ANSWER, 8 (pre-edit)
*/
int
my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin)
@@ -618,11 +617,6 @@ 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)) {
vmsg("糟糕! 對方已落跑了(不在站上)! ");
watermode = -1;
@@ -681,7 +675,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
- && flag != WATERBALL_ANSWER
+ && flag != WATERBALL_ANGEL && flag != WATERBALL_CONFIRM_ANGEL
#endif
)) {
vmsg("糟糕! 對方已落跑了(不在站上)! ");
@@ -709,10 +703,12 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin)
uin->sig = 2;
if (uin->pid > 0)
kill(uin->pid, SIGUSR1);
- } else if (flag != WATERBALL_ALOHA &&
+ } else if ((flag != WATERBALL_ALOHA &&
#ifdef PLAY_ANGEL
- (flag != WATERBALL_ANGEL || (uin->angel & 1)) &&
+ flag != WATERBALL_ANGEL &&
flag != WATERBALL_ANSWER &&
+ flag != WATERBALL_CONFIRM_ANGEL &&
+ flag != WATERBALL_CONFIRM_ANSWER &&
/* Angel accept or not is checked outside.
* Avoiding new users don't know what pager is. */
#endif
@@ -721,8 +717,13 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin)
uin->pager == 2 ||
(uin->pager == 4 &&
!(fri_stat & HFM))))
+#ifdef PLAY_ANGEL
+ || ((flag == WATERBALL_ANGEL || flag == WATERBALL_CONFIRM_ANGEL)
+ && (uin->angel & 1))
+#endif
+ ) {
outmsg("\033[1;33;41m糟糕! 對方防水了! \033[37m~>_<~\033[m");
- else {
+ } else {
int write_pos = uin->msgcount; /* try to avoid race */
if ( write_pos < (MAX_MSGS - 1) ) { /* race here */
unsigned char pager0 = uin->pager;
@@ -731,8 +732,8 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin)
uin->pager = 2;
uin->msgs[write_pos].pid = currpid;
#ifdef PLAY_ANGEL
- if (flag == WATERBALL_ANGEL)
- strlcpy(uin->msgs[write_pos].userid, "小主人",
+ if (flag == WATERBALL_ANSWER || flag == WATERBALL_CONFIRM_ANSWER)
+ strlcpy(uin->msgs[write_pos].userid, "小天使",
sizeof(uin->msgs[write_pos].userid));
else
#endif
@@ -743,9 +744,11 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin)
#ifdef PLAY_ANGEL
switch (flag){
case WATERBALL_ANGEL:
+ case WATERBALL_CONFIRM_ANGEL:
uin->msgs[write_pos].msgmode = MSG_TOANGEL;
break;
case WATERBALL_ANSWER:
+ case WATERBALL_CONFIRM_ANSWER:
uin->msgs[write_pos].msgmode = MSG_FROMANGEL;
break;
default:
@@ -772,7 +775,9 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin)
#if defined(NOKILLWATERBALL) && defined(PLAY_ANGEL)
/* Questioning and answering should better deliver immediately. */
- if ((flag == WATERBALL_ANGEL || flag == WATERBALL_ANSWER) && uin->pid)
+ if ((flag == WATERBALL_ANGEL || flag == WATERBALL_ANSWER ||
+ flag == WATERBALL_CONFIRM_ANGEL ||
+ flag == WATERBALL_CONFIRM_ANSWER) && uin->pid)
kill(uin->pid, SIGUSR2);
#endif
}
@@ -2870,7 +2875,7 @@ NoAngelFound(const char* msg){
static void
TalkToAngel(){
userinfo_t* uent;
- char buf[128];
+
if (cuser.myangel[0] == 0 && ! FindAngel()){
NoAngelFound("現在沒有小天使在線上");
return;
@@ -2882,19 +2887,27 @@ TalkToAngel(){
return;
}
+ /* 這段話或許可以在小天使回答問題時 show 出來
move(b_lines - 1, 0);
outs("現在你的id受到保密,回答你問題的小天使並不知道你是誰 \n"
"你可以選擇不向對方透露自己身份來保護自己 ");
+ */
- snprintf(buf, 128, "問小天使 %s: ", cuser.myangel);
- my_write(uent->pid, buf, cuser.myangel, WATERBALL_ANGEL, uent);
+ my_write(uent->pid, "問小天使: ", "小天使", WATERBALL_ANGEL, uent);
return;
}
void
CallAngel(){
- screenline_t *screen0 = calloc(t_lines, sizeof(screenline_t));
+ static int entered = 0;
+ screenline_t *screen0;
int x, y;
+
+ if (entered)
+ return;
+ entered = 1;
+
+ screen0 = calloc(t_lines, sizeof(screenline_t));
getyx(&y, &x);
memcpy(screen0, big_picture, t_lines * sizeof(screenline_t));
@@ -2904,6 +2917,8 @@ CallAngel(){
move(y, x);
free(screen0);
redoscr();
+
+ entered = 0;
}
void
diff --git a/mbbsd/user.c b/mbbsd/user.c
index e01f00c6..653e45c2 100644
--- a/mbbsd/user.c
+++ b/mbbsd/user.c
@@ -244,7 +244,7 @@ static void Customize(void)
((cuser.uflag2 & FAVNOHILIGHT) ? "否" : "是"));
#ifdef PLAY_ANGEL
if( HAS_PERM(PERM_ANGEL) ){
- prints("%-30s%10s\n", "F. 接受小主人詢問",
+ prints("%-30s%10s\n", "F. 開放小主人詢問",
(REJECT_QUESTION ? "否" : "是"));
prints("%-30s%10s\n", "G. 接受的小主人性別", am[ANGEL_STATUS()]);
key = getkey("請按 [A-G] 切換設定,按 [Return] 結束:");