千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
: y& V2 @+ ?1 \( r/ C" e$ H# S Y0 b; h r; X- P' h
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。* p2 u$ n1 F/ O; P8 L+ Y+ U, a! {5 J
+ b0 h" ^5 t! c4 ]; r2 _, m一个函数的基本结构是这样的:
: m: t% c; |4 B* |3 K7 K) e( J: W, N; R! K# u) e5 o3 N: o
procedure OnCreate (aStr : String);) M2 b8 z5 h8 h" B @, D7 x$ M
var% U1 ]& N/ }- d0 M8 }; }
定义变量' |7 s% r3 B0 y; h
begin0 M& W$ q2 b; N: g) ^: P
语句3 n, {0 P: R7 o7 t
end;7 K7 \, y7 H4 T; R4 D
8 i7 l# v6 H2 W/ Z在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。0 r' A: X5 a8 k- D
, A7 Y7 Z3 P z) ^0 t2 b- f7 p千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。
1 b6 R; C1 E& v. |: J' B
. A& i7 {) p- f0 h0 B0 h$ r/***********事件触发的函数**********/
1 E# ], v0 p8 }1 E6 {
9 a/ E# ~. @" b$ I, A6 x T' n7 ~! N( m//当有人*近时% F/ I# }7 V! g( K
procedure OnApproach (aStr : String);
- ^7 m6 p& v- K; I: r* [, N$ m$ c3 B" y9 h# ]6 f7 l
//当有人离开时
$ Y6 C* Z/ c: I. p/ dprocedure OnAway (aStr : String);
1 X. X+ E# ?" |% {7 ?. G4 W O7 y. N$ y6 N- ^5 O, l
//当受到掌风攻击时
3 e0 {4 z9 M# F- ]! cprocedure OnBow (aStr : String);- x! G/ o/ Q) ?( B2 O9 v
* J0 S1 L$ P2 d2 B( P& t6 Q* N% D: {
//当状态改变时1 R% r! N" m4 o3 k% W: w
procedure OnChangeState (aStr : String);' `# I& d; n, d" ?! `
) q2 E; X' P* T: c
//当初始创建时
+ P& s+ W' h3 nprocedure OnCreate (aStr : String);* u% N8 p: w+ H' {# y' B
( e" a' ^0 i) N3 j//当被双击时
" U9 Z$ e2 \4 F+ C6 r# ^; p+ A6 Cprocedure OnDblClick(aStr : String);6 f2 C6 X' @, f, W
2 B# I% m& _( x! s/ h
//当死亡前+ O/ s+ _* T2 }7 ?% g0 I/ N2 M0 h
procedure OnDieBefore (aStr : String);
j4 `" F/ T6 U" H3 D
# X2 e& J5 k* t, Z+ @9 E//当死亡后2 k8 u" S) g" v
procedure OnDie (aStr : String);( |% L, U" k$ r" `! [1 `0 z
( {- f3 E9 x- Y
//当被拖放物品时* Q) d3 e5 \, Z
procedure OnDropItem (aStr : String);
P! C4 o1 a$ @2 m' _7 L% S, n( {! B3 w, T( S! b( Z& M
//当得到命令消息时
3 X* l! @( b) J5 |) P: Q+ _procedure OnGetResult (aStr : String); v1 s8 c# N' ?5 @% B" R; l( d; p
1 [0 Z5 d5 e$ Y! }4 A* U
//当得到改变步长时
: P+ t4 Y" |7 A( B' ?" i2 \procedure OnGetChangeStep (aStr : String);
* O/ M! b" @& p" p* v: z$ N; Q0 w6 \! B! f% ]
//当受到攻击时
: D8 u h* m* V. }( O7 G3 mprocedure OnHit (aStr : String);6 K2 }1 ?) X% f% }5 a6 J! |, o
9 @# ]- b( t4 [, }1 H' p
//当被左鼠标键单击时
- Z0 y: ]/ B! L! G: Q4 iprocedure OnLeftClick (aStr : String);" n+ u& @$ K7 C* f8 ~* d3 x0 W+ U, o
8 j' S8 ~7 D8 K7 f/ `//
2 [0 f! m# M5 q# O- Sprocedure OnRegen (aStr : String);& N* v8 D; n/ V$ a4 C# ]7 n
, i- G% b# J$ ?; }0 w. d' U/ M//
U5 E+ z9 K" ?procedure OnTimer (aStr : String);
, n6 |0 G! Y' a N% ~7 t9 X. q$ n3 [- Q4 l# S4 G
//当物件发生翻转打开时,一般是用于门
4 [* J9 D0 ~5 N7 {" Z% iprocedure OnTurnOn (aStr : String);
/ ^$ t7 S7 ~) e3 z
( ?4 D4 Z+ z; {' q//当物件发生翻转关闭时,一般是用于门+ o; Q; d4 h- {6 |3 m) ~
procedure OnTurnOff (aStr : String);) l; ^$ G. ]9 ~5 N
# L, D# d+ N e//当用户开始游戏时1 ~& H; D# m% Y' g1 b
procedure OnUserStart (aStr : String);
' I1 t, H* c2 k( G+ @; ]; } r, N
//当用户结束游戏时+ \* k$ k# ?8 O3 ]( o
procedure OnUserEnd (aStr : String);, a* z$ C0 A; Z& ~; K- z" N
7 X4 H4 i2 o) l: v6 Z9 J. y% V$ v4 E//当移动时" ^8 S- R0 D: `' u
function OnMove (aStr : String) : String;, A3 e. O) j0 {3 W; H" }
J; L1 C5 E. s) _4 J+ J9 j//8 _1 N# n+ d" Y$ C, L# S
function OnDanger (aStr : String) : String;+ Q1 U; r7 c4 I5 O
( z D" U3 o* u6 J4 r+ Z6 T; q//产生一个随机数(系统函数)
, g/ m" K# O& }1 X3 \function Random (aScope: integer): integer;, P6 j& y# K$ g% s$ Y* j
$ k: p# h9 h3 ^3 _- N/ K' X//返回指定参数的消息(系统函数)
9 v3 v4 Y/ A: B% A3 W2 q! ufunction callfunc (aText: string): string;
) y \! ^4 ^5 V* m% ]! V9 O$ {+ S( Q9 D) _5 v [! f0 j
//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)2 n( [2 V# A' T
procedure print (aText: string);
: D1 E7 B1 X8 `* _
" z6 R( q& W3 @* |- `/ x; Y具体参数(略),整理中...........' ?$ X B; Z( V1 x4 ^: ^
- {& e( l5 E- N
//转换字符串为整数(系统函数)
; H3 A. |$ k5 p7 v, \function StrToInt (astr: string): integer;4 m# U4 Y$ U, ~; c8 g
w3 g% p1 W' Y! E: C9 w
//转换整数为字符串(系统函数), ], a2 ~0 [' p" Z
function IntToStr (aInt: integer): string;
! L% K) V% `6 s4 _8 T+ k
# `! m( F; I* }- ?- a/***********事件触发的函数**********/% A& }; z# X9 J6 l5 H2 _/ ?! L
) ]& R6 m7 X( g' W$ e, T r3 Z, ?: f0 x9 u0 q0 k
* a' X6 F' r8 b( \0 I% s5 l/ H& C
' ~$ x+ M* L( ]0 j+ Z
7 s3 p A3 r& k, M9 t
. S: A+ F2 v9 w# ~
1 T! m" @7 ~2 z( y9 v; |% t3 M
7 J$ C& j; V, \* b" c& G7 O5 A3 E6 j) H/ i; {7 V% Q
function callfunc (aText: string): string; //以下为 aText参数的值8 }/ R8 {$ h" o2 H+ j- Y: T
- I8 \: ]* E; F
getsysteminfo 获得系统信息
( O' i* |& L4 B+ B* sgetname 获得名字
, U2 B9 S# a' R% W( m }* L$ Ugetsendername 获得消息发送者名字
& k! [) T5 {' g( B0 ^2 L, F Fgetage 获得年龄0 P' X: q; K; y8 o) ~
getsenderage 获得消息发送者年龄+ {+ u! _$ u, ~: u2 M
get*** 获得性别$ I1 M4 ?6 w B: {# x( K% r
getsender*** 获得消息发送者性别
- E9 g; j! J4 U& K8 dgetid 获得ID
+ V; X# m7 k" u6 I) ngetsenderid 获得消息发送者ID
& y3 P5 _: o5 d1 F# [getserverid 获得服务器ID3 T3 ?8 \2 V- ?
getsenderserverid 获得消息发送者服务器ID$ x* B/ e! Y e- ^2 \5 w1 w
findobjectbyname 用名字查找物件
. C) g" I* D& K$ _" |- ggetposition 获得位置
f7 K, i9 x# z5 H4 ]getsenderposition 获得消息发送者位置
! h4 p$ ~# S. i0 `+ Y: m' _3 j/ Tgetnearxy 获得亲近的XY
& j$ ]0 N! w! }getmapname 获得地图名字2 H; Q l+ d- m; A8 Y* Q& E
getsendermapname 获得消息发送者地图名字
. _" F8 G7 h, X' Bgetmoveablexy 获得移动能的XY
! D# h; z0 s8 y7 d$ C7 Rgetrace 获得种族
. B0 w. M1 v- e- f) J! E2 F! Y( Cgetsenderrace 获得消息发送者种族
9 D, S* l& o7 w1 D1 I
8 L% T5 d4 ]3 K% B! N$ z, Qgetmaxlife 获得最大的生命值2 `* [5 W$ K+ I3 s
getsendermaxlife 获得消息发送者最大的生命值
B8 w8 q0 h" N/ N' dgetmaxinpower 获得最大的内功值
7 S6 @0 G7 r4 U) Ngetsendermaxinpower 获得消息发送者最大的内功值
; ?5 ]8 l. n2 j* W3 B# tgetmaxoutpower 获得最大的外功值0 g' P$ N3 y5 N
getsendermaxoutpower 获得消息发送者最大的外功值, W7 |! f) U; l
getmaxmagic 获得最大的武功值, J ~4 O3 E, s5 Q: D9 K! N
getsendermaxmagic 获得消息发送者最大的武功值
2 }, H9 |- k: c9 w! _, Agetlife 获得生命值
& \8 x6 A/ N# ?$ igetsenderlife 获得消息发送者生命值
9 ?, G: H; H9 ~! V6 u' x. p8 [! J8 V3 _
getinpower 获得内功值) J. v; L( E1 w( X" @! w
getsenderinpower
% L7 a4 `3 [* @ |