[指令] 今日 quest 及任務腳本參數增改紀錄

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間14年前 (2011/10/11 00:49), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串9/9 (看更多)
任務系統大致寫到今天結束,有空我會補範例區域進去。今 天晚上還有一點時間則用來清理冗餘的 simul_efun,清完後 我要新增 quest 相關的全域函數,預定只新增一個,用這個 來做所有的事情。 星期三起則要寫新的東西,有空時則會繼續補完道具那篇, 以及撰寫零星的對話任務,用於... 1. learn skill from npc <= 以後你要 learn 就得先解任務 2. l mirror <= 你要先跟次元鏡管理人做朋友 3. join 公會 <= 公會老大:喂, 你以為我們什麼雜魚都收嗎 4. buy xx from 商店 <= 商店老闆:喂, 等等, 先報上名來 5. 進八卦, 血肉, ... <= 你以為說進就進喔 這些任務完全不需要玩家寫,當然玩家願意主動寫我們很歡迎 ,若是我寫,一開始都很簡單啦就是找些 npc 對話一下而已。 等以後有空再一個一個慢慢改複雜即可。 一、指令 quest 新增 quest check 腳本檔名 語法 假設 l003 的 step1_msg 我改成如下 stpe1_mgs $M: 我好想喝烏龍茶(Oolong)啊啊啊~~~ $N: 那給我錢啊我買來給你 $M: .......## $M: 我好想喝烏龍茶(Oolong)啊啊啊~~~ $M: 喂~別裝死啊!## 標紅色的部份就是腳本常錯之處,包括參數名錯誤、## 誤加等。 > quest check l003 ============================================= step1_npc=/d/map/lodoos/mob/vendor## stpe1_mgs $M: 我好想喝烏龍茶(Oolong)啊啊啊~~~ $N: 那給我錢啊我買來給你 $M: ....... ============================================= 沒有發現應存在的 = 號喔. 它會先抓出你有沒有漏加了 = 號,修正後.. > quest check l003 ============================================= step1_npc=/d/map/lodoos/mob/vendor## stpe1_mgs= $M: 我好想喝烏龍茶(Oolong)啊啊啊~~~ $N: 那給我錢啊我買來給你 $M: ....... ============================================= 這一段發現有問題喔. 你就會發現 stpe1_mgs 拼錯了。修正後 > quest check l003 ============================================= step1_msg= $M: 我好想喝烏龍茶(Oolong)啊啊啊~~~ $N: 那給我錢啊我買來給你 $M: .......## $M: 我好想喝烏龍茶(Oolong)啊啊啊~~~ $M: 喂~別裝死啊! ============================================= 沒有發現應存在的 = 號喔. 沒有等號同時也是可能漏加了參數的意思,如上,當 它看到 ## 時底下應該要設參數,卻沒設,所以這裡 的判斷就是「實際上你多加了 ## 才造成它的誤判」 把多出來的 ## 去掉後 > quest check l003 quest check: 腳本 l003 確認完畢,沒有發現問題. > quest read l003 quest read: 腳本 l003 更新及載入了. 有時會發生腳本有寫錯、但實際上卻可被 read 成功 的情況,然後在實際測試時才發現問題,以後 wiz便 可使用 check 做事先的檢查,特別是腳本檔龐大的情 況,check 就是一個很好的事前檢查工具。 二、任務腳本新增 others 參數 用法很簡單,在腳本的最底下類似這樣子寫.. others= int test_1() { write("test.\n"); return 1; }## 則當該腳本被 read 時,others 所接的東西就會一 字不變地寫進物件檔中,如下.. int test_1() { write("test.\n"); return 1; } 這是方便 wiz 在寫腳本檔時順便新增自己所需要的 函數用的。如果該函數只做為該腳本任務使用,就 以 others 的方式添增;如果該函數你覺得應該讓 全部的腳本都可以呼叫,就寫進 quest_d.c。 (當然實際上我不希望你經常去動 quest_d.c) 使用這個參數唯一要注意的當然是不要讓它宣告的 函數或全域變數,與已存在的宣告重覆。 三、任務腳本實裝 timeX_msg、timeX_end 參數 簡單的說 timeX 的 X 指的就是「第幾次完成任務 」的意思,例如說 vendor 的 oolong 任務.. steps=4## step4_end= give_obj(ppl,"/d/ppl/norr/special_obj/suicide_potion",1)## time2_end= give_obj(ppl,"/d/ppl/norr/special_obj/volcano_potion",1)## 上面的意思就是,一般的情況下,當你解完第 4 步驟後, 會得到 suicide_potion,但是當你第 2 次解完第 4 步驟 時,它就不會去呼叫 step4_end, 而改呼叫 time2_end, 意思就是「既然你是解完第 2 次我就呼叫 time2_end」的 意思。 這時得到的就不是 suicide_potion 而是 volcano_potion 而如果你還有加設 time2_msg,那麼 step4_msg 就會被 time2_msg 取代。 簡單的說,實裝這兩個參數的用意,就是為了設定,當玩家 解了該任務到特定次數時,就給予不同的報酬。 至於 timeX_check,因為它有問題(主要是判斷),最好別用 ,因為 stepX_check 遇到 timeX_check 會被無效化,造成 每一步驟的 check 都會是 timeX_check(這我當初沒想到)。 四、 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 編輯: laechan 來自: 115.80.77.46 (10/11 14:52)

10/12 08:48, , 1F
用step4_endX...代表第n次解完後就換它了...amem
10/12 08:48, 1F
這也是可以,不過太遲了。(不想再動程式碼了) ※ 編輯: laechan 來自: 115.80.122.112 (10/12 09:18)
文章代碼(AID): #1Eao896B (mud_sanc)
討論串 (同標題文章)
文章代碼(AID): #1Eao896B (mud_sanc)