千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
) y# h' ]* R5 z. y z% a
: ]4 w, e: X' W& A: U8 U8 Z千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。/ Y) B4 p; X4 h5 C) f
( r6 ], H& C, r$ J0 c6 E$ k一个函数的基本结构是这样的:
* }- f2 J" _' W5 O, g+ p
6 W% @ j0 w! T5 V- E! bprocedure OnCreate (aStr : String);9 G, {& E3 B! } A5 o
var
: t: b8 R9 y" f3 S2 D& @- t 定义变量
5 |" Y: f) e7 [' G; M Zbegin* R# Q' k9 K/ o5 u1 ^! |3 q' o
语句, u& A' A9 ?9 v9 v: @4 ~ r4 i
end;
8 M% e# q7 h1 a6 O0 _% G3 t$ f& j3 H3 J) j% k$ b | ?
在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
, g0 G4 D9 ]6 F; i5 j- \2 [3 s2 n+ M# m2 A2 [% O9 |' J g6 R! |
千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。# l1 ]& d+ z0 l! g& z' L; z
: h; X e3 D5 @" Z
/***********事件触发的函数**********/
) ~* M; G# y% P' \/ y1 I1 h! w x0 s! \' i* }! F' |7 y
//当有人*近时% p4 V- X( [2 F
procedure OnApproach (aStr : String);- v0 `6 r8 t- ?9 m! a
) K( Q; c+ g. D) a% N
//当有人离开时
: P. w1 K( ~9 H. F7 b3 Sprocedure OnAway (aStr : String);
. x" u6 W b5 U( a- N3 Z
) R; m d8 H! [//当受到掌风攻击时
" ~ E( |% B0 i7 b* ?8 x; `procedure OnBow (aStr : String);
5 N+ w. t- l0 X- e/ R" I; m! f# F! a
//当状态改变时" N2 m& i' J& k' H1 x" O' ^6 R
procedure OnChangeState (aStr : String);
% d% n9 U6 Y& ~6 I# |
0 G$ h4 V2 X% }5 v; k- k//当初始创建时
3 p% B8 e0 P& Y& Uprocedure OnCreate (aStr : String);
) c' w0 {) ~8 { {4 K( ~. b
+ e+ W# U+ i# r//当被双击时
" \3 k# a7 j V _" x/ m& Gprocedure OnDblClick(aStr : String);
7 P2 c" i {4 |! e7 S% [& o( g& C; O; I% U1 b0 o
//当死亡前1 G7 v5 f$ v i( V H
procedure OnDieBefore (aStr : String);
5 C# c j: f6 D! `- y1 W
8 \( P2 Z: o8 C7 ^. {//当死亡后
* k6 M+ i* W3 z2 |- A9 a6 l- jprocedure OnDie (aStr : String);, J) W) i+ {' M5 W2 _8 x$ a4 `+ `
% J% Y' S6 ~7 [+ ^
//当被拖放物品时* C) L5 u% N _& K1 Z7 M
procedure OnDropItem (aStr : String);
5 _' U3 M2 b4 v$ y8 y3 R% }( X# A0 n3 h, z0 V$ {
//当得到命令消息时
# | I# B/ c# Y8 p2 Bprocedure OnGetResult (aStr : String);. s2 n) z0 _9 J7 Z5 ?$ f
6 T6 `. Y% I- B) E# k" l& E, V
//当得到改变步长时0 T. c" z! A7 k( d9 N1 E7 [4 T
procedure OnGetChangeStep (aStr : String);8 t" z6 L# I+ v* Z1 \( {
, a) m5 i% y N
//当受到攻击时
' a0 y& ~! ?; r; ^procedure OnHit (aStr : String);" t8 E5 e1 }$ m" O- L$ c! L" u7 S5 }
) m2 r' V8 F) R2 _
//当被左鼠标键单击时
3 n& f% Z7 o( [5 q- \procedure OnLeftClick (aStr : String);
$ }$ Y8 B8 ^) ^7 c8 _
3 ?* p+ a, I0 ]7 i& w//3 [. g) E: ?# ]9 l1 r
procedure OnRegen (aStr : String);6 Z8 b- p6 i2 y7 f0 j1 ^% x
8 r3 O7 s1 K2 B
/// z5 h$ u+ n0 K8 z, {6 Z7 u
procedure OnTimer (aStr : String);; [% g: b" a* |- U5 Y
u( N" V2 M) [ E# E//当物件发生翻转打开时,一般是用于门
% U1 B+ B% }$ q# P2 Y( rprocedure OnTurnOn (aStr : String);
7 o7 N$ h) q8 N9 m9 `( R P. p* [- h9 X* j
//当物件发生翻转关闭时,一般是用于门
: s7 i* g9 d! w; @/ Fprocedure OnTurnOff (aStr : String);' c, ^7 _4 r$ ?3 ?
4 @0 b/ N4 w6 n$ {/ M//当用户开始游戏时( |* g. e, b! U/ K. ?2 k, O" q
procedure OnUserStart (aStr : String);
! \4 f6 Z6 Q0 t7 |/ ~% F H9 n- Y+ o' d' `0 k, b$ a& l3 M
//当用户结束游戏时
$ U! u b. L3 }; d7 R7 Z: h1 P Bprocedure OnUserEnd (aStr : String);
1 V% P# Y/ @5 D) `# T: O6 j: e; F3 |" y5 [' Z5 D2 k, Q4 r
//当移动时
- @! S9 @0 S# A$ [% t9 ?3 [function OnMove (aStr : String) : String;7 W Q; y' _9 v
0 C+ [4 h& b) G8 L2 |
//
4 |6 m! b( X C; Z' pfunction OnDanger (aStr : String) : String;
' ^: x+ C+ u$ T
8 Y9 n( F& ]5 Y P# {//产生一个随机数(系统函数)$ Y. s) |/ v/ c v5 r
function Random (aScope: integer): integer;
+ C/ Q" l6 U! P% v$ u" w ^, d3 b' K$ |- l$ {: k! f5 i% b( N6 h( M) i
//返回指定参数的消息(系统函数)
6 ]: e. F, {/ y- Bfunction callfunc (aText: string): string;' E% k* C2 a$ |7 ^8 w
: A& t* f0 Y( b+ }//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
3 N( E% w: ~- h' e; U9 kprocedure print (aText: string);
- p) @7 `! O& G9 W3 O# h$ _* @
( N% [9 F( n K I, }( g$ t具体参数(略),整理中...........1 L8 K# t! @4 a2 O5 V4 P
# x( N/ y# b$ `- K: Q5 K//转换字符串为整数(系统函数)
; r9 m) ~: I" _ `+ L y) Nfunction StrToInt (astr: string): integer;2 e" n7 ^- e9 A
6 [1 Z3 \% b* F
//转换整数为字符串(系统函数). f2 `9 t0 J, C4 B% C2 t0 i# ~2 t
function IntToStr (aInt: integer): string;. R* Q" Z/ b* c1 s' e
2 q% @3 c4 T. }4 r1 m9 Y/***********事件触发的函数**********/1 x6 h' C* T1 y$ P6 w
9 F2 g7 j, a! Z& K) Z( i/ z* d
$ O9 H1 |8 P! A0 I) H1 a
. c: W F, o( \' m) F
6 T6 _% c/ ]: O) G; o+ X7 _( @4 M8 n# _
3 {( R8 d) v8 t. ]9 i
& E" `3 M' s! g+ @% d1 U
1 e$ J# f6 p8 b( ?4 z: g, s( m( k/ E! S1 R
function callfunc (aText: string): string; //以下为 aText参数的值
( ]3 I2 @1 H+ G) f0 L, j1 i; v* |) n+ b
7 v" O7 O8 }3 Q7 g+ e* K E1 v$ Qgetsysteminfo 获得系统信息) b* j/ a8 M% q; @& D
getname 获得名字; s/ w& J8 Y) r
getsendername 获得消息发送者名字( v6 _( D8 O( K3 V
getage 获得年龄
% ~' c8 w2 C7 Ugetsenderage 获得消息发送者年龄/ ~7 U0 W8 \5 V* d
get*** 获得性别# Z q9 p# G0 V' ^* N
getsender*** 获得消息发送者性别9 `# F( g3 {2 P* D
getid 获得ID
+ @) q: L" R4 Pgetsenderid 获得消息发送者ID2 |0 X$ i5 X' E& Y7 p
getserverid 获得服务器ID( D j& N6 _0 f. R8 f+ z
getsenderserverid 获得消息发送者服务器ID
0 I/ o! s' n8 m3 S# v# rfindobjectbyname 用名字查找物件8 b, J/ F# E" a$ l; b: Z/ t# A' o
getposition 获得位置& G6 v0 A4 V- i0 G) o
getsenderposition 获得消息发送者位置8 |6 |# ~( _4 i g$ ?! U
getnearxy 获得亲近的XY
" J ?6 ~. T; V& z! _0 s% h& \getmapname 获得地图名字% g% a( X/ ~: U, Z# y, K) S
getsendermapname 获得消息发送者地图名字
7 f( ]' S* X; `2 e+ N. Qgetmoveablexy 获得移动能的XY
) A% r; T0 o# G) B. ?. X& jgetrace 获得种族# p! [: x) ?+ \. x, E
getsenderrace 获得消息发送者种族7 k2 n) ^ z: N3 f1 s6 V8 b2 I
6 g* i# [& {8 W' ~9 \% G/ {
getmaxlife 获得最大的生命值6 M- }4 v" S' S4 Y
getsendermaxlife 获得消息发送者最大的生命值" i+ L: a8 g% A8 K( ?7 C+ p
getmaxinpower 获得最大的内功值
o( t5 Z2 {0 E" i: fgetsendermaxinpower 获得消息发送者最大的内功值
+ l+ ~" y- e9 i9 B7 O% X. Pgetmaxoutpower 获得最大的外功值3 K' d- m, I; W+ ]& U
getsendermaxoutpower 获得消息发送者最大的外功值0 [$ K, p) t& S4 R* i% T( G$ _
getmaxmagic 获得最大的武功值
, a$ Z" w2 S9 U0 |$ i- I( X' _# tgetsendermaxmagic 获得消息发送者最大的武功值
# G5 h3 Y; I8 \9 A9 [6 S9 Kgetlife 获得生命值, J$ }9 C7 Z# z1 c9 ~$ t3 }1 S
getsenderlife 获得消息发送者生命值$ A: H: M' L$ a% }% V
# I4 d6 G6 P' E: C! ^: Xgetinpower 获得内功值+ a" z$ l" d8 B! q( q6 x
getsenderinpower ( n! o, B1 c7 p+ u/ O j
|