[wizs] 戰役腳本檔 - 以羅德斯教廷戰爭為例

作者: laechan (揮淚斬馬雲)   2017-02-07 10:03:48
[2017/02/09更新]
title=羅德斯教廷戰爭##
date=2017/02/07##
steps=11##
mobs=
dragon: HUMAN_MOB+"dragon"
lionorc: HUMAN_MOB+"lionorc"
orc_1: HUMAN_MOB+"orc_1"
orc_2: HUMAN_MOB+"orc_2"
orc_3: HUMAN_MOB+"orc_3"
orc_leader1: HUMAN_MOB+"orc_leader1"
orc_leader2: HUMAN_MOB+"orc_leader2"
orc_leader3: HUMAN_MOB+"orc_leader3"
nola: HUMAN_MOB+"nola"
mamo: HUMAN_MOB+"mamo"
balan: HUMAN_MOB+"balan"##
header=
#define STONE "/d/stone/room/la13e4.c"
#define FELID "/u/l/laechan/special/room/felid_war.c"
#include "/d/map/isalon/path.h"##
step1_times=0##
step1_plans=
war_msg(HIR"西方的獸人大陸在亞斯德死後突然騷動起來...\n"+
"各路魔獸軍團長紛紛趕回獸魔殿....一樁可怕的陰謀正醞釀著!\n"NOR);##
step2_times=10##
step2_plans=
war_msg(HIR"血魔大帝:那個該死的賢者終於死了!大家報仇的時間到了!\n"+
HIM"軍團長-巴藍:大帝,請允許\屬下率兵當先鋒!殺他個措手不及!\n"+
"軍團長-瑪莫:大帝,讓我帶著精悍的魔龍軍團燒光人類的大陸吧!\n"+
"軍團長-諾拉:讓我來!我的獸戰騎軍團要踩平人類大陸!\n"+
HIR"哈哈哈~~~該死的人類~~~等著瞧吧!!\n"NOR);
war_mob(({
({"orc_leader3",1,"orc_3",3}),"/d/ppl/map/n5e5",
({"orc_leader3",1,"orc_3",3}),"/d/ppl/map/n5e6",
({"orc_leader3",1,"orc_3",3}),"/d/ppl/map/n5e7",
({"orc_leader3",1,"orc_3",3}),"/d/ppl/map/n5e8",
({"orc_leader3",1,"orc_3",3}),"/d/ppl/map/n5e9",
}));##
step3_times=10##
step3_plans=
war_msg(HIR"巴藍,諾拉聽令!兩人為主力部隊,由海路進攻~即刻啟程!\n"+
"瑪莫聽令!你帶魔龍軍團直攻聖殿教廷!\n"+
HIM"眾人:大帝,屬下聽令!\n"NOR);
war_mob(({
({"orc_leader1",1,"orc_1",3,"lionorc",4}),"/d/ppl/map/n5e7",
({"orc_leader1",1,"orc_1",3,"lionorc",4}),"/d/map/lodoos/room/s-1-1",
({"orc_1",3,"lionorc",4}),"/d/map/lodoos/room/br-2",
({"orc_1",3,"lionorc",4}),"/d/map/lodoos/room/sward1",
}));##
step4_times=20##
step4_plans=
war_msg(HIY"報~~~~~~~~ [一陣快馬急報驚動了教廷上下]\n"+
"獸人軍團分海陸兩路進兵蘭卡大陸了!!!\n"+
HIC"教皇:別慌, 通知各守軍緊急備戰,叫羅賓來見我!\n"+
HIY"報~~~~~~~~~~\n"+
"魔龍軍團飛越海岸朝教廷直進了!\n"+
HIC"教皇:叫所有人準備應戰!\n"NOR);
war_mob(({
({"orc_leader2",1,"orc_2",3,"dragon",4}),"/d/map/lodoos/room/ws-1",
({"orc_leader2",1,"orc_2",3,"dragon",4}),"/d/map/lodoos/room/ws-2",
({"orc_leader2",1,"orc_2",3,"dragon",4}),"/d/map/isalon/1-6",
({"balan",1,"orc_3",3}),"/d/ppl/map/n5e6",
}));##
step5_times=15##
step5_plans=
war_msg(HIC"教皇:羅賓!魔獸軍團再度入侵!你看如何?\n"+
HIW"羅賓:教皇,屬下必率領劍士團死守教廷!\n"+
HIW"羅賓:屬下會招即各方正義之師聯手抗敵!\n"NOR);
war_mob(({
({"orc_leader2",1,"orc_2",3,"dragon",4}),HUMAN_ROOM+"1-7",
({"mamo",1,"orc_2",3,"dragon",4}),HUMAN_ROOM+"1-6",
}));##
step6_times=15##
step6_plans=
war_msg(HIG"嘿嘿嘿嘿嘿~~~~[邪惡笑聲籠罩蘭卡大陸]\n"+
"來吧!拿起你的武器!對抗邪惡的獸人吧![ 羅賓急呼著 ]\n"+
"整個世界就靠我們一起掃平邪惡的獸人,為教皇效命吧!!"+
" [ 羅賓急呼著 ]\n"+
"一場大戰即將展開!!\n"NOR);
war_mob(({
({"nola",1,"orc_1",3,"lionorc",4}),"/d/map/lodoos/room/field-2",
({"orc_leader1",1,"orc_1",3,"lionorc",4}),
"/d/map/lodoos/room/field-3",
}));##
step7_times=15##
step7_plans=
war_msg(HIR"石化國-外交大臣法蘭說道:陛下!我們報仇的機會來了!\n"+NOR+
HIR"石化國-外交大臣法蘭說道:血魔大帝送來了共同攻擊的協議書,"+
"要求我國幫忙助戰,以徹底毀滅小賤龍的國度!\n"+NOR);
STONE->wellie_groups("/d/map/lodoos/room/s-1-1");
STONE->man_groups("/d/map/lodoos/room/s-1-1");
STONE->fralan_groups("/d/ppl/map/n5e7");
STONE->man_groups("/d/ppl/map/n5e7");
STONE->yami_groups("/d/map/lodoos/room/field-3");
STONE->man_groups("/d/map/lodoos/room/field-3");##
step8_times=15##
step8_plans=
war_msg(HIG"一向與羅德斯教庭不合的菲里德王國,也南下大舉進兵羅德斯!\n"+NOR+
HIG"菲里德國王道:根據協議書的內容,約定三面進兵一舉攻下敵人的城池!\n"+NOR+
HIR"菲里德南征軍最高指揮官說道:陛下!此事就交給我吧!我必不負所託!\n"+NOR+
HIR"菲里德國王道:如此甚好!快快派我國精銳的坦克部隊前往!\n"+NOR);
FELID->felid_help_lodoos_war();##
step9_times=60##
step9_check=
if(mob_alive("balan") || mob_alive("mamo") || mob_alive("nola"))
{
war_msg(({
HIC"羅賓公爵大呼:同胞們!!拿出你的勇氣來,抵抗那邪惡的獸人吧!\n"NOR,
HIY"羅賓公爵率領劍士團,奮勇抵擋獸人的侵襲!!\n"NOR,
HIW"教皇:羅賓,依你看此戰是吉是凶!?\n"+
"羅賓公爵:屬下不敢輕易斷言?I\n"NOR,
HIW"教皇:我唐雲劍龍謹代表全體人類向各位英雄致意,"+
"此戰關乎人類氣數,絲毫大意不得!\n"NOR,
HIR"血魔大帝:我族英勇的戰士們,讓人類知道我們的厲害吧!哈哈哈~\n"NOR,
HIR"血魔大帝:哈哈哈~盡情的殺戮人類吧!!"+
"讓人類的鮮血來洗刷我們的仇恨!!\n"NOR,
HIW"教皇:唉~真是生靈塗炭呀!羅賓你盡力而為吧!\n羅賓公爵:是!\n"NOR,
}));
return 2;
}##
step10_times=3##
step10_steps=
war_msg(HIY"聖殿教廷 VS 獸人軍團戰況膠著。\n"NOR+
HIR"血魔大帝:獸人們撤退!....再打下去也佔不到人類便宜!\n"+
"血魔大帝:想不到人類命不該絕,只好再等待下一個機會了!\n"NOR);##
step11_times=3##
step11_steps=
war_end();##
說明:
header : 寫在這裡的東西會被放在檔頭
stepX_check: 從第 X-1 進入第 X step 前需通過的判斷
return 1 代表無法通過判斷
stepX_times: 從第 X-1 跳到第 X step 是幾秒後
stepX_plans: 第 X step 的包含內容,一般裡面至少會有
war_msg: 戰爭訊息廣播
war_mob: 戰爭怪物投放
例如
// 60 秒後呼叫 step9
step9_times=60##
// 有 step9_check 函數時就自動進入 loop check 模式
// 若滿足 if(step9_check()>1) 的條件時(如上例為 return 2)
// 在 step9_times=60 秒後會再重新呼叫一次 step9_check
// 反之若 if(step9_check()>0) 的條件不滿足時
// 因為沒有 step9_plan 就直接在 step10_times=3 秒後呼叫 step10
// (若有定義 step9_plan 則會執行 step9_plan)
// 也就是 stepX_check 函數其實就是 loop 用的控制函數
// 而所有 stepX_ 函數都預設最後會 return 1
step9_check=
if(mob_alive(balan) || mob_alive(mamo) || mob_alive(nola))
{
war_msgs=(({
HIC"羅賓公爵大呼:同胞們!!拿出你的勇氣來,抵抗那邪惡的獸人吧!\n"NOR,
HIY"羅賓公爵率領劍士團,奮勇抵擋獸人的侵襲!!\n"NOR,
HIW"教皇:羅賓,依你看此戰是吉是凶!?\n"+
"羅賓公爵:屬下不敢輕易斷言?I\n"NOR,
HIW"教皇:我唐雲劍龍謹代表全體人類向各位英雄致意,"+
"此戰關乎人類氣數,絲毫大意不得!\n"NOR,
HIR"血魔大帝:我族英勇的戰士們,讓人類知道我們的厲害吧!哈哈哈~\n"NOR,
HIR"血魔大帝:哈哈哈~盡情的殺戮人類吧!!"+
"讓人類的鮮血來洗刷我們的仇恨!!\n"NOR,
HIW"教皇:唉~真是生靈塗炭呀!羅賓你盡力而為吧!\n羅賓公爵:是!\n"NOR,
}));
return 2;
}##
step10_times=3##
step11_steps=
war_end();##
關鍵就在於 war_end 函數:
1.究竟需不需要傳值給它
2.war_end 函數可被 wiz 自訂到什麼程度
(但其實我不太希望 wiz 自訂,這樣才能期望顯示格式統一)
所以我會採取的做法是 war_end 不給任何值時,就完全套用預設值,
反之,有給值時,就是套用 wiz 所自訂的一些東西。
因此傳值的部份我預計會採 mixed 來統包並使用 varagrs 宣告。
戰役腳本物件檔本身也將充當戰役控制檔,因此它會有些以 static
宣告的內建變數,用來暫存一些資料用,這些資料在該物件被update
時將被 clean,但有些會被儲存起來,且 times_check 也尚未停止
呼叫物件檔,這時理論上:
1.戰爭將依該物件被 update 前的狀態繼續執行
2.但物件暫存資料將消失,系統接著就會直接結束戰爭
為了避免這種情況發生,但又同時為了避免頻繁的儲存,我通常會在
loop(check) 函數所在的區段才做 save_data,將「哪些怪物是哪些
玩家所殺」紀錄起來。
這樣至少當戰爭被系統直接結束時,還有辦法做出部份統計。
以上。大概大部份的戰役都能以這樣的腳本檔型式來運作,腳本檔的
格式就先這樣子定下來。我接下來會接著寫 _war.c 來把腳本檔變成
腳本物件檔。
LAechan

Links booklink

Contact Us: admin [ a t ] ucptt.com