帶 npc 走來走去 - 聖殿英雄傳說 MUD
By Blanche
at 2017-07-22T15:56
at 2017-07-22T15:56
Table of Contents
我一直在思考,以目前 sanc 的 code 寫法,如何帶 npc 走來走去,
有時因應任務需要,要帶 npc 四處亂跑,還得預防 npc 被主動怪攻
擊的情況;或是有時候,也會有跟 npc 組隊的情況等等..
我目前有想到一種偷吃步的方法。
例如說,現在要帶 npc 移動了,先讀取 npc 的物件,然後把物件傳
給 this_player() 的某函數:
this_player()->set_follow_npcs(npc);
我預設它實際上會在玩家的 temp_data 區設定一個參數,例如:
temp_data["follow_npcs"]=({ ({ }), ({ }), .. });
它是以上的資料型態,log 了描述該 npc 的一些基本資訊,如 short
、chi_name、....
然後通常該 npc 物件就會被 remove,但 npc 資料會 log 在玩家的
temp_data 區。
然後該 npc 會出現在以下情況
look
玩家自己下 look 時會看到該 npc 正在跟著自己。
其它玩家下 look 時會看到該 npc 正在跟著你。
look 該 npc
我目前不打算寫這個。也可以說,這是偷吃步下的唯一缺點。它不
是做不到,而是初期不需要寫。基本上「自己看該 npc」是做得到
的,沒啥問題,但我比較傾向寫專門指令去看「目前正在跟隨自己
的 npc」。
party
我目前不打算讓 party 支援看 npc,因為玩家可能會解除隊伍,
我的想法是,名義上雖然 npc 是跟玩家組隊,但實際上他只是跟
隨玩家「不管玩家是不是組隊」。
移動
既然跟隨中的 npc 是這樣子的寫法,它最大的好處就是不管玩家
怎麼移動、不管跑去哪,npc 都會跟著玩家,直到它被呼叫了函數
解除跟隨狀態,或是玩家自己 quit,玩家一 quit,temp_data 會
被清空,這時自然 npc 就「自動消失」。
任務
任務除了 $N、$O 之外還可以自己打名字,沒啥問題。判斷玩家是
否帶著 npc 活動的參數也很好寫。
戰鬥
基本上,要讓怪物在戰鬥中可以打到 npc 是辦得到的。把 npc 的
hp/hp_max 設進 temp_data、再加進戰鬥中的判斷即可。
但是要在 npc 身上上盾----這是很難的。
所以這裡就假設,例如平常你是帶著 npc 移動的,但是只要一進入
戰鬥,就會看不到 npc,有點像回合制戰鬥的做法,進入戰鬥時只有
主要角色會出現,方才帶著移動的 npc 不一定需要出現,戰鬥完畢
,npc 又會出現這樣。
這樣可以省下很多困擾。
缺點就是這樣比較不刺激。
下週有時間為實驗看看,我會先在 attack.c 擬定一個函數:
varargs int follow_npcs(string kind,string tmp,string tmp2)
{
switch(kind)
{
case "check":
判斷 npc 狀態;
break;
case "set":
設定 npc;
break;
case "remove":
移除 npc;
break;
.
. 不只這幾種 kind 可寫,蠻多可寫的例如 for look npc 的
. 或是讓 npc 再化為實體
.
}
}
laechan
--
有時因應任務需要,要帶 npc 四處亂跑,還得預防 npc 被主動怪攻
擊的情況;或是有時候,也會有跟 npc 組隊的情況等等..
我目前有想到一種偷吃步的方法。
例如說,現在要帶 npc 移動了,先讀取 npc 的物件,然後把物件傳
給 this_player() 的某函數:
this_player()->set_follow_npcs(npc);
我預設它實際上會在玩家的 temp_data 區設定一個參數,例如:
temp_data["follow_npcs"]=({ ({ }), ({ }), .. });
它是以上的資料型態,log 了描述該 npc 的一些基本資訊,如 short
、chi_name、....
然後通常該 npc 物件就會被 remove,但 npc 資料會 log 在玩家的
temp_data 區。
然後該 npc 會出現在以下情況
look
玩家自己下 look 時會看到該 npc 正在跟著自己。
其它玩家下 look 時會看到該 npc 正在跟著你。
look 該 npc
我目前不打算寫這個。也可以說,這是偷吃步下的唯一缺點。它不
是做不到,而是初期不需要寫。基本上「自己看該 npc」是做得到
的,沒啥問題,但我比較傾向寫專門指令去看「目前正在跟隨自己
的 npc」。
party
我目前不打算讓 party 支援看 npc,因為玩家可能會解除隊伍,
我的想法是,名義上雖然 npc 是跟玩家組隊,但實際上他只是跟
隨玩家「不管玩家是不是組隊」。
移動
既然跟隨中的 npc 是這樣子的寫法,它最大的好處就是不管玩家
怎麼移動、不管跑去哪,npc 都會跟著玩家,直到它被呼叫了函數
解除跟隨狀態,或是玩家自己 quit,玩家一 quit,temp_data 會
被清空,這時自然 npc 就「自動消失」。
任務
任務除了 $N、$O 之外還可以自己打名字,沒啥問題。判斷玩家是
否帶著 npc 活動的參數也很好寫。
戰鬥
基本上,要讓怪物在戰鬥中可以打到 npc 是辦得到的。把 npc 的
hp/hp_max 設進 temp_data、再加進戰鬥中的判斷即可。
但是要在 npc 身上上盾----這是很難的。
所以這裡就假設,例如平常你是帶著 npc 移動的,但是只要一進入
戰鬥,就會看不到 npc,有點像回合制戰鬥的做法,進入戰鬥時只有
主要角色會出現,方才帶著移動的 npc 不一定需要出現,戰鬥完畢
,npc 又會出現這樣。
這樣可以省下很多困擾。
缺點就是這樣比較不刺激。
下週有時間為實驗看看,我會先在 attack.c 擬定一個函數:
varargs int follow_npcs(string kind,string tmp,string tmp2)
{
switch(kind)
{
case "check":
判斷 npc 狀態;
break;
case "set":
設定 npc;
break;
case "remove":
移除 npc;
break;
.
. 不只這幾種 kind 可寫,蠻多可寫的例如 for look npc 的
. 或是讓 npc 再化為實體
.
}
}
laechan
--
Tags:
線上
All Comments
By Necoo
at 2017-07-25T16:24
at 2017-07-25T16:24
By Jacky
at 2017-07-27T01:25
at 2017-07-27T01:25
By Irma
at 2017-07-28T03:42
at 2017-07-28T03:42
Related Posts
請教貿易和知識問題
By Delia
at 2017-07-22T15:24
at 2017-07-22T15:24
新手請問走向
By Gary
at 2017-07-22T15:09
at 2017-07-22T15:09
俱樂部發問
By Andy
at 2017-07-22T13:36
at 2017-07-22T13:36
三牌組上GM心得
By Olive
at 2017-07-22T13:03
at 2017-07-22T13:03
Shadowverse Taiwan Open
By Ursula
at 2017-07-22T13:03
at 2017-07-22T13:03