千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。5 m% N, N, ^& J6 z% V5 w
- r& W2 a/ X( |. u# u) o千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
# q+ j- j& |# a8 K7 S& n2 S9 I2 c4 F# `7 V
& `! [( s, E; W& R+ a一个函数的基本结构是这样的:
+ \; T! F/ }; i
' d, Y6 f, s8 w5 [( \procedure OnCreate (aStr : String);
2 ^: z8 c$ g. K B) c9 ~& Gvar5 p T$ ?8 }$ F! }
定义变量
! I, N5 F3 H$ q" Lbegin4 u; h( Q& }% {. c5 y, [
语句0 p3 O# v0 W8 B4 i/ P! k
end;2 D S: Y8 L' m* k; T/ R7 S
' S9 g; Q7 k$ H6 d. t: B# b
在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。- N! r. `7 O2 Z) @5 V! |
# z: M* N& v6 ?5 z9 U
千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。7 R* \* Y B" ]+ [
0 ?/ b2 x, N, G* B9 V/ e
/***********事件触发的函数**********/
2 O2 k* b% q5 E+ }1 r1 \0 i# Q6 c s% I9 q. a4 q
//当有人*近时
$ s! M+ Z# {6 c1 _4 pprocedure OnApproach (aStr : String);" B" ?! z8 p" H
& Q# ^) Y; s3 Q4 r. E8 e
//当有人离开时, R, x- p) [* Y9 T
procedure OnAway (aStr : String);1 T! s3 g, S$ C( R: l: F
- x/ w* k) k7 k5 M- _: P* w//当受到掌风攻击时) t' E w# A+ T4 j. \
procedure OnBow (aStr : String);/ k) O+ r" K# M8 U0 b* Q
/ d" Y$ U) J" y# I! K. R" }/ H
//当状态改变时/ z1 q( N j8 v+ P' f, C, o
procedure OnChangeState (aStr : String);1 L# G& |) I4 s2 `! y: }! y! L5 e
8 [& K: t$ K5 g1 U3 a! o
//当初始创建时
, \ P. [, |+ [( T& Tprocedure OnCreate (aStr : String);
& j" c6 |5 y/ I6 S0 I) K- A; q j4 b, [+ Y4 Q
//当被双击时7 m2 h0 U# B# J! Q( H! z# |
procedure OnDblClick(aStr : String);% b6 W! Y. { ^1 T2 L
2 U! O" t! u' U5 j
//当死亡前
# U% V6 h/ U/ aprocedure OnDieBefore (aStr : String);4 x% h$ I0 `2 y; K7 C6 Z
9 p& P; Z% a: Y0 H//当死亡后
+ f9 T9 m E jprocedure OnDie (aStr : String);
1 Y5 {7 O) i! W. e! r3 Z2 L4 B
& c# a u9 e: n8 K: B8 c3 r//当被拖放物品时* r+ U; E0 L7 S5 v# S) e
procedure OnDropItem (aStr : String);( ]1 K2 l' T* Z. B6 ^! f
3 C: x9 B2 _5 t) [3 i9 n+ R
//当得到命令消息时0 {4 Q1 J2 C _* t# J- y4 f
procedure OnGetResult (aStr : String);
' [; A8 \! j$ E, \/ [& j }( l
' f+ D, N/ R# [9 c' C//当得到改变步长时7 }+ O# V3 h. ^* U* ^/ Z
procedure OnGetChangeStep (aStr : String);0 U8 S( q' f4 [
+ l" E8 w$ O4 j# G; b" |
//当受到攻击时
/ }( l5 `, q' i c: iprocedure OnHit (aStr : String);
8 M& ?2 \' }8 p$ F
: F( @0 F: Z7 k( z; ^//当被左鼠标键单击时
0 G* ^4 Q; I. dprocedure OnLeftClick (aStr : String);) ^" E8 D5 G- Y. q, k+ j# V& b9 Y
l. s3 @# Q) ~
//
' b& E. U+ ~2 b+ \procedure OnRegen (aStr : String);3 b2 J# e9 c. \- p, V3 _" j% {
# y4 H3 A# P: g+ D. t
//
0 k; }# y: |, E0 |% l+ ~$ yprocedure OnTimer (aStr : String);, x3 A. W7 W) D( @/ V! n( z
' C. x8 k% X# I0 o2 B9 m0 n7 X/ V
//当物件发生翻转打开时,一般是用于门0 e$ M, J( @0 ]9 f" Q5 a
procedure OnTurnOn (aStr : String);8 D) @7 a0 S: A8 O6 r6 r" h
, v3 v3 Y8 j7 Q' u4 q//当物件发生翻转关闭时,一般是用于门# _" N+ V' z7 i3 A- k: e/ \! p# _: ]
procedure OnTurnOff (aStr : String); w5 G6 W" ?/ |, {) {8 C1 j( P
1 Q& P/ {" C) q) q9 R+ W7 |
//当用户开始游戏时- c" a1 w3 B- ^1 h
procedure OnUserStart (aStr : String);/ |) n. _( `4 ?/ Y1 l& |. ^
# m! y6 M% \$ [* o
//当用户结束游戏时1 l! k+ d3 K- f) c9 o
procedure OnUserEnd (aStr : String);) p6 k& |: _8 _2 u- ]# X# J
+ O+ `/ S ?4 g* _3 F/ }//当移动时2 [7 m- c0 q% m! @$ |
function OnMove (aStr : String) : String;
( g4 ^$ _. F4 O2 G; _% r9 y6 i
- I$ S# g5 @. b//
( r8 |; F) R% l: }, A) Pfunction OnDanger (aStr : String) : String;
+ x3 Y; V: s+ F( C# V$ t' f( Z w1 }3 Z& a c$ h# q& Q2 P
//产生一个随机数(系统函数)
: y. s# [. f: ]6 i* n% {4 zfunction Random (aScope: integer): integer;; m5 ]: F/ E2 F5 d0 P# A
$ G* Y$ u( n$ p+ K( w/ I//返回指定参数的消息(系统函数)( ^: a3 u Q/ q8 ?& b; t
function callfunc (aText: string): string;
2 B+ L$ L8 S* `4 C
2 Z8 u, I) T2 P# i: J' ~//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
7 Q" X6 U' v! M2 w c. e# {procedure print (aText: string);: V9 T! R: s9 _! f o6 Q; d
9 n8 G# Q4 P* C7 p& U具体参数(略),整理中...........# [/ j+ ?% i% B+ k1 w
+ r8 |. k* t! D* u7 K
//转换字符串为整数(系统函数)
- c' v2 S; w! ~, ~+ h$ Bfunction StrToInt (astr: string): integer;
, M# A5 J! q) i7 _0 N/ V
) n+ a/ G; d& O: y//转换整数为字符串(系统函数)
8 T2 M. F; n$ }: B7 @function IntToStr (aInt: integer): string;
; ]: y. g* j; K
% P. n* A! D3 ~5 s0 K" o& n/***********事件触发的函数**********/9 p5 L/ n; F" v5 l/ q* j0 w8 A4 Z
' ?4 M5 K4 h* k, f& P/ l
# `# x6 f$ H/ f. w
5 J' N& V* Q/ j! j P8 w! B, n; D3 J1 x, `7 L5 d
+ H1 V1 h' o! r6 D- s
/ l/ \9 d1 X. \8 m! D) z
( A2 u, G6 D$ y5 D( p! F6 |* ]
# N& ~ ?) n( {
) a4 k7 \/ ~- _# i- F$ Zfunction callfunc (aText: string): string; //以下为 aText参数的值9 f& n& E3 `* `1 g2 g
' d9 W$ K J# k% ]! e1 Pgetsysteminfo 获得系统信息
1 B. ]2 |- r4 Xgetname 获得名字
# X! Q, A- v; }0 ^getsendername 获得消息发送者名字
3 \9 X% k3 A# Q+ ^) r8 Mgetage 获得年龄4 l. t/ R" ~1 } n5 d
getsenderage 获得消息发送者年龄 M6 A0 F8 J: |5 t8 i% C- L
get*** 获得性别
" N4 z5 o2 \2 J# jgetsender*** 获得消息发送者性别
6 I4 m7 G! ?) w9 D2 ]3 j( q jgetid 获得ID- J% x* D3 S) W. ?& M. {
getsenderid 获得消息发送者ID7 F- e" f/ \0 y a. ]& t
getserverid 获得服务器ID
4 ]) n2 x; _, d$ L0 [getsenderserverid 获得消息发送者服务器ID
0 y: H/ y( n& W j6 Xfindobjectbyname 用名字查找物件 Z$ ~) f7 m; N( L0 h; L; R
getposition 获得位置
, h4 I* u+ @! }/ `% ]9 r1 ~8 ugetsenderposition 获得消息发送者位置: S0 Q# t; U8 K. U% Y3 i& ?/ w' X
getnearxy 获得亲近的XY
' |9 M/ t1 ^; q0 |getmapname 获得地图名字% B4 m# n/ M# z2 W2 d
getsendermapname 获得消息发送者地图名字: @$ M4 L1 n! Z
getmoveablexy 获得移动能的XY0 r" l9 r* N) v& S C( A& h3 B- E
getrace 获得种族, z' B& n3 w$ t( J) B/ C- W+ W- C
getsenderrace 获得消息发送者种族; [5 ?/ ?, u( y
/ X$ F3 R5 ?6 _ F: Q) C- Kgetmaxlife 获得最大的生命值8 H3 D( p! L1 r+ z' p
getsendermaxlife 获得消息发送者最大的生命值
" Q& t/ j B- b" N6 `% R. V# Y# E' n/ Wgetmaxinpower 获得最大的内功值
) K, O" ~" J H1 z8 k4 }getsendermaxinpower 获得消息发送者最大的内功值
0 A( _) D1 L* O: o) X4 Qgetmaxoutpower 获得最大的外功值
" V/ F9 p' P6 b. K' F5 t) hgetsendermaxoutpower 获得消息发送者最大的外功值) x0 N9 I& G" V& D
getmaxmagic 获得最大的武功值
; R) E5 o% }1 Q9 |getsendermaxmagic 获得消息发送者最大的武功值
L7 H. M; V. T z& rgetlife 获得生命值- [6 \% v$ b1 L0 l0 z2 `: e
getsenderlife 获得消息发送者生命值5 T% g4 b1 C: c) H% o% b
' G4 S; ~3 {+ Z; X& ?5 j. J; z k4 R: ^
getinpower 获得内功值4 [3 p9 y. f2 h& r7 L$ n/ @
getsenderinpower
! r. x0 V3 z% M9 G# t& i9 W |