作者laechan (小太保)
看板mud_sanc
标题[wizs] 关於合体技
时间Fri Jun 3 09:27:54 2011
「如果是我的话」我会照底下的写法,wiz 们可以参考处
理的「流程」,而程式码倒是不一定要照这样写。
首先,两个技能都有一个共通的函数:together_skill()
然後,A先发动技能,这时候,做底下判断..
env=environment(me);
obs=all_inventory(env);
obs-=({me}); // 先把自己从 obs 扣掉
t=time();
foreach(ob in obs)
{
if(ob && ob->query_temp("already_xxx")>t) // 判断到同房间某人已有施展
{
ob->delete_temp("already_xxx"); // 先移除那个人的标记
ob->set_temp("time_record/next_together",n+t); // 加上再施展间隔判断
me->set_temp("time_record/next_together",n+t); // 加上再施展间隔判断
ob->add_temp("casting",2); // 加上 casting
me->add_temp("casting",2); // 加上 casting
然後先执行该人发动合体技的叙述;
// 例如A大喊:龙飞!!
// 换B时就喊:凤舞!!
call_out("together_skill",1,me,ob,env); // 把 me 跟 ob 传去 together_skill
// 然後同房间的人会看到 A 跟 B 都喊完後 1 秒,才出现合体技能
break; // 终止回圈
}
}
// 若程式跑到这里代表房间还没有其它人发动合体技
me->set_temp("already_xxx",m+time()); // 设定该合体技的有效作用时间
// 该时间 < time() 时就失效
然後执行该人发动合体技的叙述;
// 例如A大喊:龙飞!!
// 这时B看到A要发动合体技的请求讯息时,就可以在 m 秒内
// 决定要不要跟着也发动合体技
return 1;
}
// 一般会建议合体技写成不需接目标的全体型技能比较方便
int together_skill(object me,object tar,object env)
{
// 底下是基本判断
object env1,env2,ob;
mixed obs;
if(!env) return 1;
if(!env1=environment(me)) return 1;
if(!env2=environment(tar)) return 1;
if(env1!=env2 || env1!=env || env2!=env) return 1;
// 通过上面的判断就可以发动
先执行合体技能讯息显示;
obs=me->query_attackers(); // 读取自己的所有战斗对象
foreach(ob in obs)
if(ob && !userp(ob) && living(ob)) // 限怪物
执行对该怪物的伤害;
return 1;
}
这里有个问题,因为合体技是由 me 呼叫,因此如果上面的
函数里头有 tar->shut 的呼叫语法的话,它实际上呼叫的主
体就会是 me 而不是 tar。
这里有一种折衷的做法,就是让 me 跟 tar 在同一时间设定
special_attack..
mixed special_attack=({});
special_attack=(mixed)me->query_temp("special_attack");
special_attack+=({ 加上合体技的相关攻击设定 });
me->set_temp("special_attack",special_attack);
special_attack=(mixed)tar->query_temp("special_attack");
special_attack+=({ 加上合体技的相关攻击设定 });
tar->set_temp("special_attack",special_attack);
而上面的缺点就是「它是必中技能」,对上某些怪物会无效果
Belldandy
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 115.81.183.99