作者laechan (眼镜男)
看板mud_sanc
标题Re: [wizs]问题请教(三)
时间Thu Mar 8 07:23:39 2007
※ 引述《amosdeus (幽素)》之铭言:
: 请问招换小弟这个问题,目前我已经写好技能与clone两个各自测试都没问题,
: 但是放在一起就会出问题,加在一起之後clone 小弟,master就呆掉不会攻击,
: 再下kill它也不会攻击,劳烦请帮我看一下是哪里出错?
: 位置:/u/p/plain/wide/virtue/mob/cold.c
: 谢谢
: Plain@Sanc
不会攻击一般有两种原因...
一、怪物没心跳了。
二、你的 kill_ob 自定函数写法有问题。
int kill_ob()
{
if(i==0)
{
clone_object(VM"welkin")->move(environment(this_object()));
clone_object(VM"startl.c")->move(environment(this_object()));
clone_object(VM"steadfast.c")->move(environment(this_object()));
i = 1;
}
::kill_ob();
}
正确的宣告方式是 int kill_ob(object tar),这个 tar
代表攻击这个怪物的人,一定要有。
底下的 ::kill_ob() 也一样要改成 ::kill_ob(tar)
再来,当你宣告 kill_ob 为 int 函数时,你就必须要让
这个函数有整数的回传值
int kill_ob(object tar)
{
bla bla ......
::kill_ob(tar);
return 1;
}
return 1 还是 return 0 呢, 上述的情况是都可以,甚
至 return 100 也可以,但是「不能没有 return 值」。
(void 宣告的函数才可以,例如你把 int kill_ob 改宣
告为 void kill_ob 那就不需要 return ;)
最後...
clone_object(VM"welkin")->move(environment(this_object()));
clone_object(VM"startl.c")->move(environment(this_object()));
clone_object(VM"steadfast.c")->move(environment(this_object()));
一、 .c 不需要写。未来我希望统一格式。
二、上面三行你都会重覆使用到一个东西...
environment(this_object())
这个东西是可以使用变数去储存的...
object env;
// 怪物已死或不存在的情况, 就不执行呼叫
if(!env=environment(this_object())) return 1;
// 执行到这里, 就确定怪物确实存在於某一个环境(environment)下
clone_object(VM"welkin")->move(env);
clone_object(VM"startl.c")->move(env);
clone_object(VM"steadfast.c")->move(env);
三、当你发现一个函数里头 this_player()、this_object() 一直使用到
时,记得,尽量宣告变数去储存它们,如 object ppl, object mob,..
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.225.18.81
1F:推 amosdeus:感谢 bow 03/08 15:47