fluffos Logo
Fluffos
    • 项目资源
    • 官网网址
    • 下载
    • 工具
    • 下载PDF(开发中)
    • 下载Html压缩包(开发中)
    • 编辑
    • 编辑当前页面

      编辑当前页面内容
    • 创建新页面

      添加创建当前页面内容
    • 更新
    • 创建时间:2019-01-04 13:09:57
    • 创建者:final
    • 最后更新:2020-02-13 14:02:48
    • 最后更新者:final
    • 项目列表(逐步完善中)
    • Evennia 中文文档
    • Fluffos 中文文档
    • Ldmud 中文文档
    • Muddery 中文文档
    • Mudos文档(官方停止更新-同Fluffos)
    • (管理者项目开发中)
    • 0 创建编辑文档列表
    • 个人设置
    • 锁定屏幕
    • 登出

Fluffos 中文文档

  1. 首页
  2. API文档
  3. 互动函数(interactive)
互动函数(interactive)

interactive


add_action

把区域函式 (local function) 加进玩家可用的命令动词 (command verb).
语法:
void add_action( string | function fun, string | string*cmd, int flag );
用法:
当玩家键入与 <cmd>  符合的命令时, 呼叫区域函数(local function) fun. 玩家命令中所打的参数 (argument),会以字串传入被呼叫到的函式. 如果命令错误, 则传回 0,没错则必须传回 1.

如果第二个参数是一个阵列, 则所有在阵列中的命令会呼叫第二个函式. 你可以用 query_verb() 找出呼叫函式的命令.

如果是错误的命令, 则会继续搜寻其他的命令, 直到找到相符的命令、参数或传回错误讯息给玩家.
通常 add_action() 只会被 init() 的程序呼叫. 有定义附加命令的物件必须是玩家可以接触到的: 玩家物件本身、被玩家携带、玩家所处的房间、或是与玩家处於同一个房间的物件.

如果参数 <flag> 是 1  , 只要参数前面的字元 (leadingcharacters) 符合动作命令 <cmd>  即可, 而整个动作命令的字元 (entire verb) 会由 query_verb()  传回. 如果参数是 2 , 结果同前, 但是 query_verb()  只会传回 <cmd>後面的字元 (characters following <cmd>).
参考:

query_verb(),remove_action(),init()

翻译:Spock @ FF 96.Oct.11. (printed 3/16/95)

call_stack

返回当前函数被呼叫的信息.
说明:
如果 arg = 0, 会返回呼叫堆栈中的名称的阵列,其中第一个是最近的呼叫(如当前正在运行的程序).如果 arg = 1, 会返回程式正在其中执行的物件列表.如果 arg = 2, 会返回这些函数的名称.如果 arg = 3, 会返回那个框架中 origin() 函数的返回值.See also:
previous_object, origin

catch_tell

与用户交互的接口
说明:

当定义#INTERACTIVE_CATCH_TELL后才可使用


由于 say(),  shout(),  tell_object() 是直接将消息发送给object, catch_tell的功能是延迟发送,
调用catch_tell后消息被缓存,再发送之前你可以进行编辑修改.
适用于移动端.

chinese_number

将整数转化为中文大写。
说明:

应该是lib函数

将参数 n 转化为中文大写。
例如:
chinese_number(48612180)
返回:
四千八百六十一万两千一百八十

command

如同该物件般, 执行一个命令.
语法:
int command( string str, object ob );
用法:
让物件 ob 执行 str  的命令. 如果不指定 ob , 则视同为this_object().  
请注意, 第二个参数可以使用的□围是由该 MUD 的系统管理者所决定, 所以您经常无法使用您所指定的物件动作. 如果该物件无法执行命令, 函式则会传回0值. 如果可以执行, 则会传回一个数字. 此数字是LPC执行的该命令的「执行花费时间」 (evaluation cost). 数字越大则此命令就越费时, 但是这个数字并不够精确, 其所使用的量度 (scale) 是主观 (subjective) 而不可靠(unreliable) 的.
参考:

add_action(),enable_commands()

翻译:Spock @ FF 97.Jan.27. (printed 3/16/95)

commands

传回一些关於此使用者可以使用的命令资讯
语法:
mixed *commands( void );
用法:
传回一个包含四项资料的阵列 (array), 说明 this_object()可以使用的动作 (action). 第一项资料是命令名称 ( 即add_action()的命令)
而第二项是命令的旗标 (flags)(即 add_action() 的第三个参数, 预设值为 0  );  第三项资料是定义此动作的物件. 第四项资料是被此动作呼叫的函式(function) (此项资料如果是个函式指标 [function pointer]则传回 "<function>").
参考:

add_action(),enable_commands(),disable_commands()

翻译:Spock @ FF 97.Jan.27. (printed 3/16/95)

copy

