假設在怪物的 die 函數中加上一行
if(SPECIAL_EVENT->query("have_event"))
SPECIAL_EVENT->check_event();
不過這會造成 SPECIAL_EVENT 的頻繁讀取. 所以我想到另一個
方法...
#ifdef SPECIAL_EVENT
"/adm/daemons/special_event"->check_event(
this_player(),this_object()->query("short"),SPECIAL_EVENT);
#endif
不過問題在於 SPECIAL_EVENT 的定義位置, 一般來說, 都是放
在 /include 下, 但也可以讓 SPECIAL_EVENT 放在一個新定義
的 xxx.h 中, 而這個 xxx.h 可以讓它放在其它地方.
這樣理論上, wiz.3 就可以自辦活動, 我的想法是..
int check_event(object ppl,string mob_name,string str)
{
object ob;
if(!ppl) return 1;
switch(str)
{
case "mid-fall":
if(random(10)==5)
{
tell_object(ppl,"[ 從"+mob_name+"身上掉出了幸運果子! ]\n"NOR);
ob=clone_object("xxx");
ob->move(ppl);
}
break;
.
.
.
}
return 1;
}
這個東西的用意是, 依照 SPECIAL_EVENT 的不同, 打死怪物會掉不同
的東西 or 觸發不同的事件 or 產生不一樣的效果.
它的缺點是只限於「打死怪物時」,但這是因為它被定義在 die 函數
中, 換言之, 只要將它寫在其它的程式段落, 它的功用就不會被侷限.
最近我會把上面實裝看看. 原則上, 各 event 亦可由 wiz 來自訂,我
是希望將來同一個節慶, 能舉辦的活動種類也是可以有所不同的。
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.114.47.24