千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。( x _4 m U, F1 f/ h! n
- Q) O3 s2 r6 A$ ?: o7 p$ v
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
, r) D# j. K7 w" ` N5 I$ q# r5 t6 @' \. Y5 _2 Z/ e* _" ]5 {9 L
一个函数的基本结构是这样的:
9 g: U1 r$ ?/ g) f5 { R
' F& Y A& U3 h2 D' q' x9 r* w( Sprocedure OnCreate (aStr : String);1 W( c2 q) w! R& t \/ r
var
% ~0 s! Z8 j3 L, P2 | 定义变量& O4 y" s4 ~( H# k7 o
begin
; Z' d. Z; r$ I. P; _ 语句" Z8 I" ?) U, Y3 w2 S9 [' ]+ h
end;
( R( t% d) M$ p8 e' s* e T
5 q! b! ]" R' m% k! ^# c( n2 i; p在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
3 V; X3 z7 [3 t# o1 Q; n9 |+ u0 ~2 z l, P; Z0 ^- j
千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。
& d6 J6 l4 d) ]2 O9 Z0 w& F; s/ q# i- [
/***********事件触发的函数**********/" d2 W( g9 H: W
4 F( A' T* u0 W' {! v) P5 U
//当有人*近时
" E0 O% c0 C& {; ] wprocedure OnApproach (aStr : String);) ^; K& l, o! ^, T
$ t- t6 p( {- |" k//当有人离开时( N$ ^0 L: Y( ~/ m
procedure OnAway (aStr : String);
@/ n r) E& T$ Z( U9 K
% e) w6 H; t7 x" m' a3 L//当受到掌风攻击时6 S) A2 N7 i* }' H1 \
procedure OnBow (aStr : String);2 g& S* s" ~/ h: c2 J0 c
6 |/ \! M7 O9 ?) x
//当状态改变时
' i4 ~& |+ i1 P: `/ C' _procedure OnChangeState (aStr : String);$ s9 i7 ^5 d6 c" I1 ?# u# c' j% r9 t
, _4 a, ^# X, o8 I
//当初始创建时- u7 U N7 q3 Q! t9 u& d. S
procedure OnCreate (aStr : String);
_* C7 p: @5 [0 R% h8 P ? W6 M$ h8 [! y1 {5 H" \
//当被双击时% s' ^. y/ A Q4 n1 B: }( h
procedure OnDblClick(aStr : String);- a) v3 I9 G) D! b& r/ H) A
: R2 f, ]0 n% Y$ o# @3 {
//当死亡前/ E& U3 T3 I' ?( ?8 o& @
procedure OnDieBefore (aStr : String);7 a& m( w; @, V- B* Q+ \- C
* q5 \8 D2 V5 o' T# V//当死亡后' v: I, _/ E# Y$ N3 Y% I" H
procedure OnDie (aStr : String);
7 q& h, o5 u. C. ^2 `6 z# a% a0 N+ N, e* ?
//当被拖放物品时
9 a k5 i4 R! X9 E" j: p& I8 Wprocedure OnDropItem (aStr : String);
- l7 Z F4 ^6 J
* G) x( V8 O% `' p- h: N1 Z. h//当得到命令消息时
; C( o6 O' N* ?procedure OnGetResult (aStr : String);$ B5 s) q6 T/ `- { [2 P
. M5 p; g- `* y, P
//当得到改变步长时, d$ ^6 C% q& [0 l3 S( h+ Q
procedure OnGetChangeStep (aStr : String);
4 @( B$ Q) V, e1 p+ l, f" w/ M7 V: P( n% N8 f8 ^3 a2 a; A
//当受到攻击时
" [ X; N9 D' {" h4 \! tprocedure OnHit (aStr : String);
. F0 x0 l: ]# _) X2 |; q8 u0 e, c) h* _6 R3 p! Y. I5 g( L
//当被左鼠标键单击时
1 w% A3 t. g8 s& v5 dprocedure OnLeftClick (aStr : String);
: N% p+ I5 E/ D+ d- K( M/ L" h# ~0 J& X6 a: t
/// D* m2 t z! K( C# y3 y% \
procedure OnRegen (aStr : String);: x& G& f+ K+ F/ R& r
* C) i- M3 @8 _! @& ]7 ~& y0 u//1 E* i9 ~) T' U X+ B5 b. z
procedure OnTimer (aStr : String);7 x K! }$ O3 z t) ~
8 r( I% ^: v: N. z2 d//当物件发生翻转打开时,一般是用于门
4 s3 a i% P6 C/ R) N7 D, bprocedure OnTurnOn (aStr : String);
) Q# R4 f$ Y; o2 F8 j, M- V5 c6 W; Z" ?& ~6 C
//当物件发生翻转关闭时,一般是用于门* }: t2 @. w& M5 Q
procedure OnTurnOff (aStr : String);
3 h' Y) c* v9 |% J; q! @
1 @: m( ~, H& G3 p//当用户开始游戏时/ O9 }7 T3 D. \" @, P. V+ A i
procedure OnUserStart (aStr : String);
0 P8 b8 i% X" z1 }. H+ v4 \: w9 P0 r, v& v$ ^
//当用户结束游戏时
) I' q: F2 z3 A) Dprocedure OnUserEnd (aStr : String);
! ?3 \6 N" ?0 O+ _& _. ]/ g1 R- F0 e( k. |. t8 T: m5 |$ J0 N6 a8 ]
//当移动时: n. u: C" i" y4 R3 g( E4 Y
function OnMove (aStr : String) : String;0 A/ Q. o" z6 w( v$ B. e. v
' T0 b" ~' ?( I
//
/ s5 a! I- S3 q$ B- @function OnDanger (aStr : String) : String;3 b% X5 v4 q3 O& k' y
) H1 Q. t4 M$ r2 y# h/ l//产生一个随机数(系统函数)
/ j6 P) B) X7 q" j( P* K' @function Random (aScope: integer): integer;; b9 b8 ?# h5 E1 F# x1 _% i+ [
& S: B% ]& y0 c. T$ I: P+ g
//返回指定参数的消息(系统函数)$ U( p* _! z' e$ _/ V+ X% N( }3 s
function callfunc (aText: string): string;
8 D/ l+ c! T5 p- J$ m5 H1 f0 Y4 @
//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
8 Q/ I+ @7 w4 t; G5 L1 Y- L5 lprocedure print (aText: string);
- X& e3 w, }- E6 M
" Z( N0 C2 k2 ]7 W1 e具体参数(略),整理中...........0 \- E& G: L% O( {
# E: A, z1 E$ I+ Q; V7 ?( r//转换字符串为整数(系统函数)
0 ^0 U" l" v; M# s7 j6 R3 yfunction StrToInt (astr: string): integer;, R* u0 e! u: V9 l+ y" d
~! n- p& W. ~3 ~1 f
//转换整数为字符串(系统函数)
. a; Q$ K7 Q1 P8 ?function IntToStr (aInt: integer): string; ^ d; E, ~4 f/ f
% x9 A3 ]3 n9 d* n/***********事件触发的函数**********/
' e0 Y- z5 L0 d9 o; G
1 ~9 P/ y0 m2 p* f4 K- P# P+ O
( _% p3 ^0 Y4 e9 h% k. b1 y! R) M
. u' m9 f u u$ Z8 z
' C$ K- `3 a$ J l- L2 L9 |
" ?2 k2 C, V* L# b/ X( |2 g4 I4 n4 p( J3 G1 g+ j
6 S* Z( \( e3 {6 u7 Y2 k
( U6 v$ v; N# @* m" G5 X; j
function callfunc (aText: string): string; //以下为 aText参数的值
/ [- W; a/ }9 C4 L: z0 R' H' q4 M* e5 B2 u* b$ Y- @
getsysteminfo 获得系统信息
% |4 K5 [& T; d- t/ Tgetname 获得名字6 _+ X) @: D. U& m- F, U
getsendername 获得消息发送者名字: v& t' K5 p8 o
getage 获得年龄' L: o) F- B- D
getsenderage 获得消息发送者年龄& n0 Q& Y1 ^% y* V1 f, s. }
get*** 获得性别
+ V( A" C+ {: P8 T/ j egetsender*** 获得消息发送者性别: }$ u- F% F) @# j8 G# h3 s
getid 获得ID
& h* k& \/ p% g" O" u b2 @getsenderid 获得消息发送者ID
& [* a6 g, N8 `' C9 Fgetserverid 获得服务器ID
$ N" c" F- I" \$ @getsenderserverid 获得消息发送者服务器ID
0 t9 d4 s4 @. @' f$ k' I: V: yfindobjectbyname 用名字查找物件
6 j" G) @# [+ Y5 p* s; L/ t9 J' k* q9 ngetposition 获得位置
' L5 C6 r; f8 a* T: tgetsenderposition 获得消息发送者位置
( l7 Y: ~# c+ L Kgetnearxy 获得亲近的XY5 h/ J1 c. k+ i [! `+ H a
getmapname 获得地图名字
4 t; k% k; m2 @* P/ q Hgetsendermapname 获得消息发送者地图名字
6 }1 l/ A8 r, ugetmoveablexy 获得移动能的XY' k0 ^, S8 l- I) _- B
getrace 获得种族: c& \9 z! S! {8 g6 H
getsenderrace 获得消息发送者种族: u- ^6 T! [; x! n( ^4 A
1 c" O" r! h: F6 T4 E
getmaxlife 获得最大的生命值
3 Y% D+ C3 V% Y3 k1 q! Vgetsendermaxlife 获得消息发送者最大的生命值, x+ }1 g' C6 c4 l+ a, V0 P3 s
getmaxinpower 获得最大的内功值1 e0 D" V9 f4 m
getsendermaxinpower 获得消息发送者最大的内功值
/ D0 d0 k- h2 e6 Y( W% W* Hgetmaxoutpower 获得最大的外功值
+ i2 [. l, [3 k4 Lgetsendermaxoutpower 获得消息发送者最大的外功值. Y$ F, m- W! s7 u2 u3 o; ?
getmaxmagic 获得最大的武功值
1 p# {! _0 v9 b/ @getsendermaxmagic 获得消息发送者最大的武功值3 }- a8 M. u6 G1 y
getlife 获得生命值
6 t9 P! s3 `0 k4 Egetsenderlife 获得消息发送者生命值+ Q, l& A. h' K1 Z' k1 E6 R
9 E; [) N, p0 e; z7 U+ E; f/ ?getinpower 获得内功值 q5 T+ p% I( l: }1 }9 }
getsenderinpower 6 F' K5 D7 V6 G6 t9 o
|