千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。, w' ]- I, d; j, H
8 b) X0 T- b9 U; ^ K! D/ h+ |千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
2 o5 N8 o; y- D! d; }( u9 Q! D& [4 a' _& c/ Y
一个函数的基本结构是这样的:
7 q5 b& v3 c0 {9 ` G3 f' X
- G1 E7 ]) u( Iprocedure OnCreate (aStr : String);+ f) k' T4 x/ j) \/ Y& K
var
0 o0 g- ~8 y1 w2 E- p4 @3 ] 定义变量9 H7 t7 i \8 ]
begin, x/ G& _ F# G2 R" v- ?) [& {
语句
0 q& P( M2 ?8 \2 Kend;
' g6 p0 P" J6 v" ]
/ @) u) t7 C" p- i% D8 B' |在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
! t2 M1 p! Z6 I. F2 q: ]; m* l' `) P3 n
千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。
" }& t- ^3 L; f; L+ N( L+ R T
% H# |8 E. |+ r+ t; P7 [1 _* P/***********事件触发的函数**********/
' P" E0 X; W6 k1 @& t
0 t# h: G$ r$ U; w7 m//当有人*近时
; ?" ~1 O" Y- F- `4 ^' y3 cprocedure OnApproach (aStr : String);8 E; S B p7 A
, \5 V. |4 n3 ?0 ~4 D4 ?# L; k//当有人离开时3 V* L- v0 O1 f7 Q" i) A
procedure OnAway (aStr : String);. `5 l& m7 i8 k% [3 E5 S: \
' b. b; p# K% k7 A& s
//当受到掌风攻击时4 q* I: k' P+ }3 M2 P* I7 u! i
procedure OnBow (aStr : String);( T0 ~. w/ u2 u5 `
. c0 q4 ]4 b2 {, d//当状态改变时+ P" z& w% X, m6 u L, A; D
procedure OnChangeState (aStr : String);
J! e5 H5 L2 a
4 w% C4 z4 A' D( K//当初始创建时
& n, ]9 R/ B/ G1 Q1 C" rprocedure OnCreate (aStr : String);
$ ]8 H% |- E5 f) z# b' B. ]
' V' V: n* a, X//当被双击时
+ O% V0 m' ]2 B! l8 P* s( m K4 qprocedure OnDblClick(aStr : String);
3 X0 a! \ V8 V6 S2 {+ T; @6 u( n* c/ i/ n+ G! r0 e4 v2 [
//当死亡前, }. x, ]# q( g8 }8 P- E! A
procedure OnDieBefore (aStr : String);. F9 l5 U* U! v& _9 |4 r
* B r9 j, c. Q7 u. N, k//当死亡后2 O3 J- P+ [+ |9 D2 n
procedure OnDie (aStr : String);$ a3 K% W3 X, G& i* l# }
6 \ G) {& v) ~; t1 F
//当被拖放物品时
, z# x" F p6 Yprocedure OnDropItem (aStr : String);
- h7 w, Y& L5 G. b, c6 N4 W8 j9 w( |: J, f r. ]) Z3 o, f# v
//当得到命令消息时' T5 @0 H" l7 j6 q
procedure OnGetResult (aStr : String);7 G/ O3 l% I* d5 ^ l; Y3 K' {1 ~
, I1 R$ B: }1 q' @3 G( v# G
//当得到改变步长时
5 g- q4 L$ I1 ~procedure OnGetChangeStep (aStr : String);) [8 ^9 x3 k% K' ]+ q6 T& @ }4 D- L
" q& ~ b1 o" K//当受到攻击时$ d" x4 g4 U0 g( x) @- v
procedure OnHit (aStr : String);- B! J$ | t& ?5 Y1 R6 A6 Z- Q
) ~) g' |' y$ E% P//当被左鼠标键单击时
- \6 i d/ E# P5 Yprocedure OnLeftClick (aStr : String);0 U9 i7 k: _ Y+ [
, w; N/ G' U6 H7 I* J//
3 n; P4 S* _5 s9 w% w; Oprocedure OnRegen (aStr : String);, q+ Z/ z, X1 b' w* V% u, E# d
1 j6 Y6 d3 }0 r3 L, Z3 k+ Z, K" H4 v//3 w' ?* a8 }- X! a& B8 ?" l
procedure OnTimer (aStr : String);6 J; F, N0 d* ^
! x4 y8 U. j( R9 f+ e) P9 p//当物件发生翻转打开时,一般是用于门
8 A8 ~0 L& I3 {' K1 T& ^- Cprocedure OnTurnOn (aStr : String);6 y) ?7 e0 z F9 Y- U
; W1 f4 _: z! C" \/ u
//当物件发生翻转关闭时,一般是用于门
! O+ S/ T; h7 ^" a* k5 Oprocedure OnTurnOff (aStr : String);
u) f1 e% W7 W7 Z" y1 K9 o1 y) F. A& g) _" D
//当用户开始游戏时
' C. k7 A, ~% Pprocedure OnUserStart (aStr : String);7 M/ y/ c4 P7 B
- C7 H g, Z: K0 u- {
//当用户结束游戏时! i% T8 Z: B* X" K. J# t* B
procedure OnUserEnd (aStr : String);
( ~5 ^/ j3 \% K& c5 ^8 E% D
( Y2 f# }: S6 ~8 F6 I/ l4 v4 c//当移动时
5 Y+ q) H$ P [# K2 `function OnMove (aStr : String) : String; y) v" K, e& `" y6 T. n" T
1 Z0 x0 j8 n& B
//9 s5 x" f5 \% Z
function OnDanger (aStr : String) : String;
6 k' U% \ a/ ~! Z" O3 F6 a& N
8 P0 o+ q2 K& S7 _, a; k( s% C3 X//产生一个随机数(系统函数)0 S8 w% _$ N: m' @/ q4 L
function Random (aScope: integer): integer;
6 U( w2 ?$ p$ Q; v. Q! B- I, ?6 O. a) z4 i) R |+ k
//返回指定参数的消息(系统函数)
5 ? y, H; O5 C! f+ X" U3 Dfunction callfunc (aText: string): string;
+ \$ x3 i9 D$ N8 h3 q# |7 g
% p0 x' Z* r9 s+ b" p8 H( D//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
, E v* P( e+ Kprocedure print (aText: string);0 F$ Q7 i" V& x5 ^
' t3 P& U" r. f- u( L k. [
具体参数(略),整理中...........
6 l" R$ Q8 M% J! n. w0 K4 O9 p7 c2 @/ ]3 j1 e9 U% Z
//转换字符串为整数(系统函数)6 k1 w0 M/ f+ w
function StrToInt (astr: string): integer;0 R4 _) X3 H. u: K, B- P1 ^. c
4 }. J0 o4 z4 ^3 E* y5 N//转换整数为字符串(系统函数)* ?1 `; o! k8 C$ u1 S. `8 Q
function IntToStr (aInt: integer): string;6 c6 Y4 {- }' `' w' ?* r! r
* P( L0 w+ Y0 V: y" ?9 F
/***********事件触发的函数**********/
" l) n3 V& z- i" T C% X0 P
6 F8 Y- S$ n6 B( ?4 }6 d, W: j+ f! D. n/ K! q0 B/ `
; v7 D0 k' ~4 W" v6 Z$ e
7 X: G: C! v+ b' e
$ S/ s8 _/ ]3 C
' E' C" @1 E8 v) j* A, X; ^
/ y: v# a; [6 k: l F j/ y$ u4 L0 ?; T) Q8 Z
" v& O' a$ s* ~0 Dfunction callfunc (aText: string): string; //以下为 aText参数的值
4 p9 C9 ~! W$ z, W3 k7 W# j; x: P. h: @2 p+ w
getsysteminfo 获得系统信息
- |# D- c6 v+ O& s; [, Y4 ^getname 获得名字$ n. t* J$ w8 v7 s
getsendername 获得消息发送者名字1 y6 {6 t% `% E% q+ r) i
getage 获得年龄
; E% `1 j- t* ~ |* Ugetsenderage 获得消息发送者年龄+ P7 S2 `4 z% n) h
get*** 获得性别
3 w/ b2 \' W5 N# U2 r' |getsender*** 获得消息发送者性别
* l6 D( Y, Q1 |, E# Fgetid 获得ID5 m& y5 U! a# s6 e7 Y
getsenderid 获得消息发送者ID
4 P9 ~3 H3 {6 Sgetserverid 获得服务器ID
1 J+ ~( n# J2 R4 U t qgetsenderserverid 获得消息发送者服务器ID8 B: }* K) }2 t7 c6 r- j! B g
findobjectbyname 用名字查找物件- T9 q- ^' M. A& |6 x
getposition 获得位置
. [8 c% N' m3 V" j4 cgetsenderposition 获得消息发送者位置! ]0 f9 q+ G: }, @) u+ b/ J
getnearxy 获得亲近的XY+ A9 ~1 V" p, y! n F7 B
getmapname 获得地图名字
& e* c$ j+ J) U% R# ~5 vgetsendermapname 获得消息发送者地图名字2 l: p# g/ ` D+ ^2 v
getmoveablexy 获得移动能的XY
7 U" d! ~3 ? ?+ @1 K+ bgetrace 获得种族
- w( y5 C: h) ]2 w1 T: jgetsenderrace 获得消息发送者种族
7 U9 M' v& F3 \; m" q
, t4 Z3 z; f" d X( r8 ~; {9 p; ?getmaxlife 获得最大的生命值; [6 R' c5 }" [4 u
getsendermaxlife 获得消息发送者最大的生命值- d5 Q) q7 B1 @( V
getmaxinpower 获得最大的内功值. M) W; N" D/ L+ Z0 ^3 r- o4 o
getsendermaxinpower 获得消息发送者最大的内功值4 y7 y% v5 Z. @3 ^9 d/ J
getmaxoutpower 获得最大的外功值+ ]& _: l8 ?- Z- T. L& d. k; N
getsendermaxoutpower 获得消息发送者最大的外功值) \" C" `. m" R! m% D- L/ x
getmaxmagic 获得最大的武功值
' G# C- @6 E% }- G* A2 j; igetsendermaxmagic 获得消息发送者最大的武功值$ A4 r+ }' h+ C* W2 E2 A
getlife 获得生命值
% q" c0 }2 u" t+ [' |, j/ ?8 X2 rgetsenderlife 获得消息发送者生命值7 ?. m3 s8 [: A' L) |7 ]7 i5 @% T
7 }7 Y- \# U) r& |. P& Zgetinpower 获得内功值
3 k) D7 g* Q/ w7 O1 n# egetsenderinpower
- P0 p8 i, q! h2 ]) v' L5 v |