千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。* A) j* P" `6 H: ~
0 E% _- b; u/ c$ ]4 I8 L: ?
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
/ x4 y( e/ Q$ F0 U* {! n2 K7 r$ Q3 ?% u5 e1 @1 [; r
一个函数的基本结构是这样的:) [# j' v6 |( A" V& F6 o$ K
+ J9 T Y0 X# j9 L) v
procedure OnCreate (aStr : String);
4 \4 ~' `$ C; A( ivar
8 V: a/ |, A/ o2 @. { 定义变量
2 @1 v" w- R! t. A! [begin
! z( S9 h! g, m" I7 {7 T/ U 语句6 H4 V y! p8 x# o4 \/ Z# K
end;
& `6 z# H( |/ u, j5 B2 @$ D
, X" v6 J. M' k% P4 S/ o+ z在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。. J0 ?$ |' g! s7 l
0 v0 g# ^+ |4 n% _4 D7 E千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。/ @! ^' S: m) }" l
0 Z' z7 l) v* H* E2 e8 ^/***********事件触发的函数**********/
& T0 D( {& |, y( b J, F
% k1 A$ J: R; H g//当有人*近时
) C0 W6 R; H+ `2 r1 S9 l$ A, Qprocedure OnApproach (aStr : String);
9 i8 a) V$ ?0 A" N& o% H+ j. A4 x6 ^- e8 `: s
//当有人离开时7 @# q, @/ p' F& g# ?- G
procedure OnAway (aStr : String);( [ p6 |) }! r2 B6 B8 Y6 z2 L
( Y% M5 q" l( O/ P- w5 u
//当受到掌风攻击时! b! H+ w! M. S
procedure OnBow (aStr : String);
3 C) \8 |# _2 ^- n9 S4 d& O8 B
5 Z5 e" R7 [" E9 H/ W# N- s//当状态改变时. h/ R! k% j# c2 V
procedure OnChangeState (aStr : String);
! D5 p3 o2 y/ e7 p$ z% F" i. P- s. c3 H5 y" i, `: k
//当初始创建时
: I9 j+ W! v; D, Z( Kprocedure OnCreate (aStr : String);, P n7 O" _0 v5 \
- Z3 E* y2 z2 p//当被双击时2 z& T4 k3 I' c
procedure OnDblClick(aStr : String);+ L+ o E" ?0 l2 k8 f5 |
5 x" x. |: t6 J$ _3 w
//当死亡前; f- E* J* o, B6 n9 E) ~+ `
procedure OnDieBefore (aStr : String);. |( [8 a- G7 [) @; ~
; l6 V. @! l2 S; e# ]//当死亡后
& L8 B9 r# K+ Qprocedure OnDie (aStr : String);
. v) u% S( O* E2 F w$ v" n' H1 r. ~) b: `6 u
//当被拖放物品时
: t3 Z. |+ }- P) Q6 @/ j/ Hprocedure OnDropItem (aStr : String);( q) @" f; e; l6 P
0 [1 v+ J3 h K+ d _3 J
//当得到命令消息时2 @2 m6 s s' f9 x4 u8 h( t
procedure OnGetResult (aStr : String);4 K1 m8 T& T+ y- [+ y
. |4 } x- s$ `//当得到改变步长时2 f& ?6 ^" R3 @% Y" l7 o1 x
procedure OnGetChangeStep (aStr : String);* R4 m& W' f% a9 [/ L
) v9 {+ t u& p& n/ E. j
//当受到攻击时
; f$ U, w- S' r# g) c6 h4 aprocedure OnHit (aStr : String);
" U% L2 `$ n2 }. H( i: k1 h$ g* I6 H L0 d9 c2 ^
//当被左鼠标键单击时8 P! z, a# B N& w5 t4 M
procedure OnLeftClick (aStr : String);; {! q- w% Y+ Z5 K6 H. Y& I
. `* J) d) [9 F
//6 X, j7 _9 R& z
procedure OnRegen (aStr : String);4 i$ q8 X1 n8 g9 }2 a# `# g5 O
& g& {) N5 o6 F# ]3 b$ [/ d//: L1 g+ }+ y2 U7 |5 A- j' X
procedure OnTimer (aStr : String);
3 x/ p+ o+ k- ~" J, @% ?* X, @# o( k8 i& g2 ~
//当物件发生翻转打开时,一般是用于门
% e$ V) l7 j# G \6 w) iprocedure OnTurnOn (aStr : String);& p+ R1 p& p. a8 K, d2 }4 S' R7 e$ g/ W
, i# ~! H& b" T+ W; L' w$ G
//当物件发生翻转关闭时,一般是用于门
8 B3 h- n- K5 R& g4 ?procedure OnTurnOff (aStr : String);
. o& r$ u/ v4 I& @& g. c; g( l6 L' V% N: b
//当用户开始游戏时
+ ~! x- q: e% L0 s a7 {+ v4 \+ Wprocedure OnUserStart (aStr : String);( H9 z* }" j$ Q5 N0 k* g
9 q6 ~! n6 k- j1 V( G//当用户结束游戏时7 m) X/ r3 o$ U# O( l: s
procedure OnUserEnd (aStr : String);* l) s2 ]( a; h
# A" _) a$ a6 e* E7 q
//当移动时
4 X! d) M4 t7 [# kfunction OnMove (aStr : String) : String;$ K4 G" E( a& Q5 x8 V- c) x
5 S, _& L9 I8 [2 k1 z$ s+ Z0 _//
( ~2 [6 w; J2 Xfunction OnDanger (aStr : String) : String;
* t4 `1 {0 G, i3 H$ h
/ z0 s q2 {+ s/ i* [- I0 |* d S//产生一个随机数(系统函数)
. E( N& i9 Y. G2 e' h7 Qfunction Random (aScope: integer): integer;
! k. D0 r: r% Y& c
+ j2 W, z1 P( X% ^//返回指定参数的消息(系统函数)
8 j2 @( r; t$ r, Dfunction callfunc (aText: string): string;
0 K& _" e( h& }; _8 |& F- z0 U3 z2 K G9 k/ G1 H& J2 v( S
//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
5 M {: g* I" oprocedure print (aText: string); s; R& W" ~4 a; R
3 n- G) C; y5 t4 `; S G J1 L& I具体参数(略),整理中..........., R; `* K( W+ q1 \
7 \; F. g0 y& v0 _# Q2 b//转换字符串为整数(系统函数)4 R' t) _7 w, j7 X# B
function StrToInt (astr: string): integer;
4 r; i. D$ |: `, n G( V( i6 r X8 v7 @) U* q
//转换整数为字符串(系统函数)% [" A I, R7 E1 C- b0 w
function IntToStr (aInt: integer): string;+ ?) X" W7 t7 b9 R
$ E0 |0 Y; c2 q4 z7 g/***********事件触发的函数**********/9 L1 Y9 i3 x$ U0 q4 S
$ _" Q. j6 F; {
1 w8 j( h. }9 E! u2 P$ H, u! |3 T& ~( }: }9 f
( |2 g U# U0 ]( W6 @
, {: K8 r" y8 a# l( C4 U
" J- s3 Y( y D# J3 A! t" H. m% c
u5 W) @8 ^9 [+ \* ^5 o. [6 O' e+ F! d3 g
- K6 n1 K8 d! X$ R4 |
function callfunc (aText: string): string; //以下为 aText参数的值
2 X6 d) T6 x' w) O5 V$ h- b2 b/ v9 G3 ^
getsysteminfo 获得系统信息
0 m% I& m+ a v; _4 Z; Ggetname 获得名字. U' N$ l; ]1 W: o+ A
getsendername 获得消息发送者名字- v$ A, c1 t8 _
getage 获得年龄
0 J8 {7 ^* Y# c# Kgetsenderage 获得消息发送者年龄 V# I" Y) t0 _
get*** 获得性别. W$ G" @ Y4 I. [4 e) c
getsender*** 获得消息发送者性别
; ]( F& Y' `+ Pgetid 获得ID* C9 h0 O" l+ }
getsenderid 获得消息发送者ID/ T Y4 F# T/ R, m. J
getserverid 获得服务器ID
D' K* {, @* D4 b% F4 ?- M, egetsenderserverid 获得消息发送者服务器ID
( |' x, Z8 n8 h9 ~+ Nfindobjectbyname 用名字查找物件% W6 P* ^5 Z9 d; t- E4 }8 A
getposition 获得位置# G6 \4 o9 M6 M* F
getsenderposition 获得消息发送者位置/ M& ? @# ^" @ e" E0 y
getnearxy 获得亲近的XY0 l8 j) e: \) m A" Q: M
getmapname 获得地图名字
9 Q: ~5 y3 o+ m1 ?+ t+ rgetsendermapname 获得消息发送者地图名字
. i! v$ [( w0 P# D% z0 R# Xgetmoveablexy 获得移动能的XY* M4 U& B, D# C( H7 f, X4 W
getrace 获得种族
! |# J1 W2 P [) Agetsenderrace 获得消息发送者种族& g- N9 y! y" H3 {+ o0 F; v9 G
! q+ T( {7 |" L+ `* Ygetmaxlife 获得最大的生命值2 k! y; ?. r1 ~- g9 z: ^* m
getsendermaxlife 获得消息发送者最大的生命值
! `! o$ K8 M' e0 B! B7 O+ @getmaxinpower 获得最大的内功值 c) Q/ m% T/ |9 F
getsendermaxinpower 获得消息发送者最大的内功值
. d0 P4 K3 p7 {, Sgetmaxoutpower 获得最大的外功值
, Z" x" y7 _/ D( Xgetsendermaxoutpower 获得消息发送者最大的外功值
C2 Q6 z4 z: R% o( ~- g2 pgetmaxmagic 获得最大的武功值6 ]! \; t) n# I# t1 {; j* Z
getsendermaxmagic 获得消息发送者最大的武功值% J8 |: v, Y. M. V" I8 x4 `: M- H
getlife 获得生命值2 R, Q& t3 P% K
getsenderlife 获得消息发送者生命值
2 D% v2 i) P7 Q: |. ]. E+ d
2 O, e1 q" x }2 s# Hgetinpower 获得内功值% \4 T1 o* G8 H! z2 _
getsenderinpower ; j8 p M0 i1 W+ @8 F9 ]
|