北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 36883|回复: 42

临走前发个自己写的客户端,玩这么久北侠,也算是留下个脚印吧

[复制链接]
发表于 2012-4-26 13:14:41 | 显示全部楼层 |阅读模式
本帖最后由 darkstar 于 2012-4-26 05:25 AM 编辑

这个客户端有点类似zMUD,之前一直在更新修改,以后……再说吧。

压缩包里包含说明文件和更新日志,复制粘贴在下面。

有兴趣的可以看看。没兴趣的请无视。

一、基本规则:

1、别名、命令和函数名均不区分大小写,但触发器匹配符和颜色符是大小写敏感的。

2、运算符:

数字运算符

逻辑运算符

+

等于

=

减、负号

-

大于

>

*

大于等于

>=

/

小于

<

求幂

^

小于等于

<=

不等于

!= <>

逻辑与

&

逻辑或

|

逻辑非

!



二、命令及说明:

命令

参数

说明

[ ]

方括号表示对括号内的数值进行计算,只能用于数字运算,不支持字符串和逻辑运算。字符串和逻辑运算必须使用相应的函数。

#n cmd

n:正整数

cmd:任意命令

重复执行ncmd命令。多个命令可以用{ }囊括在内。命令中可以包含标记%i,每一次执行将用n数值来替换%i

示例:#3 fill jiudai %i

执行结果是:fill jiudai 1;fill jiudai 2;fill jiudai 3

#abort

简写:#ab

取消同一行命令里的所有后续命令。

示例:#if (@a>@b) {#ab;eat liang};drink jiudai

执行结果是:当a大于b时,其后的所有命令包括eat liangdrink jiudai全部都被取消

#add s1 s2

s1:变量名

s2:值

对名字为s1的变量值进行计算,增加s2值。如s1s2其中有一个值为非数字,则依据字符串规则进行串联。如果变量s1不存在,则新建一个变量s1并赋值为s2

示例:当a=10时,#add a 5 执行结果:a的值为15

a=xy时,#add a 5 执行结果:a的值为xy5

a=10时,#add a xy 执行结果:a的值为10xy

#alias s1 s2

简写:#al

s1:别名的名称

s2:别名的内容

定义一个别名s1s2中有多个命令时可以用{ }囊括在内。s2可以调用其他别名,也可以调用s1自己。调用时请留意不要陷入死循环调用。

s2为空时,表示显示名称为s1的别名内容;如果s1也为空,则显示现有的全部别名。

#case s1 c1 c2…

简写:#ca

s1:数值计算语句

c1c2…cn:执行语句

s1值进行数值判断,为0则执行c1,为1则执行c2,为n则执行cn。如果s1的值超过cn数量,则从c1重新开始循环计数。

#connect

断开原有连接,并重新连线。

#forall s1 c1

s1:集合型变量名

c1:执行语句

对集合型变量s1中包含的所有子项,挨个执行一次c1命令。c1中可以使用%i来获取当前子项的值。

#gag

该行信息不显示。

仅限于触发器中有效,手动输入无效,且不能用于延时命令之后。

注:该行信息只是不显示,不会影响触发器的触发

#if s1 c1 c2

s1:逻辑判断语句

c1c2:执行语句

s1值进行逻辑判断,为真则执行c1,为假则执行c2(可选)。s1可使用小括号( )c1c2可使用{ }囊括多个命令。

#var

简写:#va

s1:变量的名称

s2:变量的内容

更改变量s1的值。如果变量s1不存在,则新建一个并赋值。s2中包含运算式时必须使用方括号[ ]

示例:#var a 2+3-1 表示把字符串“2+3-1”赋给变量a

如果想把“2+3-1”运算结果赋给a,应写为:#var a [2+3-1]

s2为空时,表示变量s1赋值为空;如果s1也为空,则显示现有的全部变量。

#wait s1

简写:#wa

s1:停顿毫秒数

停顿s1毫秒之后,再执行后续的命令。

s1可缺省,默认为1000毫秒。

#trigger s1 s2…

简写:#tr

s1s2s3:字符

s4s5s6:数值

添加一条触发器。

s1是该触发器的语句;

s2是触发器的触发指令,可以使用{ }囊括多条指令,默认值为空;

s3是触发器的类别,默认值为空;

s4表示触发器是否开启,任意非0值表示开启,默认值为开启;

