作者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