千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
- ~9 P5 L" I1 A. Q
5 r1 Q4 ]3 y' v6 b& U千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
+ i1 O* u6 Y/ g5 J1 N$ |0 _7 z
# k& q% W9 n( b- H一个函数的基本结构是这样的:+ h" W8 h% U0 N
/ _& N( J; f# w% v/ gprocedure OnCreate (aStr : String);# ?( d' {, r, I( V$ C
var) i( c* t9 o9 D* B4 v7 K' j9 i: l
定义变量
9 R4 ^6 O7 @8 z! `% A; g6 m# ibegin" R( }& N& N7 h5 k9 O1 g/ w
语句
) B. g) @. ~7 e8 s/ V- ]end;
3 g, W6 u( g" r5 y* m
2 Y- Z' ?( H) y: _! ^' l" o在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。' e- j& D' y6 a4 z/ V8 z l
$ N; [! G9 N9 x/ r2 K) s& G
千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。( Y$ o& s6 @% l" u- K+ C# f5 F2 |
) C9 B5 L8 N U6 g( E4 C: N/***********事件触发的函数**********/
. X" n8 N' A' D( `. o, s$ ~" o3 d2 I$ x% ?$ i. B
//当有人*近时
7 S- L8 S% {1 D) Dprocedure OnApproach (aStr : String);' I$ L) k# I4 Z5 [* @
% G; O, U$ U9 N- j3 X S//当有人离开时: ]; t: ~7 ]( B/ N y
procedure OnAway (aStr : String);
% F/ f( y! b% J7 p3 L" `% w! m$ F9 Q/ d+ m
//当受到掌风攻击时
) b, n t& W2 K, i5 q5 h2 `6 Fprocedure OnBow (aStr : String);6 T* _6 X1 H, e% O$ M
! }9 e/ l, r* w% C% ^* `//当状态改变时( z1 H9 E- z+ u- D- o9 o
procedure OnChangeState (aStr : String);
* o0 j% A5 V8 ~" ~9 \& d ?7 o) z; x7 p
//当初始创建时, N5 w, D5 T9 G6 R& u7 r
procedure OnCreate (aStr : String);2 `$ G- |9 I g3 m; |
2 g" P+ j$ o% ?9 T+ V1 m) a//当被双击时
, z7 \& _1 @& |, f: A) c7 q- @) pprocedure OnDblClick(aStr : String);% X) q) d, V( Y+ k2 g* f% u7 L* o% L
/ a) d3 f# D" C/ }8 w. s7 h
//当死亡前; _; [6 V, F1 W" {. t+ a/ \3 a
procedure OnDieBefore (aStr : String);0 D) |: z1 {0 ?
) O9 Y& A. t. M" O, ]
//当死亡后8 j. r! L) z9 t5 c+ d
procedure OnDie (aStr : String);5 S) R5 A! }) p3 k, F& `. u. P
% o* v. r' M$ n( R: C3 v, A3 Q2 \1 F
//当被拖放物品时
0 S* m) b! W/ ?6 F; ~' [: ?5 cprocedure OnDropItem (aStr : String);
/ A7 M% U' u. B6 ?# m: x. T1 x3 ^7 u+ r4 I
//当得到命令消息时
" c, q) S0 z7 N' ~+ Hprocedure OnGetResult (aStr : String);
# t! F+ O" q/ ^/ q9 C$ h: g" i; d0 M- [' ]' S% ~
//当得到改变步长时
& V% C2 e P# ?5 C. ^, d6 e0 [procedure OnGetChangeStep (aStr : String);
$ S) {* B6 r; Q+ h) [& Z7 }
; J: @! A; t! W# {# i% {//当受到攻击时- N! n* K' w. j+ J
procedure OnHit (aStr : String);6 M- l" P% p' ` o% |* a3 w% B9 c0 s
+ v) C8 \0 ?/ y. p
//当被左鼠标键单击时1 P# l* |* m, o, M
procedure OnLeftClick (aStr : String);% f7 X$ m% [5 d5 Y
+ s/ n# S# T6 t0 n2 D3 f3 W; _ w( n//
+ ?0 ?0 K7 W$ J; \procedure OnRegen (aStr : String);& d! T( r; P% U. `% ]
3 D' k2 s3 B# u3 I
//; _7 Y+ Q4 ?) [9 ]7 \5 _: P
procedure OnTimer (aStr : String);
: a' \+ b" ~& Y- t1 c4 r8 [
; }- V' \1 @- a" o! h- t% p' x6 _//当物件发生翻转打开时,一般是用于门( |$ {! N/ `) Z# _
procedure OnTurnOn (aStr : String);
- m! I7 q- x; J; p0 x
5 P, b$ F+ Q2 K& i6 Y2 L//当物件发生翻转关闭时,一般是用于门
. ?1 H; n& b5 i" zprocedure OnTurnOff (aStr : String);1 Q* l% k; z9 x1 h" S I' [
! U7 L0 T1 }, b, H
//当用户开始游戏时
; j9 j" {+ j8 X. T" E3 hprocedure OnUserStart (aStr : String);) t( n6 ]" s7 U; p+ j/ u |
/ c* {' G$ Q' E0 T7 U9 U//当用户结束游戏时) L* n, G( G; L: M& O$ [$ h2 s% F
procedure OnUserEnd (aStr : String);
) v' n2 X9 ^% t T3 S! p
/ X# v$ n# K) l//当移动时$ s6 T5 {8 X# U& I( g# m" q+ e9 @1 F
function OnMove (aStr : String) : String;# r% w, K! w C( M: K3 y5 p4 M, }
0 k' ]9 y# K9 g( B8 w( C//% p; x* G8 @" D1 [! o
function OnDanger (aStr : String) : String;5 l( x4 A }4 n6 o' S4 I2 Z
, A7 U3 M4 W; Z1 M//产生一个随机数(系统函数)
9 {1 m) {( F; C4 Mfunction Random (aScope: integer): integer;- Z( l9 K9 \* i: a9 A
( p9 D0 C# z0 y# [3 B: n/ W
//返回指定参数的消息(系统函数)
9 h/ z& M: M) E- @% Gfunction callfunc (aText: string): string;
+ B3 o# G1 v; X. R( {9 ?: @
3 M, T. y7 ]1 L. O6 S3 W) f//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)6 G5 x2 N# N, l
procedure print (aText: string);
6 D( b1 ]8 o9 r3 ~. g9 }4 U9 y7 l! O1 [
具体参数(略),整理中...........2 x9 c9 |% H$ l ^' w+ R
: L% I/ ]2 x. a5 l% u2 H' S; x, U9 `//转换字符串为整数(系统函数)0 m' \( x e% [! s) g/ D8 T
function StrToInt (astr: string): integer;
: ~ h2 e% e, Q! o6 v8 z
7 f) k! R8 C: T# Z- [//转换整数为字符串(系统函数)3 l+ `3 G8 p# g2 l4 d& ?; X7 w
function IntToStr (aInt: integer): string;" B7 ?5 p n& M% n# p( \
, ?) O9 j6 J. J. Z6 C \' e
/***********事件触发的函数**********/: X6 X$ u9 R K1 U0 C
* e6 e: m. M+ I3 ^% J
9 d; k2 b& @! M/ V* y9 q6 r: W( C% |' j
- q8 R9 {: ?1 l, U' \2 D; T8 X
1 ~$ u! ~. P8 z# h& c d& l
0 R6 C2 p6 t( ~6 n [# [7 J( Y. }1 s0 T
5 x( P% }5 R* i3 Y5 t
& ^! Z$ j% S; Q" r4 @0 J1 a- l1 d7 ]
function callfunc (aText: string): string; //以下为 aText参数的值" E8 Z8 t4 Z, g
$ m" r% {6 x* D% n( G# U# fgetsysteminfo 获得系统信息# u2 @ W% n& L; Z- ~
getname 获得名字0 `% }$ | L8 a) X
getsendername 获得消息发送者名字
2 M( A. r2 v8 v! m. V7 dgetage 获得年龄
3 c8 L6 O4 T8 U0 i% g/ H7 \( jgetsenderage 获得消息发送者年龄
! n% B2 \2 S# ]9 {- ^' `) Sget*** 获得性别3 j O6 R) T( U9 U, ]9 U, T5 M
getsender*** 获得消息发送者性别
9 Z& [( U- V9 K9 [7 ^* f9 }% \3 ggetid 获得ID0 a* M6 X3 `: Z& b! J- L: r! S0 X
getsenderid 获得消息发送者ID' B# C( R# B/ e$ i9 X
getserverid 获得服务器ID# y7 n! }( s: I4 U
getsenderserverid 获得消息发送者服务器ID
5 p: ~" J+ ^# ?; M; C3 rfindobjectbyname 用名字查找物件
$ z" X5 C+ c) G: E4 h I1 ygetposition 获得位置
, F: ^6 q# r6 ygetsenderposition 获得消息发送者位置5 t' D V! Q8 ~% S
getnearxy 获得亲近的XY: |$ ]6 ~, S2 p+ u
getmapname 获得地图名字
6 ]! _$ M( u5 o$ Q2 }. |getsendermapname 获得消息发送者地图名字9 L" N7 |! r2 W$ t( d3 @6 f
getmoveablexy 获得移动能的XY
9 C( F1 b9 {4 s6 Zgetrace 获得种族4 p) {* t2 r1 V' P; _+ w
getsenderrace 获得消息发送者种族2 v) c9 l. j& O
: |* L' m$ U8 n$ ?2 W& qgetmaxlife 获得最大的生命值. v9 v ?% s, k2 i9 l
getsendermaxlife 获得消息发送者最大的生命值9 G; q" S7 D n$ E% |: ^
getmaxinpower 获得最大的内功值- i9 R- j) k% E5 p: u9 Y
getsendermaxinpower 获得消息发送者最大的内功值
" j3 u9 M$ S7 `% U& U) Z; a8 p4 v1 T4 Bgetmaxoutpower 获得最大的外功值. I7 Z& V( R a& I# c7 @; o
getsendermaxoutpower 获得消息发送者最大的外功值
( F7 Z4 |7 Y8 w! g" V1 @ Agetmaxmagic 获得最大的武功值
0 a. s% L* E0 _. r+ Vgetsendermaxmagic 获得消息发送者最大的武功值
$ e/ P; R2 F" B+ Rgetlife 获得生命值/ P* Z9 V0 S3 `; ^# m. z( V5 h
getsenderlife 获得消息发送者生命值1 U8 v2 Y' O, u5 ~* K2 B2 @
; N. Z7 l' d; c3 [; e+ K
getinpower 获得内功值
2 w; Q5 Q6 O1 ~5 E6 w6 m" Xgetsenderinpower
2 i9 D( u q# r3 M( }/ f- r9 h |