千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
" V: `0 F/ s* K! h" V* ?4 e% W' ^/ r) Q$ R# H8 o C
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
3 k6 A! h% P: x
( w* a. ]: ^2 m3 A) |) c# h: ]: p9 u0 E一个函数的基本结构是这样的:
* K$ c' N. W" P5 p/ B! s# V8 S5 ~- t1 |' M, i; U7 k; i* r: j& o
procedure OnCreate (aStr : String);* h2 [( H9 n6 {/ H; g* P; y2 ?
var
+ c N+ ]* }1 {% q1 L 定义变量
' _: \1 B9 m! `' Obegin
2 S. r& P# \! x _ 语句
3 i$ Y3 d4 Q2 J8 u. D Iend;7 e- y2 k+ j5 ]& R8 F& U
9 g% b* m9 e' A0 f在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
, t" d. m' l4 Q' R: z& P
8 A# u+ i+ G0 ^ t1 ~% k千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。' t9 y/ T2 c2 |8 {8 g- L
4 V7 H) x) f+ m2 b/***********事件触发的函数**********/
# V6 k8 ?1 U. I/ m) {( B! F) M3 u& X( x1 I& A
//当有人*近时
5 F& p$ c }; ^4 q$ l) Uprocedure OnApproach (aStr : String);
" K2 M# X# t. e# Z2 k) y4 Q% [; K0 k3 u( d' ?% B$ r
//当有人离开时5 A. w& e- r( O* l/ E% L1 c
procedure OnAway (aStr : String);# w/ R7 Q0 j/ g9 W3 n* X
/ X4 b# b2 N. }( M- V
//当受到掌风攻击时9 e% ?/ o" ` T2 r7 g
procedure OnBow (aStr : String);
% f3 x2 V$ h6 S' O/ G+ D+ ?* ?1 u' Q/ d9 T" T( \
//当状态改变时
. w% W [! K, t6 a% R8 Oprocedure OnChangeState (aStr : String);3 z0 e5 [2 t0 e' z* {1 ]9 L3 l' \2 R
, J. G9 @4 F6 S4 X- b! J" |* P8 F6 D
//当初始创建时4 @. Q6 f, f5 U$ k
procedure OnCreate (aStr : String);* Y7 b' U: L+ z; p0 _! _- K, q% Q
, F, S" W* g! {0 E% d. e//当被双击时0 B) d! w* p4 k. g: t: T3 M
procedure OnDblClick(aStr : String);
6 d% U" L$ I0 r: R3 J+ {
5 f+ ^8 H `& V4 F) @% h. B, B8 e ?//当死亡前7 v8 _; e, @! _- N; y% {5 M7 S
procedure OnDieBefore (aStr : String);6 m6 t5 m9 B! j" w: c/ ~
4 s3 h; o4 T2 Y% [! v E h8 K6 f: T//当死亡后
: ^& @6 V. m9 U: }! K2 Q5 Wprocedure OnDie (aStr : String);
" a" U( c4 F# Z! b8 B2 z4 N1 G# X; q
//当被拖放物品时
8 [. p/ P" I( f- Tprocedure OnDropItem (aStr : String);
1 d& E. z3 {' J) ~( y( i3 l; P' U8 l, v$ y; r5 X8 L+ ]
//当得到命令消息时. n% l$ m; B2 L! q6 i G3 t5 Q* `
procedure OnGetResult (aStr : String);# L- l! i8 u* M
8 x6 T8 H; ~+ T$ ~9 h
//当得到改变步长时
& i1 a% b" ] T3 _3 V4 Iprocedure OnGetChangeStep (aStr : String);1 B2 H5 A2 m4 b% ?5 T/ D
: } B# F2 Z) e
//当受到攻击时7 h. e: q0 J' e, P5 X
procedure OnHit (aStr : String);
8 ^) S. W9 }0 }8 ?& s B; n! z8 ~. v
//当被左鼠标键单击时# `; g2 y+ Q8 ~
procedure OnLeftClick (aStr : String);
7 r& Y4 q3 ^' N6 g' `
7 @9 u( `! L, S2 p( Z0 v1 u//$ ?3 f3 `, i2 r( M- X
procedure OnRegen (aStr : String);
* C4 y0 Y* F+ |+ c, S) v6 o9 D% E7 ?8 v9 e
//4 _3 z" s: c$ D' L& J: }8 G
procedure OnTimer (aStr : String);, Q% D# V% V) P5 ]2 C
v( \( \4 ] W9 O2 r7 z1 z
//当物件发生翻转打开时,一般是用于门9 h1 {1 F9 D8 r& I: P
procedure OnTurnOn (aStr : String);1 e3 P3 z* ?4 \0 y+ V m1 {
7 l8 y4 r8 d* V//当物件发生翻转关闭时,一般是用于门4 y# P/ y* I- `0 C+ Q7 E
procedure OnTurnOff (aStr : String);/ [9 g) E7 G& f& {/ t5 }( W
' ]3 O) `% z$ h
//当用户开始游戏时; y$ Q8 B# q/ k- D; q% _ o
procedure OnUserStart (aStr : String);$ |) {! U3 {" c C7 i) ?+ R9 \
8 X5 W7 d9 H! Q/ R& @//当用户结束游戏时
" A! X8 V s+ Eprocedure OnUserEnd (aStr : String);
, ]) b6 a- `1 M8 Z3 E3 b! ?
5 V) Q" [9 r. ^* e1 b# l: I( f//当移动时5 K8 W! F) [/ W- Y5 G
function OnMove (aStr : String) : String;7 i9 Z- k2 M+ O6 e. P
i: E }1 F8 v7 S3 W4 i5 H0 i
//" F9 S& y1 d" e
function OnDanger (aStr : String) : String;7 h) P2 K2 o1 L9 o- Q1 B4 a
9 T# T6 G& o5 f6 `6 }1 w& V. {( m//产生一个随机数(系统函数)
* ?1 v3 [- z/ B$ N Q* c7 \, lfunction Random (aScope: integer): integer;# p( I8 L* y! G* z" ], D
( ?( p$ l" h/ x0 ^) |, [# M8 e0 s//返回指定参数的消息(系统函数)
% D% Z$ Z4 {. N7 q, J1 \6 G- vfunction callfunc (aText: string): string;7 N& T; b$ W) h0 c2 R% t$ g% c
6 P% ?* w' v3 `0 x" o2 x//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数), e% Y& ]$ Y* v, `! R
procedure print (aText: string);
- ~+ L$ \/ |- ]+ [- I7 p2 ?! T; _& ]/ C
具体参数(略),整理中........... R2 ? ?, B/ P$ l
# D' t) f+ y2 u* }! ]4 U1 x
//转换字符串为整数(系统函数)7 ]2 a6 H3 I% L2 \5 X' Z6 g
function StrToInt (astr: string): integer;% u2 u. e+ g) ~8 h. x9 t" [5 w
S: {5 X1 |' Q8 d! |2 |2 S. m# i. C//转换整数为字符串(系统函数)0 T9 k: t7 N7 G$ }, I8 f/ L
function IntToStr (aInt: integer): string;9 D$ K5 Y. E d& x6 I) N1 }
6 @8 G$ A/ |2 E% i# D
/***********事件触发的函数**********/( G. p9 I; g3 g: I0 ?
( K/ J# C1 G% O. g
- U8 k. H, P5 b, Q/ E2 l
1 s& I) x8 b8 \8 g) Z5 t8 {9 L- a1 k6 M8 G5 [( z
, J8 G, [8 N$ S- K
: Z/ C! o; d% \; a! p9 ~1 w; @
& o7 t; o1 @" D) U
0 ?0 ~1 f2 X7 }8 A* m3 Q4 S2 o, T9 Y3 ^) ]
% R" u9 g/ r; A: V8 P2 A3 Wfunction callfunc (aText: string): string; //以下为 aText参数的值
% |/ X3 g; ~; E3 J
# R) H; n' ]" Agetsysteminfo 获得系统信息
$ ]; m+ @5 c' n O% Wgetname 获得名字/ I2 f. {* j* W# u
getsendername 获得消息发送者名字
9 Y. O' A! j) A; ?. igetage 获得年龄2 J$ ^+ a4 n! f/ p. t8 R+ L
getsenderage 获得消息发送者年龄
& B% H! n/ O+ O+ W F: Wget*** 获得性别
. z6 x8 I' K+ M/ A* lgetsender*** 获得消息发送者性别9 i2 F \* r5 Z2 Q5 q" `. h% b
getid 获得ID
% P' S0 U4 b1 T w* R" S/ c6 G7 a$ F \getsenderid 获得消息发送者ID
4 K( c% {1 b) dgetserverid 获得服务器ID
6 t9 d3 b, m" }getsenderserverid 获得消息发送者服务器ID
' V- }$ x C) L: H: s- Cfindobjectbyname 用名字查找物件9 n% o9 ^8 d5 c% a$ a8 ^+ w
getposition 获得位置
9 }2 _8 w% q8 n# i, a5 `getsenderposition 获得消息发送者位置
$ r; C* f- d/ P- ^getnearxy 获得亲近的XY
9 q _) g: S+ @8 c" B: O) F9 ?. C: egetmapname 获得地图名字2 r, K1 Y5 r8 W* h3 ^
getsendermapname 获得消息发送者地图名字% X1 e/ P' M/ [/ z' j4 ] r3 `( o- V' W
getmoveablexy 获得移动能的XY E/ H8 h! ^& z3 B, i) u+ u2 \
getrace 获得种族
$ E. q2 t- m' ^. J: mgetsenderrace 获得消息发送者种族
+ \, w; _# V' b$ K1 ], a2 f
4 h- G0 N; I% R% M( X4 R" }! F/ \getmaxlife 获得最大的生命值. M5 g1 F0 a' J \0 r9 p
getsendermaxlife 获得消息发送者最大的生命值7 {% F/ s( d7 {
getmaxinpower 获得最大的内功值: ?6 f7 ]4 C5 J* _. m8 [$ g* Y6 D# |
getsendermaxinpower 获得消息发送者最大的内功值
7 k8 V" M1 P; igetmaxoutpower 获得最大的外功值
) S7 n' [! z& k- A7 p$ dgetsendermaxoutpower 获得消息发送者最大的外功值
. S! u( s' k) J6 V* p; kgetmaxmagic 获得最大的武功值
1 |/ l) ]: y1 ]7 L, ?getsendermaxmagic 获得消息发送者最大的武功值
; @/ P+ X4 K) \ u2 q% D+ ^+ Lgetlife 获得生命值& K a! d- t6 t" ^9 z: ^
getsenderlife 获得消息发送者生命值
( k3 _9 {# y7 R. J: W) W9 w4 A1 Z
3 O1 M2 s1 p. Y6 y/ Kgetinpower 获得内功值/ ]3 x! H; h \6 n
getsenderinpower
$ h; t) j" L: j f2 J! T |