可以递归地复制一个数值
语法:
mixed copy(mixed);
说明:
返回一个和传入值完全一样的传入值的复制品。
(只复制传址类型的参数,例如:
映射、阵列等)例如:
mapping a, b = ({ 1 });a = b;a[0] = 2;printf("%O %O\n", a, b);结果是:
 ({ 2 }) ({ 2 })。
mapping a, b = ({ 1 });a = copy(b);a[0] = 2;printf("%O %O\n", a, b);结果是:
 ({ 2 }) ({ 1 })。

disable_commands

设定一个活著的 (living) 物件为「非活著」
语法:
int disable_commands( void );
用法:
让一个活著的物件变成「非活著」(non-living). 所谓「非活著」, 就是让物件变成以下的状态:

add_actions 失效.livingp 函式传回「伪」值 (false, 0).如果此物件是「可互动的」 (interactive), 就让这个使用者无法输入命令 (input_to 函式例外).

disable_commands 永远传回 0 值.
参考:

enable_commands()

翻译:Spock @ FF 97.Feb.04. (printed 3/16/95)

disable_wizard

取消一个物件的巫师特权.
语法:
void disable_wizard( void );
用法:
这个函式与 enable_wizard() 函式的功用相反. 把目前物件的巫师特权取消掉.
参考:

enable_wizard(),wizardp()

翻译:Spock @ FF 97.Feb.04. (printed 3/16/95)

ed

编辑一个档案.
语法:
void ed( string file, string exit_fn, int restricted );
void ed( string file, string write_fn, string exit_fn,int restricted );
用法:
这个函式只有在定义了 __OLD_ED__ 之後有效.

这个函式很有趣. 它会启动一个文书编辑程式来编辑一个指定的档案. 这个程式与 UNIX 的 ed 程式几乎相容. 当你进入这个程式後, 可以输入 h 了解用法.

write_fn  函式可以让 mudlib 控制档案的写入权限和档案修改纪录. 当编辑程式写入一个档案时, MUD 驱动程式 (driver)会呼叫 write_fn 两次. 第一次呼叫时, 是在写入档案之前,而 flag 旗标为 0. 如果被呼叫的函式传回「真」值 (true,即为非零值) , 编辑程式就会继续写入档案. 第二次呼叫时,是在写入档案完成之後, 此时的 flag 旗标为非零值. 被呼叫的函式必须符合以下的格式:

int write_fn(string fname, int flag)

离开编辑程式时, MUD 驱动程式 (driver) 会呼叫 exit_fn函式. 这个被呼叫的函式可以让 mudlib 清除. 这个函式要符合以下的格式:

void exit_fn()

而可以省略的 restricted 旗标则限制编辑程式的功能.像是: 插入一个档案, 以不同的名字储存档案. 这些功能在 restricted 旗标为「真」值时, 就无法使用.
参考:

regexp(),valid_read(),valid_write(),get_save_file_name()

翻译:Spock @ FF 97.Feb.7. (printed 3/16/95)

enable_commands

允许物件使用玩家 (player) 的命令.
语法:
void enable_commands( void );
用法:
enable_commands() 把 this_object()  标记为活著 (living)的物件, 并允许它使用 add_action() 所加入的命令 (要使用command() 函式) . 呼叫 enable_commands() 时, MUD  驱动程式 (driver) 会寻找内部的 catch_tell() 函式. 如果找到了此函式, 每一次有讯息传给此一个物件时 (例如 say() ), 驱动程式就会呼叫 catch_tell() 一次.

已知的问题:请勿在 create() 函式以外的地方呼叫 enable_commands()否则会出现奇怪的问题.
参考:

this_object(),living(),add_action(),command(),catch_tell(),say(),create()

翻译:Spock @ FF 97.Feb.12. (printed 3/16/95)

exec

将一个可互动的 (interactive) 玩家 (player)物件切换连结 (connection) 到另外一个物件上.
语法:
int exec( object to, object from );
用法:
这个函式允许指定的物件把可互动的连结 (link) 迁移到另外一个物件上. 也就是说, 成功地执行 exec( to, from )之後, interactive( to ) 会传回 1, 而 interactive( from )会传回 0. 而控制 from 的玩家会转移控制权到 to 的身上.

请注意这个函式的权力非常大, 不当地使用会危及 MUD  的系统安全. 正确地限制使用此函式的方法是另外写一个同名的模拟超越函式 (simulated emulated function, simul_efun), 并使用 valid_override(4)  来限制此一模拟超越函式的使用. (意即 efun::exec() )

exec() 函式在成功地转换之後传回 1, 转换失败则传回 0.
参考:

interactive(),valid_override()

翻译:Spock @ FF 97.Feb.12. (printed 3/16/95)

filter

