summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pttbbs/include/proto.h1
-rw-r--r--pttbbs/mbbsd/angel.c181
-rw-r--r--pttbbs/mbbsd/menu.c1
3 files changed, 109 insertions, 74 deletions
diff --git a/pttbbs/include/proto.h b/pttbbs/include/proto.h
index f6e4088c..ddad5878 100644
--- a/pttbbs/include/proto.h
+++ b/pttbbs/include/proto.h
@@ -32,6 +32,7 @@ void merge_dir(const char *dir1, const char *dir2, int isoutter);
/* angel */
int a_changeangel(void);
int a_angelmsg(void);
+int a_angelmsg2(void);
int a_angelreport(void);
int a_angelreload(void);
int angel_reject_me(userinfo_t * uin);
diff --git a/pttbbs/mbbsd/angel.c b/pttbbs/mbbsd/angel.c
index df54d91a..4192f58f 100644
--- a/pttbbs/mbbsd/angel.c
+++ b/pttbbs/mbbsd/angel.c
@@ -397,78 +397,6 @@ angel_log_order_song(const char *angel_nick) {
IDLEN - 6, angel_nick, angel_exp);
}
-int
-a_angelmsg(){
- char msg[3][75] = { "", "", "" };
- char nick[10] = "";
- char buf[512];
- int i;
- FILE* fp;
-
- move(1, 0); clrtobot();
- setuserfile(buf, FN_ANGELMSG);
- fp = fopen(buf, "r");
- if (fp) {
- i = 0;
- if (fgets(msg[0], sizeof(msg[0]), fp)) {
- chomp(msg[0]);
- if (strncmp(msg[0], "%%[", 3) == 0) {
- strlcpy(nick, msg[0] + 3, 7);
- move(4, 0);
- prints("原有暱稱:%s小天使", nick);
- msg[0][0] = 0;
- } else
- i = 1;
- } else
- msg[0][0] = 0;
-
- move(5, 0);
- outs("原有留言:\n");
- if(msg[0][0])
- outs(msg[0]);
- for (; i < 3; ++i) {
- if(fgets(msg[i], sizeof(msg[0]), fp)) {
- outs(msg[i]);
- chomp(msg[i]);
- } else
- break;
- }
- fclose(fp);
- }
-
- getdata_buf(11, 0, "小天使暱稱:", nick, 7, 1);
- do {
- move(12, 0);
- clrtobot();
- outs("不在的時候要跟小主人說什麼呢?"
- "最多三行,按[Enter]結束");
- // the -1 is for newline and we use to fgets() to read later
- for (i = 0; i < 3 &&
- getdata_buf(14 + i, 0, ":", msg[i], sizeof(msg[i])-1, DOECHO);
- ++i);
- getdata(b_lines - 2, 0, "(S)儲存 (E)重新來過 (Q)取消?[S]",
- buf, 4, LCECHO);
- } while (buf[0] == 'e');
- if (buf[0] == 'q')
- return 0;
- setuserfile(buf, FN_ANGELMSG);
- if (msg[0][0] == 0)
- unlink(buf);
- else {
- FILE* fp = fopen(buf, "w");
- if (!fp)
- return 0;
- if(nick[0])
- fprintf(fp, "%%%%[%s\n", nick);
- for (i = 0; i < 3 && msg[i][0]; ++i) {
- fputs(msg[i], fp);
- fputc('\n', fp);
- }
- fclose(fp);
- }
- return 0;
-}
-
int a_angelreport() {
angel_beats_report rpt = {0};
angel_beats_data req = {0};
@@ -615,6 +543,113 @@ angel_display_message(const char *template_fn,
outs(Cdatelite(&ts));
}
+enum ANGEL_MSG_FORMAT {
+ FORMAT_NICK_MSG = 1,
+ FORMAT_PLAIN_MSG,
+};
+
+int
+angel_edit_msg(const char *prompt, const char *filename,
+ enum ANGEL_MSG_FORMAT format) {
+ char nick[IDLEN - 6 + 1] = ""; // 6=strlen("小天使")
+ char msg[3][STRLEN] = {"", "", ""};
+ char fpath[PATHLEN];
+ char buf[512];
+ FILE *fp;
+ int i, do_delete_file = 0;
+
+ vs_hdr2(PROMPT_ANGELBEATS, prompt);
+ setuserfile(fpath, filename);
+
+ outs("原設定: \n");
+ fp = fopen(fpath, "r");
+ if (fp) {
+ if (format == FORMAT_NICK_MSG) {
+ fgets(buf, sizeof(buf), fp);
+ if (strstr(buf, "%%[") == buf) {
+ chomp(buf);
+ strlcpy(nick, buf + 3, sizeof(nick));
+ prints(" 暱稱: %s小天使\n", nick);
+ }
+ }
+ for (i = 0; i < 3; i++) {
+ if (!fgets(msg[i], sizeof(msg[i]), fp))
+ break;
+ outs(" : ");
+ outs(msg[i]);
+ chomp(msg[i]);
+ }
+
+ fclose(fp);
+ } else {
+ outs("(目前無設定)\n");
+ }
+ mvouts(10, 0, "新設定:\n");
+ if (format == FORMAT_NICK_MSG) {
+ getdata_buf(11, 0, " 小天使暱稱:", nick, sizeof(nick), DOECHO);
+ if (!*nick) {
+ mvouts(12, 0, "空白將導致刪除小天使暱稱與訊息。\n");
+ do_delete_file = 1;
+ }
+ }
+ if (!do_delete_file) {
+ mvouts(12, 0, " 編輯訊息 (最多三行,按[ENTER]結束):\n");
+ for (i = 0; i < 3; i++) {
+ if (!getdata_buf(13 + i, 0, " : ", msg[i], 74, DOECHO)) {
+ for (i++; i < 3; i++)
+ msg[i][0] = 0;
+ break;
+ }
+ }
+ if (format == FORMAT_PLAIN_MSG && !*msg[0]) {
+ mvouts(15, 0, "空白將導致刪除小天使訊息。\n");
+ do_delete_file = 1;
+ }
+ }
+
+ if (!getdata(20, 0, "確定儲存? [y/N]: ", buf, 3, LCECHO) ||
+ buf[0] != 'y') {
+ return 0;
+ }
+
+ if (do_delete_file) {
+ if (dashf(fpath) && remove(fpath) != 0)
+ vmsg("系統錯誤 - 無法刪除。");
+ return 1;
+ }
+
+ // write file
+ fp = fopen(fpath, "w");
+ if (!fp) {
+ vmsg("系統錯誤 - 無法寫入。");
+ return 0;
+ }
+ if (format == FORMAT_NICK_MSG) {
+ fputs("%%[", fp);
+ fputs(nick, fp);
+ fputs("\n", fp);
+ }
+ for (i = 0; i < 3; i++) {
+ fputs(msg[i], fp);
+ fputc('\n', fp);
+ }
+
+ fclose(fp);
+ return 1;
+}
+
+int
+a_angelmsg(){
+ return angel_edit_msg("編輯小天使暱稱與離線訊息", FN_ANGELMSG,
+ FORMAT_NICK_MSG);
+}
+
+int
+a_angelmsg2(){
+ return angel_edit_msg("編輯小天使呼叫畫面個性留言", FN_ANGELMSG2,
+ FORMAT_PLAIN_MSG);
+}
+
static int
FindAngel(void){
@@ -810,7 +845,6 @@ TalkToAngel(){
more(FN_ANGEL_USAGE, NA);
}
- // 為避免某些人找了小天使但又不送出訊息,在這個階段不顯示 nick.
{
char xnick[IDLEN+1], prompt[IDLEN*2];
snprintf(xnick, sizeof(xnick), "%s小天使", _myangel_nick);
@@ -820,7 +854,6 @@ TalkToAngel(){
lastuent = uent;
}
}
- return;
}
void
diff --git a/pttbbs/mbbsd/menu.c b/pttbbs/mbbsd/menu.c
index e522d34b..5b5f664f 100644
--- a/pttbbs/mbbsd/menu.c
+++ b/pttbbs/mbbsd/menu.c
@@ -681,6 +681,7 @@ static const commands_t maillist[] = {
#ifdef PLAY_ANGEL
static const commands_t angelmenu[] = {
{a_angelmsg, PERM_ANGEL,"Leave message 留言給小主人"},
+ {a_angelmsg2,PERM_ANGEL,"Call screen 呼叫畫面個性留言"},
{a_angelreport, 0, "Report 線上天使狀態報告"},
#ifdef ANGEL_ALLOW_MENU_RELOAD
// This will corrupt perf data; let's do that weekly.