[wizs] 小型戰爭腳本

作者: laechan (揮淚斬馬雲)   2019-02-14 09:07:02
#include <war.h>
inherit WAR_D;
int war_start()
{
/* 以下的東西寫在 WAR_D 裡頭內建的 war_starting 函數內
object times_check;
string files=base_name(this_object());
if(catch(times_check=find_object_or_load("/open/cmds/times_check")))
{
write(HIR"/open/cmds/times_check.c 載入失敗.\n"NOR");
return 1;
}
// 如果有戰爭在執行中
if(times_check->check_files(files)>0)
{
write(HIR"目前該戰爭(或某某戰爭)正在執行中.\n"NOR);
return 1;
}
times_check->set_times_check(files,files,唔..秒數怎麼判斷);
return 0;
*/
// 以下這個是固定的, 戰爭不能重覆啟動
if(war_starting()>0) return 1;
// 第 1 階段, 30秒
war_step(1,30);
// 第 1 階段置中廣播, 陣列代表每隔1~2秒 shout 一次
// 也可以 c_shout(HIR"豬頭人大軍進攻了白瓦鎮!!"NOR);
// 代表只廣播一行, 屆時用 stringp 判斷即可
// 陣列內若有 "" 代表延遲 1~2 秒, 會有額外判斷
c_shout(1,({HIR"豬頭人大軍進攻了白瓦鎮!!"NOR}));
// 第 1 階段生成怪物
// 什麼怪物, 數量, 位置
war_mob(1,({"pig1",3,"room1",
"pig2",1,"room1",}));
// 第 2 階段, 每隔 30 秒判斷一次
// 在 war.h 內會 #define WAR_LOOP 1
// war_step 會用 varargs 宣告
war_step(2,30);
// 第 2 階段置中廣播
c_shout(2,HIR"豬頭人持續進攻著白瓦鎮!!"NOR);
// 有設置 war_check(2 的話就會做 loop, 直到 war_check_2 的
// 回傳值為 1
// loop 的判斷一律為自訂,即腳本內需有 war_check_2 函數
war_check(2,"war_check_2");
// <1 秒代表第 3 階段為結束階段
war_step(3,0);
// 以下還沒想到怎麼呈現比較好
// 可能會有一個 war_call(階段數字,什麼函數);
// 然後腳本內自訂該函數, 例如為某房間加出口
// 或者將某房間的玩家轉移到其它地點
// 或者清空某些房間的某些怪物等等
// 當戰爭啟動時, 該腳本
}
當上面的函數是那樣寫時,WAR_D 裡面要有相對應的函數,且每個
函數對於呼叫 times_check 時給定的參數也需不同。
再於 WAR_D 裡面內建 times_check 函數,用來接收 times_check
的呼叫及傳值,依據所傳值的不同來做不同的動作即可。
這樣 WAR_D 應該 1000 行內可以解決。
然後再來考慮 war_end 要怎麼寫,我應該會給一個基本範本,再允
許 wiz 可自訂。
然後再寫一個 _war.c 來管理。
Laechan

Links booklink

Contact Us: admin [ a t ] ucptt.com