选择一组确定的元素
说明:
第一种格式中的 (ob, fun) 语法等同于 (: call_other, ob, fun :),和第二种格式中的 函数 f 传递方式相同。
此函数会返回一个新的结构,这个新的结构只包含 x 中的成员经过函数 f 过滤返回值非零的元素组。
此函数一般用于过滤 array 和 mapping 类型。
当 x 是 mapping 类型,它的 key 和 value 都会传递给过滤函数。
extra 和所有以后的参数都会跟在 x 的成员之后传递给过滤函数。
例如:
filter(arr, fun, 2, 3) 将会首先呼叫过滤函数 fun(arr[0],2,3),然后 fun(arr[1],2,3) 一直到过滤完 arr 中的每一个成员。

find_player

用名字寻找一个玩家
语法:
object find_player( string str );
用法:
与 find_living()  相似, 但是只寻找可互动的 (interactive)或是曾经为可互动的物件.
参考:

lower_case(),find_living(),livings(),users(),set_living_name()

翻译:Spock @ FF 97.Feb.12. (printed 3/16/95)

function_owner

传回函数的宿主物件

需要定义 #PACKAGE_CONTRIB

说明:
传回函数指标 f 的宿主物件此函数需要编译 MudOS 时在配置文件里定义了 PACKAGE_CONTRIB。

get_char

让之後输入的字元送往一个指定的函数.
语法:
varargs void get_char( string | function fun,int flag, ... );
用法:
让使用者之後输入的字元送往函式指标 fun, 作为 fun  的参数. 驱动程式 (driver) 不会分析 (parse)  输入的字元.

请注意 get_char 是「非阻隔性」 (non-blocking) 的, 意即呼叫 get_char 的物件不会暂停下来等待使用者的输入动作. 呼叫 get_char 的物件会继续执行随後任何的程式叙述.在收到输入的字元之前, 指定的函式 fun  不会被呼叫.

如果同一个物件呼叫 get_char() 超过一次以上, 就只有第一次的呼叫有效.

如果可以选择的参数 flag 指定为非零值 (non-zero),  则玩家输入的字元就不会回传 (echo) , 物件被窃听时也不会回传 (用在输入密码时很有用).

呼叫函式指标 fun  时, 使用者输入的字元会被当作是函式的第一个参数 (变数型态为字串) . 在 flag 之後指定的参数会当作函式 fun  的其他参数.问题:get_char 在 MudOS 0.9 及更早的版本有一个非常明显的问题. 在较差之远端终端机协定 (telnet negotiation) 的许多作业系统上 (按: 所有市场上早期的主流品牌之工作站), get_char  会使画面输出的结果变得非常奇怪. 除非这些问题得到解决, 在一般的 mudlib 程式码中, 还是建议别用get_char  这个函式.  (目前只知道 get_char 对使用 NeXT工作站连线的使用者不会有此问题. )
参考:

call_other(),call_out(),input_to()

翻译:Spock @ FF 97.Feb.14. (printed 3/16/95)

heart_beat_info

返回当前有心跳的物件阵列

需要定义 #COMPAT_32

语法:
object array heart_beat_info();
*object heart_beat_info();
用法:
返回当前有心跳的所有物件,这个函数只有在定义了 COMPAT_32 才可用。
参考:

heart_beats

翻译:发现号(Find@tx)

heart_beats

需要定义 #PACKAGE_CONTRIB

返回当前有心跳的物件阵列
语法:
object array heart_beats();
*object heart_beats();
用法:
返回当前有心跳的所有物件,这个函数只有再定义了 PACKAGE_CONTRIB 才可用。
参考:

heart_beat,set_heart_beat,query_heart_beat

翻译:发现号(Find@tx)

in_edit

判断一个玩家是否在文书编辑程式中.
语法:
string in_edit( object default);
用法:
如果一个指定的物件正在文书编辑工作中, 就传回被编辑档案名称. 如果不是, 就传回 0.
参考:

ed(),in_input()

翻译:Spock @ FF 97.Feb.14. (printed 3/16/95)

in_input

判断一个玩家是否正在 input_to 函式的输入模式中
语法:
int in_input( object default);
用法:
如果物件正在 input_to 或是 get_char 函式的输入模式中,则传回 1.
参考:

get_char(),input_to()

翻译:Spock @ FF 97.Feb.14. (printed 3/16/95)

input_to

让下一行输入的内容送往一个指定的函式
语法:
varargs void input_to( string | function fun,int flag, ... );
用法:
让使用者下一行输入的内容作为函式指标 fun 的参数.输入的内容不会被驱动程式 (driver) 分析 (parse).

请注意, input_to  是「非阻隔性」的, 意即呼叫 input_to的物件不会为此暂停下来等待输入. 物件会继续执行input_to  之後的任何程式叙述. 在使用者尚未输入以前,不会呼叫函式指标 fun.

如果同一个物件呼叫 input_to() 超过一次以上, 只有第一次呼叫有效.

如果参数 flag 为非零值, 则玩家输入的内容不会回应 (echo)在画面上, 也不会出现在监听 (snoop)  的画面上 (在输入密码时很有用).

