可以set array的指令
2007/5/11 21:25:42

//神话世界之大话西游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",

下一页
返回列表
返回首页
©2025 MUD游戏网_文字mud 电脑版
Powered by iwms