三千论坛

标题: 千年脚本编写帮助 [打印本页]

作者: 异仟年    时间: 2022-9-5 17:44
标题: 千年脚本编写帮助
千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用也十分的象,但不用为了写脚本而专门的去学 Pascal语言。
9 R1 M$ S9 i3 O. X; a+ L) E, }$ W* N% v1 ]' ~' `
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
. \& z( G) s* V7 h% r2 e
/ x5 ~  r, [- w* C一个函数的基本结构是这样的:
: ?3 \- m# i; \- D, w# J5 i2 q6 X, ^4 z9 \6 B
procedure OnCreate (aStr : String);
$ m: e8 j% M  g- V0 r8 qvar
+ _# T+ `3 k3 J( L& y( E3 D. q' s   定义变量( ?6 F* U- Y, g7 F9 K
begin; [! C* L. P& c$ k1 q2 [
   语句4 d6 ]0 G- O' b1 N
end;
8 I; }: U6 X) o( Z3 W; F0 {& S& [  f- @; \
在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
+ N6 {6 Y( Q& Z# X; S! n& B1 u4 V1 N% V; T
千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。
" I7 a# k0 n7 r& r
7 C$ q3 O: }# \/ s: g( X/***********事件触发的函数**********/
6 ]* t. L# E& W! \/ }6 _4 I
- ^/ e9 o6 G: j//当有人*近时& _" {5 M1 d7 p
procedure OnApproach (aStr : String);7 l0 a( ~) i8 ~" h7 B# ~% @' e

7 i4 Z: [/ R) Y$ I3 g//当有人离开时7 f, B) d+ D3 T9 f; n
procedure OnAway (aStr : String);
  b& E( O  f( o4 p. b8 C2 |# A, n+ _" b
//当受到掌风攻击时+ k8 W8 B# x7 C1 v* `& L
procedure OnBow (aStr : String);% ?4 m2 h- O$ i' z; \' t# F

* C; J4 H3 T3 V$ K, E//当状态改变时* M6 {0 }" T8 `# V" |1 y, X! K
procedure OnChangeState (aStr : String);1 h9 A8 p, m4 y0 |( E

" i$ `/ A2 R/ u. g( Z4 l3 V//当初始创建时
  R( n- Q- c( \8 x6 U: {% A7 Iprocedure OnCreate (aStr : String);
: D% c8 \1 U8 N/ s
$ @" }& F0 H; V- B  P6 ~//当被双击时
$ S# S* l+ L  Y% Rprocedure OnDblClick(aStr : String);
8 G' k# J! Y9 g( W3 f- i0 x$ H  E
3 ]9 A6 q! n) p  K5 a# a# O& _//当死亡前- F8 V9 X) j+ ]
procedure OnDieBefore (aStr : String);8 ^# @* `- V0 x& r  B. H! M- I

$ p3 G3 I4 w* a. N" T9 P//当死亡后
. ]0 z" A7 B/ B' t) t8 b0 Kprocedure OnDie (aStr : String);0 Y" E% E, z7 }& j) d8 T: e

/ h+ I4 h+ I+ c. G3 B0 d5 ?//当被拖放物品时
! d0 x' `1 S* i5 Qprocedure OnDropItem (aStr : String);2 f  b) N1 ^# B: c% d
1 n: U! ~* ], v5 h& j
//当得到命令消息时5 W5 Y* `' _4 q; Y
procedure OnGetResult (aStr : String);
" A% P+ z1 u/ i
% z" U4 K4 [/ _6 H! s) z/ |' `//当得到改变步长时
% _+ _. V" H, z' S, L+ J) H+ N  Wprocedure OnGetChangeStep (aStr : String);
  c8 o- G7 C1 g) q4 U: Z* a: T0 ]. ~6 @6 g
/ s  m" [- ~) n/ ^0 f//当受到攻击时8 a/ D2 F2 m) w+ u! X& ]
procedure OnHit (aStr : String);
! D3 Y: Y3 ~/ i3 v, h+ f* N  T: P. x0 Z6 D& ]
//当被左鼠标键单击时
2 T: K% M  F2 t: [procedure OnLeftClick (aStr : String);
7 N6 x( e6 K2 r. i5 ~3 ]/ N! ^4 \, D  ]  Z  m! v7 _; K) N+ B8 T" G0 k
//3 v7 f6 J4 L3 P/ M
procedure OnRegen (aStr : String);4 ~, E: E9 E  a6 [# m8 C
) ~- ?1 \( e1 D7 T1 N
//. b! K8 x3 ^$ A- W
procedure OnTimer (aStr : String);' C3 k( b+ `/ K9 s5 f" Y7 o

& M* G" s+ s% `( G& @2 e5 c//当物件发生翻转打开时,一般是用于门9 J4 |. y' `- Y" }" B1 [  p
procedure OnTurnOn (aStr : String);
$ F0 P' w' ~, l( c
' u* ^& |* c0 b+ f& ^; q& a//当物件发生翻转关闭时,一般是用于门
0 B) P1 q$ `# v" _- u* `procedure OnTurnOff (aStr : String);/ w! Q6 f! b! t! n- G# K6 Z
( [3 _8 p1 R) E) }5 \
//当用户开始游戏时/ v: G# `2 z3 s$ s) T' [, l
procedure OnUserStart (aStr : String);
. Y& e" Y, Z* B8 _7 d6 I& Q; j. c  M5 M+ N& R1 j7 }
//当用户结束游戏时% o) W" k* K* a/ U* X# X& M  E
procedure OnUserEnd (aStr : String);
7 q' o" }4 S5 S, ?& [) j* e! a5 ?+ W8 t. s: b
//当移动时- q# `/ C' {7 b
function OnMove (aStr : String) : String;3 `5 y2 K) {1 T* ]4 R

( \! _* S# D( ^) B+ g6 C# c//2 t# l. u4 r) t- `
function OnDanger (aStr : String) : String;
( O" u: L- w# N. o; q0 c, `+ P3 v7 ?" }; G6 @! X3 |
//产生一个随机数(系统函数)' V2 ]: i; U0 _0 B& Q
function  Random (aScope: integer): integer;8 G: Q& t& C, J) m! Q* C
4 `3 l/ ]4 d# P( B1 K2 Z
//返回指定参数的消息(系统函数)
6 a: x7 d! a; G& gfunction  callfunc (aText: string): string;
# f- N6 K' I, `, F( Z$ [1 c
$ p" \( E) R0 _& B& W( v4 `//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
4 D/ G; n" s/ O4 Z4 z( I8 t" gprocedure print (aText: string);
8 |. q( q- [7 Y4 v; m  j# n, O* T# o% D3 T$ w! `
具体参数(略),整理中...........
$ U+ ~0 H$ f+ t/ o5 d: @5 U0 e; h1 Q2 a6 Z  @
//转换字符串为整数(系统函数)8 P3 q5 N* G$ E% o" p6 ]
function  StrToInt (astr: string): integer;- u& i: F- K# `, O7 C
9 q# u0 J% w( a' }& M9 k
//转换整数为字符串(系统函数)
2 g" A" u7 q& K4 v7 tfunction  IntToStr (aInt: integer): string;
, S# h6 Q5 _* M( S7 ~" u; ?4 f2 j
' z# J+ y7 t7 z/***********事件触发的函数**********/
4 v4 s, K5 {5 x5 y$ e; Z9 H* P. p$ {8 A0 `) M

8 Q- _! ?  S/ P  v. @
: t3 Z3 G0 P& }
+ d$ l3 b! M* {- b+ e
* g- s5 S4 g  m
! d' E. Z- X8 r6 N% C0 l8 \
. W6 A  z# Y8 C. v* R9 A9 X' ?
1 t) q( J+ Z1 @. u, F9 q5 C! G9 b3 T6 Y7 n+ ~5 U! {- X$ k
function  callfunc (aText: string): string;   //以下为 aText参数的值7 C$ z9 J+ U* n& S$ m; u" ^
  }, X, i# j% s# ~/ n
getsysteminfo                    获得系统信息1 V: r& P- {6 l1 g3 r/ F
getname                          获得名字
8 ]( W6 W( t! N& H4 q) [) w$ _getsendername                    获得消息发送者名字) p3 c, h& @" Y8 E. O0 }
getage                           获得年龄. Z6 b3 m" c! x6 G9 z; ^6 p: \
getsenderage                     获得消息发送者年龄: {$ |. w4 A: X
get***                           获得性别
. N8 u1 Q- S5 Ogetsender***                     获得消息发送者性别
& L/ @$ D* `7 I2 Cgetid                            获得ID
; `+ f( s; v  j9 B9 P3 b6 egetsenderid                      获得消息发送者ID
2 j- P; y4 M' [; m" h2 w$ ~getserverid                      获得服务器ID- M5 o# p- H+ [9 z( [$ y, H8 C3 n
getsenderserverid                获得消息发送者服务器ID( f$ h; u  g- E) \) }
findobjectbyname                 用名字查找物件
: ?( \7 ^1 n6 t: N$ _3 d7 d9 Y* xgetposition                      获得位置. L6 ^, v: Z  |+ J
getsenderposition                获得消息发送者位置7 X, k* n+ R, y2 C
getnearxy                        获得亲近的XY" B* v; i5 s( R/ ~
getmapname                       获得地图名字
, F2 ~# C4 C2 @( i, S  n$ ]getsendermapname                 获得消息发送者地图名字: u' q1 Y  W6 k9 t% \. t5 z6 w
getmoveablexy                    获得移动能的XY0 z$ R! y. k4 Q6 f7 s
getrace                          获得种族
. x$ l4 Q8 R" p! B1 ~getsenderrace                    获得消息发送者种族* _" N. N1 S+ W3 g3 a

. u% v3 i5 N. |# W- Ugetmaxlife                       获得最大的生命值) J" }/ a" _4 Y- ~
getsendermaxlife                 获得消息发送者最大的生命值
/ P) Y3 Y7 Q7 \* e" i  Mgetmaxinpower                    获得最大的内功值5 s; I! v3 J5 G
getsendermaxinpower              获得消息发送者最大的内功值
$ Y) x/ Y' X  Egetmaxoutpower                   获得最大的外功值
5 @* ]5 s6 s' j2 Ogetsendermaxoutpower             获得消息发送者最大的外功值1 J3 E& A7 V5 i+ R* u- N( I& t1 r9 j  V
getmaxmagic                      获得最大的武功值
8 P% i& t7 S& ]3 Ugetsendermaxmagic                获得消息发送者最大的武功值
6 S% j. L" X6 L, Egetlife                          获得生命值6 Y# P2 S! ]7 f" P$ |) r
getsenderlife                    获得消息发送者生命值. h! y% _# x/ V! @
* n, u; X/ m* b" ?! }2 \) Z; a- ~
getinpower                       获得内功值3 {+ ^: C0 V. K, F4 c5 a- @
getsenderinpower

4 D9 x9 T. N% F




欢迎光临 三千论坛 (http://www.3000y.com.cn/) Powered by Discuz! X3.4