作者laechan (小太保)
看板mud_sanc
标题[wizs] 不必学会某技能、也能施展某技能
时间Thu Jun 16 14:59:34 2011
这个东西其实很简单,只是要更动相对应的档案而已。
所以如果有要做的话,最好是做统一的更改。
指令呼叫做法:
/cmds/std/技能施展相关指令 -> /d/相关技能/技能档 -> start_skill
-> start_effect
可以设定当玩家身上有某物件时,亦可施展该技能
物件档 -> add_action 相关函数及指令 -> 以指令呼叫函数 -> start_skill
-> start_effect
所谓需要做统一更改的地方则包括..
一、技能档中相关数值计算的参考值要怎麽定
例如某技能看「施展者的 mag」,则当玩家拿某物件做施放
道具时「该看什麽值」
二、某些技能施展了会有熟练度
例如燃烧之手。则当玩家拿某物件做施放道具时,这时就不
能给熟练度。
各位 deep 级以上的 wiz 有空也可以玩玩看这个,有先玩过会比
较有概念,我写个简易版的..
// 燃烧之手杖, 可发射 Lv10 的燃烧之手攻击
#define CEHCKD "/adm/daemons/check_d.c"
void init()
{
add_action("burning_xxx","burning");
}
int burning_xxx(string str)
{
object tar,env,ppl=this_player();
env=environment(ppl);
if(!tar=present(str,env))
return notify_fail("burning: 没有 "+str+" 这个目标喔.\n");
if(ppl->query_temp("casting")>0)
return notify_fail("burning: 你正在忙,没空喔.\n");
// 判断能否攻击对方
if(CHECKD->check_kill(ppl,tar,env,"cast"))
return 1;
// 执行施展叙述
"/d/spell/burning_hands"->start_skill(tar,10);
// 执行防止连续呼叫设定
ppl->add_temp("casting",秒数);
// 如果不要 delay 就直接用底下
// "/d/spell/burning_hands"->start_effect(tar,ppl,10,1000,连击数);
// 如果要延迟出手就用这个
call_out("delay_spell",秒数,tar,ppl,env);
return 1;
}
int delay_spell(object tar,object ppl,object env)
{
if(!tar || !ppl || !env) return 1;
if(environment(tar)!=env) return 1;
"/d/spell/burning_hands"->start_effect(tar,ppl,10,1000,连击数);
// 这时如果没有更改技能档,则该玩家将会得到熟练度
// 而且其威力计算中的 mag 值亦会看该玩家的 mag 值
return 1;
}
Belldandy.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 编辑: laechan 来自: 115.82.178.107 (06/16 14:59)
1F:→ hlead :这个以前好像有写过... 06/16 15:13
2F:→ laechan :练习写这个有助於思考的严谨化 06/16 15:23
3F:推 justinj :暂时玩家设定no_improve_skill....avert 06/17 09:32
4F:→ laechan :目前有想过多增加一个 count_dam or count_effect 的 06/17 10:02
5F:→ laechan :函数,然後把像是 mag,air 等数值传过去算 06/17 10:02
6F:→ laechan :或者把 ppl->query("stat/mag") 的 ppl 改成别的东西 06/17 10:02
7F:→ laechan :↑上面以前倒是有做过 06/17 10:03