Mudos 编程总结

Mudos 编程总结
1、 Mudos 系统调用 MudLib 系统文件的过程和一些特点。
  系统文件的过程和一些特点。 文件的过程和一些特点 Mudos 启动以后先要寻找一个配置文件,
  用来配置 MudLib 文件系统的一些信息(这里 时 config.cfg) 找不到就无法启动。
   找到以后根据配置文件里面的参数进行初始化 Mudos, 然后调用配置文件里面的两个入口文件,
   即 simul_efun.c 和 master.c 。首先载入 simul_efun 文件并生成一个特殊的全局对象,
   这个对象用于定义一些全局使用的函数, 也可以重载 Mudos 中的 Efun 函数,
   这些新定义的文件使用起来和 Efun 是一样的。
   然后系统会调用 master.c 文件并生成一个全局对象(主控对象) ,
   主控对象用于系统的 全局控制,包括全局对象的加载,错误信息的跟踪处理等。
   接下来,系统会根据主控对 象中的定义,载入一些系统需要用到的全局对象。
   到此,Mudos 系统就启动完成了。
2、 用户连接系统后的处理过程。 、 用户连接系统后的处理过程。
当用户通过客户端进行连接以后, Mudos 系统会调用 master 对象特有的 connect()函数,
 通过这个函数编程人员需要创建并返回一个用户对象,系统会将用户连接到这个用户对 象上,
 即是说这个用户对象就代表了这个用户。到此,就算完成了用户的连接过程。
3、 用户的登陆后的处理过程 、当 Mudos 系统调用 master 的 connect 函数创建并返回一个用户对象以后,
用户对象会 调用特有的 logon()函数,这个函数用来把用户的设置都设置好并进行游戏。
注:最好在 这里重新建立一个用户对象, 然后通过 exec 函数把用户的连接转移到新的对象上,
 然后 删除这个对象。
4、 Mudos 系统中的特殊对象 系统中的特殊 特殊对象 、 simul_efun 对象、master
主控对象和用户对象这三种对象都是系统提供的特殊对象,其 中 simul_efun 对象和 master 主控对象在系统中只有一个实例,
 即不能被 clone 也不能 new 创建,而用户对象主要的作用就是用来创建用户并完成初始化的对象,
 用户每次登陆都 会自动生成一个,用户登陆完成后最好删除它。
 这里需要指出主控对象和用户对象都有特有的一些函数, 这些函数提供给 Mudos 系统来调用的,
  用来完成一些系统需要处理的 事情。
5、 Master 主控对象 、 object connect() 程序连接后调用的函数,创建并返回一个用户对象。
 string *epilog(int load_empty)
 返回一个包含物件文件名称的数组,其中所有的文件为启动游戏之前必须预先载入的对 象.
 void preload(string file)
 系统按照 epilog 函数返回的数组载入全局对象后调用次函数,用来判断对象是否成功创建
 static void crash(string error, object command_giver, object current_object)
 当系统异常终止 (crash) 时, 就调用主控物件中的此函数, 用来记录一些系统 crash 的 log 信息。
 void log_error(string file, string message)
 编译程序发生任何错误系统都会调用此函数,用于发现是哪个对象出了什么错误。用于 记录编译程序时出现的错误信息。
 string error_handler( mapping error, int caught )
 主控物件处理错误的函数,此函数让 mudlib 代替系统处理错误情形。用来处理系统运 行时出现的错误信息。
