Re: [wizs] 直覺化的虛擬物品系統
看板mud_sanc (Sanctuary - 聖殿)作者laechan (小太保)時間17年前 (2008/09/25 14:48)推噓1(1推 0噓 1→)留言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
討論串 (同標題文章)
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
-22
41