使用者输入的一行内容会被当成呼叫函式指标 fun  时的第一个参数 (型态为字串).  在 flag 之後的参数会当成 fun  的第二个、第三个......等等的参数.
参考:

call_other(),call_out(),get_char()

翻译:Spock @ FF 97.Feb.14. (printed 3/16/95)

interactive

判断一个指定的物件是否为「可互动的」(interactive)
语法:
int interactive( object ob );
用法:
如果 ob 是一个可互动的玩家, 就传回非零值. 如果玩家断线 (link dead), 则传回 0.
参考:

query_ip_number(),query_ip_name(),enable_commands()

翻译:Spock @ FF 97.Feb.14. (printed 3/16/95)

logon

初始化用户连接,conncet 函数返回的用户对象会直接调用次函数,用以对用户对象的初始化处理。
说明:
当一个 connect() 成功后调用 master定义的logon()
mudos自动调用master.c中的connect()函数
——然后connect()函数调用 LOGIN_OB这个物件,[而LOGIN_OB是个物件常量,在global.h中定义LOGIN_OB 的值是"/clone/user/login.c",也就是说connect()调用了login.c这个物件]
——在login.c中有一些特殊函数,如果按照用户正确登陆的流程,mudos自动调用login.c中logon()这个特殊函数。

memory_summary

传回内存使用情况的概要

需要定义#PACKAGE_CONTRIB

说明:
memory_summary() 返回一个以下格式的阵列:
PRE(([ 程序名 :
 ([变量名 :
 占用的内存,...])...]))变量占用的内存是指存储数值所需要的总内存除以特定变量的数目的到的,精确的统计一个变量所占用的内存是不可能的。
此函数需要编译 MudOS 时在配置文件里定义了 PACKAGE_CONTRIB。

message

送讯息给活著的 (living) 物件.
语法:
void message( mixed class, string message, mixed target,mixed exclude );
用法:
message() 呼叫目标名单中所有物件 (除了 exclude 名单以外)的 receive_message( 混合 class, 字串 message ) 函式.这样基本上只是告诉此物件一个讯息.

class 是此段讯息的种类, 用於处理讯息的介面之类的地方.例如 combat, shout, emergency 等等.

message 是欲送出的讯息字串.

target 是欲送达讯息的物件名单, 可以是一个物件或物件指标(pointer). 如果目标是一个非活著的 (non-living) 的物件,在此物件内的所有物件都会收到讯息.

exclude 是不应收到此讯息的物件名单, 可以是一个物件或物件阵列 (array).
参考:

say(),write(),shout(),tell_object(),tell_room()

翻译:Spock @ FF 97.Apr.15. (printed 3/16/95)

net_dead

当用户对象断线时, 系统调用此函数。用来处理用户断线后的事情。
说明:
当用户对象断线时, 系统调用此函数。用来处理用户断线后的事情。

notify_fail

传回一段错误讯息.
语法:
int notify_fail( string | function str );
用法:
以 str  代替系统在命令无效时传回的错误讯息 :「什麽 ?」当 add_action() 设定的动作传回 0  时, 就会显示此段 str的讯息. 使用 notify_fail()  显示错误讯息是一个比较好的方法, 因为此函式允许其他的物件能对同一个命令作出反应.别用 write()  来显示一段错误讯息, 因为这样做需要传回 1.( 除非你想在看到「什麽 ?」之後再看到 write() 的结果 )如果你传回 1, 其他的物件就没有机会对使用者的命令作出反应.

如果参数用的是一个函式指标, 则会呼叫指定的函式. 如果此函式传回一个字串, 此字串就会当作错误讯息. 只要在此函式中正确地设定 this_player(), 就可以使用 write().

如果 notify_fail()  被呼叫一次以上, 只有最後一次的呼叫有效.

这个函式主要是传回比「什麽 ?」要来得清楚的错误讯息.
参考:

notify_fail() 永远传回0 .

翻译:Spock @ FF 97.Apr.24. (printed 3/16/95)

printf

转换成指定格式的输出结果.
语法:
void printf( string format, ... );
string sprintf( string format, ... );
无传回值 printf( 字串 format, ... );
字串 sprintf( 字串 format, ... );
用法:
以下为 LPC (s)printf() 的格式用法, Lynscar(Sean A Reith) 加入了一些扩充用法.

目前的版本支援以下的修改格式 (modifier):

" "    在正整数之前放入一个空格.

"+"    在正整数之前放入一个 +  号.

"-"    对齐栏位 (field)  的左边.请注意: 标准的 (s)printf()  预设是对齐右边,但是对主要以字串为基础的语言来说,这样非常奇怪.在此为了保留与 C 的相容性而保留此一特性.

"|"    对齐栏位的中心.

