千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
. a4 c* t: m. p( n; }8 ~1 ^6 t* J7 M4 O0 _$ E9 }/ Y6 e }
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。2 k; q: i; @5 ^) {- a2 j t2 v V/ r
1 I5 ~9 g3 ^ d+ l一个函数的基本结构是这样的:$ j, a7 z/ V8 r: ~' C
3 f. I* z2 ?- lprocedure OnCreate (aStr : String);
: P! t; ~) }7 T) Dvar' z0 P$ N9 i1 G% G; K# O
定义变量
: Z7 p6 c5 ?0 T# e# Pbegin( V: Q- Q9 R8 `# \9 |; i
语句
6 C7 d8 Y3 N) g% h2 l: r( w, T: g# jend;, s1 Q% A5 |0 k. W! x
5 O( b. Z& x5 ?/ J" J. i9 L在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。' o2 I+ V$ M! I% u! t
6 W# c/ O) h! k3 @* Z千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。% O% B( {; d0 F/ T U& e
* M+ a: m# Y9 |' e) [; s3 P3 A7 |& G/***********事件触发的函数**********/8 S: K/ `* L$ G
8 o6 `; L2 j0 n- t! I//当有人*近时
; E! ^ G+ z# y0 Y; i' Mprocedure OnApproach (aStr : String);
8 `2 K( z5 v0 X# g. ?7 }, H
# z4 v# R& V4 ^, y) n0 R//当有人离开时) C2 j9 x7 N/ O. s" y) e5 a
procedure OnAway (aStr : String);$ y# |0 \) U: k& |
# J( x1 T% N- t
//当受到掌风攻击时& t1 s/ d" W; a; l/ F: _, p! L
procedure OnBow (aStr : String);7 m \( t6 V/ D6 V4 [
9 s- d& c0 ?) l" V
//当状态改变时
* ^8 L( T' s9 {9 f! d; K. o( }procedure OnChangeState (aStr : String);" k6 [2 s: U& Y0 @7 W2 Q( w
1 r* [) T/ C8 b! U3 {+ J- }) v//当初始创建时
( d' h4 v m' Y/ ]" iprocedure OnCreate (aStr : String);. s" _7 Q2 N& c! s8 [. l
' N- B6 w8 z+ s6 g1 ~0 R; s4 {+ j5 o
//当被双击时
9 ]( D; W3 l0 R# nprocedure OnDblClick(aStr : String);+ i# `; g1 E( Z" A
% h' v2 }' u- L9 A
//当死亡前
) N0 [' j7 J5 f: }5 d' @5 Lprocedure OnDieBefore (aStr : String);
% O" k& C) D! F- S. x7 R7 f& m% ]; U, C2 m
//当死亡后
* c5 @5 o/ H2 z8 B6 aprocedure OnDie (aStr : String);7 z' x4 L: J& q& v- _& f* P7 X
0 E+ Z0 i. w8 c9 N* u& Y
//当被拖放物品时3 @4 {3 Y( Z5 n# a \! W8 {' I
procedure OnDropItem (aStr : String);+ ?4 g2 F7 k( X2 r( o7 u
" _0 y' J& F2 o- c( ~- H" p! ~
//当得到命令消息时& y7 T' p% u& A0 o% ]6 e
procedure OnGetResult (aStr : String);
; {& i/ S3 T& G3 {) g# Y, Y) c
8 K. N! m5 \: f" \& S# u//当得到改变步长时9 N9 M$ W* W3 `/ \$ |. x
procedure OnGetChangeStep (aStr : String);% Q; { |# Y2 T: y
* ]: ]" O! d0 j5 R5 _7 b( U
//当受到攻击时
8 s+ K" r1 H0 o @3 l2 m9 qprocedure OnHit (aStr : String);) K" ?3 `1 }+ L+ {9 M3 w
9 Y# x( _* e6 D8 V//当被左鼠标键单击时
( H0 |5 {, h% Yprocedure OnLeftClick (aStr : String);
6 c) Q, r! \9 D) n
, n7 V8 l/ k! Z( R% {( l//9 W- g6 ~3 B% i
procedure OnRegen (aStr : String);0 x/ b" e- Q u# z
; b. {6 R D5 t0 O; J
//- Q/ E- K0 ^8 A3 f o$ u$ H
procedure OnTimer (aStr : String);8 Y }: Y( I- i9 J
' ^- k' y0 T4 P$ {* j//当物件发生翻转打开时,一般是用于门1 l( l$ V4 i7 f- J! H1 t# o
procedure OnTurnOn (aStr : String);% Q X& b3 ^1 ~$ X' y1 R
1 y5 }# n2 l& H//当物件发生翻转关闭时,一般是用于门/ ]3 T" Y7 L: ^& V" y. S6 t
procedure OnTurnOff (aStr : String);2 f) Z |1 j7 l. }' X. E
& d% A/ n: M: p1 q//当用户开始游戏时
! r4 u# v7 \+ x$ Kprocedure OnUserStart (aStr : String);7 ~ f, y0 @0 z# F x S( m
8 r4 h" Z" V7 H1 [
//当用户结束游戏时* @9 b. q9 u8 w1 w
procedure OnUserEnd (aStr : String);
9 }7 U/ B7 `; E, t; I" M J
* ]+ h$ c& F# r5 n! u: o% \//当移动时
/ @7 J0 \4 ^6 j9 u2 i0 g7 mfunction OnMove (aStr : String) : String;, B& D' H4 j* Q& Z7 ]
- Y* W' D' [: @% I; W//% z1 G8 `: F4 q
function OnDanger (aStr : String) : String; ^$ h4 K' k% n# r/ V
+ d1 [" o" R: j2 ]! [3 R//产生一个随机数(系统函数)1 ]0 Y+ m( n+ J* a8 V8 _
function Random (aScope: integer): integer;
6 L- [( f3 y( f. ~6 L n7 {0 `
7 [1 b+ E. I* }//返回指定参数的消息(系统函数)7 F) Z# D& x. D5 h1 }* B
function callfunc (aText: string): string;
. `5 z H6 j6 ^ x# |5 k
+ V6 x3 Y. _, p# x//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)8 D$ [* Y; V" I* A( `
procedure print (aText: string);' Q- p' W. s y: T5 R D
, _5 G3 D2 v1 w8 }具体参数(略),整理中...........
- j7 z+ ]8 ^. [1 Y2 y
" D. r: b0 U# m# _//转换字符串为整数(系统函数), M/ {, i' A2 ]' E3 [* }) o4 n
function StrToInt (astr: string): integer;
9 H2 _/ d( ]% G3 K5 n, Y( x
, B( |4 W, }& K4 |( t//转换整数为字符串(系统函数)
9 \# ~ m! V. W. k5 }function IntToStr (aInt: integer): string;
6 n' L& [- R$ M( A& V* f
O1 p# a8 i) V+ U2 b# @% F/***********事件触发的函数**********/
( ]! V' A7 ?( M3 S& c6 R9 Z( ?% m' e: c s( \" j, x5 a
, h0 O9 Z- o8 l; Z
$ i! A6 d3 S5 j. P& Z* d) C
+ H% ]" O* {4 r0 o$ O. p4 ^9 A; c N& _
5 V+ O/ y; n, `7 @# u3 p' g8 B) m, h' g
! P+ y( w7 U9 }9 R. W* Z% m8 B
) Y6 D7 ~, w5 W: j& c
function callfunc (aText: string): string; //以下为 aText参数的值
& {6 k) A' u9 ~8 d/ P; Z$ z/ L' h( d- m4 A! {
getsysteminfo 获得系统信息3 l; S' ]/ X1 A( g6 P
getname 获得名字
* N y; }$ K* w; N4 a4 |, \getsendername 获得消息发送者名字
1 y# T7 R: G# w$ V. v% g. R: Tgetage 获得年龄
8 A) |; s% y0 L& w7 G2 d; ~getsenderage 获得消息发送者年龄
2 Y+ I% {2 ^5 N9 v: U5 M, Kget*** 获得性别, U7 d6 b ]( o- }- h: T4 l. z; x
getsender*** 获得消息发送者性别. Z* h0 D( J% i1 V3 g4 [; | z1 _
getid 获得ID1 Q* z( r U6 A/ b5 O! e
getsenderid 获得消息发送者ID. C5 v/ a" s" w+ j9 T+ q$ _
getserverid 获得服务器ID
^( Q; e# ?6 s M: mgetsenderserverid 获得消息发送者服务器ID: M/ A: P$ Y; Z; p& b
findobjectbyname 用名字查找物件4 n8 Q& e* C& f0 h7 V3 f% q
getposition 获得位置
* c! |* Z2 ^( E& b6 R l4 |getsenderposition 获得消息发送者位置
: _! N: z1 P- K1 `3 k3 [getnearxy 获得亲近的XY7 M" E7 [' ~5 Z
getmapname 获得地图名字2 H# ^( p- {) D% q3 y
getsendermapname 获得消息发送者地图名字
% @( g# x4 i% F' |getmoveablexy 获得移动能的XY( Q7 A) Q" f7 l3 e* W
getrace 获得种族; _, ]9 x( j, I4 ^# I5 P
getsenderrace 获得消息发送者种族& K+ G3 N8 e9 @& ]" h; K! \, Z
5 ]& H% `8 @6 [* v/ G) ~" xgetmaxlife 获得最大的生命值 L# X" Y* u( a# q6 v4 ?2 R; u
getsendermaxlife 获得消息发送者最大的生命值. f# g( L: |) u% Q, K, ~
getmaxinpower 获得最大的内功值
) g4 T: F+ Z0 A3 f7 ogetsendermaxinpower 获得消息发送者最大的内功值9 |) S% |" T! f" ~. w, I
getmaxoutpower 获得最大的外功值$ B/ O3 l0 P2 V6 P# Z
getsendermaxoutpower 获得消息发送者最大的外功值& j( C' q s. J
getmaxmagic 获得最大的武功值. T) E. \+ |; R' C( P* j
getsendermaxmagic 获得消息发送者最大的武功值
+ V8 D, _7 h6 K# R- X2 M1 wgetlife 获得生命值; k+ O; k8 D! I# p# Q& g
getsenderlife 获得消息发送者生命值 O% h7 p4 P) E" m9 s% _
+ ^! j$ _* ] g5 I/ ~
getinpower 获得内功值9 r$ Q* y; `& l9 W7 R
getsenderinpower # k0 e/ B/ }8 `6 a! m1 z$ E' U' E
|