s5表示触发器是否属于颜色触发,任意非0值表示颜色触发,默认值为非颜色触发;

s6是触发器的冷却时间,必须为正整数,默认值为0

s2~s6可以缺省。

#t+ s1 s2…

#t- s1 s2…

s1s2…:触发器的类别

#t- s1关闭类别名为s1的所有触发器,#t+ s1打开类别名为s1的所有触发器。s1不能为空,否则无任何效果。有多个类别的触发器要一起打开或关闭时,可以将类别名以空格分开。

示例:#t+ abc 123

执行结果是:打开类别名为abc123的所有触发器。

类别名为空、或类别名中含有空格的触发器,无法正常使用该方式打开或关闭。因此,在定义触发器的类别名时应注意不要使用空格。

#triggers on/off

简写:#ts

on/off:只有两个选项

#ts on开启触发器功能,#ts off关闭触发器功能。不加任何参数,或参数字符不是on/off时,将触发器功能置为相反(开变为关、关变为开)

#timer s1 on/off

简写:#ti

s1:定时器的类别

#ti s1 on把类别名为s1的定时器开启,用#ti s1 off关闭,用#ti s1 reset把定时时间重置为最大时间。

s1为空时,即#ti on/off/reset格式,表示开启或关闭、重置全部定时器。

s1不为空、但不加on/off/reset时,即#ti s1格式,将类别名为s1的定时器置为相反(开变为关、关变为开)。

注:不要将定时器的类别名命名为onoff或者reset这三个保留字,也不要使用空格(可以使用下划线替代)。虽然无论如何命名,定时器都可以正常工作,但是在使用#ti命令时会导致混淆。

#alarm s1 s2

s1:数值计算语句

s2:执行语句

s1的值进行数值计算,计算结果以秒为单位,延迟相应的秒数之后执行s2中的语句。s2可以是用{ }囊括在内的多条命令。

#wa的区别在于:同一行命令里,在#wa之后的所有命令都会被延迟执行,而#alarm仅延迟执行s2中的语句,后续的其他命令不受影响。

示例:#wa 2000;eat food;drink water(延迟2秒后吃喝)

#alarm {+2} {eat food};drink water(立即喝水,延迟2秒后吃东西)

#prompt s1 s2 s3

简写:#pr

s1:变量名

s2:提示语

s3:空或任意值

#pr弹出一个输入窗口,供用户输入变量s1的值。s2是一个字符串,显示在弹出窗口里提示用户应该做些什么操作。当s3为非空格的任意值时,在弹出窗口输入框里输入的信息将被打上星号标记(用于密码输入等),不需要该功能时可以不输入s3

#getalias s1 s2

简写:#gal

s1:别名的名称

s2:变量名

把变量s2的值作为指令保存在别名s1中。留意变量s2直接使用变量名称,不要在前面加@标记。

#getvar s1 s2

简写:#gva

s1:变量名

s2:别名的名称

把别名s2所表示的指令保存在变量s1中。留意变量s1直接使用变量名称,不要在前面加@标记。

#record s1

简写:#rec

s1:别名的名称

#rec来开启指令记录,#rec s1关闭指令记录并把期间记录的指令列表保存为别名s1

注意:这里记录的指令是向服务器端发送的最终指令,即经过客户端解析(包括命令、函数等)之后的最终结果,并且空指令不会被记录下来。

#cancelwait

简写:#cwa

取消全部延迟执行指令。所有用#wait#alarm命令延迟执行的指令都将被清空。

#slow s1 s2 s3

s1:变量名

s2:前置参数

s3:后置参数

启用行走路径。用#slow把变量s1中保存的数据加载到行走路径。在加载的过程中会先对s1中的数据进行解析,s1中包含的别名、命令和函数都会被正常解析,以最终输出结果作为行走路径。

行走路径被单独保存在内存里,供#step命令调用。s2s3作为前置、后置参数,主要供给#step调用,可以缺省。如果包含空格时必须使用双引号。参考#step命令。

在行走路径加载完毕之后,会自动调用一次#step命令。

#step

单步行走。从#slow加载的行走路径中调用第一个命令,并在前、后分别加上#slow命令预设的前置、后置参数,然后输出结果。并将相反行走结果添加到反向路径。

示例:#var mypath “e;#3 s;n;n;w” 把路径赋予变量

