千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。5 a3 k$ p$ T3 m; T
( ^- y- p+ G% b/ w. z
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
: _7 Q0 }: W; x2 a
8 G& [, A. h% G0 ~, [( k! f! w一个函数的基本结构是这样的:0 U/ Q. @; B% @0 M( _2 V
; V8 W3 p# l+ t& X7 j/ I
procedure OnCreate (aStr : String);
5 M/ y; f+ N/ Q* t+ N; q4 Fvar0 C- k8 L6 s9 M8 u0 N- [
定义变量
6 R5 L8 h; `7 Rbegin
, l! K% i$ r! J! d 语句6 z4 i/ E$ ~& `( w2 h
end;, W0 Z) Z# b1 H9 `: c3 u
1 f. z" r7 X% w
在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
6 Z% b f/ ]0 e: o) N! s' r- ?3 u2 I% z$ u
千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。7 ~2 i, y+ m! V+ R: A* @3 ~
f: @( |/ {! ?6 ]) f/***********事件触发的函数**********/, j3 d/ n+ }7 h5 h
5 @1 f" A0 B% U6 {//当有人*近时
+ k2 k3 z" `# x# s$ Nprocedure OnApproach (aStr : String);
' x ^$ S+ p" b" P( L8 v3 e. ^3 k" a5 |9 }( e
//当有人离开时
: ?; e& ^4 C9 o/ k" t1 iprocedure OnAway (aStr : String);* j8 g) O7 |: K( h4 Y
6 r9 t% h5 a4 {6 L' @
//当受到掌风攻击时
6 \4 v1 j# c9 s" f+ r" P3 x4 tprocedure OnBow (aStr : String);- @, y; {9 p: K6 a9 k
2 v& M2 O j; L# r//当状态改变时
' e j1 H( b" aprocedure OnChangeState (aStr : String);
d' X$ j7 i' F1 b6 f! J2 l6 [6 [
//当初始创建时" u5 u8 @4 ^4 m0 y$ H* O$ e' M
procedure OnCreate (aStr : String);
* m9 G5 `( c4 ~! J7 p: P: M5 Z3 X7 Z9 D5 D) {
//当被双击时8 c3 ^0 X4 B( ~: d0 l! l7 G5 b6 G
procedure OnDblClick(aStr : String);
5 Z) N. z9 Q9 g* J5 m0 b# z; K6 L( S; a+ {5 d# _# X3 g
//当死亡前5 T& ~7 M5 m. |% I+ l" V
procedure OnDieBefore (aStr : String);: D6 {& C, B. p3 `( u4 v8 H
% [# w% Y/ E. K( L0 V. G& |//当死亡后
/ `3 ?% U9 c+ b$ |, b, ~procedure OnDie (aStr : String);
: w- g! J5 g% g( j; R8 G0 E
- D# h: s- ]' D, h+ ^& D9 \//当被拖放物品时 i$ h# Z7 c1 ^* J% }# p- s
procedure OnDropItem (aStr : String);
- ]! i; l$ K9 S$ o# a4 K5 m
$ K2 S# J, G% @5 M//当得到命令消息时) n1 P" q! k" q1 C6 Y
procedure OnGetResult (aStr : String);8 I9 L# b1 [3 Y7 w$ x
4 l8 o- n: Y. L, \
//当得到改变步长时
" ?! `* F0 a! w7 |8 }procedure OnGetChangeStep (aStr : String);
: @: [! }: L. M% z1 ~
5 V4 s3 [) j, L; o: l$ Q//当受到攻击时
* Z& `+ `9 ?- z6 Jprocedure OnHit (aStr : String);& M) W5 Y0 L& e$ B1 t: _
! u; j1 H8 T [2 H T
//当被左鼠标键单击时2 N: Y* I* V1 C5 e; ~1 Z' c
procedure OnLeftClick (aStr : String);
9 \* X0 l( P% {0 B& g
I) n4 O- Z. S- J2 q; |: z//: G" B6 d B9 z
procedure OnRegen (aStr : String);
! Y8 |6 ~ z$ U* h" c* z
' U ]7 Y; x1 `# l! E0 S9 C//, b% O6 K, q! F+ ^0 T2 c7 E
procedure OnTimer (aStr : String);
. v' Y! y& b- g+ r
9 b7 F9 c0 b& g7 a( B//当物件发生翻转打开时,一般是用于门' n- f5 v' t* H# P) g, {! |
procedure OnTurnOn (aStr : String);
2 Q1 R- C; y2 V1 w
/ q7 x0 @0 N" G3 Q//当物件发生翻转关闭时,一般是用于门
9 |) r4 j+ r2 ]/ j3 }procedure OnTurnOff (aStr : String);" ~' U9 t5 K2 O8 c6 H
1 p! K6 }. x3 y" A" J//当用户开始游戏时; n9 [* K+ h7 J1 x) T
procedure OnUserStart (aStr : String);2 l2 G+ p! J- G z# T
) H6 B8 e2 @3 |* |& g- _9 y
//当用户结束游戏时
% h5 \- M' n; w1 H qprocedure OnUserEnd (aStr : String);7 ~/ L, {1 c) M6 h1 u {( X/ N) w
) n, z9 l( S) _( R, s0 F. M/ O) `' U//当移动时
* X6 R ?" W4 C3 h2 Afunction OnMove (aStr : String) : String;" {6 Z" x1 G6 F" Q3 C$ A; U
. y& }. K+ i0 r& Q' n5 G' X, ^
//
x% Q& \+ ?/ V" Y- N, Wfunction OnDanger (aStr : String) : String;/ |3 z6 b0 V" ^7 F5 E0 F) P& t
0 B( ]+ T+ j3 D$ O
//产生一个随机数(系统函数)
' T# c2 |1 u, {( x: R- o2 p) C& g1 Dfunction Random (aScope: integer): integer;
3 b1 ?8 g, B; W' Y& X! ~* q; M: P2 c9 f1 `# q2 {7 Y+ {
//返回指定参数的消息(系统函数)( x4 i( l) x8 `( Z$ K$ A6 [! ~2 x
function callfunc (aText: string): string;9 I3 U0 C1 w: E1 l0 C \
, r4 R3 i4 D3 v2 M& R: w }7 x//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)& g$ M& H2 z9 U- S
procedure print (aText: string);
, m8 w% s5 S/ | I" C1 o! M1 p" u' x& A9 B
具体参数(略),整理中...........; j- }, p! Q6 J, O0 W) V
' i8 ~" r$ j* l( Q
//转换字符串为整数(系统函数)1 k7 W$ g; X, O, ]! T8 C
function StrToInt (astr: string): integer; C8 ?0 A9 N+ T% k8 @/ M
; M% N' J& @: t8 |//转换整数为字符串(系统函数)
6 C$ j5 @ i# O. z2 N. s9 Nfunction IntToStr (aInt: integer): string;* \; H8 ?- l; q. m4 T$ j
( o# N8 d7 E; ]
/***********事件触发的函数**********/3 E9 G$ v" X7 o0 r ~3 ^
$ i( f* C6 S; A( o5 Y! N3 F3 b
* G, [5 l [. Q% E( x
: H. L9 H f$ a* J
" A( y, c! H5 Q0 [' I, L5 v
+ C+ Y4 D c' c6 Z, p/ W! k0 i: k$ l2 o9 Q$ y
6 M: y2 {4 E) C/ l: z6 K0 Y, ]) Q3 J% u. l2 o# h- X- P* _" @3 z
function callfunc (aText: string): string; //以下为 aText参数的值
5 f; H3 r4 D2 w
7 R8 ?/ f, O- o0 r4 j" l& s% Cgetsysteminfo 获得系统信息7 B4 \, J3 q. E# R& o0 F8 T/ u
getname 获得名字5 c3 x9 ^) q3 J
getsendername 获得消息发送者名字
U* W0 p# c ^getage 获得年龄
{7 N5 Q* P1 B* p2 z5 V! ^getsenderage 获得消息发送者年龄
( Q6 y( x. H4 u9 I+ sget*** 获得性别- g) L% R1 E# m7 H* a1 V' m
getsender*** 获得消息发送者性别
% U# X2 Q" w/ q" w, W* W; ~getid 获得ID
2 n7 J3 L% {0 V& O2 c3 ]/ tgetsenderid 获得消息发送者ID/ P; D8 U% I7 Z" o& A& I
getserverid 获得服务器ID) r5 C3 N2 `8 n9 S7 D5 X( D$ M
getsenderserverid 获得消息发送者服务器ID. v6 h) C9 L3 P, i* ^$ f1 u( ]
findobjectbyname 用名字查找物件
6 q S9 F+ o- H% Z% bgetposition 获得位置
) ^' K+ B3 F( F8 egetsenderposition 获得消息发送者位置8 ?% C- n) J- u) }! b8 G7 n
getnearxy 获得亲近的XY
9 |9 h" g$ ?- f- B, s1 Hgetmapname 获得地图名字3 h- w% ^+ ?/ N/ E8 Z" o$ C# ~& v- M) P
getsendermapname 获得消息发送者地图名字
. w" b. f2 `: M# mgetmoveablexy 获得移动能的XY
1 C E/ r* p6 ? kgetrace 获得种族
/ A% t/ V o+ }getsenderrace 获得消息发送者种族
2 `. M& L$ K' v. I" Z2 u
. V& M2 ~0 z8 W8 u& f+ U% sgetmaxlife 获得最大的生命值. M/ @3 a& E+ F$ G5 y* [9 I s1 Q
getsendermaxlife 获得消息发送者最大的生命值
8 o' h' N+ e# N7 o4 |. xgetmaxinpower 获得最大的内功值
1 {7 B, J; V; _/ m% X; Y4 Zgetsendermaxinpower 获得消息发送者最大的内功值
& n% p/ M$ n: y5 B0 a) g8 _1 zgetmaxoutpower 获得最大的外功值
! h' H" P* g; K% @; d% X* D" Ugetsendermaxoutpower 获得消息发送者最大的外功值1 X' w/ d$ D) ]( C3 H8 x5 F2 z
getmaxmagic 获得最大的武功值
' I+ p0 w( }% N9 Sgetsendermaxmagic 获得消息发送者最大的武功值/ H$ G, v3 f e2 W) b- _! p
getlife 获得生命值
) p% \" D8 Z) b- B& D+ J/ h4 ggetsenderlife 获得消息发送者生命值
. n: w( u4 j" r* w. J& B$ t8 Z" T M) t
getinpower 获得内功值
* M5 V/ I: e4 b7 p! ?getsenderinpower 3 O* j) H" F( y6 ^+ E+ ]
|