作者laechan (挥泪斩马云)
看板mud_sanc
标题[wizs] 带 npc 走来走去
时间Sat Jul 22 15:56:24 2017
我一直在思考,以目前 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://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1500710187.A.DA8.html
1F:→ laechan : 这东西最大的好处,就是跟随的情况不会无缘无故消失 07/22 15:58
2F:→ laechan : 它几乎不受到任何因素的影响,除非该因素设为可影响 07/22 15:59
3F:→ laechan : (例如可让它不受玩家阵亡影响,但也可写成会受影响) 07/22 15:59
通常我会写成会受玩家阵亡影响,这比较简单,本来任务目标之一是
保护 npc 的安全,改成「玩家要保护好自己的安全,不要阵亡、不要
爆水晶」,这样也是可以的。
※ 编辑: laechan (114.46.154.97), 07/22/2017 16:01:23
4F:→ laechan : 另外,这东西如果实验成功,就差不多能开始写宠物系统 07/22 16:02