#slow mypath “gan che to ” 将变量加载到行走路径,并预设一个前置参数“gan che to ”。因为#slow在加载完毕之后会自动执行第一次#step命令,此时会输出命令 gan che to e

如果在路径设置中选择了“还原方向简写”选项(该选项默认是选中的),#step会将方向简写e还原为east,此时的输出命令是 gan che to east

在获取反向路径时,如果在反向路径表中找不到相应的数据,就不对这一次单步行走添加反向路径。在路径设置里可以对反向路径表进行设置。

路径设置里还可以对反向路径自动添加指令,默认情况下是每隔10步就对反向路径添加#wa 1000,这主要是为了防止反向路径过长时,调用反向路径会因为一次性输入太多指令而被服务器阻止指令。这个设置可以根据服务器情况进行调整。

必须在#slow启用路径之后才有效。

#repeatstep

简写:#rpst

重复上一次#step行走。主要用于某些特殊情况下#step输入指令之后却没能正常行走到新的房间时(比如被NPC挡住路了),可以调用#rpst再次尝试。

必须在调用过#step之后才有效。

#back

调用反向路径输出指令。调用之后不会清除反向路径,所以可以多次调用(如有必要的话)。反向路径会一直保存直到下一次调用#slow命令,或载入新设置,或退出系统。

#getslowback s1

简写:#gsb

s1:变量名

#step生成的反向路径保存到变量s1中。

仅执行保存工作,不会调用或清除反向路径。

#getslowpath s1

简写:#gsp

s1:变量名

#step行走过的路径保存到变量s1中。

#getslowback的区别在于:#gsp获取的是已经走过的正向路径,而#gsb获取的是反向路径。

#capture

简写:#cap

截获一行信息,将该信息复制到聊天窗口。可以在信息小窗和chat窗口看到该消息。

仅限于触发器中有效,手动输入无效,且不能用于延时命令之后。

#sendchat s1

简写:#sct

s1:字符串

发送一行自定义文字s1到聊天窗口,可以在信息小窗和chat窗口看到该消息。

#dbconnect s1

简写:#dbc

s1:数据库文件名

连接一个Access数据库文件,s1是文件名(可以包含绝对路径或相对路径,默认路径为程序所在目录)。

连接成功之后,状态栏中 图标会变亮。

如果系统已经连接了某一个数据库,在执行#dbc连接新数据库之前,会自动断开原有的数据库连接。

#dbdisconnect

简写:#dbdisc

断开当前的Access数据库连接。

断开连接之后,状态栏中的 图标会消失。

#dbopen s1 s2

简写:#dbo

s1:数据表名字

s2:查询过滤语句

从当前数据库中打开一张名字为s1的数据表,在s2中指定查询过滤语句,必须符合SQL规则,可以缺省。

注:一个Access数据库中可能包含多张数据表,所以在#dbc连接数据库成功之后,必须用#dbo打开其中的一张表,然后才能对该表中的数据进行操作。

如果当前已经打开了一张数据表,在执行#dbo之前,系统会自动关闭原有的数据表。

打开数据表之后,如果返回符合条件的记录数大于0,默认的当前记录为第1个记录。

示例:#dbo table1 打开table1表,返回所有记录。

#dbo table2 id=~”dark~” 打开table2表,返回iddark的记录(注意传递双引号需要使用强制指定符~ )。

#dbo table3 hp>0 and mp>0 打开table3表,返回hpmp两个字段均大于0的记录。

只有在#dbc连接数据库成功之后才有效。

#dbclose

简写:#dbcl

关闭当前打开的数据表。

#dbseek n

简写:#dbs

n:数值

把记录指针往前或往后移动n个记录,n>0时表示往数据表的尾部移动,n<0时表示往头部移动。n可以缺省,默认值为1,即把指针往数据表的尾部移动1个记录。

只有当打开了一张数据表且记录数>0时才有效。

#dbappend s1..sn

简写:#dba

s1..sn:各字段数据

在当前数据表中新建一条记录,并把各字段的值依次分别赋为s1s2s3…sn

如果某一字段的值中包含空格,应使用双引号。对于主键等无法更改的字段,可以使用带双引号的空字符串(即 “” ,空字符串表示不对这一字段的值进行修改)。

示例:某数据表中包含三个字段,分别是:流水号(主键)、物品名称、物品ID,为表中新增一个记录:

#dba “” 长剑 “chang jian”

