作者laechan (小太保)
看板mud_sanc
标题[技能] 雷电结界
时间Sat Apr 10 09:35:59 2010
雷电结界一般可以写在 fight_d.c, 玩家 A 被怪物 B
攻击时,呼叫主体是怪物 B,判断到玩家 A 有雷电结
界时制造反射攻击。
这造成怪物自己打自己的情况。
Q:如何让怪物攻击玩家时,玩家自己触发雷电结界攻
击怪物?
传统的做法是写在 heart_beat 里头,但是它有缺点。
新的做法是比方怪物攻击该玩家的参数串为 STR,当判
断到玩家有雷电结界、且有作用成功时..
special_attack=ppl->query_temp("special_attack");
special_attack+=({STR});
ppl->set_temp("special_attack",special_attack);
但是它也有缺点,因为它必须做读取→累加→再设入的
动作,最理想的情况就是只需要一行就解决。
> call me;set_temp;"abc";({"1"})
玩家(laechan /std/user)-> set_temp( "abc", ({ "1" }) )
> call me;add_temp;"abc";({"2"})
玩家(laechan /std/user)-> add_temp( "abc", ({ "2" }) )
> call me;query_temp;"abc"
玩家(laechan /std/user)-> query_temp( "abc" ) = ({
"1", "2" })
所以目前最佳的做法是把二维阵列变成一维,然後在回圈
时..
原先:
j=sizeof(special_attack);
foreach(sa in special_attack)
改成:
j=sizeof(special_attack);
for(i=0;i<j;i=i+k)
k 即参数串的数量,比方四个为一个参数串,那 k=4。
改这个要关站半小时左右,连同上面的一些修改,有空我会先
公告再关站。相关档案要备份...
/std/user.c
/adm/daemons/fight_d.c
grep -n special_attack /adm/daemons/*.c, /d/技能相关, ...
另外,目前也要评估这个东西要不要给 mob,我是觉得给 mob
应该也不错。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 119.15.246.228
1F:推 hlead :哈哈! 这样就不用自己写反弹了..laugh 04/10 10:44