千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。! p6 t0 t0 X. P8 i$ B# j7 q' f% B
' Q" K, b6 ^4 } s9 |5 A. d
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。, m+ M/ x& b3 V, i- h& Z' Z; _# I2 o
& {3 u0 k' U7 f4 O一个函数的基本结构是这样的:2 M, b, W4 r- ^( W; j
0 A; \- v1 H% ?
procedure OnCreate (aStr : String);, f. u Q! l$ C8 _/ N
var
; A! _5 u/ W% s' S1 o 定义变量
8 W$ p9 r8 E+ Y& \- Zbegin
' `+ A$ \7 l" V. z, o 语句4 a u* S0 v# u
end;. K$ F$ S( Q0 x2 U# n$ s5 f- K0 s
& ?9 I( i4 i7 k+ j; K$ s, R. F" y
在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
# ?0 r6 D E j( G3 _, G% ?# E' L2 O6 X9 w5 b
千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。+ d' P; ] \5 |9 @( g
. F6 {) e# ~) S% z/ a3 E! @0 I% ^/***********事件触发的函数**********/
/ E, o# u. W. Z9 H7 p* x
; X- G0 O& Q% w4 o2 Y7 F//当有人*近时
5 f/ Z# @9 L) X7 z9 I. n+ Fprocedure OnApproach (aStr : String);
0 h* P5 g w }+ f, d
0 V1 j D5 E0 \$ U//当有人离开时/ w9 W2 J. g* o8 _& r( z$ w
procedure OnAway (aStr : String);
5 h' _" l0 c0 j' a* p i
5 J0 L# ^& ]6 R3 H; x//当受到掌风攻击时
& I7 u& {% H0 \# g( E* J8 D1 I" Cprocedure OnBow (aStr : String);5 K* R2 S1 b; N! ?4 P6 L) S4 s
0 M; }( `5 [& }5 h//当状态改变时
/ F5 o" R# L3 K) V( [' jprocedure OnChangeState (aStr : String);* |6 y, N6 w" q _' [; M0 x
/ r& Z" V9 q0 d3 Q0 s//当初始创建时4 N$ q* f: n7 x9 z& e0 e1 v
procedure OnCreate (aStr : String);
4 {, e9 U E* d- _" j& [) F
1 \% R8 Y& J$ Z5 S* ]//当被双击时+ E I1 E9 C( ?. g! Q, ~$ p6 K$ N a
procedure OnDblClick(aStr : String);
: f" K% N6 |) Z& N/ w- h) Q: Z+ ~. E, |1 @
//当死亡前0 j+ ^" R# ]; U% W2 \, j
procedure OnDieBefore (aStr : String);1 i6 a, u3 o* H0 y* a. w+ k
; |9 j2 \$ }" N9 O" _. h, A//当死亡后+ W& d3 r+ g& {( a: z8 a/ z
procedure OnDie (aStr : String);4 N& e, y! a7 g% R' ]+ f( s+ L" m
- @: `3 ?; w& c! S: f//当被拖放物品时
9 J. B- v2 k5 l8 ?) \2 _procedure OnDropItem (aStr : String);
i0 h8 u0 ]; t- n; v3 W" D4 q6 k% F
//当得到命令消息时' ^3 q" K8 O% Y5 `4 [+ u# j
procedure OnGetResult (aStr : String);
$ r' k( `( ]' v% `$ ]. S+ |: U5 H8 f7 K' @# B% t
//当得到改变步长时: t% O* y+ S [0 c2 u3 W
procedure OnGetChangeStep (aStr : String);4 t7 g4 U+ J1 n; W# P; P) \* \, v
- X; @+ H: p4 c' {& y3 y
//当受到攻击时) |0 O7 M! G1 C- O0 ?$ G# G
procedure OnHit (aStr : String);* ~( v& N: A, S7 J
; y- ?, c- s* m, I$ K3 o0 n3 Y//当被左鼠标键单击时% J' d/ U% C) }; A
procedure OnLeftClick (aStr : String);3 I/ V" l) y! \
5 J: O! i4 q. i1 a//
. g! @! T6 x- w5 d& [! i S; K- ?; K2 Rprocedure OnRegen (aStr : String);4 X5 b# y: {& c2 @
% G _* i. M% M( m: }
//, f" @: z+ j4 J+ w6 U1 L$ ?
procedure OnTimer (aStr : String);5 c8 L2 h9 z8 T+ g4 L8 U
/ K+ r. E, Y' ]' E! m0 B/ h- L
//当物件发生翻转打开时,一般是用于门
+ ~4 A R( f s+ Sprocedure OnTurnOn (aStr : String);
$ \- D7 F A7 P/ @1 W( [" H; D
% W* u: Q: I" G: C( C1 B//当物件发生翻转关闭时,一般是用于门* }+ b: D, K, I
procedure OnTurnOff (aStr : String);+ m9 [! j! G9 X- W' Z
9 w$ f& O" G; V# K8 X//当用户开始游戏时
+ }1 l$ W0 o2 ~) Bprocedure OnUserStart (aStr : String);
9 q) y5 A5 x, @! |& ` Q) e: J3 L- E- E7 [2 u6 Y8 ]/ a+ | l5 v
//当用户结束游戏时1 X* d+ X5 }( n. t/ o
procedure OnUserEnd (aStr : String);" d! f8 u' Y+ j" ~
( d) r/ V; r/ G/ c/ d1 L; W0 `
//当移动时
. @, `3 n# \8 Lfunction OnMove (aStr : String) : String;
0 ^4 S. e1 h. c) O+ h+ |
' y. I3 O- f6 `( F6 H- `$ T2 J/// ?0 O g1 S6 v& h& q S
function OnDanger (aStr : String) : String;2 F4 {* X) V. F1 U
, V0 z! q/ A/ s
//产生一个随机数(系统函数)2 d' o2 ~+ ?4 Q7 _5 K8 {
function Random (aScope: integer): integer;
' ?9 i7 k* J7 K3 @. F% O7 Z
1 e5 A5 O" S) C9 @3 O _6 R, d* h//返回指定参数的消息(系统函数) t; X6 `3 _/ z" t
function callfunc (aText: string): string;
9 I! n) c4 H7 Y4 z
6 ^" X* C1 N o0 Q, J6 ] H' K//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
& T/ T$ e+ ?6 T% Dprocedure print (aText: string);' O& X5 o+ D5 @* q4 u
9 R: Q8 a9 Z5 B1 G具体参数(略),整理中...........) J% P: ~# s5 f. M$ }* S! w
0 o, [* ^" A% Q4 v% e5 w
//转换字符串为整数(系统函数)# I$ u- u/ P7 M/ p% O3 b
function StrToInt (astr: string): integer;* }# b# j* y% x/ I) ]1 u
; ^+ k7 \, `% R @/ s//转换整数为字符串(系统函数)$ s: N3 i/ T4 q
function IntToStr (aInt: integer): string;5 z& f' f% o. K2 Q* D5 A5 S
( X* \- ~8 Q' Z+ O6 q: f
/***********事件触发的函数**********/
; k. l6 ?# [( T8 I9 i
: O5 k9 h) @% M1 Z) x3 L8 Z
( k! h+ f+ |; u2 M/ l! `$ s* }6 v
* A% b' P( G* y2 G3 M0 q& \! K g( W8 z7 u7 I
) h- D9 I G* a
, k& [' S8 V( F1 q. u( L. n
; p! v X1 M" M* b% B8 [
" g* v0 d; g# U& l F& H2 `
' f/ U& l4 i) L3 dfunction callfunc (aText: string): string; //以下为 aText参数的值
; W ]5 H" w, K! q/ J% u4 P1 d
' i6 ]4 W/ w8 q$ ~6 Ygetsysteminfo 获得系统信息; Y! ^5 a4 B! n4 i, x6 o
getname 获得名字
+ I9 e6 @, }4 i2 Y! J4 Ugetsendername 获得消息发送者名字
" ^% i, A" e% I% t5 T2 F% Cgetage 获得年龄
1 K- v3 ]+ K. [) a& y @getsenderage 获得消息发送者年龄- U1 E, J( Q% C/ E2 u5 ?% D
get*** 获得性别
( u/ y) V. O0 q% }. S8 dgetsender*** 获得消息发送者性别# ?) K9 u, y8 L$ W5 j! v, q
getid 获得ID8 P, x: O+ h( E3 ?8 S$ ?
getsenderid 获得消息发送者ID
) h* g; ] T4 h, Hgetserverid 获得服务器ID, e; B9 A6 T7 p
getsenderserverid 获得消息发送者服务器ID; a+ ~4 H7 q4 p5 |' d9 J1 b D7 ~
findobjectbyname 用名字查找物件" d) }5 r$ b( O0 O8 p' `2 T
getposition 获得位置
5 p- `4 i8 G! C( ggetsenderposition 获得消息发送者位置
# E/ w+ r4 f3 ^; W8 c# P I6 F4 agetnearxy 获得亲近的XY7 [% ]4 w$ F. U4 I3 M5 h' Y/ o4 q
getmapname 获得地图名字9 i! V* v3 F( o8 P$ x9 A- V
getsendermapname 获得消息发送者地图名字/ P# c2 o4 @/ V' x
getmoveablexy 获得移动能的XY+ {. } N" c4 n9 s7 B
getrace 获得种族* Q) e1 [5 B% H7 v9 r
getsenderrace 获得消息发送者种族
o1 J! r8 i( q; w
3 ?2 I7 v1 G# x4 B9 agetmaxlife 获得最大的生命值+ E5 \0 V) Z6 l8 j" I( h
getsendermaxlife 获得消息发送者最大的生命值2 q! |( C! i8 ~* O
getmaxinpower 获得最大的内功值
9 P" b& a4 X' q& E. i+ u# Tgetsendermaxinpower 获得消息发送者最大的内功值2 ?, T. n1 M; W/ ?( B
getmaxoutpower 获得最大的外功值
+ q! _6 s2 m5 m* B& m% P3 dgetsendermaxoutpower 获得消息发送者最大的外功值3 F/ N! z/ f5 m8 P
getmaxmagic 获得最大的武功值
8 t* ]9 g6 D/ Ngetsendermaxmagic 获得消息发送者最大的武功值7 q5 l5 M6 B/ i! f
getlife 获得生命值( L4 z- T) d4 Y( K- K
getsenderlife 获得消息发送者生命值
' S) s; m {( o# H
1 i' M! c6 l: B- r, k3 m- A0 |getinpower 获得内功值
' V, G% Z' n1 K; Y% Agetsenderinpower 9 b9 A0 J5 S5 e7 C) u( p' n
|