[wizs] 帶 npc 走來走去

看板mud_sanc (Sanctuary - 聖殿)作者 (揮淚斬馬雲)時間8年前 (2017/07/22 15:56), 8年前編輯推噓0(004)
留言4則, 1人參與, 最新討論串1/1
我一直在思考,以目前 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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.46.154.97 ※ 文章網址: https://www.ptt.cc/bbs/mud_sanc/M.1500710187.A.DA8.html

07/22 15:58, , 1F
這東西最大的好處,就是跟隨的情況不會無緣無故消失
07/22 15:58, 1F

07/22 15:59, , 2F
它幾乎不受到任何因素的影響,除非該因素設為可影響
07/22 15:59, 2F

07/22 15:59, , 3F
(例如可讓它不受玩家陣亡影響,但也可寫成會受影響)
07/22 15:59, 3F
通常我會寫成會受玩家陣亡影響,這比較簡單,本來任務目標之一是 保護 npc 的安全,改成「玩家要保護好自己的安全,不要陣亡、不要 爆水晶」,這樣也是可以的。 ※ 編輯: laechan (114.46.154.97), 07/22/2017 16:01:23

07/22 16:02, , 4F
另外,這東西如果實驗成功,就差不多能開始寫寵物系統
07/22 16:02, 4F
文章代碼(AID): #1PSmKhse (mud_sanc)
文章代碼(AID): #1PSmKhse (mud_sanc)