千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
. z8 H8 V' x( ~# i z! l8 r) R$ \3 V7 @
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
6 l' W4 v, s# z$ o. o* n
; d5 A# L- d: M) p7 Y+ V一个函数的基本结构是这样的:
3 h% N4 q G R! f
: a ^3 X. D( gprocedure OnCreate (aStr : String);& ^+ V; w: A, ?2 o; @- c
var
& M0 r! H6 p& D, T+ ` d 定义变量
6 i6 K3 p% T. M" `begin: `. O5 r; N" {2 \ Z
语句, U9 s7 G6 V- j7 O: Q
end;
* x8 F/ r! J" m5 i# F: V; c& d& P, W& x6 p
在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
( L- E' e7 {8 U J7 u/ J
4 r T! m; \. z+ {千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。( ]) G4 t4 P: }* c1 ^: ]
% T. F/ ~) I1 i7 t" N+ h
/***********事件触发的函数**********/3 s+ K3 ~7 @" ^+ O" G+ W6 K C+ B7 w
1 S: n3 q* o8 {+ P; ]
//当有人*近时; g3 ?* ^* i: L/ {
procedure OnApproach (aStr : String);
& _# y* K7 V6 ~3 v
) ^1 F4 l( \( V. m- A e//当有人离开时3 e* v# L0 T( x# @6 Q+ T
procedure OnAway (aStr : String);
; K0 F) O3 X* b7 D' [% C% R* `4 s! P4 Z5 s W& k; J3 Z
//当受到掌风攻击时
6 Q2 Y' H; M* `+ zprocedure OnBow (aStr : String);
7 R b* E' @& Z' Y0 q+ J; Z& l: ^2 a9 {- c0 L) U3 d
//当状态改变时
% X# s6 I8 `$ P- [procedure OnChangeState (aStr : String);
8 j+ L4 W) p; z! e" v
# n$ ^! v* r8 E: }//当初始创建时, t3 ]& k) t- B9 Y7 H4 @3 [
procedure OnCreate (aStr : String);. k. _; V. q* m) w. w
# i5 F% [; J# k3 y//当被双击时, k1 M- X! i- G: q
procedure OnDblClick(aStr : String);: E6 V- _. M( {8 O# P' v! F% c
% f6 Q6 w U/ i: t//当死亡前8 Z! K4 g' W/ l+ ~6 `- b
procedure OnDieBefore (aStr : String);
# I0 d; t; Y/ k; f! D; m$ j# l ]
//当死亡后
( ?, g- N( S, r: M) ]& Rprocedure OnDie (aStr : String);
7 e% J+ k' J1 _' i
1 i9 w# a# U$ c* d: @- v6 T! N//当被拖放物品时' d' I' ^ i" n9 {- E
procedure OnDropItem (aStr : String);5 Q4 y, m( i: A. z* b1 J& l+ X
) {. f, p+ S7 x( `' Z& O
//当得到命令消息时
. O# f7 B; O- [6 D, C3 ]procedure OnGetResult (aStr : String);
" P8 D* Q" o- H+ P9 `. d* o. F) X4 v3 Q1 f! |9 Z" Q
//当得到改变步长时) W0 P& F$ V! [& W: ^
procedure OnGetChangeStep (aStr : String);
3 V1 v9 `6 T. n* N) j& U& w# d& x3 c. p7 ?9 g% k6 d
//当受到攻击时
9 g0 y) m/ s. s* W& Zprocedure OnHit (aStr : String);9 D1 S) J! `5 o# _# Q- l- i
. O: T6 K, n3 N& p- T+ l//当被左鼠标键单击时
% S! k, Y- R% J8 c4 x2 E2 y" mprocedure OnLeftClick (aStr : String);: u- j9 j) g- U& o/ o/ J7 }
3 \4 U! t& l' F( G* c, j' ?//
, J. Z0 n- }/ `0 @& B& f* eprocedure OnRegen (aStr : String);$ R' y1 `& m1 N* [. B
" u8 ?+ l2 ?2 Y8 |//
3 X: W& F5 t/ K+ Oprocedure OnTimer (aStr : String);3 @1 _% H' Q8 |" T: V
% F k$ l+ J3 [5 P1 W" N' ?& x
//当物件发生翻转打开时,一般是用于门
# Y. L9 g+ v% U1 P, b) C7 oprocedure OnTurnOn (aStr : String);) H: h; |! q$ m8 o9 q! K8 }8 p
+ e2 K7 R, }4 T1 l* k! j" f//当物件发生翻转关闭时,一般是用于门
# {* [# U- N% ^& q0 ]+ |procedure OnTurnOff (aStr : String);
: y& F: A7 g M2 t: g; j) Y, }# [& F6 b6 L
//当用户开始游戏时8 e% d+ p; W/ D# G& q
procedure OnUserStart (aStr : String);9 F6 c. I# h# U, `# ^$ r
, ^' U& G+ Y4 {" j' X T4 ?
//当用户结束游戏时0 |2 S2 n8 I8 \* y( @: H* E
procedure OnUserEnd (aStr : String);
7 R' d8 J6 R4 S" r* F0 w+ P5 l. p6 G2 N$ K, U7 F- Y. E2 b
//当移动时5 W/ P2 n+ G, u# `- y0 |8 `- q$ v
function OnMove (aStr : String) : String;
* S& M$ o0 g! Q
( ~/ H e% V2 @9 q D8 m//2 r5 V0 Q% o% U, k, G X
function OnDanger (aStr : String) : String;
# v, a' E4 G# e+ F4 t5 y
! _( l _- g& ]( W+ p! [# ]+ t//产生一个随机数(系统函数)% W. K% F, U: R0 @( p
function Random (aScope: integer): integer;
8 ?* q1 M8 o Q$ E0 ^
$ N5 h7 i% f7 \! ]8 k//返回指定参数的消息(系统函数)
8 P1 `8 w! t& g1 I9 j# F/ sfunction callfunc (aText: string): string;
) V M$ F# o- Q* e+ n! o* h. M' a6 |+ l1 N6 k
//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
, t& Q: J2 s* n. dprocedure print (aText: string);
$ o2 D3 P( e' g
( J# S7 r( I- U1 {具体参数(略),整理中...........7 e; w) f# }% O
6 K, ?" f: ]" f/ T9 W
//转换字符串为整数(系统函数)
i9 O, X& {* u( `# W0 }function StrToInt (astr: string): integer;) r# d4 S# x. E( Q; ^, J- R
' Y3 r$ V! i) U- ~# ~//转换整数为字符串(系统函数)
, o5 {7 Q4 X' x) B1 f! O* H* Sfunction IntToStr (aInt: integer): string;5 \( F* g$ v( R: b# M' B; Z) Z) k
, x z! o! b- x, {
/***********事件触发的函数**********/4 }5 U! Z1 g$ _, I2 h4 h( P% J4 R
1 Y% v( c. ~- J: \( ~7 \; O6 R/ G0 H/ k
6 y7 E. w) w* g4 `+ S0 }; H
% k7 p+ q* N4 D
# Q9 O! N$ v+ O1 j/ \
/ i* f: F' _. ^, M* z! |
8 ?5 D( @2 h, I. M- t+ u
' r- A* ^2 U2 Q/ B3 F9 e1 o6 v6 Y
function callfunc (aText: string): string; //以下为 aText参数的值6 A! k+ m" H8 c2 M2 f. m
" V0 `8 Z+ A! X: g1 E: q; q& Lgetsysteminfo 获得系统信息. ?! `4 x: |4 l7 @- M
getname 获得名字9 u: l" z! h( X
getsendername 获得消息发送者名字4 R* n3 c, Z% ?0 w G/ k* U1 p
getage 获得年龄2 i& `; w D6 W; j0 h! a
getsenderage 获得消息发送者年龄
% Y% r s1 i n" \get*** 获得性别" {& \5 f# f9 [+ n
getsender*** 获得消息发送者性别
4 Z0 ?) n& J& T( U% dgetid 获得ID
( l6 q) s/ E, B: P1 l8 r Wgetsenderid 获得消息发送者ID
6 P- ~( o3 \( S- e N6 C. Dgetserverid 获得服务器ID
: c/ R3 e+ h9 j+ }- Y# zgetsenderserverid 获得消息发送者服务器ID
8 L5 E6 d8 s6 R" f8 L; W7 Efindobjectbyname 用名字查找物件
) M' ] K2 v; V9 `# Rgetposition 获得位置5 r# a+ `% P8 O3 I$ n" R9 w) G
getsenderposition 获得消息发送者位置
% D1 H; x7 Q, ], q) I. Pgetnearxy 获得亲近的XY
( `, ~; x4 ?# i7 g k9 J1 ~getmapname 获得地图名字, i4 W' R4 P9 s. w1 J
getsendermapname 获得消息发送者地图名字) E" Q, x: i' O# z7 t+ j# A
getmoveablexy 获得移动能的XY
' f- S2 D; Q9 N2 ngetrace 获得种族
9 r/ F- r/ C' g9 d' e+ Vgetsenderrace 获得消息发送者种族
9 U7 p5 |- B, Z* H6 a) m( N0 r* U3 f
getmaxlife 获得最大的生命值
& X4 p- u/ S4 p; u6 }( w8 Qgetsendermaxlife 获得消息发送者最大的生命值
" Q9 ^' T h! E- g3 A. agetmaxinpower 获得最大的内功值
2 t$ Y$ V' V+ L6 {+ Hgetsendermaxinpower 获得消息发送者最大的内功值/ `0 p2 a# U$ a) F* ?
getmaxoutpower 获得最大的外功值
. T" i1 P5 ]3 q. ogetsendermaxoutpower 获得消息发送者最大的外功值: z1 m" v* P2 H8 Z* \
getmaxmagic 获得最大的武功值, k8 A! r) k9 ~9 z( N
getsendermaxmagic 获得消息发送者最大的武功值' Q7 b) Z: h5 @" `9 ^. B4 J( z
getlife 获得生命值
) _# u5 m8 {, o* ^getsenderlife 获得消息发送者生命值# U. _, X$ x4 E$ s$ R1 S+ t
- N/ g% |. S' }& } c4 ~" q
getinpower 获得内功值; A& e8 B+ b" M5 i! ] P3 s
getsenderinpower ! e! ], m! Z0 R9 }- s( W
|