千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
7 C4 l) o5 j: H* ~% Y$ J) |' k1 K
9 \# K1 z+ G) G2 c" `" y千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
0 q& i$ a- b+ `; a2 L5 s4 k- Y8 r. \
一个函数的基本结构是这样的:
4 Z# x2 U0 |& Z: M+ L
" z1 E; r3 b7 N! Tprocedure OnCreate (aStr : String);
" f# w% \9 r' N+ [* q$ q! j5 ivar
# Q+ r4 k0 ]8 L; e$ ^4 @9 l 定义变量
5 p, ^( x$ j4 Q5 pbegin
* H+ j8 Y9 b9 T5 B6 G& o 语句3 M5 e2 H" A, h3 g9 U# a
end;
6 v! D- [& G# |$ f8 v! M! d5 S) N% d/ Y. t, Z
在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
8 e, J+ e1 f1 B' y# R3 H8 Q
& ^5 U7 s @ M. J+ q2 H# H& _" M千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。/ C) M; J6 S' z9 f( r# Y8 E
' `, w3 [6 W9 V5 G% e. n) y. v; `/***********事件触发的函数**********/3 a) }. K# ^6 I# e4 ]# V1 x% u
0 b2 o, j! u7 o! [$ c
//当有人*近时4 h2 |9 N# C x5 X" P8 Q5 C$ I7 h. i1 j
procedure OnApproach (aStr : String);1 r: V: `) r' D$ ^
$ t2 m2 @8 m: e( P9 Y1 k
//当有人离开时
1 x4 Q3 O- h4 n6 P* ?6 Fprocedure OnAway (aStr : String);3 B9 ?) |& |- O" n' c
# \# [2 b0 i% q4 Y6 p: u9 l//当受到掌风攻击时5 U- a# r' S7 ]; R: j8 W1 Z
procedure OnBow (aStr : String);
: j. [5 E. ^) X# G5 ^
- U) B* x* E! r/ D/ O d2 C. o//当状态改变时
% L8 z4 W8 V9 nprocedure OnChangeState (aStr : String); \- C- h) o7 h2 \& x5 v
6 v- R0 K5 W. m: U: F9 d% F7 r, G
//当初始创建时
3 X; [4 f, E+ F, k7 a' \1 tprocedure OnCreate (aStr : String); m! O3 K) b" X9 i
, w3 ^4 _- ~4 P! V//当被双击时
9 c- U+ n; s0 C4 Nprocedure OnDblClick(aStr : String);: X b; _6 C! ^
- i/ g4 X. Y) x& M% |$ y
//当死亡前
/ M$ j& i* ~1 w! I; Rprocedure OnDieBefore (aStr : String);
( t: `9 F/ a4 X0 u
4 `% P2 L X) S/ x//当死亡后
* L0 f/ i0 O5 H1 Z1 vprocedure OnDie (aStr : String);; ?+ h8 E, H; v' c
" B8 j, F+ ?- W$ `( Q+ b. G//当被拖放物品时* g6 _* J2 a9 |
procedure OnDropItem (aStr : String);6 O# m7 F; G, @* b! b+ J& |
3 Y/ s) @1 n* s$ y$ X. i4 ?
//当得到命令消息时8 s" z5 ~& p7 i. j, Y) \5 w
procedure OnGetResult (aStr : String);
2 m9 A0 L( O( H; f. L- I
$ H* ~$ q k* E* U4 ^//当得到改变步长时6 V7 N0 F3 b& u
procedure OnGetChangeStep (aStr : String);7 M6 U- U5 ]1 A6 j, m# _; F0 t+ u
* ~+ n$ l o1 W0 T! Y
//当受到攻击时
5 \- p, Y$ J/ M. J+ Vprocedure OnHit (aStr : String);+ j- n5 Z+ @$ q3 @6 y; A
5 P: [& U" k' m4 P2 J% J- j6 d//当被左鼠标键单击时
5 _6 N% t" c* s/ I- R9 o8 {' B, m$ Fprocedure OnLeftClick (aStr : String);
/ ^7 {- Y- G/ X; x R' \- M/ N7 I4 [- T; e4 X ]1 w# R6 Q* P
//
4 N/ m/ L, [: n0 wprocedure OnRegen (aStr : String);
: | i5 v3 j7 g) M6 {
; c3 e% W' Z+ L. \' P% W//8 I: V. k0 T& K) a! ?. f& h
procedure OnTimer (aStr : String);% l3 ]1 s5 ^5 a) ]- L! u
o9 N3 A$ X1 l& i$ \, j! {/ r//当物件发生翻转打开时,一般是用于门
' `. S) |1 C! R; Yprocedure OnTurnOn (aStr : String);
# w W: L+ O! M6 K2 P
/ x: r/ {7 ^0 c//当物件发生翻转关闭时,一般是用于门
" _1 @) g. E7 f( P3 Mprocedure OnTurnOff (aStr : String);
3 v& W1 Q+ s- H' P: ^( b8 C
- d5 _0 l( {/ x8 D: b//当用户开始游戏时
; m' y4 [. p3 s' G! t/ }6 Pprocedure OnUserStart (aStr : String);
8 Y. z" D/ P+ D2 R1 \! i
5 S( Y- j7 @4 X) V3 M; z9 Z2 y; R//当用户结束游戏时& h# K/ X1 K3 {2 C
procedure OnUserEnd (aStr : String);1 W- Q2 n2 u( R7 Q& i2 c
- X; }, B. c9 z# D/ Y+ I//当移动时
4 g/ M/ g. _# J3 q3 H5 qfunction OnMove (aStr : String) : String;
! n& Z# R" g* Y6 p; F
& K$ U T F( J8 |6 _3 ]+ ?//
* w1 S6 n6 X" s( I' [$ Ifunction OnDanger (aStr : String) : String;
( q- f# F8 W: C3 Q7 }: a8 x( [5 p. i" G6 i4 c0 p' d. b
//产生一个随机数(系统函数)
" a0 j& |2 v" _! h7 K1 bfunction Random (aScope: integer): integer;
8 I; u1 g7 [# U+ Y- F5 k$ Z7 g! _
//返回指定参数的消息(系统函数)8 O0 S Z) g7 e! [( x) ]
function callfunc (aText: string): string;
: V. a6 g" E( ]2 y( h( D+ q1 l9 g
" q; Z3 `( k N, o0 k# q//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数), c/ E5 S( x" @9 |2 E/ R9 s
procedure print (aText: string);
3 Z. [1 J) c2 z
% J0 X( }6 C( t/ f4 w# ]- h具体参数(略),整理中...........
+ I( w6 [2 M0 |% m- ^! A8 o% O* U0 `# T. m+ p! t C
//转换字符串为整数(系统函数)
6 [2 a) | T( Y9 \) @6 I7 Q# tfunction StrToInt (astr: string): integer;
$ T2 y2 G* L$ m4 j& G( Q: r3 [
4 P* R e0 w& }) W//转换整数为字符串(系统函数)
) f; W, c) ?: r* J d9 Tfunction IntToStr (aInt: integer): string;* z' @) N3 I. a3 n) T+ q/ D2 f8 }
! h Z. b7 ~0 n# M! H9 e
/***********事件触发的函数**********/) a& a* o! {$ ?9 a) B; @3 S2 n' L
' `9 T- z, P8 F/ a. ?! _/ ]
0 }- q7 h# ~ d; k( K$ ]+ t3 E9 B9 v' @
n/ ~( [. A6 Y) e
5 U1 W9 C! s! w" B, Q) L' v& n
5 l2 |: m$ `+ ?- A/ s% j( R; d
9 G, E( e9 ^& I5 e8 m0 U" [5 e: c7 V5 P# T" |8 `5 I
0 b( {6 a: B# F9 ?3 p
function callfunc (aText: string): string; //以下为 aText参数的值+ z) w5 k& W& w
% P' s4 r4 S8 K& k' g, }* ?
getsysteminfo 获得系统信息
/ H' M$ |, M" {- I: s3 Zgetname 获得名字3 i( H& [. V% ]0 W% i: a
getsendername 获得消息发送者名字
6 q) c8 ~: L. V+ W0 [$ o1 U2 E6 hgetage 获得年龄0 A" U4 R, L- |
getsenderage 获得消息发送者年龄
4 z; p! {0 F1 d* ~) P$ L( Aget*** 获得性别4 r9 F: G8 y# E' N8 y. R
getsender*** 获得消息发送者性别' G: I7 ?' s( Z& ~& j0 i7 v, R8 q
getid 获得ID( Z" n: { R* r0 k' ~: t
getsenderid 获得消息发送者ID, m/ s0 U6 ^) Q- x9 U) w$ V* H
getserverid 获得服务器ID7 }! f' ^* Z6 q9 S1 `% ~' ?
getsenderserverid 获得消息发送者服务器ID7 {# x( }4 j0 A4 S7 F9 {; m
findobjectbyname 用名字查找物件 _: r. I4 z1 T
getposition 获得位置* h* c: Q. k' Z7 } ^
getsenderposition 获得消息发送者位置# e8 }6 j3 v l( r6 _7 J5 z) D
getnearxy 获得亲近的XY9 X, _5 u+ C" F- I) @
getmapname 获得地图名字
! ]; Z8 _! _- ~. T4 b' c$ Y8 Hgetsendermapname 获得消息发送者地图名字/ a! f$ c- |; N, V
getmoveablexy 获得移动能的XY, V$ E, P' G" o. U3 D, E: Y
getrace 获得种族4 `$ v: Y) f' b9 Q' e
getsenderrace 获得消息发送者种族
: K A4 H; `- {3 A0 e% Q( z! w1 l+ a s* i/ a% j5 h
getmaxlife 获得最大的生命值& S9 R7 q/ Y9 b+ h# s. {! r9 N
getsendermaxlife 获得消息发送者最大的生命值 d; Y8 F- w! _7 @) J* S
getmaxinpower 获得最大的内功值
& Z% Q2 k9 ^( o1 E1 t( Ggetsendermaxinpower 获得消息发送者最大的内功值
6 F0 { t! Q9 H1 Cgetmaxoutpower 获得最大的外功值: k: E3 @8 A# I
getsendermaxoutpower 获得消息发送者最大的外功值
; ~4 p! U4 |, v2 T7 \getmaxmagic 获得最大的武功值
! |1 }3 z' t+ g. ~% e9 E- qgetsendermaxmagic 获得消息发送者最大的武功值/ ~5 ^/ }' r8 g9 q' J
getlife 获得生命值& F3 }, q1 I* {" v6 d
getsenderlife 获得消息发送者生命值
" e* D4 U: w7 R& _3 f0 g4 m/ ]# i6 P: E2 z: A
getinpower 获得内功值9 z" w6 ^% S) C2 }1 v1 z% F7 r
getsenderinpower ! t0 U; B; ^2 j7 _! B
|