作者laechan (小太保)
看板mud_sanc
标题Re: [问题] 一堆问题
时间Tue Mar 25 09:32:37 2014
※ 引述《justinj (黑旋风)》之铭言:
: 下午的时候..我做了一个ob->remove()的动作(应该有毁掉不该毁的东西)
: 部分玩家被迫quit..
: 请有遗失装备的找我补发(目前我只试opb的补发完...)
备份档在 /data/std/user.bak,为 324 早上的装备资料。
我大致说一下做法,你可以实做,但是要尽量先以自己没什麽用途的
角色(有备份档,所以角色档坏掉也没关系)来实验。
首先最简单的做法,就是请玩家先到你的 workroom,然後你用 clean
指令清掉他的装备,然後你的 workroom 再写一个函数,载入玩家的
装备,比方..
mapping auto_load;
int reload_ppl_data(string names)
{
mixed tmps=({}),tmps2=({});
string tmp,tmp1,tmp2;
object ppl,ob;
int tt;
auto_load=([]);
if(!ppl=find_player(names))
{
write(names+" 不在线上喔.\n");
return 1;
}
if(file_exists("/data/std/user.bak/"+names[0..0]+"/"+names+".o"))
restore_object("/data/std/user.bak/"+names[0..0]+"/"+names);
return 1;
}
这时 auto_load 的资料就长得类似底下
> call here;reload_ppl_data;"hmml5"
auto_load=([
"/d/ppl/wide/virtue/eq/mikof#226" :([ "names" : "hmml5" ]),
"/d/ppl/ina/moon/eq/soul1#195" : ([ "names" : "hmml5" ]),
"/d/ppl/wide/virtue/eq/an-trail#214" : 0,
.
.
])
也就是说
主 key 是 file_name (不是 base_name),其所带的资料一
样是 mapping 资料,其子 key 就是额外设定资料,所以 restore後
接着就这样写
tmps=keys(auto_load);
foreach(tmp in tmps)
{
sscanf(tmp,"%s#%s",tmp1,tt);
if(!file_exists(tmp1+".c")) continue;
ob=clone_object(tmp1);
if(auto_load[tmp1])
{
tmps2=keys(auto_load[tmp1]);
foreach(tmp2 in tmps2)
ob->set(tmp2,auto_load[tmp1][tmp2]);
}
ob->move(this_object());
}
则底下就是执行结果
> l
[/u/l/laechan/workroom ]
@@query_short
灰暗的天空下起了一阵的毛毛细雨,大地是朦朦胧胧的一片.
明显出口有: 无
净罪の神枪─梅基德‧蒂雅(Sacer Lancea ad Abstergere: Megiddo Tear)
撒旦内裤(Satan Underwear)
部落勳章(Medallion of the Horde)
两颗神之水晶球(God Crystal Ball)
∮传送卷轴∮(Transport Scroll)
五行之灵(spirit of five elements)
.
.
再请玩家 get all 即可。处理完一个玩家的装备问题後就 update here,
再抓下一位过来。当然你也不一定要用 call,比方用 add_action 写成指
令亦可,或是设定一些过滤条件、显示资讯等,很弹性。
那比较复杂的做法就是更动 /data/std/user 下的资料,直接以 user.bak
的 auto_load 资料,替换 user 的 auto_load 资料,它的风险就是有可
能写错档案、资料漏写等等。
这个我一般是在工作站下以 vi 的方法做,所以如果受影响的玩家不多,
我大多采取这种做法,要复原装备的玩家需 quit 直到我做完为止,平均
处理一位玩家约 20 秒,处理顺手後 10~15 秒。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.61.157.53
1F:→ laechan :你可以试做, 我想就算不看 code 也可以自写出自用的 03/25 09:50
2F:推 justinj :最近有一个工作本来以为很好处理..没想到bug太多..这 03/25 13:02
3F:→ justinj :个回复我只能暂时停下来了.. 03/25 13:02
4F:→ laechan :那没关系,若有玩家需要回复装备就回这篇文列 id 03/25 13:13
5F:推 justinj :原先我已经先将hmml~9系列的补了...其它的人有缺的要 03/25 16:56
6F:→ justinj :说.. 03/25 16:56