楼主:
laechan (挥泪斩马云)
2017-07-22 15:56:24我一直在思考,以目前 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 身上上盾