文字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
批处理的Update

发信人: puss (幽幽一猫无心细语), 信区: wiz
标 题: 在MUD中加强功能的update命令(转)
发信站: 西北网络中心兵马俑 BBS 站 (Wed Jun 2 05:52:53 1999)

在MUD中加强功能的update命令


作者:文月  

公用的命令update的功能很差劲,只能一个一个文件地update
在有些需要大量update的情况下使用update很麻烦
这个问题在upgrade mudos之后更加严重,
因为有大量的程序不能不做任何修改运行在新的MUDOS之上。  
有不少MUD自己都已经改写了UPDATE程序,
能够一次更新整个目录但是由于现在MUD站之间的现状,
往往这样的小程序都作为了MUD的机密文件,不肯公开。
找人要不到,没办法,只好自己写了,
我把ls.c和原始的update.c 两个程序
放在一起加了点语句,花了几分钟改了改,
合成了下面这个upddir.c,下面这个程序可以更新整个目录。
希望对还没有写这个功能的WIZ们有点用处。

// upddir.c
//这个命令可以用来更新某个目录下以及所有子目录下的文件
//命令创建者win@SXTX ,email:wen_yue@163.net

#include "/doc/help.h" inherit F_CLEAN_UP;
int updatefile(object me,string file);
int main(object me, string arg)
{
int i, j;
string dir;
mixed *file;

seteuid( geteuid(me) );
dir = resolve_path(me->query("cwd"), arg);
if( file_size(dir)==-2 && dir[strlen(dir)-1] != '/' ) dir += "/";
file = get_dir(dir, -1);
if( !sizeof(file) )
{if (file_size(dir) == -2)
return notify_fail("目录是空的。\n");
else
return notify_fail("没有这个目录。\n"); }
i = sizeof(file); while(i--)
{
if (file[i][1]==-2) file[i][0] += "/";
}
write("目录:" + dir + "\n");
if (sizeof(file))
for(i=0, j = sizeof(file); i < j; i++) {
if (file[i][1]!=-2 && sscanf(file[i][0], "%*s.c")
&& file[i][0][strlen(file[i][0])-1]=="c"[0]
&& file[i][0][strlen(file[i][0])-2]=="."[0])
updatefile(me,dir+file[i][0]);
else if (file[i][1]==-2)
call_other(__FILE__,"main", me,dir+file[i][0]);
} else write(" 没有任何档案。\n"); write("\n");
return 1; }

int updatefile(object me,string file)
{ object obj,*inv;
int i;
string err; me->set("cwf", file);

if (obj = find_object(file)) {
if( obj==environment(me) ) {
if( file_name(obj)==VOID_OB )
return notify_fail("你不能在 VOID_OB 里重新编译 VOID_OB。\n");
inv = all_inventory(obj);
i = sizeof(inv);
while(i--)
if( userp(inv[i]) )
inv[i]->move(VOID_OB, 1);
else inv[i] = 0;
}
destruct(obj);
}
if (obj) return notify_fail("无法清除旧程式码。\n");
write("重新编译 " + file + ":");
err = catch( call_other(file, "???") );
if (err) printf( "发生错误:\n%s\n", err );
else { write("成功!\n");
if( (i=sizeof(inv)) && (obj = find_object(file)))
{ while(i--)
if( inv[i] && userp(inv[i]) )
inv[i]->move(obj, 1); } } }

int help(object me) {
write(@HELP 指令格式: upddir [<路径名>]
将目录下所有的子目录及档案, 如果没有指定目录, 则使用当前目录
范例: 'upddir /adm' 会将所有位於根/adm目录下的档案编译更新.
HELP );
return 1; }
--
Odysseus 当前离线  
回复时引用此帖

发表新主题 回复

添加到书签


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

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



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


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

站长 fengyue

Content Relevant URLs by vBSEO 3.6.1