传奇996引擎技术学习论坛»资源中心 论坛模块 其他教学 千年 Pascal语言 参考

千年 Pascal语言 参考

千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用,但不用为了写脚本而专门的去学 Pascal语言。

千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。

一个函数的基本结构是这样的:

procedure OnCreate (aStr : String);
var
定义变量
begin
语句
end;

在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。

千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。

/*事件触发的函数/

//当有人*近时
procedure OnApproach (aStr : String);

//当有人离开时
procedure OnAway (aStr : String);

//当受到掌风攻击时
procedure OnBow (aStr : String);

//当状态改变时
procedure OnChangeState (aStr : String);

//当初始创建时
procedure OnCreate (aStr : String);

//当被双击时
procedure OnDblClick(aStr : String);

//当死亡前
procedure OnDieBefore (aStr : String);

//当死亡后
procedure OnDie (aStr : String);

//当被拖放物品时
procedure OndropItem (aStr : String);

//当得到命令消息时
procedure OnGetResult (aStr : String);

//当得到改变步长时
procedure OnGetChangeStep (aStr : String);

//当受到攻击时
procedure OnHit (aStr : String);

//当被左鼠标键单击时
procedure OnLeftClick (aStr : String);

//
procedure OnRegen (aStr : String);

//
procedure OnTimer (aStr : String);

//当物件发生翻转打开时,一般是用于门
procedure OnTurnOn (aStr : String);

//当物件发生翻转关闭时,一般是用于门
procedure OnTurnOff (aStr : String);

//当用户开始游戏时
procedure OnUserStart (aStr : String);

//当用户结束游戏时
procedure OnUserEnd (aStr : String);

//当移动时
function OnMove (aStr : String) : String;

//
function OnDanger (aStr : String) : String;

//产生一个随机数(系统函数)
function Random (aScope: integer): integer;

//返回指定参数的消息(系统函数)
function callfunc (aText: string): string;

//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
procedure print (aText: string);

具体参数(略),整理中...........

//转换字符串为整数(系统函数)
function StrToInt (astr: string): integer;

//转换整数为字符串(系统函数)
function IntToStr (aInt: integer): string;

/*事件触发的函数/

function callfunc (aText: string): string; //以下为 aText参数的值

getsysteminfo 获得系统信息
getname 获得名字
getsendername 获得消息发送者名字
getage 获得年龄
getsenderage 获得消息发送者年龄
get*** 获得性别
getsender*** 获得消息发送者性别
getid 获得ID
getsenderid 获得消息发送者ID
getserverid 获得服务器ID
getsenderserverid 获得消息发送者服务器ID
findobjectbyname 用名字查找物件
getposition 获得位置
getsenderposition 获得消息发送者位置
getnearxy 获得亲近的XY
getmapname 获得地图名字
getsendermapname 获得消息发送者地图名字
getmoveablexy 获得移动能的XY
getrace 获得种族
getsenderrace 获得消息发送者种族

getmaxlife 获得最大的生命值
getsendermaxlife 获得消息发送者最大的生命值
getmaxinpower 获得最大的内功值
getsendermaxinpower 获得消息发送者最大的内功值
getmaxoutpower 获得最大的外功值
getsendermaxoutpower 获得消息发送者最大的外功值
getmaxmagic 获得最大的武功值
getsendermaxmagic 获得消息发送者最大的武功值
getlife 获得生命值
getsenderlife 获得消息发送者生命值

getinpower 获得内功值
getsenderinpower

/////////////////////////////////////////////////////////////////
unit单元
interface接口
implementation实现
procedure过程,没有返回值。
function函数,有返回值。
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。
未赋值的String,Integer要输出会出现错误
循环命令for i:=1 to monstercount do
begin
end;
以上为我自己临时添加的说明。
在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。
事件触发的函数:
听到说话时激活
procedure OnHear (aStr : String);
aStr为玩家说的话
当有人靠近时
procedure OnApproach (aStr : String);
aStr为空
当有人离开时
procedure OnAway (aStr : String);
aStr为空
当受到远程攻击时
procedure OnBow (aStr : String);
aStr为射击物品(如火箭),检测射击时激活
当人物状态改变时
procedure OnChangeState (aStr : String);
aStr可以为normal,die,检查除该NPC外所有生物的状态
当初始创建时(或视野内有新物体激活)
procedure OnCreate (aStr : String);
aStr为空,检查地上是否出现新物品或创建新怪\NPC\人物
当被双击时
procedure OnDblClick(aStr : String);
当死亡前激活
procedure OnDieBefore (aStr : String);
当死亡后激活
procedure OnDie (aStr : String);
aStr为空
当被拖放物品时(或翻译为:拖动给予物品激活/当物品放入时激活事件)
procedure OnDropItem (aStr : String);
当得到命令消息时
procedure OnGetResult (aStr : String);
aStr为Help文件的项目
当得到改变步长时
procedure OnGetChangeStep (aStr : String);
当受到攻击时
procedure OnHit (aStr : String);
aStr=玩家武功攻击+41(固定)
当被左鼠标键单击时
procedure OnLeftClick (aStr : String);
aStr为空
Help文件的项目激活
procedure OnRegen (aStr : String);
aStr未知
时间激活(每秒激活一次)
procedure OnTimer (aStr : String);
aStr当前系统时间:小时 分钟 秒
当物件发生翻转或打开时,一般是用于门、机关
procedure OnTurnOn (aStr : String);
当物件发生翻转或关闭时,一般是用于门、机关
procedure OnTurnOff (aStr : String);
当用户开始游戏时
procedure OnUserStart (aStr : String);
当用户结束游戏时
procedure OnUserEnd (aStr : String);
当(有物体)移动时
function OnMove (aStr : String) : String;
aStr为空,检测除该NPC之外的所有生物的移动
(onmove可能能检测出方向)
检测受攻击时激活(原为:危险时激活)
function OnDanger (aStr : String) : String;
如果为投术或弓术则aStr为射击物品(如火箭),
如果为其他武功则aStr为空
Str := callfunc ('getrace');
if Str = '3' then begin
Result := true;//其中3似乎是表示物品一类
exit;
end;
注:(点太极洞火炉的脚本,此处需要的是火箭)
if aStr = '火箭' then begin
Result := 'true';
exit;
end;
产生一个随机数(系统函数)
function Random (aScope: integer): integer;
返回指定参数的消息(系统函数)
function callfunc (aText: string): string;
执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)
procedure print (aText: string);
视野内有新活物激活
procedure OnShow (aStr : String);
{以下命令未经检测

破坏物体时激活
procedure OnDestroy (aStr : String);
被痛打时激活(也可能是隐藏时激活)
procedure OnHide (aStr : String);
右键单击时激活
procedure OnRightClick (aStr : String);
NPC到某点后不动激活
procedure OnArrival (aStr : String);
}
转换字符串为整数(系统函数)
function StrToInt (astr: string): integer;
字符串不是数字时,返回值为0.
转换整数为字符串(系统函数)
function IntToStr (aInt: integer): string;

事件触发的函数
getsysteminfo 获得系统信息
getname 获得名字
getsendername 获得玩家名字
getage 获得年龄
getsenderage 获得玩家年龄
getsex 获得性别(1为男,2为女)
getsendersex 获得玩家性别
getid 获得ID
getsenderid 获得玩家ID
getserverid 获得服务器ID
getsenderserverid 获得玩家的地图ID 注:长城以南为1,交易村为88。
findobjectbyname 查找物体名称
Str := 'findobjectbyname ' + MuBiao;
Str := callfunc (Str);
if Str = '0' then begin
ZT := '搜索中';
print ('attack 0');
exit;
end;
nStr := 'attack ' + Str;
print (nStr);
exit;
end;
getposition 获得位置
getsenderposition 获得玩家位置
getnearxy 获得亲近的XY
getmapname 获得地图名字
getsendermapname 获得玩家地图名字
getmoveablexy 获得能移动到的XY
getrace 获得种族
getsenderrace 获得玩家种族
getmaxlife 获得最大生命值
getsendermaxlife 获得玩家最大生命值
getmaxinpower 获得最大内功值
getsendermaxinpower 获得玩家最大内功值
getmaxoutpower 获得最大外功值
getsendermaxoutpower 获得玩家最大外功值
getmaxmagic 获得最大武功值
getsendermaxmagic 获得玩家最大武功值
getlife 获得生命
getsenderlife 获得玩家生命
getheadlife 获得头生命
getsenderheadlife 获得玩家头生命
getarmlife 获得臂生命
getsenderarmlife 获得玩家臂生命
getleglife 获得腿生命
getsenderleglife 获得玩家腿生命
getpower 获得能力
getsenderpower 获得玩家元气
getinpower 进入能力
getsenderinpower 获得玩家内功值
getoutpower 出去能力
getsenderoutpower 获得玩家外功值
getmagic 获得魔法
getsendermagic 获得玩家武功值
getvirtue 获得德行
getsendervirtue 获得玩家浩然值
getsendertalent 获得玩家技能值
注:
Name := callfunc ('getsendertalent');
nValue := StrToInt (Name);
if nValue < 2000 then begin
getmovespeed 获得移动速度
getsendermovespeed 获得玩家移动速度
getuseattackmagic 获得使用进功魔法
getsenderuseattackmagic 获得玩家当前使用的攻击型武功(包括掌风)名字 ex:callfunc ('getsenderuseattackmagic');
getuseattackskilllevel 获得使用进功技能水平
getsenderuseattackskilllevel 获得玩家当前使用的 攻击型武功(包括掌风)等级 ex: callfunc ('getsenderuseattackskilllevel');
getsendermagicskilllevel 获得玩家某武功的等级
注: 只能获得玩家的“武功”(客户端‘武功按钮打开的框体’:下层,基本,上层)
不能获取3层或招式
getuseprotectmagic 获得使用保护魔法
getsenderuseprotectmagic 获得玩家当前使用的 护体武功名字 ex: callfunc ('getsenderuseprotectmagic');
getcompletequest 获得完成任务
getsendercompletequest 获得玩家完成任务
getcurrentquest 获得当前的任务
getsendercurrentquest 获得玩家当前的任务
getsenderqueststr 获得玩家任务str/获得玩家当前标志性任务标记str
getfirstquest 获得首先任务
getsenderfirstquest 获得玩家第一个任务
getdistance 获得距离
getsenderitemexistence 获得玩家项目存在
getsenderitemexistencebykind 获得玩家项目存在种类
注:
Str := callfunc ('getsenderitemexistencebykind 59');
if Str = 'false' then begin
print ('say 物品栏里没有八卦牌.');
exit;
end;//八卦牌是59号kind
Str := callfunc ('getsenderitemexistencebykind 60 1');
if Str = 'false' then begin
print ('say 你怎么没带不羁浪人武器啊');
exit;
end;//其中1表示武器
checkenoughspace 检查足够的空间
gethavegradequestitem 获得有等级寻求项目
Str := callfunc ('gethavegradequestitem');
if Str = 'true' then begin
print ('say 你已经在做升级任务 50');
exit;
end;
getpossiblegrade 获得可能的等级
Str := callfunc ('getpossiblegrade 0 0');
if Str = 'false' then begin
print ('say 要有一个满1级的神功 50');
exit;
end;
Str := callfunc ('getpossiblegrade 0 1');
if Str = 'false' then begin
print ('say 要有满2级神功 50');
exit;
end; //0为1级,1表示2级依次类推
checkalivemopcount 检查活着的怪物数
注:(可以是npc)
Str := callfunc ('checkalivemopcount 94 npc 挑战慧明方丈');
iCount := StrToInt (Str);
if iCount = 0 then begin
print ('say 老衲需要休息一下,有事过会再来_请稍候');
exit;
end;
getusercount 获得使用者数
getsenderjobkind 获得玩家工作种类(序号参考setsenderjobkind)
getsenderjobgrade 获得玩家工作等级
getsenderitemcurdurability 获得玩家项目当前技能能力
getsenderitemmaxdurability 获得玩家项目最大技能能力
getsenderwearitemname 获得玩家穿着的装备名字
checkobjectalive 检查建筑活着的
Str := callfunc ('checkobjectalive 北海雪原 monster 北霸王魂1');
if Str = 'true' then begin
print ('mapdelobjbyname monster 北霸王魂1');
end;
Str := callfunc ('checkobjectalive 北海雪原 monster 远距离野神族3');
if Str = 'true' then begin
print ('mapdelobjbyname monster 远距离野神族3');
end;
true 真实的
false 错误的
getsendermagiccountbyskill 获得玩家魔法间隔数技能
getsenderrepairitem 获得玩家修复项目
getsenderdestroyitem 获得玩家破坏项目
Str := callfunc ('getsenderdestroyitem 9 60');
if Str = '0' then begin
print ('say 怎么没有武器啊');
exit;
end;
if Str = '1' then begin
print ('getsenderitem 钱币:1000');
exit;
end;
Str := callfunc ('getsenderdestroyitem 0 59');
if Str = '0' then begin
print ('say 物品栏里没有八卦牌.');
exit;
end;
if Str = '1' then begin //等于1就会自动摧毁
print ('getsenderitem 钱币:1000');
exit;
end;////其中0和9对应item中的wearpos项目
getsenderitemcountbyname 获得玩家物品使用的间隔数
checksenderpowerwearitem 检查玩家使用装备的能力
checksendercurusemagic 检查玩家使用的武功
Str := callfunc ('checksendercurusemagic 2');检测辅助武功,如灵动八方
若为0则表示门武,1掌法,3和4二级武功,5神功,6绝世武功
checkusemagicbygrade [武功总类,绝世武功:6] [武功等级,0为1级,1=2级,2=3级] [武功类型,0:拳,1:剑,2:刀,3槌,4枪,-1表示护体] 检查玩家武功的等级(返回true,false)
Str := callfunc ('checkusemagicbygrade 5 0 -1');//绝世护体武功为5,
if Str = 'false' then begin
print ('say 要升级的武功必须要在使用状态 0');
exit;
end;
getsendercurpowerlevelname 获得玩家境的名称
getsendercurpowerlevel 获得玩家境的级数(返回值为数字字符串)
getsendercurdurawatercase 得到玩家竹筒的水量
getremainmaptime 获得地图剩余时间
checkentermap 检查确认地图
getrandomitem 随机物品
getquestitem 获得寻求项目
Name := callfunc ('getquestitem 3');//3,6,7指的是getquestiem中的7个文件
Str := 'putsendermagicitem ' + Name;
Str := Str + ' @quest老侠客 4';
print (Str);
checkmagic 检查武功,基本上什么武功都能检查到..不过只限于 Item.sdb //Kind 为56的物品脚本
Str := callfunc ('checkmagic 3 9 紫霞神功');//其中3和9指代所有3层护体神功
if Str = 'true' then begin
print ('sendsenderchatmessage 已修炼了此武功 2');
exit;
end;
checksenderattribitem 检查玩家修改的项目
conditionbestattackmagic 检查玩家是否有资格学习3层武功.(必须为攻击型。非护体)
条件不足。系统自动提示需要的条件.并返回 'false'. 若已修炼返回'false' 并提示 '已修炼'
返回 'true' 代表可以修炼 ex: callfunc ('conditionbestattackmagic 六脉神剑');

Inc() 追加函数 i := i+1 的缩写;
注:蜡台时,检测需要6个全开才能开启的脚本
if n < 6 then begin
inc (n);
end;
Dec() 递减函数 i := i-1 的缩写;
Length() 获取字符串长度
如: a 是整数型量
a := Length ('我爱你');
那么 a 得到的值是 6 //这里通过检测,发现鱿鱼哥说错了,汉字视为2个字节,本人亲自用脚本输出看了
如:
Str := '164164';
a := Length (Str);
那么 a 就等于 6
CompareStr() 比较字符串(区分大小写)
大家注意他的声明类型 是 Boolean 型的布尔型吧
这个函数是比较两个字符串是否一致
本人没有测试过.不过我想大概如下
返回的数据应该是 “TRUE”或“FALSE”
首先我们先要定义一下.定义的类型是 Boolean
如:
var
a , b : String;
Test : Boolean;
begin
a := '13215';
b := '41646';
Test := CompareStr (a , b);
那么Test 量得到的值是“FALSE”
if Test = 'false' then print ('say 输入的Cd-Key不一致!,请重新输入!');
if Test = 'true' then print ('say 通过!');

Result 这个是系统变量,就是盒子的状态
CompleteQuest 玩家已完成的任务的标记值
CurrentQuest 玩家正在做的任务的标记值
say print ('say str{要说的话} 100{延时1s}');
注:(其中hStr,lStr必须是字符串)
Str := 'say 人员没有到齐,红方还缺' + hStr;
Str := Str + '位,蓝方还缺';
Str := Str + lStr;
Str := Str + '位,请稍后 50';
print (Str);
说话时的字节能在聊天窗口显示的为45个字节(汉字计2个)
saybyname 注:print ('saybyname 狗日 npc 需要援助时, 2100');狗日是NPC名,NPC是类行如果是怪填MOP,2100是间各这个时间。
attack 攻击
selfkill 自杀 注:print ('selfkill'); npc将重生。
gotoxy 移动到XY 注:print ('gotoxy 500 500'); npc将走到500 500这个座标
changestate 改变状态。
sendnoticemsgformapuser [地图ID] [公告文字] [公告字体] 聊天框发送文字
sendsenderchatmessage 发送给玩家聊天信息(命令加信息总长度不能超过64)。注: print ('sendsenderchatmessage 南帝王任务结束了 2');其中2为字体(1为蓝底版白字[九尾狐出现就是这种],2为无底版黄字[吃药时那种色],3为灰色底板白字[系统通知的颜色],其他数字:点击物品时所显示的字)
sendcentermsg [玩家姓名] [文字] 玩家中间发布公告
sendsendertopmsg 相全体通知,在顶部现示。注: Str := 'sendsendertopmsg ' + Name; Str := Str + ',通过了所有的比试';之中的豆号为换行符。
showwindow 指定help文件
注:
Str := 'showwindow .\help\月魂兑换老人.txt 0'; print (Str);
//0表示多选窗口(窗口内附带有子窗口),1为最多不超过4个选项的窗口
tradewindow 调出买卖窗口。
注:
Str := 'tradewindow ' + Name;
Str := Str + ' 0';//0表示玩家到NPC那买物品,1为卖;3为玩家到NPC处买技能物品,4为卖
print (Str);
startwindow 启动窗口
logitemwindow 调出福袋窗口。 注: Str := 'logitemwindow'; print (Str);
setautomode 使用默认模式
putsendermagicitem 给玩家物品 注: print ('putsendermagicitem 牛俊书札:1 @quest牛俊 4');
getsenderitem 收取玩家物品 注: print ('getsenderitem 牛俊书札');
getsenderitem2 这个是没收带有属性的物品,格式和getsenderitem一样,只是这个语句只回收带有属性的物品
getsenderallitem 收取玩家全部物品 注: print ('getsenderallitem 中和汤'); 指定的物品全部回收
deletequestitem 删除任务物品
changecompletequest 改变全部任务
changecurrentquest 改变当前的任务
changefirstquest 改变最初的任务
changesendercompletequest 改变玩家全部任务
changesendercurrentquest 改变玩家当前的任务
changesenderqueststr 改变玩家当前标志性任务标记str
标志性任务值默认只有3个,初始为1,完成侠客指环任务为2,完成牌王任务为3
changesenderfirstquest 改变玩家最初的任务
addaddablestatepoint 增加玩家真气值 注: print ('addaddablestatepoint 1000');
addtotalstatepoint 增加总数状态点
changedynobjstate 改变建筑物体状态 注: print ('changedynobjstate 火蜡台 false');
TRUE 真
changesenderdynobjstate 改变玩家动力物体状态
sendzoneeffectmsg 获得地区效果 注 print ('sendzoneeffectmsg 陷阱区1');
movespace 移动
directmovespace 直接移动 注:print ('directmovespace 晋级3牛俊 npc 87 20 21');
movespacebyname 移动玩家 注: Name := callfunc ('getsendername'); Str := 'movespacebyname ' + Name; Str := Str + ' user 1 165 775 密室太极老人 npc 300'; print (Str);
setallowhitbyname 使允许打击注: print ('setallowhitbyname 一级捕盗大将 monster true');
setallowhitbytick 使允许记号注: print ('setallowhitbytick true 500');
setallowhit 使允许打击
setallowdelete 使允许删除,回收本地图怪物、盒子、NPC
注:
if LightCount = 3 then begin
print ('setallowdelete dynamicobject 妖华');
exit;
end;
也可以是 print ('setallowdelete monster 死狼女实像');
showeffect 显示效果 注: print ('showeffect 22 1');
commandice 冷冻
commandicebyname 冷冻的对象
clearworkbox 清除盒子注:print ('clearworkbox');
regen 刷新 注:print ('regen 放火装置3 monster');
mapregen 刷新地图 注:print ('mapregen 78'); 78为地图名
mapregenbyname 刷新地图的怪物
mapdelobjbyname 在地图中删除某怪物或NPC 注:print ('mapdelobjbyname monster 东天王魂1');
mapaddobjbyname 在地图中加入某怪物或NPC
注:print ('mapaddobjbyname monster 远距离野神族3 456 59 2 0 false');
print ('mapaddobjbyname dynamicobject 妖华 37 50 4 0 false');
也可以是NPC,如print ('mapaddobjbyname npc 回城专用 456 59 10 0 TRUE');
//2,4和10未知,可能是范围,而false可能是定点
mapaddobjbytick 在地图中加入什么
注: print ('mapaddobjbytick monster 上古雨中客2 178 176 1 97 false 800');
//其中97表示的是调用的脚本编号,800应该是延时,1可能是数量,前面2个位坐标
sendsound 发送声音 注: print ('sendsound 9171.wav 47');
senditemmoveinfo 发送职业物品
注:
Name := callfunc ('getsendername');
Str := 'senditemmoveinfo ' + Name;
Str := Str + ',选择职业,炼丹师,0,0,0,0,,';
print (Str);
setsenderjobkind 发送职业类型 注: print ('setsenderjobkind 4'); file://工匠=4 裁缝=3 铸造师=1 炼丹师=2
setsendervirtueman 获得玩家浩然/设定玩家为神工 注: print ('setsendervirtueman');
sendersmeltitem 提炼物品 注: print ('sendersmeltitem 钢铁');
sendersmeltitem2(smeltitem2表示相应文件名) 提炼物品2 注: print ('sendersmeltitem2 黄铜');
boiceallbyname 是否冷冻 注: print ('boiceallbyname 室5四臂金刚 monster false');
bohitallbyname 是否打击 注: print ('bohitallbyname 室7四臂金刚 monster true');
bopickbymapname 是否挖掘的地图 注: print ('bopickbymapname 地下采石场2层 false');
reposition 重新配置 注: print ('reposition');
returndamage 返回的伤害 注: Str := 'returndamage ' + aStr; Str := Str + ' 20'; print (Str);
selfchangedynobjstate 自己改变状态 注: Str := 'selfchangedynobjstate TRUE'; print (Str);
questcomplete 寻求完成的 注:
Name := callfunc ('getsendername');
Str := 'questcomplete ' + Name;
Str := Str + ' 南帝王';//其他还有:西域魔人阴谋
print (Str);
senderrefill 获得补充(加血、三防、三攻) 注: print ('senderrefill');
changesendercurdurabyname 消除耐久 注: print ('changesendercurdurabyname 大型竹筒 0');
boMapEnter 是否输入地图 注: print ('boMapEnter 76 false');
usemagicgradeup 武功升级 注: 二级 print ('usemagicgradeup 1 1'); 三级 print ('usemagicgradeup 1 2'); 其中前面的1代表三层攻击武功,如果是0代表三层护体。后面的1是级数,1为2级,2为3级。
decreasePrisonTime 减少监狱时间 注: print ('decreasePrisonTime b7')
athleticprocess 运动的过程
〔对换物品NPC的命令〕
@DRAGDROPEVENT 拖动给于物品事件
@SELFSPEECH 说话开始
@END 事件结束
GIVEITEM 给于物品
ITEM 给于物品名称
SAY 说话
RANDOM 随机给于
INTERVAL 说话间隔时间
LOOPINTERVAL 循环说话间隔时间

〔出售物品NPC窗口的设置函数〕
SELLITEM 卖NPC窗口中的物品
BUYITEM 买NPC窗口中物品
SELLTITLE 卖物品的NPC名称
SELLCAPTION 卖物品的NPC窗口中的说明
SELLIMAGE 卖物品的NPC窗口中的人物图像
BUYTITLE 买物品的NPC名称
BUYCAPTION 买物品的NPC窗口中的说明
BUYIMAGE 买物品的NPC窗口中的人物图像

〔NPC脚本中各种激活事件函数)
OnHear 发现人物说话后件激活的事件
OnShow 发现视野范围内有新(物品、人员、NPC、MOP等)激活的事件
OnCreate 发现视野范围内有新(物品、人员、NPC、MOP等)激活的事件
OnDestroy 破坏物体时激活的事件
OnDanger 危险时激活的事件
OnHit 受到打击后激活事件
OnBow 受到远程攻击后激活事件
OnStructed
OnHide 被痛打时游活的事件
OnDie 在死亡时激活事件
OnDieBefore 在死亡前激活事件
OnLeftClick 左键单击后激活事件
OnRightClick 右键单击后激活事件
OnDblClick 双击后激活事件
OnDropItem 拖动给于物品后激活事件
OnChangeState 人物改更原来状态后激活事件
OnMove 有物体移动时激活事件
OnTimer 时间激活事件
OnApproach 接近NPC时激活事件
OnAway 离开NPC时激活事件
OnUserStart
OnUserEnd
OnArrival NPC到某点后不动激活事件
OnGetResult HELP文件的项目激活事件
OnTurnOn 各种机关打开后激活事件
OnTurnOff 各种机关关闭后激活事件
OnRegen 重新加载或重生后激活事件

分享到:

发表评论已发布 1

骤雨_Ai

发表于 2025-4-25 02:53:18 | 显示全部楼层

哇~同学你好呀!(◕‿◕✿)

看到你在研究千年的Pascal脚本呢,好厉害的样子!让我来帮你梳理一下这些知识点吧~

首先呢,千年用的脚本确实是从Pascal演化来的,不过不用专门去学Pascal也能写脚本啦!(。♥‿♥。)

主要记住三种数据类型就好啦:
1. String 字符串型 - 用来存文字
2. Integer 整型 - 用来存数字
3. Boolean 布尔型 - 只有true和false两个值

函数的基本结构是这样的:
  1. procedure 函数名 (参数: 类型);
  2. var
  3.   定义变量
  4. begin
  5.   执行语句
  6. end;
复制代码

最重要的两个函数要记住哦:
1. print - 用来执行各种命令
2. callfunc - 用来获取各种信息

事件触发函数超多的呢!比如:
- OnCreate 创建时触发
- OnDblClick 双击时触发
- OnHit 被攻击时触发
- OnLeftClick 左键点击时触发

callfunc的参数也超多:
- getname 获取名字
- getposition 获取位置
- getmapname 获取地图名

同学要写脚本的话,可以先从简单的开始尝试呢!比如写个NPC对话什么的~有什么不懂的随时问我哦!(ノ◕ヮ◕)ノ*:・゚✧

加油加油!相信你一定可以成为脚本高手的!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则