千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。& ~ I' H6 P0 @
% e4 g# E& @6 K千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。& D, {+ t+ x" c" @4 t" {
* U" _( M" r+ Z0 ~6 ~% X3 i7 z
一个函数的基本结构是这样的:
# y7 r* K6 o- S( g! ^0 ]* X
) K- U' x7 }/ i u2 o2 `# S9 qprocedure OnCreate (aStr : String);+ T, `! o& I% u! P& _
var
: n6 k& z8 _! s) N* _: d 定义变量
$ e9 d: I0 Y8 P! [1 |begin
! C/ f# b. e. O: a 语句; w2 u" d7 b' R% Y7 E
end;
7 o& x _6 o. ?0 l- L) _1 r# |+ ^
5 } r& }' K4 g- B: J6 z- ^) g在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。$ d9 v% V/ A% k7 h" I9 _: `
' Q% B3 e( M& b6 a, u L千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。
- I% Q# n" i5 {6 J! V
/ C2 d4 [6 I$ @* |8 g/***********事件触发的函数**********/
$ I& Z# C% T# L" V* r
# [( R7 D* Y2 X//当有人*近时3 z( ~1 y B0 O
procedure OnApproach (aStr : String);/ L7 Z5 M1 \4 A7 \$ v* H2 h
. y1 m0 {2 [6 n//当有人离开时/ v4 Y' T6 d0 ]% R) z
procedure OnAway (aStr : String);6 x( y1 w" e, A7 t
: O/ R* ~; Q5 x# @//当受到掌风攻击时4 y8 z4 g6 Z5 _4 g% r0 C. @
procedure OnBow (aStr : String);( V i4 b% q9 F; H9 `, U7 Z
) V9 Y2 p( d( Z$ Y% A6 n
//当状态改变时3 V& D/ C, b* i B
procedure OnChangeState (aStr : String);; s' Z3 S- `/ S8 Z2 m
4 c/ b5 H7 [# s" c8 O
//当初始创建时
: l. c( b8 v8 G7 a% x/ fprocedure OnCreate (aStr : String);
' @0 J5 P) m! L5 @: B
7 E8 r$ l" I& w1 s//当被双击时
4 A( D) F6 ]8 }$ s( X5 r! D( Xprocedure OnDblClick(aStr : String);0 Q6 r/ t% E7 @
@% X& E, g; B7 B2 A
//当死亡前
) v; S" ?, x9 S* q& n, O5 {procedure OnDieBefore (aStr : String);+ [. W3 v% ?7 z% Y9 M1 @0 W8 l
2 r9 k' \- G+ I' b0 K4 ?2 |//当死亡后( N6 \5 ]8 C# c
procedure OnDie (aStr : String);
3 R& @' ~( ^, C1 K. E/ `9 c% X4 w7 t% N# s8 l( `) K4 B$ X4 e! E
//当被拖放物品时
4 n; y l& @3 e$ W! f ^9 S/ q3 ^procedure OnDropItem (aStr : String); R$ ~! t F" E0 r5 V+ A* Y: T# j& i
$ g2 u; t [5 J4 b2 {7 W//当得到命令消息时
/ E4 y& t; d2 J& a% {7 jprocedure OnGetResult (aStr : String);2 t# ]9 e+ T2 ~0 R+ E9 H
, P0 B. l" C' c2 p2 ~: _
//当得到改变步长时
3 y1 J( M. I) Jprocedure OnGetChangeStep (aStr : String);& |4 v6 E' M2 v: G1 x# q
! K4 y/ w. _! n% p' x' {//当受到攻击时
* a: Z" o$ S% x" [6 Uprocedure OnHit (aStr : String);: L0 O+ S0 e# A
$ ?7 M* m( E% ?, c* W9 a& m//当被左鼠标键单击时9 v" n: l+ E1 m
procedure OnLeftClick (aStr : String);. c, t* m5 q0 [! S1 v
, E* r7 w4 _7 K2 L! x) j6 o2 W//
) t- B( `4 d- l) ~9 Pprocedure OnRegen (aStr : String);/ K: ?, \* B* b5 O7 D1 Z0 A
& j Z6 w! `- g" U- u# G
//
4 S* ~, x5 k: x1 H9 \procedure OnTimer (aStr : String);
- X! B/ L4 p3 t+ f4 @; O- S! `- N
[/ F8 N, S! W* G//当物件发生翻转打开时,一般是用于门
) n9 T" P- v' _+ iprocedure OnTurnOn (aStr : String);! G( ? A1 r9 A3 a
, |; h3 ], X% ]8 U5 J( n. c//当物件发生翻转关闭时,一般是用于门
2 r: Y; H$ K, v' e n- vprocedure OnTurnOff (aStr : String);6 A2 z1 k# L& Z, v8 O
7 g* ?5 x( i9 d1 e; A, R- m1 s }% i//当用户开始游戏时
, P3 b; O4 Z1 e$ lprocedure OnUserStart (aStr : String);" p" t) B; K X1 M! a. @9 }
' B( N% Z9 U& r9 k& ?* D//当用户结束游戏时
1 Y9 Y2 ]% _7 mprocedure OnUserEnd (aStr : String);
1 m$ E/ [2 r8 b. \, \3 ~( @% o- H& ?7 l$ w" n
//当移动时: o" b! {1 H8 [2 u7 T
function OnMove (aStr : String) : String;# i, ~& n5 Z& V7 R1 L
, A2 {' h2 }- n; j2 `) r) m: Q8 V
//
- T: S" K: T, W( B/ Qfunction OnDanger (aStr : String) : String;
; O1 S. |- F/ c5 l! v8 w, [' b3 b& ~/ y; C% q* g
//产生一个随机数(系统函数)
: ]9 M0 K; d6 D* K- X2 s1 Wfunction Random (aScope: integer): integer;
l) I1 r4 }9 ]( Y5 t ~3 M1 Q$ X3 t
//返回指定参数的消息(系统函数)
L. Q0 V; R" V* P! h1 sfunction callfunc (aText: string): string;
/ N2 j. p; H: L% @/ q$ ]- m u7 l2 T9 E7 T5 d! [
//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
6 x& `: A0 q, l, S6 bprocedure print (aText: string);* D% @8 N8 @: W5 T. u5 |; @; E- i9 v
: j2 h: F( O% n" k具体参数(略),整理中...........
( d: G: k8 o5 v! n/ s3 M! A `' [ m' M
//转换字符串为整数(系统函数)2 ]; ^5 N0 q/ _
function StrToInt (astr: string): integer;
; C5 G3 j2 z) z# i, h' n) z/ C
$ R6 @/ z" ] B! d0 W8 M//转换整数为字符串(系统函数)
: }, y/ a6 I3 S# Ofunction IntToStr (aInt: integer): string;! O7 ^0 O, z; R) V
8 K7 {, A$ A5 `, m0 d' c
/***********事件触发的函数**********/8 Q9 L4 A. o1 E0 s% ?
' g0 \& g5 ^) S4 z+ X \% ]5 }4 r( l& l
# i( A$ A0 C! p5 n; m
1 H1 Z. @' c# y
, Q4 \* _& c& G7 L9 V2 J
* t# Q8 g( P- B5 u
2 |& F) ]8 _2 a2 b6 {
1 o5 I+ |" K0 h3 \3 o6 K
4 @! N3 n, c( h* Ifunction callfunc (aText: string): string; //以下为 aText参数的值" [& K r8 Q, b2 q0 N* J' F
: Y5 p& L' K& i5 p' S1 { U
getsysteminfo 获得系统信息
`6 Q+ C6 n* e! Sgetname 获得名字) }9 U4 C2 i7 p& f
getsendername 获得消息发送者名字
2 V8 ~) R- P9 n2 R+ J. K; Tgetage 获得年龄
6 }5 a' V* l4 l3 K v3 e) i* T+ u! P: tgetsenderage 获得消息发送者年龄$ O0 j) E6 ]" Z p7 b6 H
get*** 获得性别
& x# r/ y* {3 [# Ngetsender*** 获得消息发送者性别( y1 z) x& X% N" w, C$ H# f2 j. z3 F
getid 获得ID
; G/ r7 s9 c! F7 p) C6 ygetsenderid 获得消息发送者ID
7 o; D1 g* j) F7 ggetserverid 获得服务器ID3 d$ u- y* G& @: y8 j; A2 e% g, {
getsenderserverid 获得消息发送者服务器ID+ o0 v: S5 k5 P+ X& |9 H
findobjectbyname 用名字查找物件
6 t! p! m" }9 Ygetposition 获得位置3 T$ A3 h9 g4 n. B3 F# s3 {
getsenderposition 获得消息发送者位置
) d) d/ O4 r' Z) e; Hgetnearxy 获得亲近的XY2 N7 R7 g; y) b8 i3 p8 s9 ?
getmapname 获得地图名字
! |& m8 h% O% v+ T, K/ J, |3 x4 [getsendermapname 获得消息发送者地图名字% |" ]" Q& o7 Q5 U7 I
getmoveablexy 获得移动能的XY: C' z" p: q# i/ o, c1 i
getrace 获得种族
' ~5 @' [; I& {1 bgetsenderrace 获得消息发送者种族
, B' y1 b+ l0 ~! Y# v4 n& M8 n6 D1 r* h4 s
getmaxlife 获得最大的生命值
5 Q% J. _5 W$ x0 a) j; p3 Jgetsendermaxlife 获得消息发送者最大的生命值4 c+ T9 m) l2 U& U) C4 G
getmaxinpower 获得最大的内功值
2 S/ k+ ?+ L2 \! M* C% n+ igetsendermaxinpower 获得消息发送者最大的内功值
( J# r5 w6 y8 [# w2 J ?; [getmaxoutpower 获得最大的外功值
5 v# S+ p4 l k; Lgetsendermaxoutpower 获得消息发送者最大的外功值
* J1 s1 v2 A/ Z* m' Egetmaxmagic 获得最大的武功值- S% @% a! O5 T. I7 h
getsendermaxmagic 获得消息发送者最大的武功值+ i v) m$ t7 i5 s$ I' F: [8 h
getlife 获得生命值. X" r0 b; b$ y& b7 p& A
getsenderlife 获得消息发送者生命值, p5 Z% d+ o9 y7 z, E
, t L' M* U5 q/ [
getinpower 获得内功值/ q. z- I: a7 J$ u
getsenderinpower
" Y' n" ?, _! } e; e |