作者laechan (小太保)
看板mud_sanc
标题Re: [问题] 被反击判定自杀的问题
时间Sat Nov 19 11:59:24 2011
※ 引述《hmml (hmml)》之铭言:
: 反击如果是最後一击,系统会这样判断死因:
: (发狂)贤者天尊经过了一番苦战,终於杀死贤者天尊
: 在这区域而言,这样的结果最无言,徒劳无功。而
: 这个任务,解谜者必须自行解决六位NPC,才能迎
: 战最终头目,上面这位天尊是第六位...
: 除非纯正法牧,我想没反击技能的角色应该没有,
: 所以解谜的时候,有很大的机率会因反击而失败。
: 事实上,这个谜还蛮容易解失败的,因为反击。
: 过去因为法牧盾的阻挡顺位在反击前面,所以有办
: 法避免。现在就无计可施了。结果要解这个谜,运
: 气成份变很大,而最终头目的掉装也是随机的,也
: 就是拿装难度爆增。如果玩家像我天生就带衰,常
: 常不能像关二爷般过五关斩六将(事实上有,但NPC
: 一直坚持是自杀...),解谜兴致难免大减,那就只
: 好练个人成就,相对地,就会很安静...
: 所以对於反击,能不能做个指令来开关反击,或者
: 和attack stop/rescue做在一起,好让解谜的不安
: 因素能少一点,至少在反击判断解决前,有一个应
: 对措施...
反击不可能特地写成「反击如果是最後一击,会变成怪
物杀死自己」。因为这样变成战斗中需要两个判断..
if(是最後一击)
怪物攻击自己;
else
玩家攻击怪物;
================================================
反击的相关程式段如下,如果玩家此时被怪物攻击,tar
就是指玩家(被攻击对象才会判断到下面)。
case "counter":
当某一轮攻击 tar 判断自己应施展反击
if(tar && userp(tar))
tar->set_special_attack(({"\n$N抓到了机会,将$O对$N的攻势反击了回去",
dam2,me}));
return ({0,",但是被$O抓到了反击的机会!"});
重点是上面标粉红的部份,如果被攻击目标是玩家时,
该玩家才会把反击资讯写进自己的资料里头.
而 special_attack 则是这样判断的..
void dump_special_attack()
{
mixed sa,tmps;
if(!temp_data["special_attacks"]) return ;
sa=(mixed)temp_data["special_attacks"];
foreach(tmps in sa)
if(tmps[2])
me->shut2((string)tmps[0],(int)tmps[1],1000,"dam",tmps[2]);
// 采用底下的 delete 方式可以给予极短时间的保险性处理延迟
me->delete_temp("special_attacks");
}
tmps[2] 就是「攻击玩家的人」,tmps[0]是反击叙述,
tmps[1] 是伤害值,me = 玩家自己,所以变成..
玩家->shut2(叙述,伤害,命中,"dam",攻击玩家的人);
然後 shut2 是这样写的..
varargs int shut2(string msg,int damage,int chance,string kind,object tar)
{
USER_D-> shut2(me, msg, damage, chance, kind, tar);
}
user_d 里头则是这样写的..
varargs int shut2(object me,string msg,int damage,int chance,
string kind,object tar)
{
if(!tar)
if(! tar=me->query_current_attacker())
return 1;
"/adm/daemons/shut2_d"->shut_tar(me,tar,msg,damage,chance,kind);
return 1;
}
如果攻击对象不存在、且也找不到攻击自己的其它攻击对象,
就不做 shut2。
shut_tar 的顺序则是 (玩家, 攻击玩家的怪物, ...)
嘛,这里我可以加一个判断,怪物自己杀死自己时是这样
shut_tar(怪物,怪物)
正常则是这样
shut_tar(玩家,怪物)
而因为只有玩家可以用 shut2,所以这样判断就好
if(userp(me)) // 只有玩家反击怪物才会呼叫
"/adm/daemons/shut2_d"->shut_tar(me,tar,msg,damage,chance,kind);
该设定已实装,可以再观察看看。若是再不行,我就一一修
改会出现这类问题的怪物的 die 函数。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 223.142.187.191