第一个空字符串表示不对流水号进行更改(主键无法更改),后面两个参数分别对物品名称、物品ID进行赋值。

只有当打开了一张数据表时才有效。

#dbedit n s1

简写:#dbe

n:数值

s1:值

对当前记录中,序号为n的字段重新赋值为s1

注:第1个字段的序号为0,第n个字段的序号为n-1

只有当打开了一张数据表且记录数>0时才有效。

#dbeditbyname s1 s2

简写:#dben

s1:字段名

s2:值

对当前记录进行修改,对字段名为s1的字段重新赋值为s2

只有当打开了一张数据表且记录数>0时才有效。

三、函数及说明:

通用函数

函数

参数

说明

%abs(s1)

s1:数值

返回s1的绝对值

%additem(s1,s2)

s1:变量名

s2:值

把名为s1的变量视为集合型变量,为其在尾端增加一个值为s2的子项。无返回值。

注:集合型变量本身是一个字符串,各个子项之间用符号 | 隔开。可以对它使用任意适用于字符串的函数或命令,此时它被视为一个普通字符串变量进行处理。

%itemindex(s1,s2,n)

s1:变量名

s2:值

n:数值

从名为s1的集合型变量中,返回值为s2的子项在集合中重复出现第n次时,其位于集合中的位置。

n可以缺省,默认情况下n=1。即返回子项s21次出现的位置。

%itemvalue(s1,n)

s1:变量名

n:数值

从名为s1的集合型变量中,返回位于第n个位置上的子项值。

%delitem(s1,n)

s1:变量名

n:数值

从名为s1的集合型变量中,删除位于第n个位置上的子项。无返回值。

%itemcount(s1)

s1:变量名

计算集合型变量s1中含有多少个子项。

%case(s1,c1,c2..)

s1:数值判断语句

c1c2…:返回值

s1值进行数值判断,为0则返回c1值,为1则返回c2值,以此类推。如果s1的值超过后续的返回值个数,则从c1重新开始循环计数。

%char(s1)

s1:数值

返回ASCII码为数值s1的字符。

只能返回#32#126之间的字符。

%concat(s1,s2..)

s1s2…:字符串

返回s1s2…等所有参数字符串的串联值。

%copy(s1,n1,n2)

s1:字符串

n1n2:数值

s1中的起始位置n1起,复制n2个字符。不进行中文判断,不保证复制后中文字符的完整性。

如需保证中文字符的完整性,请使用%xcopy()

%xcopy(s1,n1,n2)

s1:字符串

n1n2:数值

s1中的起始位置n1起,复制n2个字符,无论中英文均视为1个字符。也就是中文的每一个字均计数为1,与英文字母同样计数。

%eval(s1)

s1:表达式

对表达式s1进行逻辑判断,为真则返回1,为假则返回0

%if(s1,c1,c2)

s1:数值判断语句

c1c2:返回值

s1值进行逻辑判断,为真则返回c1值,为假则返回c2值(可忽略)。

%left(s1,n)

s1:字符串

n:数值

返回字符串s1左边的n个字符。不进行中文判断,不保证切割后中文字符的完整性。

%xleft(s1,n)

s1:字符串

n:数值

返回字符串s1左边的n个字符,无论中英文均视为1个字符。也就是中文的每一个字均计数为1,与英文字母同样计数。

%right (s1,n)

s1:字符串

n:数值

返回字符串s1右边的n个字符。不进行中文判断,不保证切割后中文字符的完整性。

%xright (s1,n)

s1:字符串

n:数值

返回字符串s1右边的n个字符,无论中英文均视为1个字符。也就是中文的每一个字均计数为1,与英文字母同样计数。

%fileread(s1,n)

s1:变量名

n:数值

从纯文本文件中读取第n行文本作为返回值。文件名存储在变量s1中,可以是相对路径或绝对路径。如果找不到文件或文件中不足n行,则返回值为空。

%fileseek(s1,s2,n)

s1:变量名

s2:文本

n:数值

查找s2在文本文件的各行中重复出现第n次时位于第几行,返回值为行号。文件名存储在变量s1中,可以是相对路径或绝对路径。如果找不到文件或s2重复出现不足n次,则返回值为0

n可以缺省,默认情况下n=1

%max(s1,s2..)

s1s2…:数值

返回多个数值中的最大值。

%min (s1,s2..)

s1s2…:数值

