看板 mud_sanc 關於我們 聯絡資訊
最近想到了一個不錯的做法,log 一下。 前篇提到比方武器以後會新增一個 sdata 的儲存欄位 refine_lv, 則當玩家 login、或者玩家自天空城之家倉庫取出該武器時,目前 會做以下動作: // 讀取所儲存的所有資料的 key 值 tmps=keys(data[target_savebox][res-1][2]); // 將這些 key 值對映的 value set 進去 foreach(str1 in tmps) ob->set(str1,data[target_savebox][res-1][2][str1]); 假設我們不讓它儲存「精鍊後武器屬性的變化值」,而是只在物品 載入時才讓屬性變化的話,上面加上以下程式段 // 當 effect_stat 不屬於儲存屬性時 if(member_array("effect_stat",tmps)==-1) { // 讀取該物品的精練值 v=ob->query("refine_lv"); // 變更該物品的名字為 +nXXX if(v>0 && member_array("short",tmps)==-1) { str1=ob->query("short"); ob->set("short",sprintf(HIG"+%d"NOR"%-s"NOR,v,str); } // 比方精鍊值每+1,屬性+5 v=v*5; tmps=keys((mapping)ob->query("effect_stat")); foreach(str1 in tmps) ob->add("effect_stat/"+str1,v); } 這樣該物品在載入後不管是 view 或 wear/remove 都會看到 1.該精鍊物品是 +幾 2.該精鍊物品 +幾 後的新屬性值 而且只 save refine_lv 一個欄位,最大好處就是精鍊影響屬性 的公式(比方上面是每精鍊 1,屬性 +3)可以隨時調整。 它的缺點,則是不能遺漏現今任何一種武防具儲存方式,以免玩 家將該武防具扔進去儲存後,再取出時會有屬性沒加到的情況, 不過這種算輕微的好處理,因為至少 refine_lv 有被儲存。 Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.33.66.104 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/mud_sanc/M.1592183730.A.634.html
laechan : 程式段應該會再微調,目前已知玩家login、以及玩家在 06/15 09:16
laechan : 天空城之家做 take 時會有動到 sdata 的情況 06/15 09:16
laechan : 這個東西預計寫成simul_efun讓幾個地方去呼叫 06/23 06:54
laechan : 可能會使用 questing 因為這樣比較能回傳較多東西 06/23 06:55