关于call指令
2007/5/11 21:41:56

随便说两句,关于call的,是给新手看的,所以说老家伙们不要挑毛病 
当没有看到我的帖子就好了 
 
call,顾名思义,是“呼叫”,他呼叫什么呢,呼叫的是物件上的函数 
格式是call XX->function(arg1,arg2)..... 
XX是物件的“名称”,这个说法不是很准确,因为有的时候是uid,有的 
时候是id,也有的时候是一些特殊的代称,甚至于有的时候就是文件名。 
 
funcition是函数,确切的说,是物件的函数,这个不用解释了吧,对面 
向对象有一定了解的都可以明白,不明白也没有办法了:( 
 
arg1 arg2 是函数的参量 
先说物件名,我们在程序当中有的时候会看到me->set("name","很不温柔"); 
这样的语句,这里的me是一个ob,一般会是this_object()或者 
this_player(),但是在call里边的me不是的,他只是一个代称,由call 
指令转化成this_player(),类似的情况还有call here->.... 
 
一般我们只针对用户call,所以一般用的都是用户的id,比如call akuma->()... 
但是实际上这个是用户的uid,当你call me->set("id","bigpig")之后, 
再call bigpig->....的时候,并不会因为你的"id"是bigpig,call指令 
就会对你如何如何,它首先是去找线上的那个真的bigpig。。。,没有也 
不会找你:) 
 
其实还可以直接call一个文件,正确的说是文件名所反映的那个内存中 
的物件,比如如果你权限够的话,可以尝试一下 
call /adm/daemons/natured->create(),heihei 
 
如前边所说,function是这个物件上的函数,函数有可能是物件本身的 
也有可能是物件所继承的(inherit)的类(说类不大合适)上的。 
比如set就是从inherit F_DBASE;来的。再如set_skill()是因为“我” 
(用户,也就是user_ob)继承了F_SKILL(不是一次继承的,而是。。 
记不清楚了 好像是charactor继承的吧)。 
 
就通常情况而言,我们做在线管理针对用户用的也就是如下几个函数 
set()  query()  set_temp() query_temp() set_skill() delete() 
query_entire_dbase()等等 
 
当然,有这个函数存在并不表示你就能够call成功,还要看权限 
比如说如果随便一个wizardp就能够call /adm/daemons/securityd->set... 
那就乱了(说到这里,应该有人在偷笑吧:)) 

说道arg1 arg2...其实没有什么好谈的,具体看看函数原型就好了 

 
尊重作者 转载请注明出处52mud.com

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