返回多个数值中的最小值。

%lower(s1)

s1:字符串

返回s1的字母小写值。

%upper(s1)

s1:字符串

返回s1的字母大写值。

%pos(s1,s2)

s1s2:字符串

返回子串s1在字符串s2中的位置。

如果s2中无此子串,则返回0

%repeat(s1,n)

s1:字符串

c1:数值

返回字符串s1重复n次之后的串连值。

相当于ns1%concat(s1,s1,s1…)

%replace(s1,s2,s3)

s1:字符串

s2s3:字符串

在字符串s1中查找s2并替换为s3,如果有多个重复的s2子串,只有第一个会被替换。

%replaceall(s1,s2,s3)

s1:字符串

s2s3:字符串

在字符串s1中查找s2并替换为s3,如果有多个重复的s2子串,全部子串都会被替换。

%time(s1)

s1:字符串

按照s1中指定的格式输出当前系统时间。

s1中的有效格式包括:

d
1-31表示日期中的天。

dd
01-31表示日期中的天。

m
1-12表示日期中的月份。

mm
01-12表示日期中的月份。

yy
00-99表示日期中的年份。

yyyy
0000-9999表示日期中的年份。

h
0-23表示时间中的小时。

hh
00-23表示时间中的小时。

n
0-59表示时间中的分钟。

nn
00-59表示时间中的分钟。

s
0-59表示时间中的秒钟。

ss
00-59表示时间中的秒钟。

z
0-999表示时间中的毫秒。

zzz
000-999表示时间中的毫秒。

am/pm
ampm分别表示上下午。

s1可以缺省,默认格式为“yyyy-mm-dd hh:nn:ss”。

%dbactive()

当前数据表有效时,返回值1,否则返回值0

只有在使用命令#dbc连接数据库成功、并且使用#dbo打开一张数据表成功之后,当前数据表才有效。

%dbread(n)

简写:%dbr()

n:数值

读取当前记录中,序号为n的字段的值。

注:第1个字段的序号为0,第n个字段的序号为n-1

只有当打开了一张数据表且记录数>0时才有效。

%dbreadbyname(s1)

简写:%dbrn()

s1:字段名

读取当前记录中,字段名为s1的字段的值。

只有当打开了一张数据表且记录数>0时才有效。

%dbrecordcount()

简写:%dbrc()

返回当前打开数据表中包含的记录数。

只有当打开了一张数据表时才有效。

%trim(s1)

s1:字符串

清除字符串s1中的所有空格,但是使用强制指定符~指定的空格保持不变。

%opposite(s1)

s1:字符串

返回s1指定方向的反方向。必须先在路径的方向列表里定义了该方向之后,才能正确返回反方向值。如果方向列表里没有s1的数据,则返回空字符。

示例:%opposite(east) 返回:west

特殊函数

函数

参数

说明

%star(n)

n:数值

n0~15之间的数值,分别返回以下特殊符号:

01234567
89101112131415
¤

该函数始终有效,但主要是用于在状态栏输出。

%c(s1)

s1:颜色代码符

用于在状态栏中输出文字时调整颜色。s1由两个字母组成:第一个字母表示字体颜色,第二个字母表示文字背景色。

有关颜色字母代码请参考“五、颜色代码符”里有关颜色符的说明。第二个字母可以用数字0来表示无背景色,并且可以缺省,缺省状态下表示无背景色。

只有在状态栏输出时才有效。

%draw(n1,n2,s1)

n1n2:数值

s1:颜色代码符

用于在状态栏中画一个矩形,该矩形与其他文本位于同一行,距离左边距n1个像素,宽度为n2个像素。

矩形的颜色和类型由代码s1控制:当s1包含一个字母时,矩形为空心矩形,边框颜色由该字母决定;当s1包含两个以上字母时,矩形为渐变色实心矩形,第一个字母是矩形上端的颜色,第二个字母是矩形下端的颜色。如果包含第三个字母,边框颜色由该字母决定(仅有两个字母时无边框)。有关颜色字母代码请参考“五、颜色代码符”里有关颜色符的说明。

示例:%draw(10,20,OGJ) 表示在当行画一个渐变色矩形,矩形离左边距10像素,宽20像素,上端颜色为青色、下端颜色为暗青色,边框颜色为红色。

只有在状态栏输出时才有效。

可以位于同一行语句中的任何位置、与其他文本交错,并先于同行所有文本的输出。

