千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
3 t9 k$ z4 c' W
/ d8 r& D" T, O. p) ^千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。* l. q. l z& _% [4 l: R
: ^' r5 I0 }% u6 [2 m ^6 u5 m
一个函数的基本结构是这样的:
, k, X. Z1 @1 Z! Y/ }7 M3 p3 z( y& v' _5 D E# x
procedure OnCreate (aStr : String);3 `. l2 z8 n/ m- @& q) J. Y% q) a
var
* f! v, L) F2 B 定义变量; ?! J7 Q' A. o( A" I" m
begin
0 C, p1 v, {$ c( p) N# ~ 语句
* ]& C+ d. [4 l' X( }end;
: m: |+ j) | I
4 t, N8 }" _2 D& L& n在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
! b* W0 Q3 \7 [1 p
: I- i+ f2 N; s& ~4 Q6 M: ^千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。
' ]2 d' p* H+ `- Z# _3 Z4 C9 ?. a0 p5 P# r- X
/***********事件触发的函数**********/
+ M4 s! D+ o3 N) j
2 ]0 f( k) l- P//当有人*近时
" G% H( Q( ^0 C# A @procedure OnApproach (aStr : String);4 q' A W( z9 R( J
9 G$ L- `7 l* D
//当有人离开时
- T) s7 c" e( i" Sprocedure OnAway (aStr : String);" f6 L/ a. I8 D$ M
# A h! D8 H% b
//当受到掌风攻击时
4 a+ H7 b6 }' ?' G/ o$ Dprocedure OnBow (aStr : String);* x7 {7 n; e7 X& S) n5 E. e/ c
1 L* {, [' a. E//当状态改变时
; }0 K$ E+ x* |$ Kprocedure OnChangeState (aStr : String);
0 @& H# h2 T7 i, o' j. H3 V. I) M3 K4 v' W
//当初始创建时0 D+ N. T0 D( a4 D1 `0 [9 J
procedure OnCreate (aStr : String);* Y6 K' t) _5 e5 l* K$ K c- S2 p
! ~2 x p8 v, X% o0 T9 Z
//当被双击时
; F7 T \3 ^2 y. \0 m% [$ I# K* bprocedure OnDblClick(aStr : String);* |) p q& D: d6 h
7 I0 ]+ J: R: h, }
//当死亡前) w2 t9 l5 U: ^1 V9 f+ w. A" v
procedure OnDieBefore (aStr : String);1 ~5 o& \5 F D' M
9 `1 h6 z/ j3 O: h+ K7 x. H7 a: b
//当死亡后: w3 t+ E( D5 L4 C
procedure OnDie (aStr : String);, h- L) N+ C* z' J! q# I
# X* {/ V; R* ]: B) T9 J w
//当被拖放物品时
' L* j) r+ ]! x& Dprocedure OnDropItem (aStr : String);
+ h! W1 u" H* y0 Q8 R5 d, T9 R1 h" R; N& i6 A, n
//当得到命令消息时6 z( t0 R G) Z$ {
procedure OnGetResult (aStr : String);
3 ~& Q5 d' o& I- }: v6 u/ \5 I' K0 _8 R! [
//当得到改变步长时
( w# u# p& r! v2 `. X4 G: Q2 Xprocedure OnGetChangeStep (aStr : String);2 n' `2 m8 j7 f/ s
5 A/ ]9 x; g' f8 R1 w' {9 ^//当受到攻击时# ]/ Y5 j8 K) d2 i. t
procedure OnHit (aStr : String);
; s+ k* A$ J( F: _: s2 ~: G! U' f, y F3 x/ f! Y& O, E
//当被左鼠标键单击时* S; t, i% X( j; I" ]9 N
procedure OnLeftClick (aStr : String);
! V- X$ m3 U% `! }9 r
2 X% u$ N* d, i- B; q, \//
7 `, ]' d8 n7 x3 d( j8 [7 h6 uprocedure OnRegen (aStr : String);
' j6 c$ f2 l0 k2 n
4 B: O) k1 O# C; V) K) h//+ m7 `2 L1 T1 G$ M6 c
procedure OnTimer (aStr : String);
: y" ~* ]" k0 C$ y8 j: \0 I' o: F% }+ W: s3 z* v1 u- H9 y8 R
//当物件发生翻转打开时,一般是用于门$ b! I: b+ m# w. M+ {
procedure OnTurnOn (aStr : String);
. C' [/ k' q: x9 Q
# T* D. m( a' }//当物件发生翻转关闭时,一般是用于门( z# Z6 h- A; b" k' E
procedure OnTurnOff (aStr : String);
3 N' u; a$ N4 c2 G9 H
3 U" a" O+ p( o( |6 |//当用户开始游戏时
$ D1 U" ^8 z; G. ^procedure OnUserStart (aStr : String);% A4 h* B5 [5 r2 i' O* P8 j5 o7 g
3 b" o, Q+ \+ m/ X6 E. \
//当用户结束游戏时; B* L! \2 c# [! ?# R! R
procedure OnUserEnd (aStr : String);
" O9 c) a: l; E, P( w6 E
X2 X. s3 b* R! } T1 N//当移动时
5 L1 \" R/ J5 u d T8 B) G4 T. kfunction OnMove (aStr : String) : String;1 F9 m/ L. S6 _+ ^5 F
$ _0 ]7 s# Y( O//
, m2 d% b; q( _/ Nfunction OnDanger (aStr : String) : String;9 F5 s, e6 k0 |# Z6 H' |
1 R1 B4 Z k; ?//产生一个随机数(系统函数)
. Y( d g& h; _& a2 i2 b0 Ofunction Random (aScope: integer): integer;9 ]3 G$ B& S/ x" q5 q. g2 }+ k
7 N# g4 p1 }% R//返回指定参数的消息(系统函数)0 P- h( J+ H$ z' i* g8 t; Q6 a R5 V
function callfunc (aText: string): string;
m! k; `+ l6 |: D/ e# y6 H9 V- a5 J, r) {8 J6 {
//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
; C j) x! w/ Kprocedure print (aText: string);$ S/ O8 L# \( G6 i6 \
5 M2 x% M6 i9 ]
具体参数(略),整理中...........
$ M2 \3 M; k: C. D, I) V4 Z9 \3 C0 b% g9 U% G/ k
//转换字符串为整数(系统函数)* r4 [1 l& I& Y9 \3 Z: D) l& ]
function StrToInt (astr: string): integer;# {. v) L4 g- R, g* u& {
# [' g* x7 u) N5 ^* K) G" Y
//转换整数为字符串(系统函数)
. s' ~: T, O+ W0 Afunction IntToStr (aInt: integer): string;
' }' ? v7 V+ a( t; d9 K6 U0 j7 I: |; F; ~( I% ^4 l' L
/***********事件触发的函数**********/
! V/ A) m+ H+ E& @$ |" P
3 `7 c9 N% z' M% N" X% a% y" p9 v% i9 C F- T& R9 j9 ^
( D) `8 \2 F/ U6 C, _" a% ^+ T: M6 x3 e* ]% l3 ]. t9 d, G+ B; a
0 _8 `# k3 A1 b* t9 f T( i4 J1 S" C8 y+ ~3 E
; E6 ]+ v! r" [# x
: c+ N3 I8 u3 h" H8 z9 {* s: n+ u
0 j- G- U( u' U- ?function callfunc (aText: string): string; //以下为 aText参数的值
( Y+ `1 r( H% S* h
4 X5 \& y; n% U+ \6 l3 Ugetsysteminfo 获得系统信息& Q" f" P3 p) I: ~3 h4 M
getname 获得名字
! j! a/ h$ I3 U3 S7 V' hgetsendername 获得消息发送者名字
, m3 U- i) S* J) wgetage 获得年龄) G* M1 g; o( x+ A8 M+ U; M% S
getsenderage 获得消息发送者年龄
4 q! P1 r0 V p6 Rget*** 获得性别3 }' q0 P7 T% @4 d6 i
getsender*** 获得消息发送者性别
& [: I J; H6 @ U2 a- l3 Agetid 获得ID. a" g* w2 d! X; E* n( Y4 h
getsenderid 获得消息发送者ID* I2 Y( i; M( T) N' J; e0 d
getserverid 获得服务器ID& p( z1 o: N3 I: T! G$ @0 T
getsenderserverid 获得消息发送者服务器ID
) P0 S: k7 j4 Z& C6 Cfindobjectbyname 用名字查找物件& d7 ~% k3 o/ ~& ]$ e
getposition 获得位置! z7 [& j! \, P) ^" x
getsenderposition 获得消息发送者位置
! N$ F: o+ r# w$ _9 w+ p. w; E' Bgetnearxy 获得亲近的XY# e( |9 }2 j7 X' M
getmapname 获得地图名字
$ i; A8 v2 k) H' H; B5 @getsendermapname 获得消息发送者地图名字6 T3 A0 o( M3 C- i
getmoveablexy 获得移动能的XY5 O+ o9 T+ h( m, ]" x! T
getrace 获得种族
9 j5 L' C* @; e3 Lgetsenderrace 获得消息发送者种族
. v( q6 p3 L: \0 P5 E6 J
- C, O" A: ?$ Q* |, g9 u6 u, I: S. ygetmaxlife 获得最大的生命值5 x! q3 m$ L: [/ h& ^, \
getsendermaxlife 获得消息发送者最大的生命值( i5 o& _5 O9 U/ J
getmaxinpower 获得最大的内功值% L, B: F( p2 k E" o: `& u, F8 c
getsendermaxinpower 获得消息发送者最大的内功值
8 \& }; P5 W/ k9 w' k( f7 A U# Ugetmaxoutpower 获得最大的外功值# B+ o8 g7 X" o. T H3 [
getsendermaxoutpower 获得消息发送者最大的外功值
) f! G% V5 I! U( b& d/ J0 xgetmaxmagic 获得最大的武功值
0 Q" y* r- O$ O; Fgetsendermaxmagic 获得消息发送者最大的武功值7 T+ n8 ~( V- l: g) ]5 U
getlife 获得生命值8 A3 c& P0 Y; d6 S2 A" B6 ^+ K2 u a! B
getsenderlife 获得消息发送者生命值, g: ]/ R. ^) R/ v
O h: F. Y! t: Z" q$ Ogetinpower 获得内功值
* N# [" ?5 K1 n1 ]' Rgetsenderinpower
. M, j* R3 [. ^$ m( ?) A |