"="    如果字串长度比栏位大小还长, 使用纵列模式(column mode).  在此只对字串有效, 其他的型态一律无效. 纵列模式中, 字串中的字会自动换行 (wrap).

"#"    表格模式. 在栏位之内, 字串中的每一个字会换一行 (即每个字後面加上 \n). 只对字串有效.

n    以整数指定栏位大小. 用 *  代替整数则使用参数指定栏位大小. 如果 n  是 0  , 则此栏除了资料以外就以空值 (zeros)  填满. 如果n 不是 0 ,  此栏除了资料以外将放入空白字元 (space)  或是另外指定的字元.

"."n    指定输出的精确度为 n. 普通的字串在此之後则被截断 (如果精确度 n  大於栏位长度, 则栏位长度变为精确度 n ). 表格则使用精确度指定纵列的总数 (如果不指定精确度, 则表格会自动计算最适合的输出结果).  精确度对於其他的资料型态无效

":"n    n 指定 fs 和精确度, 如果 n  是 0, 则原来用以填满栏位的空格就代以空值 (zeros)

"@"    参数为一个阵列. 其他除了 @  以外, 对应的格式资料亦将用於阵列中的每一个元素.

"'X'"    单引号 (')  中的字元用以填满整个栏位中,资料以外的空间.  (预设值是空白字元) (如果同时在栏位大小之前指定一个空值, 又指定 'X'  字串填满栏位, 则以後者为准)注意: 如果欲填满的字串中要使用单引号 (')或是双引号 ("), 您必须使用 \' 或 \" 以避开编译器的检查.

以下是指定型态的格式:

%    此处不指定任何参数, 而以 %  输出. 忽略所有的修改格式 (modifier).

O    参数为 LPC 资料型态.

s    参数为字串.

d, i    参数为整数, 并以十进位印出.

c    参数为整数, 并以字元印出.

o    参数为整数, 并以八进位印出.

x    参数为整数, 并以十六进位印出.

X    参数为整数, 并以十六进位印出 (A 到 F 以大写印出).

f    浮点数.

传回值:sprintf() 传回指定格式的字串.作者:Sean A. Reith (Lynscar)
参考:

sscanf()

翻译:Spock @ FF 97.Jul.23. (printed 3/16/95)

process_input

用户输入信息后调用此函数,字符串处理后再传递给本用户对象,用来处理用户输入信息
语法:
string process_input(string str);

query_host_name

传回使用的主机名称 (host name)
语法:
string query_host_name( void );
用法:
query_host_name() 传回使用的主机名称.传回值:如果询问主机成功, 则传回一个字串.

如果失败, 则传回一个空字串.
参考:

resolve(),socket_address(),query_ip_name(),query_ip_number()

翻译:Spock @ FF 97.Apr.30. (printed 3/16/95)

query_idle

询问一个互动的 (interactive) 玩家已经发呆 (idle) 几秒.
语法:
int query_idle( object ob );
用法:
返回一个互动的 (interactive) 玩家物件已经发呆 (idle) 几秒.
参考:

in_edit(),in_input()

翻译:Spock @ FF 97.May.1. (printed 3/16/95)

query_ip_name

传回指定玩家的 ip 名称.
语法:
string query_ip_name( object ob );
用法:
传回玩家 ob 的 IP 位址. 一个叫做 addr_server 的非同步程序会找出这些名称. 如果找不到 ip 名称, 就会传回 ip 号码.
参考:

query_ip_number(),query_host_name(),resolve(),socket_address()

翻译:Spock @ FF 97.May.1. (printed 3/16/95)

query_ip_number

传回玩家物件的 ip 号码.
语法:
string query_ip_number( object ob );
用法:
传回玩家 ob 的 ip 号码 (aaa.bbb.ccc.ddd 的格式).
参考:

query_ip_name(),query_host_name(),resolve(),socket_address()

翻译:Spock @ FF 97.May.1. (printed 3/16/95)

query_ip_port

返回指定玩家物件的连接端口

需要定义 #PACKAGE_CONTRIB

语法:
int query_ip_port(object | void);
用法:
返回参数中指定的玩家物件所连接的 MUD 本地端口,如果不指定参数,默认为 this_player(),如果参数指定的物件为非互动物件,则传回零。

对于开放多个端口接受玩家连接的游戏,在一些统计方面可能会用到此函数。

此函数需要编译 MudOS 时在配置文件里定义了 PACKAGE_CONTRIB。
参考:

query_ip_name,query_host_name,resolve,socket_address

翻译:发现号(Find@tx)

query_notify_fail

判定一个互动物件是否已设定了待处理的 notify_fail 信息

需要定义#PACKAGE_CONTRIB 且#NO_ADD_ACTION未被定义

语法:
mixed query_notify_fail(void);
用法:
这个函数判断是否 this_player() 的 notify_fail值已经被设定。这个值即可能是一个字符串,也可能是一个函数,取决于对 this_player() 最后一次呼叫notify_fail() 函数所设定的值。

此函数需要编译 MudOS 时在配置文件里定义了 PACKAGE_CONTRIB。同时 NO_ADD_ACTION 没有被定义。
参考:

add_action,notify_fail

翻译:发现号(Find@tx)

query_shadowed

查找阻隔物件。
说明:
如果没有参数,则会传回 this_object() 的阻隔物件,否则会传回物件 ob 的阻隔物件。
如果物件 ob (参数为 ob)或者 this_object() (无参数)没有设定过阻隔物件或者阻隔物件已被摧毁,则传回 0。
说明:
由于原 MudOS 的 shadow 部分有些不合理,使用不方便,而且存在安全隐患,因此这部分的程序重新写过,shadow 部分的函数的使用和原 MudOS 提供的函数有很大的不同,如要在其它 MudOS 支持的游戏中使用 shadow

query_snoop

传回谁正在监听指定的互动 (interactive) 物件.
语法:
object query_snoop( object ob );
用法:
如果互动物件 ob 正被另一个互动物件监听, 就传回监听者物件.如果没有监听者, 则传回 0.
参考:

snoop(),query_snooping()

翻译:Spock @ FF 97.May.1. (printed 3/16/95)

query_snooping

传回正在监听 (snoop) 的物件.
语法:
object query_snooping( object ob );
用法:
如果互动 (interactive)  物件 ob 正在监听另一个互动物件,则传回被监听的物件. 如果 ob 没有监听其他物件, 则传回 0.
参考:

snoop(),query_snoop()

翻译:Spock @ FF 97.May.1 (printed 3/16/95)

receive

对目前的物件显示一段讯息.
语法:
int receive( string message );
用法:
这个超越函式 (efun) 是作为 mud  驱动程式 (driver) 的add_message() 函式的介面. 这个函式设计的目的是对目前物件显示讯息. 如果目前的物件是「可互动的」则传回 1.不是则传回 0. receive() 应被 catch_tell(4) 或是receive_message(4) 呼叫.
参考:

catch_tell(),receive_message(),message()

翻译:Spock @ FF 97.May.24. (printed 3/16/95)

receive_message

返回给用户发送的消息
语法:
void receive_message(string newclass, string msg)
说明:
The  message()  efun calls this method in the player object.  The class

parameter is typically used to indicate the class  (say,  tell,  emote,

combat,  room  description, etc) of the message.  The receive_message()

apply together with the message() efun can provide a good mechanism for

interfacing with a "smart" client.

receive_snoop

不能定义 #NO_SNOOP

返回玩家输入的信息
说明:
If  RECEIVE_SNOOP  is defined in options.h, whenever a user is snooping
another user, all snoop text is sent to  receive_snoop()  in  his  user
object.  Inside of this function, you can do as you wish with the text.
A common activity would be to receive() it.

remove_action

从区域函式 (local function) 中解除一个命令动词 (command verb)
语法:
int remove_action( string fun, string cmd );
用法:
remove_action(3) 从一个物件的区域函式中解除一个命令动词.基本上, remove_action() 是相对於 add_action(3) 和add_verb(3) 的函式. 当您不需要一个动词时, 就可以用remove_action() 解除.传回值:remove_action() 的传回值:

1:解除动词成功.

0:解除失败.
参考:

add_action(),query_verb(),init()

翻译:Spock @ FF 97.May.27. (printed 3/16/95)

remove_interactive

将一个互动物件断线。

需要定义#PACKAGE_CONTRIB

语法:
int remove_interactive(object);
用法:
如果参数指定的物件是互动的,并且没有被摧毁,则将其断线(失去互动状态)。如果成功则返回 1,返回 0 表示失败。

此函数需要编译 MudOS 时在配置文件里定义了 PACKAGE_CONTRIB。
翻译:发现号(Find@tx)

repeat_string

以一定的次数重复一个字符串,
说明:
把字符串 str 重复 times 次连接返回一个新的字符串.例如:
repeat_string("ab",5)返回:
 "ababababab" 这个字符串.这个函数需要在 options 文件里定义了 PACKAGE_CONTRIB .

replaceable

判断是否有在当前的继承等级上定义的函数。
语法:
int replaceable(object ob);
int replaceable(object ob, string *fnames);
说明:
在第二种格式中,在物件 ob 中的所有函数,除了字符串阵列 fnames 中指定函数名的函数以外,如果有任何函数是在物件 ob 中明确定义的而不是继承来的,则返回 0。
如果没有这样的函数,则返回 1。
如果是第一种格式(也就是省略第二个参数),默认的第二个参数为 ({ "create" }),也就是默认不检查create() 函数。
这个函数的目的是能够自动判断是否可以 replace_program().注意:
由于默认是忽略 create() 不检查,只有当你不打算 clone 这个物件时,replaceable() 函数返回TRUE 才可以安全地呼叫 replace_program() 函数。

resolve

转换一个网际网路地址 (internat address) 为网域名称 (domain name), 反之亦然..
语法:
int resolve( string address, string callback_func );
用法:
resolve() 会转换像 "140.128.136.11" 形式的 address  成为"bbs.csmc.edu.tw" 这种形式的网域名字. 或是把"bbs.csmc.edu.tw" 这种形式的 address  转换成"140.128.136.11"  形式的地址. 转换成功後, 会呼叫目前物件的 callback_func. callback_func 的格式为:

void callback(string address, string resolved, int key);

无传回值 callback( 字串 address, 字串 resolved, 整数 key );

key 是 resolve() 的传回值. address 是转换後的地址或网域.如果转换失败, 则会传回 0.
参考:

query_host_name(),socket_address(),query_ip_name(),query_ip_number()

翻译:Spock @ FF 97.Jun.2. (printed 3/16/95)

say

把讯息送给所有在同一个环境中的使用者.
语法:
varargs void say( string str, object obj );
用法:
把讯息送给位於跟发出讯息者同一环境的物体, 以及所有在发出讯息者里面的物体. 发出讯息者只能是 this_player(), 或是this_player() == 0 的 this_object().

第二个参数可有可无. 如果指定了第二个参数 obj, 则讯息不会送给 obj. 如果 obj 不是一个物件, 而是一个物件阵列 (an arrayof objects) , 则讯息就不会送给阵列内的物件.
参考:

message(),write(),shout(),tell_object(),tell_room()

翻译:Spock @ FF 97.Jul.4. (printed 3/16/95)

set_this_player

void ( object who );
语法:
set_this_player() 使物件 who  变成新的 this_player().这个超越函式 (efun) 只有在定义 __NO_ADD_ACTION__ 及mudlib  解释和处理命令时使用了 __NO_ADD_ACTION__ 的情形下才有效.who 可以是零, 而 this_player() 即设定为零.
参考:

this_player()

翻译:Spock @ FF 97.Jul.21. (printed 3/16/95)

shout

对所有活著的 (living) 物件送出讯息.
语法:
void shout( string str );
无传回值 shout( 字串 str );
用法:
除了 this_player() 以外, 对所有活著的物件送出字串 str.
参考:

message(),write(),tell_object(),tell_room(),say()

翻译:Spock @ FF 97.Jul.23. (printed 3/16/95)

snoop

窥视一个可互动的使用者 (interactive user).
语法:
varargs object snoop( object snooper, object snoopee );
用法:
有两个参数时, 则 snooper 开始窥视 snoopee. 如果不指定第二个参数, 则停止 snooper 所有的窥视状态. 通常会使用simul_efun  作为控制 snoop() 的安全措施. 有两个参数时, snoop() 成功会传回 snoopee. 只有一个参数时, 则传回snooper. 传回 0  表示失败.
参考:

query_snoop(),query_snooping()

翻译:Spock @ FF 97.Jul.23. (printed 3/16/95)

socket_status

显示出每一个 LPC 套接口的状态
语法:
显示出每一个 LPC 套接口的状态
说明:
当无参数会返回每一个 LPC 套接口的状态。
当有参数,如果参数是一个有效的套接口文件描述符,回传回此套接口的状态,否则传回 0。
每一个套接口状态阵列格式为:
ret[0] = (int)套接口文件描述夫
ret[1] = (string) 套接口状态
ret[2] = (string) 套接口类型
ret[3] = (string) 本地地址
ret[4] = (string) 远端地址
ret[5] = (object) 套接口宿主物件.

store_variable

设定指定变量的值

需定义 #PACKAGE_CONTRIB

语法:
void store_variable(string, mixed);
说明:
设定第一个参数所指定的变量的值。
注意:
此变量必须已经定义,并且是在 this_object()中定义的。
此函数需要编译 MudOS 时在配置文件里定义了 PACKAGE_CONTRIB。

telnet_suboption

定义终端显示选项
说明:
This apply is called on the interactive object with the parameter given

by the SE telnet suboption, for mudlib defined processing.   For  exam‐

ple, this allows for future support of terminal types.

The  first  byte  of  the  buffer  is  typically  a type descriptor, ie

TELOPT_TTYPE. The next byte is a procession option, such as TELQUAL_IS.

Following  this  is the type dependent data.  In the case of a terminal

type call, the data will be routed through through the  terminal_type()

apply instead.
Possible suboptions:
#define TELQUAL_IS    0 // option is...

#define TELQUAL_SEND  1 // send options

#define TELQUAL_INFO  2 // ENVIRON: informational version of IS

#define TELQUAL_REPLY 3 // AUTHENTICATION: client version of IS

#define TELQUAL_NAME  4 // AUTHENTICATION: client version of IS

terminal_type

显示用户客户端类型
说明:
This  apply  is  called  on the nteractive object with term set to the terminal type for the user, as reported by telnet negotiation.  If  the user's  client  never responds (it's not telnet, for example) this will never be called.