string get_root_uid()
取得 root 使用者识别名称需要获取系统的 uid 时调用此函数。
string get_bb_uid()
取得骨架使用者识别名称。
string creator_file(string str)
系统创建任何对象时都会调用此函数,用来获得系统初始化对象的 uid 值。
mixed compile_object(string file)
提供虚拟对象当系统无法按照给定的路径载入对象时调用此函数。如果返回值是 0, 系统将不会载入这个对象,如果返回值是一个对象,系统会把这个对象当作是系统要载 入的对象。一般来说,这里会返回一个 void 对象。
string object_name(object ob)
系统调用此函数以知晓一个物件的名称。
string domain_file(string str)
返回一个指定对象所属的区域,系统调用此函数来获得对象的区域。
string author_file(string str)
返回一个指定对象所属的作者,系统调用此函数来获得对象的作者。
int save_ed_setup(object who, int code)
ed()函数储存一个使用者的编辑程序设定或组态设定时调用
int retrieve_ed_setup(object who)
ed()函数取得使用者的编辑程序设定或组态设定
string make_path_absolute(string file)
ed()函数调用此函数以转换文件的相对路径名称为绝对路径名称
string get_save_file_name(string fname)
ed()函数使用者不正常断线时, 此函数应返回与原来文件不同的名称, 以免覆写原来的 文件
string privs_file(string file)
为新创造的对象指定一个私有字符串。创建任何对象时系统都会调用此函数. 对象的文 件名称为其参数,返回的字符串就用作此对象的私有字符串。
void slow_shutdown(int minutes)
告知 mud 目前正处于缓慢关闭的过程中. 当系统无法从堆中配置更多的内存, 而只能 使用保留的内存区块时, 主控物件会调用此函数. 此函数只有在组态文件中设定了「内 存区块保留大小」才会被调用. 距离关闭时间还剩下几分钟则为此函数的参数. void flag( string ) 当系统启动时, 处理 mudlib 所指定的特定标志. 这个函数暂时还不是很了解。 int valid_override( string file, string name ) 是否允许使用 efun:: 的情形,即是否允许运行 efun 重载前的函数。
int valid_seteuid( object ob, string str )
是否允许设定一个对象的 euid。
int valid_socket( object eff_user, string fun, mixed *info )
是否允许调用 socket 外部函数
int valid_asm( string file )
是否能使用 asm{}来控制 LPC->C 编译的物件
int valid_compile_to_c( string file )
是否允许由 LPC->C 的方式编译
int valid_hide( object who )
是否允许一个对象具有匿踪和看到匿踪对象的能力 int valid_object( object ob )
是否允许载入某个对象。
int valid_save_binary( string filename )
是否允许一个对象储存它的源代码
int valid_bind(object binder, object old_owner, object new_owner)
是否允许 bind() 函数 即把某个对象的函数指针指向其他对象。
int valid_write( string file, mixed user, string func )
是否允许一个人有权限写入一个文件
int valid_read( string file, mixed user, string func )
是否允许一个人有权限读取一个文件 int valid_shadow( object ob )
控制哪些对象可以作为投影。
int valid_link( string original, string reference )
是否允许 link()
int view_errors( object user )
是否允许一个使用者看到错误消息
int valid_compile( string file )
是否允许预先编译文件,这是 22.2b14 新加的设置
6、 用户对象
void logon()主控对象
conncet 函数返回的用户对象会直接调用次函数,用以对用户对象的初始化处 理。
string process_input(string str)
用户输入信息后调用此函数,字符串处理后再传递给本用户对象,用来处理用户输入信 息。
void net_dead()
当用户对象断线时, 系统调用此函数。用来处理用户断线后的事情。
void terminal_type(string term_type)
用户对象登陆后调用,获得用户登陆的终端型号。
void receive_message(string type, string str)
用户对象的消息处理函数,系统的 message()函数会把消息分配给各个符合条件的用户 对象,用户对象接收到消息后调用此函数来接收并处理消息。
void catch_tell( string message );
无论系统对一个对象送出任何消息都会调用此函数来处理这些消息. 消息可以依照需要 显示、丢弃、修改. 此函数可以当作耳罩挡住某些消息, 也可以用于消息处理程序.
void receive_snoop( string message) ;
一个用户对象窥视另一个用户对象时, 所有窥视的文字会传递给用户对象中的这个函数. 在此函数中, 您可以处理这些文字.次函数的内容, 通常会再传递给 receive() 函数.
void telnet_suboption( string buffer );
获得用户终端的一些设置。 void write_prompt( void ); 如果在用户对象中有定义了次函数,则预设的提示符号该显示时, 系统将调用此函数. 当用户正处于 input_to (输入文字) 和 ed (编辑程序) 状态时, 系统不会调用此函数
7、 所有对象
void create( void );
对象的构造函数,对象被系统载入后调用此函数来初始化对象。复制的对象也会调用。 需要说明的是,系统第一次载入对象后会自动运行对象和其所有的父类中的 create,复 制的对象只运行对象自己的 create。
int id( string an_id );
此函数被系统的 present() 函数调用, 以判断一个指定的对象是否以字符串 an_id 为识别 名称 id. 如果 an_id 是此对象的识别名称之一, 就返回 1, 不是则返回 0。
void init( void );
当系统把对象 A 放入对象 B 时(即调用 move_object() 函数) , 如果 A 是人物对象,让 A 在 B 里调用 A 的 init 函数, 同时调用 B 里面所有对象的 init 函数。 不管 A 是不是人物对象,让 B 里所有人物对象调用 A 的 init 函数。
int move_or_destruct( object dest ); 如果一个对象的环境对象被摧毁了, 就调用此函数, 并用于它的内容对象. dest 是正 要被摧毁的对象. 如果 dest 不存在, 则 dest 为 0. 如果 dest 中的对象没有把自己移 出被摧毁的对象, 则也会被一起摧毁. int clean_up( int inherited ); 系统每过一段时间,对非激活对象调用 clean_up() 函数. inherited 指出此对象是否有别 的对象继承. 如果返回 0,此对象将永远不再调用 clean_up().如果返回 1, 则继续判断调 用。通常一个对象在 clean_up() 中所作的事, 是摧毁自己以节省内存. void reset( void ); 系统在每次 reset 之后(时间由系统设定) ,所有游戏中现存的对象都会调用 reset()函数. reset() 常用于检查宝物或怪物是否还在某个房间, 以判断要不要重新产生一份.
8、 一些概念的说明
用户对象 :用户连接的对象就是用户对象,系统会调用用户对象的一些 用户对象(interactive()) ) : 方法来实现用户的输入输出和消息处理等。如果用户对象断开连接,用户对象就变成为 普通对象。但是系统会记录曾经是用户对象的对象,通过 userp()函数可以判断一个对象 是否曾经是用户对象。
人物对象 对象(living()): 人物对象是曾经呼叫过 enable_commands()的对象, 当然用户对象也 人物对象 : 是人物对象。 环境对象(environment()):环境对象是通过 move_object()函数激活的对象。
环境对象 : 激活对象 对象: 激活对象:在系统规定的(clear_up)时间内,曾经调用过 init()函数的对象。
复制对象 对象(clonep()): 复制对象 :系统在第一次载入某个对象后会建立一个初始对象并存于系统内存 中,以后每次重新建立对象包括 new()、clone_object()、call_other()等都会通过拷贝这个 初始对象来建立新的对象,每个拷贝出来的对象,系统都会指定一个递增的数字标识此 对象。这里需要说明的是,new()等函数建立对象时,如果初始对象不存在的话,系统 会自动载入并初始化此对象, 并把此对象定为初始对象, 然后再拷贝一个对象作为 new() 等函数的返回值。 系统建立初始对象的时候会由父到子的调用对象所有的 create()函数, 而拷贝出来的对象只调用对象本身的 create()函数。游戏中存在的对象都是复制出来的 对象。初始对象只有系统才能调用。
对象 uid 值:这个值只能通过主控对象中的 creator_file()函数赋值或者 export_uid()函数 传递。指明当前对象的使用者名称。 对象 euid 值:对象有效的使用者名称,可以通过 seteuid 和 geteuid 函数设置和读取。 对象的继承 构造及初始化: 继承、 对象的继承、构造及初始化:Mudos 启动以后,可以自动或者通过函数调用来创建和复 制各种对象,Mudos 系统的作用就是用来管理这些对象。Mudos 在生成对象的时候有两 种方式,一种是载入对象,一种是复制已经载入的对象。
首先,Mudos 是通过对象的文 件名来寻找和定位对象的,当需要载入对象的时候,先检查对象是否已经载入,如果没 有载入会检查对象是否有需要继承别的对象,如果需要就先载入需要继承的对象,然后 再载入并生成需要载入的对象。对象的继承实际上是子对象先浅拷贝一份父对象(但不 初始化) ,然后再构造自己。任何一个对象被载入内存或被复制出来都会执行 create 函 数来初始化自己。
9、 EFUN 函数说明
This_object(): 这个函数返回由当前文件所建立或拷贝的对象。 如果这个文件继承了另一 个文件,那么另一个文件中的这个函数也返回由这个文件所建立或拷贝的对象。
previous_object(n):返回调用此函数的第前 n 个对象,previous_object(0)= previous_object(),表示返回调用此函数的对象。
This_interactive():返回调用此函数的用户对象。
This_player():返回调用此函数的人物对象。
This_player(1)返回 This_interactive()
Load_object():如果已经载入则返回已经载入的对象,否则载入对象并返回它。
New():如果对象没载入则载入对象,并复制一个对象返回,否则复制已经载入的对象 返回。这里需要指出的是复制对象的过程并不会载入被复制对象所要继承的对象。
Clone_object():和 new 一样,目前不知道有什么区别。
replace_program():这个函数是用当前对象的继承对象来替换当前对象,但是保留当前 对象的全局变量。就是说如果被替换以后,当前对象就只有继承对象的方法,而当前对 象所定义的方法都不存在了。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值