作者laechan (揮淚斬馬雲)
看板mud_sanc
標題Re: [閒聊] 關於武防精鍊的做法評估
時間Mon Jun 15 09:15:27 2020
最近想到了一個不錯的做法,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://webptt.com/m.aspx?n=bbs/mud_sanc/M.1592183730.A.634.html
1F:→ laechan : 程式段應該會再微調,目前已知玩家login、以及玩家在 06/15 09:16
2F:→ laechan : 天空城之家做 take 時會有動到 sdata 的情況 06/15 09:16
3F:→ laechan : 這個東西預計寫成simul_efun讓幾個地方去呼叫 06/23 06:54
4F:→ laechan : 可能會使用 questing 因為這樣比較能回傳較多東西 06/23 06:55