作者itoc, 信區: itoc
標題[功能] NPC 自動回水球 (1.主程式)
時間03/08/17
作者: itoc (不太發展實驗室) 看板: plan
標題: [功能] 無聊的 NPC
時間: Tue Sep 3 11:54:28 2002 Updated: 2006/01/07
丟水球給 userlevel=0 (也就是 guest) 的 NPC (non-player-char.)
NPC 會回水球給你
如果丟 NPC 這 ID 水球
問 "請問如何開板" NPC 會答 "開板請至 [newboard] 板 post"
問 "請問站長是誰" NPC 會答 "本站的站長是 sysop"
如果跟 NPC 隨便丟水球,NPC 也會回你話
: bmw.c:bmw_rqst()
int i, j, userno, locus;
BMW bmw[BMW_PER_USER], *mptr, **mslot;
+ char fpath[64];
do
{
mptr = &bmw[i];
...
...
bmw_lslot[locus++] = *mptr; /* structure copy */
+ /* 當 NPC 收到別人丟來的水球時,自動回話 */
+ if (!strcmp(cuser.userid, "NPC")) /* NPC 的 ID 是 "NPC" */
+ {
+ if (mptr->caller)
+ {
+ BMW new;
+
+ time(&new.btime);
+ new.caller = cutmp;
+ new.sender = cuser.userno;
+ new.recver = mptr->sender;
+ strcpy(new.userid, cuser.userid);
+ strcpy(new.msg, mptr->msg);
+ bmw_npcAI(new.msg);
+ bmw_send(mptr->caller, &new);
+
+ usr_fpath(fpath, cuser.userid, fn_bmw);
+ rec_add(fpath, &new, sizeof(BMW));
+
+ usr_fpath(fpath, cuser.userid, fn_amw);
+ if (fp = fopen(fpath, "a"))
+ {
+ fprintf(fp, BMW_FORMAT2 " %s\n",
+ new.userid, new.msg, Btime(&new.btime));
+ fclose(fp);
+ }
+ }
+ }
} while (++i < j);
: bmw.c:bmw_npcAI() 新增於 bmw_edit() 前面
static void
bmw_npcAI(msg) /* Non-Player-Char 的人工智慧 */
char *msg; /* bmw.msg 長度是 69 */
{
/* input msg 是使用者所輸入要給 guest 的水球 */
/* output 也用 msg,是 NPC 回給 cuser.userid 的水球 */
int find;
FILE *fp;
char rule[80], ans[80], *str;
find = 0;
if (fp = fopen("etc/npc", "r"))
{
while (fgets(rule, 80, fp) && fgets(ans, 80, fp)) /* 一次 fget 二行 */
{
if (str = strchr(rule, '\n'))
*str = '\0';
if (strstr(msg, rule))
{
if (str = strchr(ans, '\n'))
*str = '\0';
str_ncpy(msg, ans, 60);
find = 1;
break;
}
}
fclose(fp);
}
if (!find) /* 如果 rule 裡面沒有,就隨便回答 */
strcpy(msg, "講太小聲了,我聽不到");
}
: etc/npc 新增這個檔案:奇數行是規則,偶數行是要回答的話,範例如下:
: 如果要改 NPC 的 AI,就改 etc/npc 即可
> ---------- 範例從下一行開始,不包括本行 ---------- <
早安
不早了啊,我每天都睡到中午的說
天氣
今天天氣可好的很呢~
為什麼
你這麼聰明都不知道了,我怎麼可能會知道
開板
開板請至 [newboard] 板 post
站長
本站的站長是 sysop
> ---------- 範例到上一行結束,不包括本行 ---------- <
--
□ 本文章由 itoc 從 pc512-5.EE.NCTU.edu.tw 發表精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