千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
2 W: N7 Q2 C0 ~2 S, }1 I) w- l* @0 V) M s6 D
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
8 P) Q( X* \; L3 M: n. o# b3 o
& C: [# ?$ v; s9 j- ~一个函数的基本结构是这样的:0 R! D2 I* H; l6 @& z) l
! X4 q3 [ }2 ]7 Hprocedure OnCreate (aStr : String);% J, v# @& b. Q4 [ I7 ~
var9 @; G4 _, }2 r @' [) w) E
定义变量
4 \# T' }2 r4 [7 [2 l3 Tbegin
5 B% g! H- ?1 ] w3 J: x; S 语句
' k$ u* W* i+ Jend;
- H3 E0 M$ c7 G" K
, L9 L F; w; E* \$ p! v$ Y) N, @在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
2 f: h; p" N4 q) N9 `
3 D4 d# f9 p( F. {千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。
* u0 }4 B, S0 w* v& \
4 V3 u: q: B( b' }* X/***********事件触发的函数**********/9 X2 z3 t1 `& a; G( X
* s3 R, C1 I+ h+ o//当有人*近时
# ?- H& l$ |5 [8 K5 cprocedure OnApproach (aStr : String);
. ]; W4 Z3 y2 @, g j: Z8 q" G% |0 }, b) }0 W8 X( Q, X& q q% `& l% s
//当有人离开时
1 l/ k# b4 [8 X$ `- m5 Tprocedure OnAway (aStr : String);& R" r O- A$ A8 L9 @6 u& G
' f+ U9 X' t, u# ?7 h7 `/ c//当受到掌风攻击时& L- }9 u7 Q9 G1 E
procedure OnBow (aStr : String);
2 y9 d" j; Z g4 _, V4 a f4 |( ~
; w1 Y4 w. o6 U0 m, _//当状态改变时! `7 v2 V3 s1 m& Y3 U% c; w
procedure OnChangeState (aStr : String);
+ M# D0 ~6 q7 U/ j& y) o
8 H C2 ]6 r q6 D5 _* i$ j//当初始创建时( U7 V5 c+ S! B# B8 S% E+ H) H
procedure OnCreate (aStr : String);
: i/ @3 b2 o$ k* |) E, o5 `1 e$ H* t' g
//当被双击时* t! X/ D7 z/ W ?7 k
procedure OnDblClick(aStr : String);: ]+ g9 d" Y0 r6 C8 `+ a' h; l9 U, H
% ~, q# z4 q$ q# _6 L
//当死亡前( }" `2 Q* s' ], o
procedure OnDieBefore (aStr : String);
S9 L8 M' Z/ d, U) `- `% r1 e+ J3 e7 p9 Z
//当死亡后
: T' r( x# H2 s' Wprocedure OnDie (aStr : String);! `# i! p; w% h2 n$ y6 L, R( b7 B
- v) v: t4 A3 z! d2 n
//当被拖放物品时
) x5 f9 c" \4 Vprocedure OnDropItem (aStr : String);
6 s7 \/ a5 \5 s$ q
, w3 r/ W: z* W$ o% a7 t: T//当得到命令消息时
4 q% u# [4 s4 w' _procedure OnGetResult (aStr : String);
' i2 X9 O0 S$ h H7 {! {- a* X9 W& r% D8 T1 K& ]
//当得到改变步长时6 {# W5 P$ x* Z
procedure OnGetChangeStep (aStr : String);. t6 o0 a5 K# N) S& _
3 O0 ?1 r1 a' F//当受到攻击时
: ]" P# k& q+ Pprocedure OnHit (aStr : String);9 M2 p% t+ y7 f0 f s$ p. X9 `! ?
/ C1 c' |" p8 b7 M//当被左鼠标键单击时
$ }! f% z g6 W& ^procedure OnLeftClick (aStr : String);
% M8 E3 g" j+ l( B" u: O t, k0 ]0 ^) I
//
4 C/ J8 d4 Q$ ^4 Q" {6 Yprocedure OnRegen (aStr : String);+ V4 {0 Z* f' e4 W
$ B+ A! a' V2 O' Z2 y$ C# w; d
//
/ ?7 C; g/ j% r& fprocedure OnTimer (aStr : String);
# c( E+ a% {7 a$ y6 J: f% k4 |9 h/ z6 K2 t0 q9 c5 z% n, R4 U
//当物件发生翻转打开时,一般是用于门
8 _1 W1 m* J* u2 K3 R J. Dprocedure OnTurnOn (aStr : String);3 N, Q* M4 f" B4 q
; X' ] Q) ^# Y5 W& W1 x2 ^
//当物件发生翻转关闭时,一般是用于门$ z8 {# U" N: m) W: N: N# l- Z/ S
procedure OnTurnOff (aStr : String);' ]' }; h4 M& m, Q' f, @) k. J% `6 t
- _; Y& ~# u- }/ H; M" A$ G1 z) f D//当用户开始游戏时: v" [( R9 @: }5 ?: o0 ^) v
procedure OnUserStart (aStr : String);
" J. p6 V' d8 q# L/ y& w) y' L+ e2 ]) m. ^3 V
//当用户结束游戏时
' ?1 r- u" \7 Nprocedure OnUserEnd (aStr : String);4 E* H% x% U7 ^; E. Y+ W5 A
+ g( ^1 O7 U7 v
//当移动时6 k( I& H5 w' R* b: D7 o9 q! \1 i
function OnMove (aStr : String) : String;
0 k3 @7 j r6 j" Q. H
% ]* `1 i( p/ Z) d5 D' @" u( i//0 T# Q& B; l/ c# S" x
function OnDanger (aStr : String) : String;9 o2 B7 E- O2 u" N) [; X, _) B
5 D5 l3 v& @6 X8 _$ M
//产生一个随机数(系统函数)) i% q8 y1 Z4 s* d/ @, c' w- _
function Random (aScope: integer): integer;
+ d' S. |$ j: V3 v6 F! C' X! J7 }% N c$ g$ p3 P
//返回指定参数的消息(系统函数)
5 z5 W9 L3 \; B/ }9 Wfunction callfunc (aText: string): string;
" E8 G' y+ @# y0 J) @" R5 r f1 i% d3 y6 @. p! Z7 v5 r- w8 U
//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
5 a0 `# S- P( P+ k& ?+ C2 A: Zprocedure print (aText: string);. O6 K; x* P! s" k' g- s/ u
' m4 t/ h& w2 Y5 N
具体参数(略),整理中...........; }% g; c5 ? {& A, n2 W! o
) K) Y" F4 P" x4 s- t6 y- V//转换字符串为整数(系统函数)
7 \* L! R* ]1 g3 }function StrToInt (astr: string): integer;
5 d- z" Y4 J7 N/ k
/ ]7 n" G/ v% Q. f+ N//转换整数为字符串(系统函数)5 Z, t3 a) B; a" W1 e
function IntToStr (aInt: integer): string;
( I9 t# g, v7 G5 J$ w' H4 Z
$ K+ R+ _% `2 q* P+ E! `$ `' z( F/***********事件触发的函数**********/0 k0 }, p6 _7 y8 ~; y; r
, p: P# M% t. n$ Y4 I( w5 z
2 L4 [9 ]1 K2 {, h
6 K" @. c( I) d( h" u" R: `0 ~& w) c( b8 {. q
7 L/ a' q2 B* b
& H( e% D! R9 D- h, }/ O
% b! @: F3 B3 W0 y; a" A" y8 ~
0 {7 V$ v2 j) A. e' P/ g+ j2 M w
: l5 R- B7 |# w1 }, N0 Rfunction callfunc (aText: string): string; //以下为 aText参数的值; W5 q) x, L# |3 K- J
: S8 Q5 O6 k: p4 s" x" j+ I
getsysteminfo 获得系统信息
1 @& V5 W! C) W" S1 Zgetname 获得名字( r9 Q" i2 I# l" }
getsendername 获得消息发送者名字' S y0 A9 ], D/ T5 v% } i
getage 获得年龄
& `8 V$ T; c$ X4 P+ z' c/ ^getsenderage 获得消息发送者年龄
1 }9 m6 p& Q# ^5 _ s7 e( ^get*** 获得性别
; N) _1 [- i, T! Q( E* t4 U6 dgetsender*** 获得消息发送者性别0 o( s- ]7 i! v. l1 j9 A) g2 w8 i
getid 获得ID
9 O+ \- [; C6 B) x ~8 Lgetsenderid 获得消息发送者ID0 ~# e6 R7 D) t4 S
getserverid 获得服务器ID
8 q7 T4 [' c4 f4 G3 hgetsenderserverid 获得消息发送者服务器ID: h- e* k- [* b. D) t$ Z4 A) z, z
findobjectbyname 用名字查找物件
6 c5 M3 Z# G- Y! G$ ?8 fgetposition 获得位置$ r5 [6 k9 g/ f& B+ i& E* c
getsenderposition 获得消息发送者位置) i9 M; z% w) m( M7 i" b
getnearxy 获得亲近的XY! l4 S2 U* e/ d. Y
getmapname 获得地图名字
0 s& ^( \: r! E$ S+ F0 _- U6 Jgetsendermapname 获得消息发送者地图名字2 T- A' k- i/ L" t. o* o2 D# u; D
getmoveablexy 获得移动能的XY/ G B- }: ~' j
getrace 获得种族
- {& A2 I0 o: G! E# S5 k( Rgetsenderrace 获得消息发送者种族( W1 c' @3 A, E' n2 N6 W4 u
* g; a4 N0 U% R( R
getmaxlife 获得最大的生命值
8 y& \$ R* p# H1 Wgetsendermaxlife 获得消息发送者最大的生命值2 [) I9 D5 j t; h$ w
getmaxinpower 获得最大的内功值
8 [$ q4 q ~; o6 Vgetsendermaxinpower 获得消息发送者最大的内功值
7 B7 D! A! K8 N0 p% ?- h% @getmaxoutpower 获得最大的外功值
* a! x) D. G7 { z9 R2 lgetsendermaxoutpower 获得消息发送者最大的外功值5 S% x8 X8 h+ P/ V) ^, D
getmaxmagic 获得最大的武功值 H! K# Q; u$ d+ _7 u8 K- y
getsendermaxmagic 获得消息发送者最大的武功值+ z" T( L4 F0 J$ }; v2 w+ z( N
getlife 获得生命值! ]' a" ~6 [# {: P' e
getsenderlife 获得消息发送者生命值7 E. W: E: l5 S2 b; ~6 Y
- T6 d8 i2 C7 @8 R$ M( }getinpower 获得内功值$ I r6 v% D$ n4 W5 t% W5 D
getsenderinpower
; ]: C1 v- T2 j! E |