this_interactive

传回呼叫此函式的玩家物件.
语法:
object this_interactive();
用法:
传回呼叫此函式的玩家物件. 基本上 this_interactive()会传回 this_player(), 而不像 this_player() 会受到enable_commands() 或 command()  的影响.
参考:

this_object(),this_player()

翻译:Spock @ FF 97.Jul.24. (printed 3/16/95)

语法:
object this_player( int flag );
用法:
传回呼叫此函式的玩家 (player) 物件. 请注意, 即使是从玩家物件内部使用 this_player(), 其传回值也可能与this_object() 不同. 如果以 this_player(1) 呼叫, 则传回呼叫此函式的可互动 (interactive)  物件.this_player(1)  的传回值在某些情形下与 this_player()不同. 例如: 系统管理者 (admin)  使用 command()  强制一名玩家做出一些动作时.
参考:

this_object()

翻译:Spock @ FF 97.Jul.25. (printed 3/16/95)

this_user

返回当前的互动物件
语法:
object this_user(int);
用法:
返回是当前函数被呼叫的玩家物件。特别要注意的是:即使从玩家物件内部呼叫函数,this_user() 的返回值也有可能和 this_object() 不同。如果 this_user被 this_user(1) 呼叫,那么返回值会是使函数被呼叫的那个玩家物件,this_user(1) 确有可能返回一个和this_user() 不同的物件(例如管理者呼叫玩家物件内的 command() 函数使其执行一个命令)。
参考:

this_object

翻译:发现号(Find@tx)

upper_case

返回将字符串转换为大写
语法:
string upper_case(string);
说明:
返回将参数字符串转换为大写后的字符串。
(原字符串没有改变)这个函数需要在 options 文件里定义了 PACKAGE_CONTRIB .

userp

判断指定的物件是否曾为可互动 (interactive).
语法:
int userp( object );
用法:
如果 arg  曾是可互动物件, 则传回 1.
参考:

interactive(),users(),living()

翻译:Spock @ FF 97.jul.25. (printed 3/16/95)

users

传回一个包含所有可互动 (interactive) 玩家的阵列.
语法:
object *users( void );
用法:
传回一个物件阵列, 此阵列包括所有的可互动玩家.
参考:

livings(),children(),objects()

翻译:Spock @ FF 97.jul.25. (printed 3/16/95)

variables

列出指定物件中的所有变量

需定义#PACKAGE_CONTRIB

语法:
string *variables(object, int default: 0);
说明:
variables() 的返回值由两种不同的情况。
当第二个参数为零(默认就是 0),函数返回第一个参数所制定的物件中的所有变量名的一个字符串阵列。
当第二个参数为非零值时,会返回更多的信息,每一个阵列元素会像下面这个格式:
({ 变量名, 变量类型 }). 其中"变量类型"为变量的 LPC 类型,如 "string"或者 "protected int" 等。
这个函数需要在 options 文件里定义了 PACKAGE_CONTRIB .

