千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。8 w$ k% R# e) d+ Q% e
. c2 r+ ]& A+ X8 W$ v
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。: K" S( A/ L* F- M+ O5 ^
# ~" |/ e6 [: v9 ]- B( U
一个函数的基本结构是这样的:
4 N8 s* J2 g- I2 S- l: F' B* _+ O0 w8 i$ B0 t; Y
procedure OnCreate (aStr : String);& Y7 C4 E$ x7 C4 }
var
9 g% g8 w, X" j" g% A 定义变量
& V: x% o; y; x C) {1 gbegin
Q4 e* K! q( A 语句& L3 T1 x# S5 `
end;4 x, T# Z$ x: N9 I% p1 B
4 d @2 H9 a" Y在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
8 m1 ]1 N# \: T o0 m
6 n( B) z# {; ]* @千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。% ~" i _1 E* t5 {2 G
, ^/ M# q" P( I% a* J
/***********事件触发的函数**********/4 f9 T4 a1 q! a0 m4 ?- I+ q/ T
; z; T# x+ V5 h' t( C//当有人*近时
! V, c- _; I$ T+ i5 ?procedure OnApproach (aStr : String);
5 p: r, K# u% i0 V4 B8 c n8 @5 _/ R4 o7 o! Q/ G+ j
//当有人离开时
$ b; m i& X- Rprocedure OnAway (aStr : String);
/ G' U. I9 _( e% n- _( [2 H# J
//当受到掌风攻击时
1 b/ A, q* a6 {) C* X( e# X Q' Rprocedure OnBow (aStr : String);% S& x1 e" O1 |
2 ~/ ~1 _7 l& r
//当状态改变时8 V. J7 c, @( v2 K2 h6 F" E
procedure OnChangeState (aStr : String);3 k/ H0 c0 ~% R' D6 V1 f7 T( { X1 I" \
3 U" e: }' k8 f! f
//当初始创建时
9 F+ w3 ]( t9 E7 p' sprocedure OnCreate (aStr : String);4 l) ^; I( A8 Y4 E' O6 D
3 i( L) d' T; |9 O1 J
//当被双击时
! ?- M `- q P% Eprocedure OnDblClick(aStr : String);
0 M, i' K: z0 N1 ?. h9 T4 _4 E
6 k4 C; _! ]& @' P- m* b( C5 A//当死亡前
' S# ~, ^. o$ w+ e. y5 r, B$ sprocedure OnDieBefore (aStr : String);- u2 h1 J2 ~# ]. b! P
& Q. P/ H+ H& J
//当死亡后) G8 ~2 R9 P( Z z* m- `
procedure OnDie (aStr : String);8 A& ?; z# ]' k+ p
1 l1 g& a" v9 H( ~# ^0 D/ o+ D; @//当被拖放物品时# p, M v9 Q( J
procedure OnDropItem (aStr : String);# T$ q* n- q4 D6 ?3 K
: M5 G$ b" l2 c5 v5 E* t//当得到命令消息时
4 s& v) s0 a0 B4 G: xprocedure OnGetResult (aStr : String);) m4 h! w2 ]1 ^ T# u0 }
8 l/ @ @$ u, V( I' j* C. l- V//当得到改变步长时; ]7 {2 _; e4 b- j$ ~- q% g
procedure OnGetChangeStep (aStr : String);5 p, B3 u8 e: E) ^, u) c9 t0 M' H: Y
0 y# h. g6 q1 k) Q* Q
//当受到攻击时
* s4 d* ^: X z0 l( F/ `/ W3 ^/ n# aprocedure OnHit (aStr : String);
# y8 Z$ U5 U' I I! b' a' z. c; t9 X/ h4 F" F. n: u8 n4 m
//当被左鼠标键单击时8 x! r8 ^# { V) ~
procedure OnLeftClick (aStr : String);7 q: _# s6 N* [, q
/ U8 j: Y. Y, w1 {( B/ Q5 N$ j2 j//
) F$ c) ~# ~& @* xprocedure OnRegen (aStr : String);. G* h+ K6 `/ j) I& `, v- M$ T. e
& P. k9 G+ a) O7 z' Q, _//! l4 g2 P7 T$ W# `: ]$ \0 X M4 p
procedure OnTimer (aStr : String);+ ]) m; t, v% X% T' n
7 q* y3 v- _! t4 n& B//当物件发生翻转打开时,一般是用于门
8 k) y1 _$ s# |# f9 ?1 Qprocedure OnTurnOn (aStr : String);
5 ?( W9 J; Y" g8 H6 M( C: e, c/ N' l( P9 ]( D+ n7 O; ~/ g( e
//当物件发生翻转关闭时,一般是用于门
& P/ \: h0 w+ d" F( kprocedure OnTurnOff (aStr : String);; h9 Q# X/ O. n) _0 F- C6 ~* L+ l
h/ D3 p- g' S: ~; X//当用户开始游戏时
/ h7 O# c! G+ O& n, D: Sprocedure OnUserStart (aStr : String);
7 h, G7 v' N- ?
5 h R) g! q- r1 G9 s//当用户结束游戏时
% G0 F9 W7 }2 w! M4 a# S. dprocedure OnUserEnd (aStr : String);
0 ]( b" O3 ?' t/ n
- ?6 a# b) [# B M9 m" z) L* u- q//当移动时$ B, A2 X3 t6 @5 M) H& M, t
function OnMove (aStr : String) : String;9 |0 N% ^ m7 n9 j% f
8 Q. X+ b7 l9 f4 N+ A
//8 w' F9 Y" Z" Z* U' V2 z. C5 t6 M
function OnDanger (aStr : String) : String;% J+ m# M. P+ [" k* O* x
, v5 F7 H1 \8 Q4 s* B" \//产生一个随机数(系统函数)1 z0 b1 f8 p0 [% q: Q: G' \/ e
function Random (aScope: integer): integer;
! L! W* Q( \8 j+ Y$ a1 m. p0 m' X) A/ Q- m3 K
//返回指定参数的消息(系统函数)0 ?" e {7 {% I; M3 ]$ ^
function callfunc (aText: string): string;
^; `) `! S, ^, b7 Z- C8 w; | {. X- P' B3 i# L/ C. b# u7 R
//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
8 Q7 a3 P% ]5 fprocedure print (aText: string);1 @+ {1 K* A" [; p, J& ]( N
6 {" w$ F6 L& ~) W( Z" U: v$ |& b具体参数(略),整理中...........
t! H( i8 [2 b# m6 P! G
1 T, a* h) x, [3 H; s//转换字符串为整数(系统函数)( Y8 I$ q% r; e) L; j% x
function StrToInt (astr: string): integer;
3 _( k- `8 ]$ T9 l, s7 S! [- `0 s
6 e6 d. x, x) W; P0 }' f# E% j9 X//转换整数为字符串(系统函数)* `% L/ ?0 A" h7 S
function IntToStr (aInt: integer): string;2 v, C8 y; d% \* g
$ \( {$ @# S9 h- e
/***********事件触发的函数**********/4 [* _6 W7 f1 p7 M- o
: L! ~/ X+ }5 s
7 o7 P9 M6 j) w7 q4 K7 i: u* l+ l' m/ [( Q9 V$ G a2 W" v& U2 g0 R" E
# j% ?! C& ^% D2 _5 Y
! D6 B9 C5 u7 D9 `8 j2 S2 U9 R: x7 M0 p+ S' |2 F A7 j% [* E
/ y( x7 J; d v/ j6 a
: d1 ~& `; D: W+ ^" ?, U% m7 q3 V
O9 p' q" m5 B3 q( `, a4 @
function callfunc (aText: string): string; //以下为 aText参数的值! L. V8 n5 t& y, T1 i7 e
; d, t. e3 U7 ~5 ?# cgetsysteminfo 获得系统信息+ f5 D+ o8 K" x' ~0 Q+ ^
getname 获得名字! c& e ]5 D& Z: R& B
getsendername 获得消息发送者名字
- [7 L6 p+ K: s& J1 N" m% sgetage 获得年龄
& Q- E R) J" C1 s; C" ~7 ygetsenderage 获得消息发送者年龄
7 d3 k9 i7 G, S; r6 A( Z/ kget*** 获得性别: M! b. }# ^. x
getsender*** 获得消息发送者性别
/ ]' Z& O4 q9 L5 O8 Igetid 获得ID' v& U7 H6 m$ y; Y5 o( }
getsenderid 获得消息发送者ID
6 ~2 p0 j4 S% b$ Y3 {$ l8 `' M* A, o9 Sgetserverid 获得服务器ID
: v$ @/ [$ n5 H6 v3 Hgetsenderserverid 获得消息发送者服务器ID
" _3 Z2 U2 d, t6 I( n, {; k Lfindobjectbyname 用名字查找物件
+ x$ D& F- {; b* t6 d$ \getposition 获得位置+ Q. m1 D/ c4 x* N$ @4 |
getsenderposition 获得消息发送者位置
B4 a. o8 V- W4 L+ Sgetnearxy 获得亲近的XY9 V/ F# e+ Z- G
getmapname 获得地图名字% n6 w( ~: n( Z) m7 M2 a v8 i
getsendermapname 获得消息发送者地图名字! }* ]( F2 s8 h0 Y& q
getmoveablexy 获得移动能的XY$ ]" w# M& l1 |: t6 X, O
getrace 获得种族
# [, w5 j5 y `' A% S7 |& J+ Fgetsenderrace 获得消息发送者种族5 [+ {9 G ]3 m! {4 R! `3 N F
3 e# K1 }! B7 a
getmaxlife 获得最大的生命值
9 n6 v! f/ m* T1 ^getsendermaxlife 获得消息发送者最大的生命值5 Q) i, n! ]0 a# E
getmaxinpower 获得最大的内功值
7 X( G$ M5 S9 g9 L& r1 D& Igetsendermaxinpower 获得消息发送者最大的内功值2 Q+ |; U2 i* T9 n0 J) S
getmaxoutpower 获得最大的外功值) {$ d0 c0 {8 m9 Y3 E- k
getsendermaxoutpower 获得消息发送者最大的外功值
- w- A/ [! G" zgetmaxmagic 获得最大的武功值
& G; {. D- x6 {2 S1 H5 E7 Ygetsendermaxmagic 获得消息发送者最大的武功值
+ }/ A* u1 U; ~1 `7 w, W9 w* j D0 Hgetlife 获得生命值
% f' C$ M! X( ~, t% d agetsenderlife 获得消息发送者生命值$ l$ j. V+ L, t" J9 d7 E7 W! Y
& Z+ ?+ Y! y* q" X3 j2 m0 Lgetinpower 获得内功值; u0 m7 K$ V, ]% d: D2 |
getsenderinpower 0 N: d* Y* d0 T
|