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