write

对目前的玩家送出讯息.
语法:
void write( mixed str );
用法:
送讯息 str  给目前的玩家. str 可以是一个数字, 而此数字将转换成字串送出.
参考:

message(),tell_object(),tell_room(),shout(),say()

翻译:Spock @ FF 97.jul.25. (printed 3/16/95)

write_prompt

定义用户默认提示字符.
语法:
switch (query_ed_mode()) {
    case 0:
    case -2:
        write(":");
        break;

    case -1:
        write("> ");
        break;

    default:
        write("*\b");
        break;
    }
说明:
If  write_prompt  is present in the player object, the driver will call

it whenever the default prompt would normally be printed.   The  driver

will not call write_prompt when the player is in input_to or ed.

温馨提示

当前页面内容可随意编辑. 但是需要管理员人工审核.

fluffos logo

Fluffos 中文文档

高性能的Mud Driver
  • 目录索引
  • 更新日志
  • 编译
    • Lunix编译
    • Windows编译
  • API文档
    • 互动函数(interactive)
    • 字符串(strings)
    • 套接字(sockets)
    • 物件(objects)
    • 数字(numbers)
    • Mudlib(mudlib)
    • 映射(mappings)
    • 内部处理(internals)
    • 常规(general)
    • 函数(functions)
    • 浮点数(floats)
    • 文件处理(filesystem)
    • 数据库(dbase)
    • 编译(compile)
    • 调用(calls)
    • 缓冲区(buffers)
    • 阵列(arrays)
    • 系统(system)
  • 其他
    • 配置 options.h
最后编辑:final 最后更新时间:2020-02-13 14:02:48
最后编辑:final 最后更新时间:2020-02-13 14:02:48

© 2019 Final开发维护 邮箱:finalcn#126.com