千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
0 Y; c* K- |7 h
2 a6 u" F/ z( J( r3 h) h' Y千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
" ?9 @& G4 Z; f5 N
) b5 s& p: C2 s$ e v一个函数的基本结构是这样的:5 n) a0 b3 }! e7 P3 _5 L m/ S! y' g1 E
1 [1 d! S! ^3 m; E; }5 L
procedure OnCreate (aStr : String);
+ t# L/ J6 a: K2 t a" o4 [var" Q8 x3 X3 I' b! ^' ?, O
定义变量' j v! q* i/ B; C0 v
begin E5 J: }6 ?, Y- x9 Y, _! c( l
语句: `9 {7 S; k X, z2 P
end;/ @# Z* q9 g! a, p; a6 ^
1 Q7 r9 ?# U( E1 v5 ^) a
在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
9 @3 P$ J) N2 ~$ c
) h' C- c; s% K6 j; {5 P1 P& G千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。
+ b9 j: s' F0 ]) k. [
4 X2 W/ z/ q! h- T/***********事件触发的函数**********/' R* y5 }$ _# U
! U L" v3 h% m; K7 l, V" Z
//当有人*近时! x" e3 m- R6 C
procedure OnApproach (aStr : String);
' c) ~ J3 p$ @, Q3 r" a7 }& {) S
: [" v- ^6 \. G//当有人离开时
; k* V" ]% {6 Q" y5 rprocedure OnAway (aStr : String);
. o }! M3 z6 d+ T/ H5 N- v
/ R0 B- b# c, x R: ]# U//当受到掌风攻击时" P! H. A t$ N# [& E
procedure OnBow (aStr : String);: y/ {- [7 j. w+ Y% T0 T3 z
. `: a" k' c8 D* Q, _9 d3 q/ [
//当状态改变时
; G+ U0 Q0 p; A _2 o; n3 nprocedure OnChangeState (aStr : String);8 n. V3 V# ~3 r2 g6 U
9 [& ?6 i4 W& u: e# J& B; h! k//当初始创建时
3 d2 G4 ]; R* T9 t: rprocedure OnCreate (aStr : String);
1 ]- y! b; m2 g1 m- X" |( y. p
4 v4 a( A& ^# i0 y" I) O9 [. g' O//当被双击时
7 R; m) r/ [- yprocedure OnDblClick(aStr : String);
: |3 x* X* e7 A9 A' @, M" ]+ S q# N2 i4 A
: \8 B# a% q# w9 D3 m% S0 \& q//当死亡前
; e) _; h, G5 a# j3 a( g' ~+ Jprocedure OnDieBefore (aStr : String);. q) [) F/ [5 c) c" S: T) ]" t
! [. c- G* c) }! e Q" {//当死亡后
5 l8 r. ~; V" G4 X' z3 R5 Nprocedure OnDie (aStr : String);
& T! d# ~% @2 o. o0 v/ x& A N
! W( p/ D2 a2 s5 c5 |//当被拖放物品时2 p; b0 _( Y+ m, s v0 Z- S+ [8 b
procedure OnDropItem (aStr : String);% `% o' ]: v) t! }
# }7 Q7 P1 G F: @5 e& ?
//当得到命令消息时/ B5 C& V9 M; x- K$ m7 Y m
procedure OnGetResult (aStr : String);7 a, z, ], y7 I% v" T5 m
& k5 ?, |: {* ~//当得到改变步长时
+ |; [5 O6 u7 c- e0 p" K( d* R; rprocedure OnGetChangeStep (aStr : String);
: O8 a# y- T7 s3 e" Q5 d% ^7 U# u1 G7 F O1 x
//当受到攻击时
( I9 M) @+ b# X: Tprocedure OnHit (aStr : String);& w; X0 L# a x% y3 p m: q$ f2 t
2 X) f' o( e" r. q" k. o
//当被左鼠标键单击时" y) ^8 m+ J" ^7 f; l' y8 @
procedure OnLeftClick (aStr : String);1 N2 k1 P% I9 G* @( t4 U, L
" V$ b0 J+ t/ k& O1 K//& W3 w/ \9 b: G! t8 a; c
procedure OnRegen (aStr : String);* d/ ~; u7 A+ S p: t. K- Q$ d* {
5 {& }/ l% A* K) ^8 o- F
//
% ` n3 z" Y; s0 w }+ V# D% @procedure OnTimer (aStr : String);
2 \4 H x/ U, o) Y1 X2 ?& t& F) `/ R. m% M9 W0 ~8 N, _, G& }
//当物件发生翻转打开时,一般是用于门* F1 B6 K, j: K1 w+ @
procedure OnTurnOn (aStr : String);
, ?6 b& v( x. f! @- c: L6 U) F: a! [8 S* q V% W8 k
//当物件发生翻转关闭时,一般是用于门
! h F/ z& A8 }1 g U/ J( _procedure OnTurnOff (aStr : String);# F& n0 K1 I. J6 w$ R) N. Y
/ ~9 P% U' }) g1 N1 f; V//当用户开始游戏时, ]' c3 K6 {7 I# J& a1 }
procedure OnUserStart (aStr : String); f; S' J0 C# H6 u
. _ B2 X! ^: L- `9 ]//当用户结束游戏时
3 K6 y1 Y$ Q2 I; ~5 Jprocedure OnUserEnd (aStr : String);
/ p9 s# I% a) g5 D% f- U
; J* j: w/ ]- ]% Y! I% Q//当移动时2 S) ~5 y7 }& s1 p
function OnMove (aStr : String) : String;
0 s" h& C8 i* N! j
; S, m9 e6 ?& n) c4 \//
+ l; \8 [! `% S' C; V4 vfunction OnDanger (aStr : String) : String;
+ p3 y- u) \& b! [5 o" N0 y+ Y: ~; G# \* g
//产生一个随机数(系统函数)* l I* B6 |: I
function Random (aScope: integer): integer;
- ]$ i; Y) i/ y, k' H
4 q) p& B3 Y$ X/ ^8 {. i//返回指定参数的消息(系统函数)3 h. I4 p. N1 h5 P
function callfunc (aText: string): string;! h) H% e M3 |' m1 }8 |' V
5 ?0 p5 R: v$ g# @' T+ R" z//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
6 Y) {5 ^9 ?, V y1 rprocedure print (aText: string);. J$ y% @3 k& R v! k
/ N5 f1 X: z' V! f
具体参数(略),整理中...........
7 |2 K6 c# z; n& C7 j8 D. f0 }# Q/ j" I& s$ F7 ~+ c6 M$ f
//转换字符串为整数(系统函数)9 k& Y: A+ T7 P
function StrToInt (astr: string): integer;+ H6 a3 o1 P. N0 i. j* e$ O
0 f$ H* S" y( N7 [% H4 R X
//转换整数为字符串(系统函数)
7 @3 M, l& w% mfunction IntToStr (aInt: integer): string;6 S3 g4 q% e" J0 D6 ]: w! `
; k) w8 G1 |+ g/***********事件触发的函数**********/- C. s7 S6 p* \& V. i0 N0 W$ F/ S
9 \ B9 H9 {# R# Y; J5 b- w
; }' k5 U7 ^! G' [, |: T
! K: X* b: S& [' l3 y! ]
9 e% H" v9 i k) t$ F
. f1 Z/ O7 J1 S1 C/ R, _3 _; ?3 A s# y, U; Y# ]0 W3 R7 h* \/ y
. i" K" E3 w" A" l4 a
8 l) v* q) A$ W+ k( y- Y3 p6 w: I
% }% J" j; l! |/ O2 K6 E% B$ lfunction callfunc (aText: string): string; //以下为 aText参数的值* }: ~- V" L7 ?* V7 E
+ i6 b ]8 b1 t: ?1 _% D/ B6 Hgetsysteminfo 获得系统信息
! ^" G: H# S" E+ F( ^getname 获得名字
1 m; L% T5 J( q* v( |getsendername 获得消息发送者名字
7 Y, B$ R5 `& _0 w/ L0 B/ m# d- jgetage 获得年龄( w: J* }8 }$ N% s( s4 s# }6 s
getsenderage 获得消息发送者年龄
7 S8 u- G) l% a8 Mget*** 获得性别
) j/ p# j$ u0 C+ kgetsender*** 获得消息发送者性别9 z% O, D: f2 G5 s$ F/ ]: P
getid 获得ID, r7 Y6 _7 L% E, s: {
getsenderid 获得消息发送者ID
9 g3 |9 ~; l, f9 y. w1 Jgetserverid 获得服务器ID" a( M" P4 m5 \$ m2 `! w
getsenderserverid 获得消息发送者服务器ID, G7 R$ `7 o9 n
findobjectbyname 用名字查找物件* r: D2 Y/ Z _6 X
getposition 获得位置2 D6 v5 R) Y. D
getsenderposition 获得消息发送者位置
& `& y& C3 S$ N, O$ y6 ]8 [getnearxy 获得亲近的XY
9 g* s! n m2 ^: @; E7 ~getmapname 获得地图名字
7 V0 D/ m( I. L0 x/ g" C& igetsendermapname 获得消息发送者地图名字' ~) w1 {7 i" B
getmoveablexy 获得移动能的XY
/ ?+ e# o' t! o5 q6 Z0 v( dgetrace 获得种族& R7 Y/ Q; A8 L8 Y! a. {
getsenderrace 获得消息发送者种族
4 F0 m' a- L8 a7 v8 K; I: ]: A' Q
getmaxlife 获得最大的生命值
, ~1 W4 \, Y% O5 Ugetsendermaxlife 获得消息发送者最大的生命值( F! h/ w! r. g9 Q( Z# l
getmaxinpower 获得最大的内功值" V2 a3 ?% f* \- q# ?
getsendermaxinpower 获得消息发送者最大的内功值
& j( I% t. A6 L7 A' Q. N( Zgetmaxoutpower 获得最大的外功值; O! L/ G1 o% U% t
getsendermaxoutpower 获得消息发送者最大的外功值( q' w8 |/ n3 n9 ? Y
getmaxmagic 获得最大的武功值
y% s5 v# X6 t/ B4 U) tgetsendermaxmagic 获得消息发送者最大的武功值" y9 x$ v) d/ j9 C: `- D
getlife 获得生命值" z0 R, Y) ]& ]1 Y% q
getsenderlife 获得消息发送者生命值, z' h2 P6 \/ M: ~) G4 h* O8 g
) |" W, @/ ~4 U' ~* C1 K& g( xgetinpower 获得内功值
4 _( L2 h' I3 t; p% Kgetsenderinpower $ Y8 F% D( t0 _3 P
|