Re: [wizs] 直覺化的虛擬物品系統

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間17年前 (2008/09/25 14:48), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串4/6 (看更多)
※ 引述《laechan (小太保)》之銘言: 後續更動部份 : 一、資料讀取時的嚴謹判斷(避免因一個資料庫出問題就造成整個資料庫無法載入) 從 wiz 自定的資料庫 set_vobjs 到總資料庫的部份, 已完成嚴謹判斷。 這部份的主判斷為「若 /adm/daemons/vobjs_d.c 出問題,wiz 在 update 自定的資料庫時,不會做資料同步到總資料庫的動作」, 我在這個部份有加 上訊息提示. 從總資料庫 query wiz自定的資料庫的 vobjs_data 內容的部份,也已完 成嚴謹判斷。 這部份的主判斷為「若 wiz 自訂的資料庫出問題,就不載入該資料庫」, 會出現的問題包括資料庫物件本身的 error(無法被 update)、以及在定義 資料時設定錯誤(例如資料漏設了一定要設的 name 跟 file)等情況. 新增的判斷則是,總資料庫在載入一個 wiz 所建的資料庫之所有資料前 , 會先移除該資料庫先前載入總資料庫的所有資料, 移除完後才載入新的 資料庫的所有物品資料, 以確保所載入的資料都是最新的. 例如該 wiz 先前建了一百筆資料, 後來改成十筆, update 之後總資料庫 裡頭該 wiz 所建的資料就只會剩下十筆, 而且都是最新的. : 三、確定 mark 的用途以及是否需要另外的 remark 資料 : (mark 參數用來做為特殊判斷則是確定的, 因為以後要盡量減少實體物品讀取) 已經確定虛擬物品除了 name 及 file 之外, 還可額外載入 mark 及 remark 資料欄, mark 一般用來做為解任務的判斷用, remark 則真的 就是備註用, 例如底下設定範例.. "crystal" : ([ "name" : "生命水晶", "file" : "/adm/daemons/eq/crystal", "mark" : "pre_die", // <=當做該虛擬物品的特殊參數 "remark" : "玩家戴這個在身上就可避免陣亡的東西.", ]) mark 及 remark 是顯示給 wiz 看的(所以玩家下任何指令都不會看到這兩個), 正確的說連 file 也是只顯示給 wiz 看的, 玩家只會看到 name, 以及身上所帶 的虛擬物品數量. 而虛擬物品除了 name、file、mark、remark 以外的資料都不會被總資料庫載入 ,因為其它資料只需透過讀取file=>讀取實體物件=>query 實體物件的資料就可 以讀到(例如物件的 short, long, mass 等資料). : 四、完成一些全域函數的撰寫. : 二、確保即使虛擬物品指向的實體物品消失,虛擬物品還是可正常讀取 : (只是沒辦法讀到實體物品的資料, 已登錄的 name, file, mark 照常可讀取) 這兩個一起寫. 已完成四個全域函數... set_user_vobjs(目標玩家,物品id,數量); add_user_vobjs(目標玩家,物品id,數量); delete_user_vobjs(目標玩家,物品id); 這三個應該沒啥問題, 我盡量都使用符合直覺的函數名, 方便 wiz 記憶 及使用. query_vobjs_data(物品id,欲讀取資料項); 這是不定變數用法, 沒有給物品id也沒有給欲讀取資料項時, 就回傳 「總資料庫登錄的全部資料」(mapping 格式). 有給物品id沒有給欲讀取資料項時, 就回傳「總資料庫所登錄的某一 虛擬物品全部資料」(mapping 格式), 包括它的 name、file、... 有給物品id也有給欲讀取資料項時, 就回傳「總資料庫所登錄的某一 虛擬物品的該項資料」(string 格式). 經過重開機測試後, 系統物件 /adm/daemons/vobjs_d.c 已經可以成 功載入我自行設定的 /u/l/laechan/vobjs.c 的所有資料. 其它測試就等有其它 wiz 建好資料庫後再來試. : 六、決定是否讓同一個實體物品,會有兩個不同的虛擬物品key名. : (例如 laechan_pre_die 可能跟 hlead_pre_die 共同指向生命水晶) : 我猜應該是可行的, 只要 name 跟 mark 的設定做好就可. : (由此來推三的話, mark 跟 remark 應該要視為不同的東西) : Laechan 這應該是可行的. 例如某個實體物件 /u/l/laechan/stone.c, 我要它做為試鍊窟下的 解謎道具時, 我會在資料庫如此定義... "hole_stone1" : (["name" : "神奇的石頭", "file" : "/u/l/laechan/stone", "mark" : "laechan_hole_stone1", "remark" : "試鍊窟解謎用.", ]), 但是 torr 之後也希望該 stone 也能做為它善見城底下某個任務的 過關道具時, 他也可以在他的資料庫如此定義... "wide_stone" : (["name" : "神奇的石頭", <= 名字可一樣可不一樣 "file" : "/u/l/laechan/stone", <= 指向同一個實體物品 "mark" : "wide_quest_stone", "remark" : "善見城解任務用." ]), 這樣一來, 玩家可能同一時間會擁有這兩種虛擬物品,雖然它們都 指向相同的實體物件, 但它們其實是不同的東西. query_user_vobjs("laechan_hole_stone1","mark") = "laechan_hole_stone1" query_user_vobjs("hlead_wide_stone","mark") = "wide_quest_stone" 從這裡可以衍生的概念就類似 RO 的「怪物掉落雜物」, 例如說打 某個區域總共會拿到底下可賣商店的虛擬物品... 物品1 x 50 物品2 x 30 物品3 x 20 . . 但假若要讓物品 1 2 3 4 ..... 全指向「同一個實體物件」的話, 則虛擬物品就應設定 name、file、long、value。 這樣子一來,只需撰寫「一個實體物件」,就可以讓全部可賣店的 虛擬物品都去指向它。 所以衍生性修改為... 一、是否讓虛擬物品資料設定部份,增加「long」以及「value」兩   個欄位,甚至是其它的欄位...    若允許增加 long : 則 long 不能太長. 若允許增加 value : 該 value 欄必須為 int 型態 若允許增加其它欄 : 「哪些」是適合加入的欄位 二、尚未完成的指令 vobjs (我看今天有沒有空寫好) 三、wiz 自建的資料庫,是否需放標準繼承用樣本。 (就是放在 /std 下供 wiz 在建資料庫時 inherit 用的東西) 四、該如何進行初步測試 五、是否需要一個動態資料庫的存在(類似 chinese 那種) Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 編輯: laechan 來自: 61.225.160.127 (09/25 15:14)

09/25 16:34, , 1F
這個好玩,不過能延伸的任務只有收集物品的樣子
09/25 16:34, 1F

09/25 16:34, , 2F
還會擴充其他功能嗎?
09/25 16:34, 2F
文章代碼(AID): #18spH7qS (mud_sanc)
文章代碼(AID): #18spH7qS (mud_sanc)