千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
% {, A7 _" O" S5 _. P* W2 @4 w K
$ ~7 X! M. p/ I. y6 |4 g" a: |千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
i; s* K; y8 ?: k( V k' x; a5 A4 o* A6 j% B0 q
一个函数的基本结构是这样的:, J3 b1 w# S+ D$ ~! R
$ b) p6 X8 y( ^4 s U0 w# [' bprocedure OnCreate (aStr : String);) J8 o2 T) m% o8 ?
var
9 L% |+ P' |+ B5 F( f- | 定义变量4 b/ O. M; t& @
begin
- R) p( ~( ]; l! Z 语句
. ?4 p! ?" S0 E: ~% k4 ?+ P% W" Bend;, c7 N- h0 @0 ]' `
5 O; E3 Q) W0 O; w) ?在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
$ z n; r+ F5 |. C) O4 N* f" b/ s( ?& u; W- R
千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。2 y9 Y' b2 m" o' U0 n& b
- f8 ]$ o, a! k- w/***********事件触发的函数**********/( ?' O( C* b2 I- [7 s# N
# c+ A0 d7 F: U3 R! ?$ J6 H//当有人*近时& n1 E% n; O7 t' \9 x
procedure OnApproach (aStr : String);
0 {7 r N1 ]; W' Y8 w3 g9 i( w' ~* m* o3 u, D( e1 l3 F8 m: e. J
//当有人离开时
" \4 \/ H0 C1 s, A* f1 z9 Cprocedure OnAway (aStr : String);
* e2 b& `7 m" ?; y9 H# f8 E) ^4 v6 D- r$ K; T1 d2 h2 k" d! C) Y
//当受到掌风攻击时- v+ b5 d% [1 r! J ~) N2 y
procedure OnBow (aStr : String);9 O! S8 t' A8 E1 V1 D; B+ T# _7 `
. |$ I- [, G5 Z& I* m7 W* L//当状态改变时
0 P( b4 |' X$ S% l/ K Lprocedure OnChangeState (aStr : String);# e0 z, U% X! a9 O
# d& F6 c6 o$ Q8 Z$ w
//当初始创建时
: K" ^5 ?; Q% ? l. iprocedure OnCreate (aStr : String);. L% \9 A5 Z3 x' M; {
' M2 W* g( L' E2 T5 O; u/ u7 H//当被双击时
5 h$ S; V" A; c$ N, zprocedure OnDblClick(aStr : String);& d$ O+ A2 u3 `( H
2 d, g7 _- N$ V1 F9 O/ K3 P& ^
//当死亡前
! k% A7 N8 R. X: `0 c) L2 R4 Sprocedure OnDieBefore (aStr : String);1 a+ p8 a7 `' f# X) ]5 y
/ ]/ H+ H. c7 O4 B1 B4 g" r3 T//当死亡后
; }! T) {6 B) K8 Uprocedure OnDie (aStr : String);9 V+ O5 {! e/ d% m0 t
( P8 u! ]8 C6 Q//当被拖放物品时( C( W: Z8 ?9 y
procedure OnDropItem (aStr : String);8 L; f% n6 V& v! @& x3 j# Q
2 t6 D* g) D" C( v4 C//当得到命令消息时
3 X3 Q/ e; v5 M6 `procedure OnGetResult (aStr : String);
+ ^& v, C* z2 a& m' A
7 ~. s: }4 Y% P) K/ C, ]3 P" s//当得到改变步长时% a6 h0 I% t# @
procedure OnGetChangeStep (aStr : String);9 A; z& N; e8 m" I d0 l
+ q/ [# |) r: O( a. r& D8 d0 H. m//当受到攻击时8 o: L) G: ?: f, V! P& S
procedure OnHit (aStr : String);; h5 |7 t; \/ O. g0 D
) o1 g' ^% e; l. H: x" G
//当被左鼠标键单击时
- x- L* o4 M8 Cprocedure OnLeftClick (aStr : String);
+ H/ W. n; }8 Y: ^: u& @
- d) S' {; {. a4 s2 T$ f4 H//# i5 E6 |: {1 p1 d" r
procedure OnRegen (aStr : String);
! T, p7 J# w h+ Y: A1 ~4 ^1 k9 c3 M8 p
//: [: Q3 w% E9 U
procedure OnTimer (aStr : String);
! z3 W& `3 o* A8 L1 V W7 |) t# y6 j7 C, b. ]1 f
//当物件发生翻转打开时,一般是用于门
P2 @! o3 v2 P/ v% ?9 d1 Y* Kprocedure OnTurnOn (aStr : String);
/ F5 }: o% _% G- X7 R# p: e+ i
j( ~3 B, O* c2 ]//当物件发生翻转关闭时,一般是用于门0 u' @4 u# U O, G
procedure OnTurnOff (aStr : String);
( }# Z) c% C( G* B5 m3 q8 C& K4 @! D
//当用户开始游戏时
( y$ t, b' M/ pprocedure OnUserStart (aStr : String);
( g+ D, n5 f7 \# A
% q- ?5 Q! o4 b9 V//当用户结束游戏时# Z6 c- X+ Z+ G; M" \0 M6 F1 w
procedure OnUserEnd (aStr : String); C2 g; f1 u2 _+ v" Q
' Y# v' r, R" Z) z; a
//当移动时
+ u7 h( [ u0 A2 Tfunction OnMove (aStr : String) : String;
+ J! r: o8 V- |4 E, |+ E. { T
5 v5 S$ \# V& r( p//+ c7 j2 x; S$ O: \+ C3 \6 ]/ y
function OnDanger (aStr : String) : String;% o& s; b0 v: q) V; O
8 X0 [ c$ L1 S
//产生一个随机数(系统函数)$ c9 ]+ o* t8 ]& R" X0 M' X; n
function Random (aScope: integer): integer;* |$ K* @6 v! O! @+ q4 W! r
6 D. v- h3 W2 r
//返回指定参数的消息(系统函数)
5 [7 a' m1 ] [8 u5 Ifunction callfunc (aText: string): string;
/ t9 z2 u$ P7 z. A
2 q1 O! d4 q/ D" ~//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
' t2 @1 }8 d' ~ bprocedure print (aText: string);8 g1 }* Y+ N2 f; X+ t) C8 |
8 i/ H( i; n* w3 N1 b+ T- P) R: i; M具体参数(略),整理中...........
. m N1 J% V& l3 ~6 v } z) A) z2 @; j6 M
//转换字符串为整数(系统函数)
" K, i$ F9 ] z. Pfunction StrToInt (astr: string): integer;5 G# X/ B% }4 I) A% H7 C' V
W8 B" P( m) R! r- h4 b2 }4 S//转换整数为字符串(系统函数): n8 N' G# a+ `5 k5 }* [/ a! R/ r
function IntToStr (aInt: integer): string;
+ l: s4 v! Z& E" S. R$ M; h; U/ v/ Z
/***********事件触发的函数**********/
) e4 J. h+ V7 Y: \ H1 d- [5 ]0 u P- [& m0 F: M# ]
( v9 ?) a) ^7 v* f5 c+ q$ ?" W( _
! X/ f6 p3 u4 w( \9 s K o- u" e0 U! O% R& W2 t
& x4 e9 J8 j F- t# Q
! @: k5 s& z& F% G: D7 X2 P0 \! y% Y" k6 n4 O
0 j: ~7 |- C# J0 {* N1 f
3 K' Z( s9 v) j, r. Y; \4 ~) ofunction callfunc (aText: string): string; //以下为 aText参数的值
, W6 o2 w9 T5 t; F' U- _% U
, V+ S9 q9 ?! V5 {8 `2 L4 k/ Agetsysteminfo 获得系统信息
2 M% R+ o7 c3 {( j9 g1 G& F8 B6 xgetname 获得名字5 b) e# v5 K9 c$ k+ K& V8 V( Y
getsendername 获得消息发送者名字
# J! o% A6 K) a! w- C- N2 \9 ggetage 获得年龄
! }* f" s5 ?. B, M8 A: Kgetsenderage 获得消息发送者年龄
0 k) w5 I. a7 d sget*** 获得性别
& I' _$ ~' U! f* x. M0 I9 Ugetsender*** 获得消息发送者性别
) z3 ?9 _5 v3 [9 M; d. wgetid 获得ID% d9 S L3 p, x8 O5 l$ y
getsenderid 获得消息发送者ID
$ }& W8 ^2 _; ^% J2 T1 k) dgetserverid 获得服务器ID, z/ k1 U/ C5 ^
getsenderserverid 获得消息发送者服务器ID+ j2 ^- h" R: C
findobjectbyname 用名字查找物件
' d8 I `0 l8 o$ s& A# B6 Xgetposition 获得位置
6 V% O! C! q/ n7 U( Ggetsenderposition 获得消息发送者位置
+ T. m/ G* L5 E- q7 C1 k& Wgetnearxy 获得亲近的XY
$ W( S2 V8 N8 l# g/ Mgetmapname 获得地图名字
0 S$ K! S% b2 O) r* S, wgetsendermapname 获得消息发送者地图名字
2 z7 v4 o7 z. ?getmoveablexy 获得移动能的XY
, V3 u4 h6 R. o g$ Pgetrace 获得种族
" H" t+ Z0 f, c: ]: F5 {% g6 y9 d% R0 ngetsenderrace 获得消息发送者种族
) _1 }- T) m a4 D! n* i) x7 N0 g4 |" R4 x
getmaxlife 获得最大的生命值4 ?; ~ h0 p: c& J
getsendermaxlife 获得消息发送者最大的生命值
; X3 n& t$ F2 [ `; D; {* Vgetmaxinpower 获得最大的内功值
. ~0 s d* j4 [ fgetsendermaxinpower 获得消息发送者最大的内功值/ a1 S2 y! {! \, ]0 s, V$ L
getmaxoutpower 获得最大的外功值+ n/ y# P6 T2 d) o" ]* w- {
getsendermaxoutpower 获得消息发送者最大的外功值
+ a! G# k7 Y5 }+ Y. C$ xgetmaxmagic 获得最大的武功值$ m& n6 M8 \# U: P$ }
getsendermaxmagic 获得消息发送者最大的武功值
5 }8 U+ f e j- W7 i4 Bgetlife 获得生命值+ X; I, J& Z2 O
getsenderlife 获得消息发送者生命值3 z/ M: G3 d! D* |
: }5 T- d) j. ~; t( Q' h) ?( {
getinpower 获得内功值" _ [ B+ m3 E! J8 [
getsenderinpower
! o1 a) }# S1 i5 W, c0 K% I) S |