[wizs] 小型戰爭腳本

看板mud_sanc (Sanctuary - 聖殿)作者 (揮淚斬馬雲)時間6年前 (2019/02/14 09:07), 6年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
#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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.106.224 ※ 文章網址: https://www.ptt.cc/bbs/mud_sanc/M.1550106425.A.7D9.html ※ 編輯: laechan (122.117.106.224), 02/14/2019 10:02:09 ※ 編輯: laechan (122.117.106.224), 02/14/2019 10:03:23
文章代碼(AID): #1SPByvVP (mud_sanc)
文章代碼(AID): #1SPByvVP (mud_sanc)