千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。) B/ P) L6 y! ~6 m% x M `! ^ j% V
' X' b& r. k9 u0 p- d9 |
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。" H7 ]5 g# D, m! O4 u6 b
% }/ N/ Z' q) N& {! l! C2 \一个函数的基本结构是这样的:
, E( x! g; u! z) {1 x+ Z: ~# d8 y
0 T7 N9 d& y7 U9 h' O5 Nprocedure OnCreate (aStr : String);/ v0 O J; y+ Y4 T U7 E
var
. {+ q9 J- F8 h* t# o8 i 定义变量
5 O. ]3 h3 g# @+ j% Lbegin
: e# m* s/ @$ o8 a2 H& [ 语句7 ^; S# f6 T7 i7 s
end;# {6 I8 `1 {- @8 B8 ?
, r6 y5 q2 i4 j5 W8 ?+ T2 u" g
在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。5 K) g4 F( m1 @2 e' |+ L
7 w# F/ n% Y/ Y5 T/ o千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。* Z5 W* ?4 S0 I: C# x# D
9 X$ M1 a. U5 f* v l/***********事件触发的函数**********/. M* o1 O5 c2 B5 e
7 m, l, z9 v0 o/ o+ [//当有人*近时
: F* [0 [6 \1 b$ Y: tprocedure OnApproach (aStr : String);
3 F0 p" T7 z3 J0 C* z( J! W) R M. M) h5 Z2 `6 q8 b8 t
//当有人离开时& f% Y$ E3 C) `$ z
procedure OnAway (aStr : String);
4 Q' @# f' y( [0 ?- b; O# G' Y
6 F3 ~$ Y/ Z: j- O6 s//当受到掌风攻击时
" e, K. l3 g- Q/ Aprocedure OnBow (aStr : String);
( G! }# w# [% Q) {
0 R8 |1 S B2 }* e3 J//当状态改变时% O( p8 k7 Y4 D# {
procedure OnChangeState (aStr : String);; R: y/ R' |) A! ?
8 |, V, b% y; t0 Z//当初始创建时* L* ]8 T6 D# L& D
procedure OnCreate (aStr : String);
1 I; J, S1 ?0 K6 [
% O: h; Q# b" {" w+ F; k//当被双击时
' u9 Y% K" h1 d# h4 R2 V" ]procedure OnDblClick(aStr : String);+ E: \& e* R, C1 o" d* J
. l5 J4 U) w; F# h! l! f+ N1 O
//当死亡前
) C$ S3 ]1 d1 D3 E/ O0 R' m! rprocedure OnDieBefore (aStr : String);
+ u6 H3 u( D/ v/ I# r& q3 d0 \3 m) N
//当死亡后
8 P' Q/ X% o! \2 M1 O2 G% Cprocedure OnDie (aStr : String);
2 h8 L; ?9 Z' B: R9 \1 I" z1 x- Y# l2 X
//当被拖放物品时
; r4 Y% B5 P+ m, ~, rprocedure OnDropItem (aStr : String);* m4 {- d0 d! T
4 E2 a: V1 N1 N* ^2 a//当得到命令消息时) \% B: T* s/ S$ A8 _
procedure OnGetResult (aStr : String);
E/ }7 k6 Z6 |! n# a! p
% ~" I' w! I, h* j//当得到改变步长时
6 S& B8 R z! {1 L$ k9 z7 Q3 R7 qprocedure OnGetChangeStep (aStr : String);8 Y+ ]/ Z/ A7 r4 t& [
) i) l0 O# h. J% `, s. @& y//当受到攻击时
% {7 A' R7 f: j/ W& J, b M \procedure OnHit (aStr : String);
8 Y- e' x& q" [) F2 M' o) U0 G) n+ X% t- Z9 x2 F- Y
//当被左鼠标键单击时
' j" u U p7 W& Z* fprocedure OnLeftClick (aStr : String);
7 C, F$ c* t9 a4 j6 `, V6 W
. a0 V2 U. d; ^9 C/ g9 q% @//
8 X* q* K8 [: z9 M% D4 R8 iprocedure OnRegen (aStr : String);
1 i E O. p+ J8 X3 {7 X) _# v( p9 Q* n
//; M) D& B- g/ g4 [* }
procedure OnTimer (aStr : String);
* `" I% I1 `7 j4 G) S9 z6 h' C
1 d7 ~; {' L( ?1 Z; b" B//当物件发生翻转打开时,一般是用于门$ z; x4 b; R8 @7 N
procedure OnTurnOn (aStr : String);
* ^& f6 `; S0 S3 g% r4 T7 C3 j/ X) A4 y* f4 B% v( C Q* Z; }4 o
//当物件发生翻转关闭时,一般是用于门
7 o3 m3 b2 W d3 f& |procedure OnTurnOff (aStr : String);8 q+ k5 P4 j7 o8 x! Q1 C1 y) H; [4 L
) h9 _) Z" w! g8 ?% Z//当用户开始游戏时
( C/ f! a+ y7 b0 T1 k0 b9 h5 Eprocedure OnUserStart (aStr : String);' e' g. ?, ?) [2 ?: o- e, I4 o8 |
2 K& [8 h! B3 z- h) e# u//当用户结束游戏时% A# A4 T! T8 D% @ ~) Z4 ?# ~ F
procedure OnUserEnd (aStr : String);
$ |" n; ?% l' E4 a5 Q1 U, P. v: M5 Y* u0 O
//当移动时5 k0 p4 `9 R; p9 f9 t9 A$ C6 z
function OnMove (aStr : String) : String;: B9 F4 C: i1 B0 Y" M
+ Y1 l+ t/ C$ f# L3 \& j- N//: e8 [0 x7 Z" ~ k
function OnDanger (aStr : String) : String;
2 f9 q* I9 \' ^0 G5 C
& x, O4 |" D$ i: j//产生一个随机数(系统函数)
9 c" n9 l$ a& N9 P; W8 @! V6 gfunction Random (aScope: integer): integer;
; f; J2 N* X3 z, j: Z. P
. p4 U& ^$ @# a) P$ E1 N//返回指定参数的消息(系统函数)' C8 z$ B$ s9 ~" n% l7 J
function callfunc (aText: string): string;
9 N' M9 {/ w: b H4 r3 q& T
# c. a( f$ n! A//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)/ T+ v; g8 ^3 n& T
procedure print (aText: string);
$ _. X0 t1 I8 Y2 f3 [2 [
, f' W" x7 s! o( z' `具体参数(略),整理中...........' m' r# P5 k* n$ _5 c* k! G
* m8 }* D9 o! o5 f! U: Q3 O
//转换字符串为整数(系统函数)
! o1 j+ O- N& b" @# [( Bfunction StrToInt (astr: string): integer;
7 w8 ]0 p- Q1 }! q# Z1 X# G: c
//转换整数为字符串(系统函数)
s- ^- X! t" [& B# x8 sfunction IntToStr (aInt: integer): string;0 Y+ `' O2 E1 v; x2 t; h, O
0 ?- J5 r5 C) I5 Z7 e1 _: ]
/***********事件触发的函数**********/6 p4 Y# M9 O, r* ^. }# a
) x8 Q0 H& O& _3 s
+ h% Y7 M H; M/ y: m# R( d1 V H
' N0 O) n- N& U* h6 m
# |6 j& U7 w# x) C3 M( U4 `
0 `+ V; T4 E! O2 n6 A) A/ a, ^+ q
# O# D& Y4 |9 t" `; X) a
$ I0 ?' {4 U: l0 n8 N7 |$ F5 n' J) a# W. r; Z Y
function callfunc (aText: string): string; //以下为 aText参数的值 D) O* D- |; o9 R
/ r7 Y2 q& k1 G" J: vgetsysteminfo 获得系统信息9 `" S" \/ ]- D/ m% I0 ?" w
getname 获得名字0 G" O* a9 _' J6 g% z& D: h
getsendername 获得消息发送者名字
e+ Z2 S9 }! `getage 获得年龄# u$ p. ]; _' Q& W0 _7 g
getsenderage 获得消息发送者年龄
2 D& F. @4 W8 U. R: Z8 \" hget*** 获得性别) [/ Y# ^& b1 Y! x$ G8 P
getsender*** 获得消息发送者性别
2 Y( P1 Z) h) J* |0 Igetid 获得ID; k; i- \4 Q R/ V& ^/ E: n
getsenderid 获得消息发送者ID. |! }& Z* |: ?2 V9 G
getserverid 获得服务器ID
) g" {7 s& C) G j, Y6 a, ]getsenderserverid 获得消息发送者服务器ID
9 g$ U4 ?0 p* k" P0 w% E$ Ofindobjectbyname 用名字查找物件
2 z4 y! { z% ?, _6 f6 lgetposition 获得位置3 e; A7 G* f$ N2 X- q; ?1 m
getsenderposition 获得消息发送者位置3 V1 J% t6 s+ `" n
getnearxy 获得亲近的XY
* p5 t! ~' o1 e, B: Y+ m1 B- P. l& Egetmapname 获得地图名字
- y1 I$ V" i* P, ggetsendermapname 获得消息发送者地图名字
$ [" i1 O$ ~, d1 t9 z2 k9 r: Lgetmoveablexy 获得移动能的XY% n# ^2 A' `4 }4 D; Y) E8 c
getrace 获得种族
) `: a. y: x( M2 agetsenderrace 获得消息发送者种族
2 e5 Z; S M$ C8 f4 z( G) p1 f- `4 F" M2 F$ j4 Q( d
getmaxlife 获得最大的生命值/ G, w4 M5 J3 p# ?4 {! W
getsendermaxlife 获得消息发送者最大的生命值9 T5 k: u+ I! y6 S4 ]4 p% Z
getmaxinpower 获得最大的内功值; k& @) x3 f4 b! l+ r6 C4 [6 P; J7 m
getsendermaxinpower 获得消息发送者最大的内功值1 S+ J( F2 Q6 ?
getmaxoutpower 获得最大的外功值
$ K5 @! c! P3 G7 g7 V+ X/ }) [getsendermaxoutpower 获得消息发送者最大的外功值) n5 X7 N h7 A5 d+ Z1 m0 r
getmaxmagic 获得最大的武功值$ R; g* U# @3 H3 a( {
getsendermaxmagic 获得消息发送者最大的武功值/ t# N3 W3 {2 `1 _
getlife 获得生命值- l# }/ ]( n! _. z& _2 L2 [4 u
getsenderlife 获得消息发送者生命值
$ Q6 N7 C+ K$ L7 c& L9 j1 z% f4 R; @/ R9 ?( r
getinpower 获得内功值
6 Q4 s7 s+ ^- N. [1 a4 |) t# T, [getsenderinpower
6 p" x' u4 ~. E |