Efun基本分类
说明:这个帖子只是粗略的将MudOS的常用Efun按照它的用途做了一个分类,并不全面,也不见得合理。 正好Find要做新的MudOS,我帮不上什么忙,就算抛砖引玉吧。用/**/注释的表示目前MudOS并没有实现的功能。
一. 对象管理
1.每个Lpc中的.c都可以通过efun实例化为一个对象,MudOS提供返回对象本身,根据文件名查找,载入对象,销毁对 象,查询游戏中各种对象的接口。
new(),load_object(),find_object(),destruct(),this_object(),objects(),master(),clone_object(),
2.所有对象需要有唯一的标志符,并且以某种数据结构,比如hash的表的方式保存起来。
3.对象之间存在相互"包含"的关系,每个 对象都要有一个指向其环境的指针和一个指向其内容物的指针。更多内容物的组织方式可以是树型的,也可以是链表形式的。MudOS应该提供改变这种关系和查 询这种关系的相关接口。
move_object(),environment(),all_inventory(),deep_inventory(),first_inventory(),present(),
4.对象之间可以互相调用其public方法,/*可以引用其public变量*/。
5.MudOS提供自动的内存管理功能,长期不 使用的对象会被自动回收或者交换到硬盘。clean_up()
6. MudOS提供自动的定时运行的程序接口,类似timer,以供对象实现某些仿真需求。Heart_beat(),set_heart_beat(), query_heart_beat(),heart_beats(),reset()。这样的接口应该有数个,各自的时间间隔不同,从/*毫秒*/量级到 15分钟左右,满足不同的要求。
7./*对象的数据可以被序列化而进行网络传输,存储等操作,并且可以在Lpc的语法上指定该变量是否被序列 化,比如加上static。MudOS应当提供相应接口如serialize_object(),save_object(), restore_object()。*/
8.如果使用Java写新的MudOS,Lpc将难以支持多重继承,为了使用方便,MudOS应该能 够支持"阻隔"(shadow)。从而能够将对象ob的方法改到对象ob2的同名方法执行,如果ob2中不存在同名方法,再执行ob中的方法。新的Lpc 支持对变量名的直接访问以后,对变量名的访问也遵循这个原则,那么在一定程度上可以代替多重继承的功能。只是在安全上需要作更多的考虑。MudOS相应方 法:shadow(),query_shadowed(),query_shadowing()
9.对象之间能够互相通信,MudOS提供如下 方法:tell_object(),tell_room(),say()。
10.需要一套uid和euid的机制来在游戏中实现权限的配置。相 关方法:export_uid,seteuid(),getuid(),geteuid(),eteuid(),getuid(),geteuid()
11. 可以查询对象拥有的方法和变量,如function_exists(),variales()
二.互动物件管理
1. MudOS应该提供一套方便的切换和查询玩家控制权的接口。如enable_command(),disable_command(),exec(), userp(),interactive(),this_player(),this_interactive()
2.MudOS内部区分管理 者物件,相应接口:
enable_wizard(),disable_wizard(),wizardp()
3.向玩家物件发送网络 信息:wirte(),shout(),message(),receive()
4.可以切换和查询不同的输入响应模式,如 input_to(),in_input(),get_char(),in_getchar()
5.查询连线玩家的网络信息, 如:query_ip_name(),query_ip_number(),query_ip_port(),query_host_name(),.resolve()
三.调用管理函数
1.支持延迟执行函数的功能,相应方法:
call_out(),remove_call_out(),call_out_info(),find_call_out()
2.可以调用其他对象实例中的方法,call_other()
3.变量和方法都可以加上不同的修饰词以区分不同的引用权限,如 private,nomask,public,protected,
4.MudOS应该有能力找出函数运行的错 误,catch(),throw()
5.可以查询调用某方法的对象实例,如 all_previous_object(),previous_object(),或者查询目前方法是如何被调用的,origin()
6. 支持物件内定义局部的命令动词。相关方法:add_action(),remove_action()/*add_action必须可以指定添加局部命令 动词的对象,remove_action也是如此,即add_action(object dest,"func_name","verb");*/。
7.LPC支持函数指针,能够将一个函数以指针的形式引用,执行。相关方法:
bind(),evaluate(),function_owner()
四.数据类型相关函数
1.字符串处理函数,如
lower_case(),upper_case(),explode(),implode(),strsrch(),strcmp(),sprintf(),sscanf(),strlen(),crypt(),capitalize(),replace_string(),…
2.数组处理函数,包括分配内存,过滤数组,数组排序,查找数组元素等如
allocate(),filter_array(),map_array(),sort_array(),member_array()
3.映射(mapping)处理函数,包括分配内存,过滤映射,提取关键字数组,提取值数组,删除映射的一个元素,查找映射中的路径如
allocate_mapping(),filter_mapping(),keys(),values(),map_delete(),match_mapping()
4.浮点类型和整数类型相关函数,如
sin(),cos(),pow(),to_int(),to_float(),random() 等
五.系统相关函数
系统相关函数要求能够查询和控制系统的各种运行状态和参数。
1.时间,得到各种格式的当前时间 和游戏运行时间等
time(),ctime(),localtime(),uptime()
2.内存管理,能够查询整个游戏或者某个物 件的内存占用情况,也能够手工的清除残留的对象,如 memory_info(),memory_summary(),reclaim_objects(),swap()
3.关闭游 戏,shutdown()
4.查询游戏启动的一些设置,get_config()
5.其他设置。
六.I/O相关函 数
包括文件读写,网络编程
1.文件相关函数,包括复制,移动,删除,建立目录,读写文件,获取目录信息,获取文件信息等等。
cp(),mv(),rm(),mkdir(),read_file(),write_file(),stat(),file_size(),get_dir(),rm
2.网络套接字相关函数
socket的一套东西,包括server和client
说明:这个帖子只是粗略的将MudOS的常用Efun按照它的用途做了一个分类,并不全面,也不见得合理。 正好Find要做新的MudOS,我帮不上什么忙,就算抛砖引玉吧。用/**/注释的表示目前MudOS并没有实现的功能。
一. 对象管理
1.每个Lpc中的.c都可以通过efun实例化为一个对象,MudOS提供返回对象本身,根据文件名查找,载入对象,销毁对 象,查询游戏中各种对象的接口。
new(),load_object(),find_object(),destruct(),this_object(),objects(),master(),clone_object(),
2.所有对象需要有唯一的标志符,并且以某种数据结构,比如hash的表的方式保存起来。
3.对象之间存在相互"包含"的关系,每个 对象都要有一个指向其环境的指针和一个指向其内容物的指针。更多内容物的组织方式可以是树型的,也可以是链表形式的。MudOS应该提供改变这种关系和查 询这种关系的相关接口。
move_object(),environment(),all_inventory(),deep_inventory(),first_inventory(),present(),
4.对象之间可以互相调用其public方法,/*可以引用其public变量*/。
5.MudOS提供自动的内存管理功能,长期不 使用的对象会被自动回收或者交换到硬盘。clean_up()
6. MudOS提供自动的定时运行的程序接口,类似timer,以供对象实现某些仿真需求。Heart_beat(),set_heart_beat(), query_heart_beat(),heart_beats(),reset()。这样的接口应该有数个,各自的时间间隔不同,从/*毫秒*/量级到 15分钟左右,满足不同的要求。
7./*对象的数据可以被序列化而进行网络传输,存储等操作,并且可以在Lpc的语法上指定该变量是否被序列 化,比如加上static。MudOS应当提供相应接口如serialize_object(),save_object(), restore_object()。*/
8.如果使用Java写新的MudOS,Lpc将难以支持多重继承,为了使用方便,MudOS应该能 够支持"阻隔"(shadow)。从而能够将对象ob的方法改到对象ob2的同名方法执行,如果ob2中不存在同名方法,再执行ob中的方法。新的Lpc 支持对变量名的直接访问以后,对变量名的访问也遵循这个原则,那么在一定程度上可以代替多重继承的功能。只是在安全上需要作更多的考虑。MudOS相应方 法:shadow(),query_shadowed(),query_shadowing()
9.对象之间能够互相通信,MudOS提供如下 方法:tell_object(),tell_room(),say()。
10.需要一套uid和euid的机制来在游戏中实现权限的配置。相 关方法:export_uid,seteuid(),getuid(),geteuid(),eteuid(),getuid(),geteuid()
11. 可以查询对象拥有的方法和变量,如function_exists(),variales()
二.互动物件管理
1. MudOS应该提供一套方便的切换和查询玩家控制权的接口。如enable_command(),disable_command(),exec(), userp(),interactive(),this_player(),this_interactive()
2.MudOS内部区分管理 者物件,相应接口:
enable_wizard(),disable_wizard(),wizardp()
3.向玩家物件发送网络 信息:wirte(),shout(),message(),receive()
4.可以切换和查询不同的输入响应模式,如 input_to(),in_input(),get_char(),in_getchar()
5.查询连线玩家的网络信息, 如:query_ip_name(),query_ip_number(),query_ip_port(),query_host_name(),.resolve()
三.调用管理函数
1.支持延迟执行函数的功能,相应方法:
call_out(),remove_call_out(),call_out_info(),find_call_out()
2.可以调用其他对象实例中的方法,call_other()
3.变量和方法都可以加上不同的修饰词以区分不同的引用权限,如 private,nomask,public,protected,
4.MudOS应该有能力找出函数运行的错 误,catch(),throw()
5.可以查询调用某方法的对象实例,如 all_previous_object(),previous_object(),或者查询目前方法是如何被调用的,origin()
6. 支持物件内定义局部的命令动词。相关方法:add_action(),remove_action()/*add_action必须可以指定添加局部命令 动词的对象,remove_action也是如此,即add_action(object dest,"func_name","verb");*/。
7.LPC支持函数指针,能够将一个函数以指针的形式引用,执行。相关方法:
bind(),evaluate(),function_owner()
四.数据类型相关函数
1.字符串处理函数,如
lower_case(),upper_case(),explode(),implode(),strsrch(),strcmp(),sprintf(),sscanf(),strlen(),crypt(),capitalize(),replace_string(),…
2.数组处理函数,包括分配内存,过滤数组,数组排序,查找数组元素等如
allocate(),filter_array(),map_array(),sort_array(),member_array()
3.映射(mapping)处理函数,包括分配内存,过滤映射,提取关键字数组,提取值数组,删除映射的一个元素,查找映射中的路径如
allocate_mapping(),filter_mapping(),keys(),values(),map_delete(),match_mapping()
4.浮点类型和整数类型相关函数,如
sin(),cos(),pow(),to_int(),to_float(),random() 等
五.系统相关函数
系统相关函数要求能够查询和控制系统的各种运行状态和参数。
1.时间,得到各种格式的当前时间 和游戏运行时间等
time(),ctime(),localtime(),uptime()
2.内存管理,能够查询整个游戏或者某个物 件的内存占用情况,也能够手工的清除残留的对象,如 memory_info(),memory_summary(),reclaim_objects(),swap()
3.关闭游 戏,shutdown()
4.查询游戏启动的一些设置,get_config()
5.其他设置。
六.I/O相关函 数
包括文件读写,网络编程
1.文件相关函数,包括复制,移动,删除,建立目录,读写文件,获取目录信息,获取文件信息等等。
cp(),mv(),rm(),mkdir(),read_file(),write_file(),stat(),file_size(),get_dir(),rm
2.网络套接字相关函数
socket的一套东西,包括server和client