作者laechan (小太保)
看板mud_sanc
标题Re: [圣殿] 来聊一下 party kill 的问题
时间Sat Jun 14 10:19:07 2008
※ 引述《laechan (小太保)》之铭言:
: 推 bahatest :仇恨值?挑衅?OT? 06/13 14:26
: 推 hermis :太复杂了我看不懂@@||| 06/13 15:49
以怪物的 query_current_attacker 为例..
/std/mob/living.c
object query_current_attacker()
{
int i,r;
object current_tar;
// temp_data["ats"] = 与怪物处於战斗状态的所有物件(一般是玩家群)
// 下面的意思就是若与怪物处於战斗状态的物件数>0, 代表战斗中
if(i=sizeof(temp_data["ats"]))
{
// 先扣掉集合中为 0 的, 会有 0 的原因, 例如瞬间的 recall, quit, 断线, ..
temp_data["ats"]-=({0});
// 再重覆一次判断
if(i=sizeof(temp_data["ats"]))
{
// 跑出随机数
r=random(i);
// 如果怪物要攻击的目标-玩家A, 它身上有 temp_data["current_attacker"]
// 时, 就指定实际要攻击的目标为这个 current_attacker
// (一般情况下 current_attacker = 自己, 这是 default 值)
if(current_tar=(object)temp_data["ats"][r]->query_temp("current_attacker"))
{
// 而且这个 current_attacker 不是自己时才打(避免自己打自己)
// 不过这里判断有点问题就是了, 等微调方向确定时一并修改
if(current_tar!=me)
current_tar->kill_ob(me);
return current_tar;
}
else
return temp_data["ats"][r];
}
// 上面基本上就是回传随机一个对象回去给怪物, 让怪物去攻击这个对象
}
}
所以 10 个玩家冲进去房间杀一只怪物时, 这只怪物每一回合的攻击, 每一
个玩家都有 1/10 的机率被攻击到.
因为怪物在做攻击时「几乎」都是以 query_current_attacker 做为读取出
攻击对象的主要函数, 所以目前的「随机读取」就是所谓的 default 设定.
未来想调整的方向..
一、可以设定让怪物可以略过对某些玩家的攻击
=> 但是相对的其它玩家被攻击到的机率就会增加
二、攻击对象 a 时, a 或 b 有办法让该攻击转向 b.
=> 等於 b 实际上在保护 a 的意思
(这个很久以前就有实装, 但是有 bug, 所以其实是没启用的状态)
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.170.108.37