文字MUD游戏论坛-天下泥潭群英会-水泊梁山  

返回   文字MUD游戏论坛-天下泥潭群英会-水泊梁山 > 西游之旅 > 『 巫师天下 』

『 巫师天下 』 学习如何挂MUD,如何制作MUD。讨论如何管理好一个MUD,做好一个巫师。

发表新主题 回复
 
LinkBack 主题工具 主题评分 显示模式
旧 2011-12-03   #1
高级会员
级别:6 | 在线时长:109小时 | 升级还需:31小时级别:6 | 在线时长:109小时 | 升级还需:31小时级别:6 | 在线时长:109小时 | 升级还需:31小时
 
Odysseus 的头像
 
注册: 08年04月11日
来自: 盘丝洞
帖子: 311
声望力: 20
声望: 50 Odysseus 初领妙道
现金:29两梁山币
资产:1245两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
一段小程序,同时看看save,restore的问题

发信人: cloner (!!!!!!!), 信区: Mud_Builder
标 题: 一段小程序,同时看看save,restore的问题
发信站: 一塌糊涂 BBS (Sat May 12 13:39:03 2001)


//tranemote.c
//Made by jason@pkuxkx
//FreeWare
#define ERROR "指令格式:tranemote emote 来源emote文件\n"
inherit F_SAVE;
string source_file="";
mapping emote=([]);
string query_save_file()
{
return source_file;
}
int main(object me,string arg)
{
mapping old_emote=([]);
string ee,file,*key,*key2;
if(!arg||arg=="")
return notify_fail(ERROR);
if(sscanf(arg,"%s %s",ee,file)!=2)
{
return notify_fail(ERROR);
}
if(file_size(file+".o")<=0)
return notify_fail("读emote源文件错误。\n" );
source_file=file;
if(!restore())
{
return notify_fail("emote源文件无法Restore。\n");
}
old_emote=emote;
if(!mapp(old_emote)||sizeof(old_emote)<=0)
{
return notify_fail("emote源文件无法Restore。\n");
}
source_file="/data/emoted";
if(!restore())
{
return notify_fail("emote目标文件错误。\n");
}
if(!mapp(emote)||sizeof(emote)<=0)
{
return notify_fail("emote目标文件无法Restore。\n");
}
key=keys(old_emote);
if(wizardp(me)&&wizhood(me)=="(admin)")
{
int unit=0;
string nowtime;
if(ee=="-All")
{
nowtime=""+time();
cp("/data/emoted.o","/data/emoted.o."+nowtime);
key2=keys(emote);
shout("Emote 文件转换中。。。。\n");
for(int i=0;i < sizeof(key);i++)
{
reset_eval_cost();
if(member_array(key[i],key2)!=-1) continue;
if(!mapp(old_emote[key[i]])) continue;
EMOTE_D->set_emote(key[i],old_emote[key[i]]);
write(key[i]+"\n");
unit++;
}
write("Emote 文件 "+file+" 转换进入/data/emoted.o成功!\
n");
write("一共有"+chinese_number(unit)+"个emote转换成功。\n
");
write("现有emote备份为"+"/data/emoted.o."+nowtime+"\n");
log_file("tran_emote",getuid(me)+"转换 "+file+" 中的Emot
e进入当前Emote中。
\n"+
"时间:"+ctime(time())+"\n"+
"现有emote备份为"+"/data/emoted.o."+nowtime+"\n");
return 1;
}

}
ee=lower_case(ee);
if(member_array(ee,key)==-1)
{
return notify_fail(ee+" 不存在于 "+file+"。\n");
}
if(!mapp(old_emote[ee]))
{
return notify_fail(ee+" 不是一个合法的emote。\n");
}
if(!undefinedp(emote[ee]))
{
return notify_fail(ee+" 存在于目标emote文件中,不能覆盖。\n");
}
EMOTE_D->set_emote(ee,old_emote[ee]);
write("Emote转换 "+ee+" 成功。\n");
return 1;
}
int help(object me)
{
write(@HELP
指令格式:tranemote emote 来源emote文件
将来源emote文件中的指定emote加入当前emote文件中。
格式二:tranemote -All 来源emote文件
将来源emote文件中所有当前emote文件中没有的emote加入。
同时给当前emote文件按时间备份。
HELP
);
return 1;
}

发信人: cloner (!!!!!!!), 信区: Mud_Builder
标 题: Re: 一段小程序,同时看看save,restore的问题
发信站: 一塌糊涂 BBS (Sat May 12 13:52:41 2001)

这个小程序写了有几个月了,目的是为了合并
其它mud的emote,现在pkuxkx.net 5555的
emote有6屏,:P

不过当初在写的时候,就觉得 es2 的这套
存取.o不太安全,就是另外一个程序可以
完全的冒充别的程序,读写别人的.o文件。

就像这里做的,我假冒了emoted.c的数据结构,也
申明了一个mapping emote=([]);
然后query_save_file()也返回emoted.c的,
然后就随便做什么了....

user_ob的query_save_file()使用了ob的uid来定
,目的是为了避免巫师简单的call一下id就换了
天神的档案,然后就可以改密码了...

但是这个办法并不能防止巫师有意的写一段程序
来做这一点,还好es2的securityd里对user_ob和
login_ob都特别的限制过,所以玩家数据这种方法不会
导致问题。

但是这样的方法,还是可以做不少事情的,比如xyj
开电的npc什么的,呵呵。

不知道大家有什么解决的好办法?
Odysseus 当前离线  
回复时引用此帖

发表新主题 回复

添加到书签


发帖规则
不可以发表主师
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子

论坛启用 vB 代码
论坛启用 表情图标
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为格林尼治时间 +9, 现在的时间是 06:22.


Powered by SPLS
版权所有 2001-2023 水泊梁山
皖ICP备05012024号

站长 fengyue

Search Engine Optimization by vBSEO 3.6.1