mud_sanc 板


LINE

今明兩天是難得有空的時間,我今天先擬好架構,明天打算一股作氣 將系統雛形寫好。之前其實已經寫好一部份了,但因為 times_check 的關係(要改成它可以套用的),就作廢了。 寫戰役系統是為了節慶活動。傳統上舉辦活動需透過 /d/event 目錄 底下各活動物件的寫法,我覺得那個太麻煩了,所以我其實很懶得舉 辦那樣的活動,為了解決這問題才會想寫戰役系統,這樣以後只需要 寫腳本就好了,腳本的好處就是具有可複製性、容易理解、容易管理 及做出變化、... 預計這個東西寫好後,聖殿就有區域產生器、任務系統、副本系統、 戰役系統,這樣艾恩葛朗特計劃就可以實行。 假設使用 /open/cmds/times_check.c 做為驅動引擎,依照斜角巷的 書店寫法,戰役系統必包含底下函數及程式段落: static object times_check; void init() { ::init(); if(!this_files) this_files=base_name(this_object()); if(!times_check) if(catch(times_check=find_object_or_load("/open/cmds/times_check"))) return notify_fail("目前 times_check 有問題喔.\n"); 幾個供 wiz 使用的 add_action(); } int times_check(string names,string files,mixed tmps) { int s,sk; string str; object ppl; if(!times_check) if(catch(times_check=find_object_or_load("/open/cmds/times_check"))) return 1; // 這函數就是 times_check 每隔一段設定時間就會來呼叫的 times_check->set_times_check(戰役標籤,this_files,({參數群}),下一次呼叫間隔); return 1; } 然後當有戰役被觸發時,使用的呼叫程式段就是 times_check->set_times_check(戰役標籤,this_files,({參數群}),下一次呼叫間隔) 然後再依 /std/new_ob/boat.c 的寫法,boat 設有 plane 參數, 而 times_check 函數便是依該參數來決定每一個呼叫週期要做哪 些事情。 由上可知,可套用 times_check 的戰役系統必然也是有設定一些 東西--也就是腳本,然後 times_check 函數再依據寫好的腳本來 執行。 一般來說,總管型的戰役系統的 times_check 函數需能做到底下 判斷: 1.各戰役腳本物件的管理及資料載入 2.同一時間多場戰役的狀況顯示及流控管理 3.每一呼叫週期的 a.該做什麼事 b.滿足什麼條件之下才做下一階段的呼叫 c.否則就持續重覆該階段 d.戰役何時結束、失敗、或中止的判斷 戰役腳本物件必須包含這些設定 4.每一呼叫週期至少需可做到 a.呼叫怪物並設置於指定地點 b.進行全域或特定區域廣播 c.判斷怪物存活情況與玩家擊殺數等 . . 因此仿 /open/cmds/quest,應該要有 /open/cmds/war 這樣的目 錄設置,在該目錄下有多個戰役腳本這樣。 但是,總管型的戰役系統並不是良策(這也是我重寫的原因之一), 因為同一戰役理論上只會在同一時間被開啟一次,因此戰役之間並 不需要「總管流控的物件」,各戰役由各戰役腳本來兼做戰役管理 即可,根據之前的實驗,套用 times_check 的物件即便被 update 也不會影響 times_check 的呼叫,因此由戰役腳本兼做戰役管理 是可行的,帶來的好處就是 1.戰役資料直接本地端存取 2.戰役所需自行編寫的相關管控函數,就直接寫在該戰役物件裡頭  ,方便其它 wiz 更容易瞭解該戰役架構組成(因為都寫在同一檔) 3.仍舊可寫一個 war.c 總管物件來依需要讀取各戰役物件的狀態 4.避免 war.c 出現頻繁做資料寫入的情況 5.共通函數就寫 war_sample.c 讓各戰役腳本物件 inherit 架構大致是這樣,times_check.c 的利用我寫得算簡單,因此撰寫 可套用 times_check 的戰役系統應該不難。 腳本檔的部份,一般來說就是仿 quest 的架構,因為 quest 也是 屬於流程式的寫法,並設定有可否通過任務判斷、以及循環條件, 但是戰役系統要做的判斷較多,這部份是否適合全部腳本化,目前 仍有疑義,任務的部份因為需要較多判斷的流程較少(通常只有一兩 個流程需要),所以是採讓 wiz 可自定義函數的做法,但戰役的話 就可能落得每一個流程都需要自定義一個函數來跑,這樣就失去腳 本化的意義。 這個我今天會思考出權宜的做法。 腳本檔編好後,會由 _war.c 指定轉成戰役腳本物件,物件會繼承 sample檔,因此很多函數都會寫在 sample 檔裡頭,我預期會有很 多的內定判斷用函數並可傳值過去,用這個來做腳本檔的簡化,應 該會蠻有效的,我預期這類函數會以 check_ 做為開頭。 最後,腳本物件的資料結構部份,主資料當然以 mapping 格式,雖 然說一個戰役理論上同一時間只能發動一次(直到結束),但我還是 會預留同一時間(實際上會設定不能同一秒)被發動兩次的情況,而 以戰役標籤(就是 time() 值)當做主鍵值,其下再串被寫在腳本檔 的資料。 明天大致就依所編的這些東西來撰寫戰役系統相關檔案。我是希望 寫好後就能拿教庭戰爭來實驗,未來很多戰役的顯示格式會趨向固 定,但亦會保留給 wiz 自訂的空間。 戰役系統寫完後,下一個我預計寫的將是領地爭戰系統,我定義它 是國家系統的外掛系統,參與條件是被授予幾品官職以上,即可選 擇所屬國轄下的領地來治理,主要遊戲目的是與其它國家的領主打 仗。領地爭戰系統是很早就有的構想,但是卡在「副本系統」,必 須先完成副本系統才能實現戰場生成。 LAechan --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.223.250.36
※ 文章網址: https://webptt.com/m.aspx?n=bbs/mud_sanc/M.1486354250.A.04A.html ※ 編輯: laechan (61.223.250.36), 02/06/2017 13:57:51







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP