千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。" D: i4 ^; S& Z% u& [
X: r. Q5 U* _6 d" | y. a千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
7 Y& m0 m. o S
" U& y' S, l/ Z# ^& K8 u一个函数的基本结构是这样的:- N4 I7 N y' U, L ^9 r$ T
. `5 j; ~( h n1 M( s0 Pprocedure OnCreate (aStr : String);
! p I7 I' n" t" E3 |var0 x. O$ e. B7 W7 \7 Y0 _
定义变量# V9 s: G* y* h+ E5 q
begin
% A. d( H& e) s" B M8 k, l8 c% H 语句( m5 Q- K. K8 ~4 T( W& q
end;
) ]8 r0 g" t" q0 o- o: r. {; a7 ~, Z5 e9 n7 M
在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
4 ]9 t- f' s- w( e5 g, |/ s$ ?: Y/ e1 r
千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。' A* {" X( P) K9 O
- h F* z' k5 k# ^% i" |1 L2 g
/***********事件触发的函数**********/. R, l# _/ A! q! S. D
. K3 l7 j4 H* q$ }5 P
//当有人*近时# \3 O6 M9 i6 n+ I
procedure OnApproach (aStr : String);
* Q6 J* x+ [' [( s5 p! k+ s2 k! J2 T9 d% ~
//当有人离开时
& H2 k" m8 _/ A( u' i6 y! mprocedure OnAway (aStr : String);
0 N/ C0 u5 g- K4 X" g
; O- y% C# O4 }: U. q7 M9 R6 b% ]! f//当受到掌风攻击时
; C- I' ^0 O; Y5 V4 V" Z2 [) zprocedure OnBow (aStr : String);
( O3 n- V+ Q- N: i9 W" ^6 K/ Y5 z! A4 H
//当状态改变时9 e, R7 N; y& N* s
procedure OnChangeState (aStr : String);4 h2 w; x' V7 ?! n! [& s
& H9 M- T( y0 K t) [
//当初始创建时( M. K4 z2 g; I6 V7 S% x' l2 [
procedure OnCreate (aStr : String);: ^9 `; m7 I; K# u7 [ C% t
_2 Z5 C4 R" m8 H+ W//当被双击时
8 D" z8 |! p5 n9 C8 H" |; Iprocedure OnDblClick(aStr : String);
3 ^, y( |7 `/ ?2 M- E! v8 H# k4 ]& l7 N% F ~
//当死亡前
# b! k' r9 P. Qprocedure OnDieBefore (aStr : String);6 P3 `* y. b' m
+ h" M2 ~ S0 @4 F! Q
//当死亡后: s/ f6 `5 M. B, A. k H
procedure OnDie (aStr : String);
- s' H- R4 @- t2 P' t0 j0 F O- R1 `7 l2 d8 K/ D8 ]9 L0 C7 f4 }
//当被拖放物品时
* S& z% k: K( V" Rprocedure OnDropItem (aStr : String);
( s9 N' y9 m# K1 A, k$ j1 S; O6 u- r& r7 M
//当得到命令消息时$ L/ b1 G2 R5 q8 G7 G
procedure OnGetResult (aStr : String);
2 f; ]! H/ u! y, _
# T. V8 l* A9 M9 N: c' j' f//当得到改变步长时
+ c! [7 M- S7 A+ l& mprocedure OnGetChangeStep (aStr : String);
0 |4 I( h6 y- Y) T+ W! L% ~" r" L( x. V, M' ]
//当受到攻击时
8 n, J1 e7 n5 g( Y- K5 Sprocedure OnHit (aStr : String);
" s1 p( Q3 @. I) d3 a/ G2 Q3 |( U* e! Z# X T: v" {
//当被左鼠标键单击时; r3 K0 w! v! D! X1 w
procedure OnLeftClick (aStr : String);
& X& N+ \8 |: b6 y
7 f9 v- A3 n7 p: A& u2 ?6 {//
2 z O4 r7 @- \! e4 o( Jprocedure OnRegen (aStr : String);8 {) f" d6 E: q* a6 p
# H: e. D1 E0 P( i% M//7 x1 ]5 U% d9 y* b4 N* v2 ?% d
procedure OnTimer (aStr : String); ?; E# ^( T T! J- ?- O
/ @9 i3 t- V4 [6 P//当物件发生翻转打开时,一般是用于门) u% F, z) M. ]1 T" y5 t0 U
procedure OnTurnOn (aStr : String);$ o; \8 ~1 K. O
' M- ~- A" o( J* E
//当物件发生翻转关闭时,一般是用于门9 P, y# [+ Q" l) A; s
procedure OnTurnOff (aStr : String);
9 c5 k7 I, } F: F; C& s5 t6 f. H3 ?) r% D: G1 w
//当用户开始游戏时
) f" S! ~$ E, H$ N5 bprocedure OnUserStart (aStr : String);
1 v4 A, [7 {6 r/ S4 S$ u6 {# t! D3 [
& X; M9 [8 }' c//当用户结束游戏时6 O% R$ t7 T+ J% @. _0 D( y
procedure OnUserEnd (aStr : String); \6 J# x9 \9 L4 a2 h
4 d$ e" _/ Y, I
//当移动时
6 N. o# K2 M9 x3 N: h' |function OnMove (aStr : String) : String;
3 C% G9 O3 r7 [+ Y( e' I$ S1 m/ n) O- Y9 e+ e3 V
//
# h/ v+ m1 j0 ~7 H# i7 tfunction OnDanger (aStr : String) : String;% B9 F9 Q6 J4 [8 c
" P. [9 x3 C1 D1 q( n$ S9 G: m
//产生一个随机数(系统函数)4 J! ?2 z$ p6 q* ~$ B, i
function Random (aScope: integer): integer;
, n& O" X, p9 w G6 l# V# P( V$ }) S8 }" u) n! u* d" u
//返回指定参数的消息(系统函数)! G2 `; k9 ~9 m
function callfunc (aText: string): string;
4 Y2 ] G z9 @
7 U- R# Q' a5 o$ N! O//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)9 F6 u, a/ N" h1 J7 _
procedure print (aText: string);& `/ H- ~/ |$ b& r/ n: W
9 z* i9 q( t# Y4 ~具体参数(略),整理中...........
$ [$ b$ c5 B& K r8 V( _2 a$ f) Q" g# w# s% j
//转换字符串为整数(系统函数)7 m9 N/ n( t* S( F/ ^$ O
function StrToInt (astr: string): integer;. y7 k9 P1 d' [
, p1 H9 w; t& `) Z; Q//转换整数为字符串(系统函数)6 r8 S" Z/ l; D+ g0 E! t% I Q/ k$ Y" ]
function IntToStr (aInt: integer): string;: E$ v# A4 I! {% p0 M' A+ h; V' k
& A" M1 y5 ]: D. X" ^$ o/ G3 `
/***********事件触发的函数**********/2 g7 T5 S! v- C
6 Z/ ?8 h9 F( A0 P, {5 U. x
: L" p0 ]+ L- `- I8 T/ G/ |# C0 C! m8 T& K8 h4 ^6 N7 V7 }5 L/ z
, j5 x1 B4 z B
9 R1 `8 z$ b9 {) v# E5 c3 G$ T3 k; M# l" D: L; S! Z( j1 o
& u9 i( e# W. o+ b
' _' p# P5 {5 m# r% ^: n' A+ {2 n) ]. F
function callfunc (aText: string): string; //以下为 aText参数的值( D) L8 p0 Y+ B: n
" v: H# w! l0 P' m% _* |
getsysteminfo 获得系统信息4 w- s- X2 _# D) u
getname 获得名字
5 P) N5 y3 M0 ?# l# \+ u) ^* qgetsendername 获得消息发送者名字. ?5 j3 w& ^4 ^1 D5 a" C+ H: B
getage 获得年龄& e8 H4 f# J- i( c: j4 D5 S
getsenderage 获得消息发送者年龄
. X4 ^. P3 e' i5 @4 Gget*** 获得性别" i' r; V) i8 _& T( [
getsender*** 获得消息发送者性别/ c$ n+ J0 ~; R, \
getid 获得ID, I: i0 e! y( M0 C g9 b
getsenderid 获得消息发送者ID$ b4 \9 K) S5 Q
getserverid 获得服务器ID
4 Z; J P8 A* {" x" {% t* Q7 Agetsenderserverid 获得消息发送者服务器ID; U" h1 ]5 A3 h. |9 n0 m1 E; L3 z
findobjectbyname 用名字查找物件
; h, C5 l* ]# u- B: S( I( J+ hgetposition 获得位置
# d6 Y* `5 o1 ggetsenderposition 获得消息发送者位置
`8 ~8 J+ O, a, u! s; k. E5 o3 Y: G* H9 Igetnearxy 获得亲近的XY
5 Q% [# x% Z: L3 kgetmapname 获得地图名字
1 O- C$ e: z% j4 j/ \0 ^" Y6 X' _getsendermapname 获得消息发送者地图名字2 y6 E# P" ?; q! a; `# |& j3 [; q3 R
getmoveablexy 获得移动能的XY
1 m& f( B; w3 F+ n7 rgetrace 获得种族
; U, }: r. j- Q) `getsenderrace 获得消息发送者种族
/ E9 _7 V% F6 W: }( L$ A( P, @4 m* v3 @0 V1 {
getmaxlife 获得最大的生命值; x' s1 |9 {; r3 F
getsendermaxlife 获得消息发送者最大的生命值3 g/ |% e% a/ d: L4 Y6 v1 z
getmaxinpower 获得最大的内功值& ? J |4 P' B7 ?) n/ Z6 I$ {4 z
getsendermaxinpower 获得消息发送者最大的内功值4 B E8 R, z4 D$ Y ?! j" x! D% ^
getmaxoutpower 获得最大的外功值# I: f2 h3 z' s0 Q/ m
getsendermaxoutpower 获得消息发送者最大的外功值
q8 P( Y- r0 o# J7 cgetmaxmagic 获得最大的武功值
) X0 k# d5 S& r$ E) w# D% T6 [getsendermaxmagic 获得消息发送者最大的武功值2 B5 A# M- {" ?; x! V0 S
getlife 获得生命值
# Y! [! `' Y7 e! Y. B% cgetsenderlife 获得消息发送者生命值! u4 P4 I% P* d' Y: |. }
4 |8 Q& G( E/ S( |2 C# S" P
getinpower 获得内功值
$ s4 |3 a& x; V4 G! x; lgetsenderinpower
* P; B. M+ f& @3 x' R$ a% {+ n |