状态窗口输出实例:

定义变量jysg=20shsg=11qkdny=37,定义状态窗口内容如下:


%c(N)
技能进度表

%draw(75,@jysg,LD)%draw(75,50,H)九阳神功
%c(J)[(100*@jysg)/50]~%

%draw(75,@shsg,%if(@shsg>25,NF,OG))%draw(75,50,H)圣火神功
%c(J)[(100*@shsg)/50]~%

%draw(75,@qkdny,%if(@qkdny>25,NF,OG))%draw(75,50,H)乾坤大挪移
%c(J)[(~%]100*@qkdny)/50]~%



状态窗口的输出为:

四、触发器

触发的匹配符如下(匹配符必须使用小写):

*

通配任意数量的任何字符。

?

通配0~1个任何字符(留意一个汉字是2个字符)。

%d

通配1个以上数字(0-9)。

%s

通配1个以上空白(空格或Tab)。

%w

通配1个以上字母(a-z)。

%a

通配1个以上数字或字母。

%x

通配任何非空白(空格或Tab)。

%c

颜色符,在颜色触发中作为颜色标记,用后续的4个字符分别表示字体颜色、背景颜色、是否带下划线、是否闪烁(4个字符中,前2个字符为颜色代码符,用A~P分别表示16种颜色,详见“五、颜色代码符”。后2个字符为下划线和闪烁的标记符,用1表示有,用0表示无)。

例如:%cLA01 表示字体颜色为黄色,背景颜色为黑色,无下划线,带闪烁功能。

使用颜色符时,必须开启该触发器的颜色触发。

$

断行标识符,表示到此为止一行结束。该标识可用于多行触发。

^

顶格标识符,表示后面的触发语句必须顶格触发。

请留意:无论是否属于颜色触发,该标识都必须写在触发语句的开头第一个字符才能起作用,非第一个字符的^将被视为普通字符而不是匹配符。

当使用多行触发时,跟在$标识符之后的后续行,默认全部为顶格触发,所以无需使用^标识(如果后续行不需要顶格触发,可以使用*通配符)。

( )

取值符,表示对括号内的通配符所匹配的字符串进行取值,在触发语句中可以使用%1~%99分别表示所取到的各个值。

|

语句,表示左右两边的两种情况都可以触发。通常情况下与{ }配合,可以不限数量使用。

示例:{abc|efg|123} 表示“abc”“efg”“123”其中的任意一条都可以触发。

不支持循环嵌套,即{abc|{efg|123}}不会被解析为“abc”“{efg|123}”两部分然后再对“{efg|123}”解析,其实际效果是被解析为“abc”“{efg”“123}”三个部分。

~

强制指定符,用于强制指定各种特殊转义字符为原字符。

示例:需要触发文字“手里握着一把长剑(changjian)。”并获取武器的id,因为小括号( )被用为取值符,当触发语句本身需要用到它时,就必须使用强制指定符。此触发器的语句可以写为:“手里握着*~((*)~)。”,在指令中加入“weaponid=%1”,就可以把武器的英文idchangjian”抓取到变量weaponid中。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-4-26 13:28:11 | 显示全部楼层
chat* wave
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-4-26 13:31:00 | 显示全部楼层
离开北侠了?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2012-4-26 13:32:45 | 显示全部楼层
离开北侠了?
wzxb 发表于 2012-4-26 05:31 AM



    嗯……对不起掌门的教导,惭愧……
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-4-26 13:34:29 | 显示全部楼层
我想知道lz是用什么开发的,能否共享代码,呵呵
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-4-26 13:34:58 | 显示全部楼层
没啥可惭愧的,想起了就来逛逛。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-4-26 13:35:46 | 显示全部楼层
感到一阵莫名心痛。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-4-26 13:37:06 | 显示全部楼层
用你这客户端能搞出gps吗?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2012-4-26 13:37:27 | 显示全部楼层
我想知道lz是用什么开发的,能否共享代码,呵呵
nxkx 发表于 2012-4-26 05:34 AM



Delphi 7 开发的,我是个半吊子程序员,呵呵

想要代码的话,我得整理一下,加点备注,不然别说你看不懂,时间一长我自己都看不懂了
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-4-26 13:41:53 | 显示全部楼层
就这么走了。。。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-4-19 06:34 AM , Processed in 0.016345 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表