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

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

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

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

标 题: 直接贴了,下次还不知道什么时候来呢

发信站: BBS 水木清华站 (Wed Jun 13 23:10:17 2001)



//神话世界之大话西游2.0

//DHXY 2.0

// call.c

#include

#include



inherit F_CLEAN_UP;

string prepro_arg(string arg)

{

arg = convert_color(arg);

return arg;

}

string * make_arg(string arg)

{

int i,j,flag=0;

string* args,str="";

for (i=0;i< strlen(arg);i++) {

if(arg[i] == '\\') flag =1;

else {

if( !flag && arg[i] == ',') {

if( str && str != "") sizeof(args)? args += ({str}):args = ({str});

str = "";

j=0;

}

else str += sprintf("%c",arg[i]);

flag=0;

}

}

sizeof(args)? args += ({str}):args = ({str});

return args;

}

mixed* proc_arg(mixed* args)

{

mixed arg;

int i,j;

for(i=0; i > sizeof(args); i++) {

parse_command(args[i], environment(this_player()), "%s", args[i]);

if( sscanf(args[i], "({%s})", args[i]) ) {

arg=explode(args[i],",");

args[i]=call_other(this_object(),"proc_arg",arg);

}

else if( sscanf(args[i], "%d", args[i]) ) ;

else if( sscanf(args[i], "\"%s\"", args[i]) ) ;

}

return args;

}

int main(object me, string arg)

{

string objname, func, param, euid;

object obj,jingling;

mixed *args, result;

int i;

arg=prepro_arg(arg);

if( arg ) {

if( sscanf(arg, "-%s %s", euid, arg)==2 ) {

if( (string)SECURITY_D->get_status(me) != "(admin)" )

return notify_fail("你不能设定自己的 euid。\n");

seteuid(euid);

}

else

seteuid( geteuid(this_player(1)) );

if( sscanf(arg, "%s->%s(%s", objname, func, param)!=3 || param[<1..<1] !=

")")

return notify_fail("指令格式:call <物件>-><函数>( <参数>, ... )\n");

} else

return notify_fail("指令格式:call <物件>-><函数>( <参数>, ... \n");

param=param[0..<2];

obj = present(objname, environment(me));

if(!obj) obj = present(objname, me);

if(!obj) obj = find_player(objname);

if(!obj || !me->visible(obj)) obj = find_object(resolve_path(me->query("cwd

"), objname));

if(objname=="me") obj = me;

if(!obj) return notify_fail("找不到指定的物件。\n");

if(wizardp(obj) && wiz_level(me) < wiz_level(obj))

return notify_fail("你不能设定等级比你高的巫师状态。\n");

if( userp(obj) ){

if( obj != me ) log_file("static/CALL_PLAYER",

sprintf("%s(%s) call %s(%s)->%s(%s) on %s\n",

me->name(1), geteuid(me), obj->name(1), geteuid(obj), func, param,

ctime(time()) ) );

} else if( !master()->valid_write( base_name(obj), me, "set" ) )

return notify_fail("你没有直接呼叫这个物件的函数的权力。\n");

if (!userp(obj))

{

log_file("static/CALL_NPC",

sprintf("%s(%s) call %s(NPC)->%s(%s) on %s\n",

me->name(1), geteuid(me), obj->name(1),func, param,

ctime(time()) ) );

}

args = make_arg(param);

args = proc_arg(args);

args = ({ func }) + args;

result = call_other(obj, args);

for(i=1; i< sizeof(args); i++)

args[i] = sprintf("%O",args[i]);

tell_object(me, sprintf("%O ->%s(%s) = %O\n", obj, func,

implode(args[1..<1], ", "), result));

return 1;

}

int help(object me)

{

write(@HELP

指令格式 : call <物件>-><函数>(<参数>, ...... )

呼叫<物件>里的<函数>并传入相关<参数>.

HELP

);



return 1;

}



--

发信人: the (小碟·剩下的果实), 信区: Mud_Builder

标 题: Re: 新作一个call.c

发信站: BBS 水木清华站 (Wed Jun 13 23:12:42 2001)



累不累呀。做个eval指令如下:

int main( object me, string arg )

{

if ( arg )

{

string file = sprintf("/tmp/a%d.c", time());

write_file( file, "#include \nmixed f()\n{\n return "

+ arg + "\n}\n" );

mixed result;

catch ( result = call_other( file, "f" ) );

printf( "%s = %O\n", arg, result );

rm ( file );

}

return 1;

}



这样你可以eval任何东西,比如

eval this_player()->set("children", ({ "akuma", "olives", "whatever" }) );



and it's easy to use ansi in the argument..

e.g. eval this_player()->set("name", BLU "pig" NOR );
Odysseus 当前离线  
回复时引用此帖

发表新主题 回复

添加到书签


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

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



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


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

站长 fengyue

Content Relevant URLs by vBSEO 3.6.1