作者laechan (小太保)
看板mud_sanc
标题[wizs] 修正 shut 呼叫
时间Sat Sep 11 22:27:45 2010
假设底下程式段...
玩家->shut(千步气功拳超大字图,5000000,9999,"air",怪物);
首先,它会呼叫 /std/user/attack.c 的 shut 函数,把超大字图
传给它,接着该函数会做底下的事...
SHUT_D->shut_tar(千步气功拳超大字图,5000000,9999,"air",怪物);
也就是说它又把超大字图传给 SHUT_D,这时 SHUT_D 会判断玩家
有没有 setdata no_damage_msg,有的话就把该字图讯息变更...
千步气功拳超大字图 变更为 XXX -> OOO
今天修改上述呼叫流程...
一、玩家->shut(千步气功拳超大字图,5000000,9999,"air",怪物);
二、在 /std/user/attack.c 的 shut 函数里头就马上判断玩家有
没有设 no_damage_msg..
有设 no_damage_msg
SHUT_D->shut_tar(XXX -> OOO, ......); // 直接在这里就把简略的讯息传过去
没设的话
SHUT_D->shut_tar(千步气功拳超大字图,5000000,9999,"air",怪物);
因为 shut 是写在玩家物件的,所以你有设 no_damage_msg 你在发
特攻讯息时「就会比别人顺」,没设 no_damage_msg 的就会比较不
那麽顺,特别是特攻讯息写的很长、很多行、很华丽、颜色很多的..
各位可以参考。这里也提供出了一个点子,玩家的 shut 函数可以定
位为一个过滤器,当将来 shut_tar 跟 new_defance 一样改为全域
函数後,在真正呼叫 shut_tar 前就可以在物件的 shut 内先行针
对讯息做过滤。
这比直接将 shut 改成全域函数还有意义(我本来要做的)。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.117.3.82