Re: [閒聊] 關於武防精鍊的做法評估

作者: laechan (揮淚斬馬雲)   2020-06-15 09:15:27
最近想到了一個不錯的做法,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

Links booklink

Contact Us: admin [ a t ] ucptt.com