千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
7 d5 T) r! ]; a( ~7 n/ F7 \; [+ E0 u. G1 L
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
" \2 \; }, I6 g1 _
+ ]3 C4 f, w2 d- f一个函数的基本结构是这样的:
( s$ [; H) a9 S6 Y* ]1 y0 S) Q4 L( |' E! P" V s( _* e
procedure OnCreate (aStr : String);" q: r; U, B8 C4 i
var
- G0 }8 K# G0 N6 C) o- `' v/ @ 定义变量
/ W* `4 S. N# \) Xbegin! c( g/ ~! ~' {! m* ^
语句3 t$ y; B P1 ~! M- g& }5 X" q
end;; [& |# }3 K! K6 e2 }6 O: L& \
7 E" l* H- t( ]
在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
: ^& r, J( O; ~% Y9 V- Z1 {8 c( |7 i' J* f! z& x3 h) O4 E9 R
千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。- A, _1 H' W( M* |+ h, f
/ H' |. U1 Y9 D8 J: d$ L5 v
/***********事件触发的函数**********/
4 N& z! s2 l9 i$ C+ e4 U; b& S+ B5 k$ p) a4 W
//当有人*近时: K! J) @8 r8 q0 A
procedure OnApproach (aStr : String);
% r( l6 S- v1 x( c8 u. o) Y" B! M& N- a
//当有人离开时) y% m( `4 Y+ d+ z+ P( m" F3 F
procedure OnAway (aStr : String);* H! p) n8 |' g; ? E
2 \0 N- ~" k; O, e: }, y- b$ Q. M//当受到掌风攻击时2 U- |1 p1 b G$ X; H8 ^
procedure OnBow (aStr : String);! t- q# }- Q3 M7 a9 X4 V# s+ {
) H# z: c2 I* F9 {: P( a
//当状态改变时
8 A# H4 F' O6 P6 Vprocedure OnChangeState (aStr : String);
3 s; u* P. t; t) W8 _7 G
# I& \3 W, r) U; }5 L/ L. E6 w//当初始创建时
) R8 e& ?) U7 @! M5 ^+ fprocedure OnCreate (aStr : String);
3 L) k6 Y) T: R! p% W" D7 n5 c* i( _
$ e4 N/ c; a D9 I* r& F3 R//当被双击时
9 A( [& T1 z8 q4 h* rprocedure OnDblClick(aStr : String);) P& o5 y4 ]; R% p! L
5 G: N" A6 d- r6 w' l. Z( Y
//当死亡前
; P/ W# F3 P d2 i6 |4 Y; ?procedure OnDieBefore (aStr : String);6 F4 u9 c1 [# }$ Z3 i( l, G
: G1 B. g) h K2 H) K//当死亡后
' k! i# b2 Q, \procedure OnDie (aStr : String);9 |' N# N' E$ Z3 \2 G0 e6 L
+ l/ i, O, I: E: L a$ W6 M
//当被拖放物品时
3 B/ d) N, a$ C: {procedure OnDropItem (aStr : String);
5 B3 S3 C" Y+ H2 Q: E' ]( W& k6 ]) k- a
//当得到命令消息时' X6 R: t8 h3 Y x, t( @
procedure OnGetResult (aStr : String);
7 H$ @- j& ~5 P! {% C& N" \, A, C- a9 I) j
//当得到改变步长时
4 x, a8 f ?9 y+ Pprocedure OnGetChangeStep (aStr : String);, J1 n; q+ r" A+ l( R
2 T* W0 X8 t* x% O//当受到攻击时5 }5 g9 Q1 e- b$ d [
procedure OnHit (aStr : String);
: w$ @; L5 G9 P/ R+ P
/ `- S& H1 w8 C9 f7 W0 {! c! l7 D//当被左鼠标键单击时& F7 K+ Z; w, d- E0 x8 y
procedure OnLeftClick (aStr : String);
! N$ q& ?& ?: z
v E9 Y) }. n' W$ }//
0 |- d! S r2 c: t- {: _: U5 R! [procedure OnRegen (aStr : String);
/ k" | d: {( n- K5 B7 g
: k, T* @& H& \7 ~* w) k! u//
' D. L# z! D- ^; R* r+ |" v# dprocedure OnTimer (aStr : String);6 N. x4 P) P( r1 Y7 K6 t
; e. s1 z* A' f0 G8 g//当物件发生翻转打开时,一般是用于门
. g6 Q8 [% m w$ F3 M' X5 Aprocedure OnTurnOn (aStr : String);
1 [8 K/ J' J0 c) Q
8 q3 \5 u& Q1 y G! X) E( a//当物件发生翻转关闭时,一般是用于门
- D. n( s( `3 _procedure OnTurnOff (aStr : String);
- X/ q7 L9 u2 e, w% Y7 i7 I
7 L& k0 r* X/ p8 b5 C6 C& J. J& o//当用户开始游戏时
/ b7 l1 U4 e6 o0 iprocedure OnUserStart (aStr : String);
9 ~4 G, p/ i1 O& E3 N# D+ f6 l; Y" P6 ~& {
//当用户结束游戏时
; M% g# W( @ x$ N. D2 J; [; l7 dprocedure OnUserEnd (aStr : String);+ Q7 [, q" a% O( `
, r, r8 j D4 u% O
//当移动时
" |! ~. e+ ~' Z) H4 X- Ffunction OnMove (aStr : String) : String;
E' O3 T' N" l3 @6 E+ Z
" C$ ^9 R+ Z# [7 X4 R4 e//
2 G! l5 g0 l) v0 O( b0 Y7 |" g6 dfunction OnDanger (aStr : String) : String;* Y! `9 e6 n. |# D* q
4 m& y# G: Q9 u( @# K
//产生一个随机数(系统函数)2 j! e/ ] O! Y) K R) r. \
function Random (aScope: integer): integer; Z$ {2 ^) s0 q7 j; s/ f5 @6 u0 _! C
9 z1 }/ R7 v/ S1 v* K- ?//返回指定参数的消息(系统函数)
9 I# K$ b5 n4 U2 u2 vfunction callfunc (aText: string): string;6 R$ C9 ~2 F( ~4 P* X$ M$ F
/ y) A$ _" A* y& z& B//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
4 j( g% O) E* V A- N ]! B; |procedure print (aText: string);$ P" l/ @ l0 H+ X
; [+ w, W( v2 A. P: b+ t2 K0 B: r具体参数(略),整理中...........
W# L+ q2 l2 x/ P4 C
& t4 }4 g- x3 T9 L) a/ h. b//转换字符串为整数(系统函数)# M; s6 e3 F! t j7 M- G/ Y
function StrToInt (astr: string): integer;
4 L, _" g2 T5 ]) |- o, ]+ f; e, n* H: a- x9 f) s' Q2 t
//转换整数为字符串(系统函数)" b7 S) K3 F& \( r5 T5 R. C
function IntToStr (aInt: integer): string;) J% P: W. {& k
# R n4 E0 d/ n# n/***********事件触发的函数**********/# c1 t' I2 ]6 c* A2 k! a
3 P# a! C0 A" {, Y* V+ m) D- \0 w$ e5 h9 w1 A
& _9 I* A" s, _% B2 s! J9 P; Q
# p5 E; A9 Z* k+ q* [7 v
d$ Q1 O" N/ {
$ U' I4 n' H* q- V! Q& w% f$ W5 e6 W/ ^2 j) D; a
5 s# ~- p U0 a m1 i4 v. W% ?- _6 T4 m/ q9 [# q) L
function callfunc (aText: string): string; //以下为 aText参数的值
3 x" G+ q* Y5 p" A! J; C; T6 H3 q- m/ l' }& x, }5 a2 {
getsysteminfo 获得系统信息
) w$ c5 ~$ V4 Igetname 获得名字' D/ N4 n+ k& x: ?# n6 Q. C
getsendername 获得消息发送者名字
2 M% ~ M9 k$ |7 u0 J7 g5 Agetage 获得年龄
- _ T1 Z+ m" d1 L. t2 vgetsenderage 获得消息发送者年龄
9 }) x+ T- u% x3 d- N4 W2 yget*** 获得性别; k. j( ^4 X% O5 T
getsender*** 获得消息发送者性别
& }* z% a" w$ \6 A8 n1 Pgetid 获得ID. C0 A4 }1 u- Q4 N- @+ e
getsenderid 获得消息发送者ID# ~! w- e @ S2 R% ?! p8 X' O6 Y
getserverid 获得服务器ID
# m8 d* { ~+ `getsenderserverid 获得消息发送者服务器ID
+ u+ ^ V6 b3 I4 rfindobjectbyname 用名字查找物件
! A+ x5 v9 f1 ~8 Lgetposition 获得位置
6 ]+ D: [8 H/ g2 V( I: U! Jgetsenderposition 获得消息发送者位置
% T/ I. e+ S6 G9 O4 Zgetnearxy 获得亲近的XY: }" s: o0 d; Y. s( l) i/ s$ _2 ^
getmapname 获得地图名字
/ p g1 q# Q6 s; H \, ], Qgetsendermapname 获得消息发送者地图名字( n3 D3 O$ ]: {2 W
getmoveablexy 获得移动能的XY
- l5 j/ u+ E! T$ x% I- @: sgetrace 获得种族
/ V2 l$ v2 p: R6 Ggetsenderrace 获得消息发送者种族3 c0 v6 G4 h4 {, j r
9 G5 S& ~5 V; q8 c
getmaxlife 获得最大的生命值
" i/ n. G, n4 D8 q( ~/ J& }getsendermaxlife 获得消息发送者最大的生命值
l6 f3 ~4 B5 P6 c: \& t( t4 tgetmaxinpower 获得最大的内功值% q" i$ H7 z* ]3 a( f
getsendermaxinpower 获得消息发送者最大的内功值; Y+ h; T+ `. L4 W' y% `3 a
getmaxoutpower 获得最大的外功值 }7 ~# }9 s }3 C+ s+ W
getsendermaxoutpower 获得消息发送者最大的外功值
6 w5 r- S. r$ R5 g3 j' ggetmaxmagic 获得最大的武功值" ~- p9 d- S5 O
getsendermaxmagic 获得消息发送者最大的武功值
; b( L& v9 Y' V: u, [getlife 获得生命值
, h. \( f1 Y' Igetsenderlife 获得消息发送者生命值
7 H7 c( l1 z2 g) m0 i1 {2 u
# E; H% g" o" pgetinpower 获得内功值
* k4 U5 ~: k+ jgetsenderinpower
. C, {; W. G; v! v0 P |