千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
6 p1 c8 N6 e6 i4 A8 U6 A& b$ v1 G" e8 s
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。, X' a2 O* E/ s0 L U y5 ~, @4 s% D
/ h7 W6 O9 A( v5 Z; t
一个函数的基本结构是这样的:
5 q6 d8 d' F j1 t) M5 H( A6 z+ _0 m, p' T
procedure OnCreate (aStr : String);
/ h% N% ^0 h- z/ [# x! K/ V5 Mvar
, C0 h. w; X, a2 w) c" Z) S 定义变量/ X1 l9 ~* M% V8 m: w* w0 k
begin
. o' p4 s' o! W# I4 r0 G" ~6 E 语句. ? j* F8 _) {9 O! p
end;6 {2 W2 n" h4 }9 e+ A+ d
: E D& y/ m/ Q在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。8 t# ?9 ^( [, a
, U& Y1 I" Q$ ]2 s( w2 g千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。2 _1 I% k; R1 i
' I7 P8 c F1 Y% N1 N6 `1 I
/***********事件触发的函数**********/# M( e8 P R4 i2 _8 n1 \) c. x- d
3 s0 @7 @- q b6 c' e+ }; Z1 S: A3 O//当有人*近时0 E% w0 G% u' I u4 [4 V
procedure OnApproach (aStr : String);2 |8 b" t3 g* Q- m' d
5 r8 U8 z+ K/ {//当有人离开时
) \8 B( K. g8 x" r) yprocedure OnAway (aStr : String);6 h! J3 d6 U/ o k, K2 k1 \/ @+ q; n
) E. e* M. s g& P5 T//当受到掌风攻击时
4 Q. W- O" A9 O1 xprocedure OnBow (aStr : String);
* z5 B. V; l9 F9 V' ]) y$ o
2 O# C3 |8 z6 K6 T! s//当状态改变时
, r& G3 v, v. e9 ]9 S! T! N- [5 z7 eprocedure OnChangeState (aStr : String);0 P* v* j' u8 p" b# N& v1 n
$ f& @# J" E$ K* e5 D0 ?//当初始创建时
. \0 C5 V6 }1 K. Y: s2 k; L; yprocedure OnCreate (aStr : String);- X, P' ^% Y9 @
! V& I. t) }' x; |//当被双击时7 Q) I( }: | L( x. H& j
procedure OnDblClick(aStr : String);3 G+ Q3 l+ R; K6 v& P, M
3 }" J1 d) p$ d! l5 U
//当死亡前6 E% \: t' O4 Y* t! ] J
procedure OnDieBefore (aStr : String);/ h2 A6 V4 x L$ v. N1 X
( a" N& ^$ c% C& B0 D3 r1 U& u- r+ G6 N//当死亡后
3 a1 t3 ^1 L0 Y; G% L# bprocedure OnDie (aStr : String);% ~7 {% Y9 p! X# |$ [& w! p
V$ r+ V- n+ B
//当被拖放物品时
; I' e1 s6 s g- c' s7 Rprocedure OnDropItem (aStr : String);) W6 ~- }5 J/ q8 @ J6 c6 \1 u
+ o) f1 v; B1 ?( c8 S
//当得到命令消息时7 \8 w- Q# m; t v2 ?! X
procedure OnGetResult (aStr : String);
, W r0 g/ n2 o( Q5 l. u- ~
6 k3 R; w% P( k. O z//当得到改变步长时) j; g; z& l! E# o+ W0 I# Y
procedure OnGetChangeStep (aStr : String);; {4 d+ P9 o0 ^
) q& P: d$ V. v, @0 _) M/ b
//当受到攻击时
) C4 D# E* U% ?7 @: pprocedure OnHit (aStr : String);. P2 D. X* K0 F
5 E8 \, Q% O* \% m3 h8 U
//当被左鼠标键单击时
9 A4 M o+ J/ h* c; `$ o, kprocedure OnLeftClick (aStr : String);6 U' a* }+ \: B3 e V+ z' A
" ]! |# b7 c0 b" w, ~( ], S/ A6 Q
//3 M$ x8 Z# ^7 g2 K
procedure OnRegen (aStr : String);
3 u- A) ]$ f/ i. ^" o' l3 `
3 t- u. P& Z+ a3 r" \3 ^& N//
# O4 Z+ x! r2 _procedure OnTimer (aStr : String);
/ D C6 X" s$ e8 a$ i2 H: Z% O& m" n# R! }7 f, Q$ ~; y. z- [
//当物件发生翻转打开时,一般是用于门; @9 r' N& ]9 K! F9 y, k. H- e; }
procedure OnTurnOn (aStr : String);; t# M' L. {8 O4 ~8 \
2 w/ D* s+ J" _5 G; E; L' A
//当物件发生翻转关闭时,一般是用于门
! X3 W$ i; {' |, Q1 {procedure OnTurnOff (aStr : String);! x0 g4 e3 h2 v' R+ \% ^
: E1 |1 s9 l( O/ s/ a
//当用户开始游戏时* e$ K$ S% c1 a% A2 q
procedure OnUserStart (aStr : String);, V4 K& i$ n2 l4 P2 v" K5 M8 q% c
6 m3 h. e8 \+ }//当用户结束游戏时) p Q1 q3 a& V) g3 W% d
procedure OnUserEnd (aStr : String);
* {3 F. ]7 Q8 h" l
: R5 R* b: u- s M) G2 M% \1 k7 J v//当移动时
" x0 e, g# p. d' `+ ?function OnMove (aStr : String) : String;% A- `7 G1 H0 w% F
9 | {# h2 J2 b7 a
//! F4 f+ @0 i: K% P8 ~% f
function OnDanger (aStr : String) : String;/ I2 V7 i7 P$ }! w
( m% w8 p& C6 M
//产生一个随机数(系统函数)6 f& `- a H1 E1 E* V2 d
function Random (aScope: integer): integer;
% ]4 V8 Q6 G- J0 n2 s: V5 w/ L0 ~5 [& R' y
//返回指定参数的消息(系统函数)
! o% `9 q9 a, X0 }function callfunc (aText: string): string;
1 n# \" k( R) E4 m1 [, Y
" [( [: l7 U O( L//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数), N. R; C3 t# u" L, E% M* b1 r
procedure print (aText: string);# M" J! c: C' Q& ^+ t- ]# h0 ]
( X1 P( J0 J v5 i' M! i4 u
具体参数(略),整理中...........& N9 e+ B0 F! u q) J
; ~" q( l5 l& }1 J0 s
//转换字符串为整数(系统函数): ^+ W6 E H9 ?- @4 \7 ]
function StrToInt (astr: string): integer;0 T! s O1 q/ ^6 y) c
1 P: W/ _7 P( ^* Y
//转换整数为字符串(系统函数)
& K0 ~) B8 i2 A Yfunction IntToStr (aInt: integer): string;
5 S5 K2 Z2 q/ ^" p4 x7 D
( G# I/ W. W' k: V/***********事件触发的函数**********/
/ Y9 X# A E, U3 U' O9 _1 N. U2 D% i
4 F' Z$ \* j5 ]& O$ c1 A' ]
- m8 U5 b" T1 i# p8 m! Z% v0 O9 j3 e) G+ n2 u# ?
7 R9 x0 o; v% G" K N9 j; v" l/ n. [0 @
A" x& d8 H# r$ b
3 [/ k' C2 L% g9 B# j
, ~6 K9 z7 v/ zfunction callfunc (aText: string): string; //以下为 aText参数的值9 `0 y4 E6 M) H& {; B
) U% M' D, K8 sgetsysteminfo 获得系统信息
% J1 i0 X c! M' [3 v( ygetname 获得名字
- W/ H& a* M7 z; ]8 V4 ]getsendername 获得消息发送者名字
# l; t( l% D2 F; Y0 W5 vgetage 获得年龄' @% I! u- u: O: q
getsenderage 获得消息发送者年龄
5 ?4 q9 M3 x' V$ }' tget*** 获得性别1 c; O# l9 h( S! B. L
getsender*** 获得消息发送者性别
: z5 C+ V$ h. W" A! B% Xgetid 获得ID1 ?/ J, x+ B' j9 D0 B' K- g- o
getsenderid 获得消息发送者ID
( ~& s5 n, U0 {2 Q) kgetserverid 获得服务器ID
& ~0 N& D& V7 t, j: t9 sgetsenderserverid 获得消息发送者服务器ID
9 P* J! ?! x" M, w8 f8 Sfindobjectbyname 用名字查找物件+ Z* A5 p) W) ~" ^2 d4 }+ b9 l, v
getposition 获得位置9 t/ Q, o2 l& P- X
getsenderposition 获得消息发送者位置
2 }, c* t' z4 g* Kgetnearxy 获得亲近的XY0 Z$ a. O6 i ^" Q) `9 [) n, X
getmapname 获得地图名字* Y, R; s; m, `& M# ~
getsendermapname 获得消息发送者地图名字7 p6 j, N" T; Q4 I
getmoveablexy 获得移动能的XY
0 T9 d' o+ b; h) P8 }+ Wgetrace 获得种族
# z8 R) U; }+ l% z: `' m1 P! S4 y$ ngetsenderrace 获得消息发送者种族2 \, n; |, v/ j! T' b8 _% E
0 t" W) a0 W" ]8 D* cgetmaxlife 获得最大的生命值
0 @' m7 M8 T( o" Igetsendermaxlife 获得消息发送者最大的生命值; l* ?6 I l9 \7 U5 e6 j# M
getmaxinpower 获得最大的内功值( n- w' j, a: [" @
getsendermaxinpower 获得消息发送者最大的内功值% a, g/ B2 I/ i) j( H( V) K: v
getmaxoutpower 获得最大的外功值) y3 {# z! O8 O6 `. J# C
getsendermaxoutpower 获得消息发送者最大的外功值- d/ v) @ e& G* p1 l
getmaxmagic 获得最大的武功值0 Q* W- k6 q# m/ m5 U7 h9 J
getsendermaxmagic 获得消息发送者最大的武功值
& W! F% ]8 c. P+ bgetlife 获得生命值2 g3 d" O, z; y# P
getsenderlife 获得消息发送者生命值
+ Y3 R8 c9 z3 y6 E( b' y7 v0 e2 t, g, z! H
getinpower 获得内功值
/ }: k/ W' [+ w: y3 _getsenderinpower
2 i4 Q$ a! a- H+ F |