作者laechan (小太保)
看板mud_sanc
标题[程式] 玩家 temp 资料区的 special_attack
时间Sat Oct 20 17:53:16 2007
这个东西我忘记当初是为啥写的, 今天搭电车回家时, 在车上
有想到它的特殊用法, 刚好也有人写了 nine-sword 的 help,
就想到应该可以拿来用.
(而其实, 这个东西早就应该要被发明出来了)
special_attack=(mixed)query_temp("special_attack");
j=sizeof(special_attack);
if(j>2)
{
for(i=0;i<j;i=i+3)
{
// 攻击型式是必中攻击
if(special_attack[i+2])
me->shut2(special_attack[i],special_attack[i+1],10000,"dam",
special_attack[i+2]);
}
me->delete_temp("special_attack");
}
这个东西每一秒会被玩家自己判断一次(所以 mob 不适用),
底下举个例子来让 wiz 们知道它怎麽用.
假设玩家身上有个东西叫做天神的辉记(laechan's mask),这
个辉记有设定特殊的参数 set("laechan mask",1), 玩家身上
带着辉记打 hair laechan 时,我希望玩家会主动对 hair
laechan 击出一个强度 100 万的必中攻击...
// hair laechan
int special_fun(object mob,object ppl)
{
object ob;
mixed special_attack;
if(ob=present("laechan's mask",ppl))
{
if(ob->query("laechan mask"))
{
// 先将 ob 移除
ob->remove();
special_attack=(mixed)ppl->query_temp("special_attack");
// "叙述",杀伤,对象
special_attack+=({"$N身上的天神辉记, 突然发出耀眼的强光, "+
"一道灼热的光箭随即激射而出, 击向了$O",
1000000,mob});
ppl->set_temp("special_attack",special_attack);
}
}
return 1;
}
这样,在「约一秒後」,玩家就会「自己对该怪物施展上述的攻击」
,而且是必中。
格式一定要照上面那样,因为必须是 += 才能保留原先的设定。
这个东西的应用很广,以反击来说,因为是怪物判断玩家有没有反击
技能,因此假设有,例如怪物的攻击叙述是..
$N以强力的雷电风暴击向$O ($N代表怪物, $O代表玩家)
侦测到反击时...
str = "$N以强力的雷电风暴击向$O";
damage = 原先的 damage;
// $N 与 $O 互调
str=substr(str,"$N","$X");
str=substr(str,"$O","$N");
str=substr(str,"$X","$O");
special_attack=(mixed)ppl->query_temp("special_attack");
special_attack+=({str+", 但是被$N反击了回去!!".
dam*看要设百分之多少的反弹威力,mob});
ppl->set_temp("special_attack",special_attack);
return ({"",0});
上面有个问题, 就是 return ({"",0}) 的部份, 实际上要修改为
return ({"no-action",0});
当系统判断到 "no-action" 时就「完全不显示该攻击」, 这样就
只会显示反击,使得..
一、反击=怪物该次的攻击没有击中玩家
二、不只如此,反击还会将杀伤以百分之多少的比率反弹回去
这大概就是设定构想. 有了构想就可以实装, 基本上困难度不高,
以现行来说, wiz 们至少可以玩看看 special_attack 那一部份,
如果有人有玩家, 贴一下测试报告吧^^
基本的玩法则是, 在战斗中..
call me;set_temp;"special_attack";({"$N以巨大的雷电击向$O",10000,guard})
> k guard
你对着高塔守卫喝道: 「小王八蛋﹗今日不是你死就是我活﹗」
你开始攻击 高塔守卫.
□ □ □ 战 斗 开 始 □ □ □
> call me;set_temp;"special_attack";({"$N以巨大的雷电击向$O",10000,guard})
你伺机而动,准备找寻最佳的攻击时机...
高塔守卫以枪杆击向你, 但是被你闪了过去.
玩家(laechan /std/user)-> set_temp(
"special_attack", ({ "$N以巨大的雷电击向$O", 10000, 怪物(guard
/u/l/laechan/area/felid/mob/guard2) }) ) = 0
你以巨大的雷电击向高塔守卫, .对高塔守卫造成身体机能严重的伤害!!(9999)
「高塔守卫受了点伤,但没大碍。」
很简单的。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.114.50.89