1。注释 //
2。表达式 C风格 支持位运算。
说明:object eval形式的表达式在运行时尖括号内的变量将自动被替换
成相应的值。所以要在字符串中插入变量的值可写成如下形式:
str1 <var.x> str2
3。控制结构
(1) dorand # endrand
系统会根据随机生成的行号执行相应行的语句。
目前的系统中这个结构存在bug,建议改用dorand # enddo结构。
(2) if else elseif elif endif
经典的判断结构,我就不多说了。遗憾的是没有多路分支判断结构。
(3) begin end
复合语句
(4) return #
终止当前脚本并返回。
若#为1,则当前脚本执行的动作被取消。
为0正常返回。
也可不带值返回。
(5) tome #
调用gump里的[gump #]。
类似的还有src.gumpdlg #和src.itemmenu #等等。
(6) 关于循环结构
很遗憾,没有循环控制结构或跳转指令,
要实现循环只能依靠一些特殊手段。
官方的说法是循环很容易引起系统当机挂起,
事实也是如此。但我想提供循环结构还是必要的,
至少在很多时候会避免大量重复劳动。
这一点上要远远逊色于pol系统了。
(pol系统有完备的类pascal式的控制结构.)
4。函数及变量
(1) rand(# 或 表达式)
返回小于#的一个随机非负整数。
其他随机数表达方式:{下限 上限},{物品id1 出现概率比r1 物品id2 出现概率比r2 …}
(2) var.x
设置或读取一个变量的值。
若想定义全局变量,可在defs或defs2文件中定义,建议在后者中定义。
例如:若x在defs2中有定义,则var.x=var.x+1跟var.x=x+1这两条语句等效。
说明:a)系统并不要求设定变量的类型
b)当遇到return指令时变量的值自动复位。
(3) strlen(字符串 或 字符串表达式)
返回字符串的长度。
(4) uid.x
根据序列号x(Serial #)来访问对象。举个例子比较好理解:
设你的名字为westfly, 序列号为0999,则
var.me=0999
speak Good luck! <uid.0999.name >
和 speak Good luck! <uid.me.name>都可以显示信息:
Good luck! westfly
(5) eval(表达式)
返回表达式的十进制值
(6) evah(表达式)
返回表达式的十六进制值
(7) <var.x result1/result2/…>
多路结果表达式.例如根据玩家性别返回称号: <src.sex 大侠/女侠>。
(8) valstr(string) 将string转换成数值.
(9) src.x
基于对象的访问,请参考对象详解
(10) 其他。大家如有新发现请告诉我。:)
5。对象
对象具备三个基本的属性:
(1)特征:Attributes //类似delphi中的property.
(2)方法: Verbs //该对象可执行的操作.
(3)参量: Evaluators //对象的相关变量。
这里给出一棵简单的层次树,括号内为该类的子类。
CObjBase{
CChar{
CCharPlayer{
CClient;
…
}
CCharNPC{
…
}
}
CItem{
CStoneItem;
CContainerItem(another parent:CContainer);
CMessageItem;
…;
}
}
6。上面只是一些粗略介绍,要真正掌握,只有靠自己去做大量的实践。:) 废话了。

留言
还没有留言,来坐个沙发吧。
留个言