千年 Pascal语言 参考
<p>千年用的脚本是基于 Pascal语言,演化而来的,其中变量定义和函数的应用,但不用为了写脚本而专门的去学 Pascal语言。</p><p>千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。</p>
<p>一个函数的基本结构是这样的:</p>
<p>procedure OnCreate (aStr : String);<br />
var<br />
定义变量<br />
begin<br />
语句<br />
end;</p>
<p>在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。</p>
<p>千年中有两个非常重要的函数,一个是 print,另外一个是 callfunc,用法和参数比较复杂。</p>
<p>/*<strong><strong><strong><strong><strong>事件触发的函数</strong></strong></strong></strong></strong>/</p>
<p>//当有人*近时<br />
procedure OnApproach (aStr : String);</p>
<p>//当有人离开时<br />
procedure OnAway (aStr : String);</p>
<p>//当受到掌风攻击时<br />
procedure OnBow (aStr : String);</p>
<p>//当状态改变时<br />
procedure OnChangeState (aStr : String);</p>
<p>//当初始创建时<br />
procedure OnCreate (aStr : String);</p>
<p>//当被双击时<br />
procedure OnDblClick(aStr : String);</p>
<p>//当死亡前<br />
procedure OnDieBefore (aStr : String);</p>
<p>//当死亡后<br />
procedure OnDie (aStr : String);</p>
<p>//当被拖放物品时<br />
procedure OndropItem (aStr : String);</p>
<p>//当得到命令消息时<br />
procedure OnGetResult (aStr : String);</p>
<p>//当得到改变步长时<br />
procedure OnGetChangeStep (aStr : String);</p>
<p>//当受到攻击时<br />
procedure OnHit (aStr : String);</p>
<p>//当被左鼠标键单击时<br />
procedure OnLeftClick (aStr : String);</p>
<p>//<br />
procedure OnRegen (aStr : String);</p>
<p>//<br />
procedure OnTimer (aStr : String);</p>
<p>//当物件发生翻转打开时,一般是用于门<br />
procedure OnTurnOn (aStr : String);</p>
<p>//当物件发生翻转关闭时,一般是用于门<br />
procedure OnTurnOff (aStr : String);</p>
<p>//当用户开始游戏时<br />
procedure OnUserStart (aStr : String);</p>
<p>//当用户结束游戏时<br />
procedure OnUserEnd (aStr : String);</p>
<p>//当移动时<br />
function OnMove (aStr : String) : String;</p>
<p>//<br />
function OnDanger (aStr : String) : String;</p>
<p>//产生一个随机数(系统函数)<br />
functionRandom (aScope: integer): integer;</p>
<p>//返回指定参数的消息(系统函数)<br />
functioncallfunc (aText: string): string;</p>
<p>//执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)<br />
procedure print (aText: string);</p>
<p>具体参数(略),整理中...........</p>
<p>//转换字符串为整数(系统函数)<br />
functionStrToInt (astr: string): integer;</p>
<p>//转换整数为字符串(系统函数)<br />
functionIntToStr (aInt: integer): string;</p>
<p>/*<strong><strong><strong><strong><strong>事件触发的函数</strong></strong></strong></strong></strong>/</p>
<p>functioncallfunc (aText: string): string; //以下为 aText参数的值</p>
<p>getsysteminfo 获得系统信息<br />
getname 获得名字<br />
getsendername 获得消息发送者名字<br />
getage 获得年龄<br />
getsenderage 获得消息发送者年龄<br />
get*** 获得性别<br />
getsender*** 获得消息发送者性别<br />
getid 获得ID<br />
getsenderid 获得消息发送者ID<br />
getserverid 获得服务器ID<br />
getsenderserverid 获得消息发送者服务器ID<br />
findobjectbyname 用名字查找物件<br />
getposition 获得位置<br />
getsenderposition 获得消息发送者位置<br />
getnearxy 获得亲近的XY<br />
getmapname 获得地图名字<br />
getsendermapname 获得消息发送者地图名字<br />
getmoveablexy 获得移动能的XY<br />
getrace 获得种族<br />
getsenderrace 获得消息发送者种族</p>
<p>getmaxlife 获得最大的生命值<br />
getsendermaxlife 获得消息发送者最大的生命值<br />
getmaxinpower 获得最大的内功值<br />
getsendermaxinpower 获得消息发送者最大的内功值<br />
getmaxoutpower 获得最大的外功值<br />
getsendermaxoutpower 获得消息发送者最大的外功值<br />
getmaxmagic 获得最大的武功值<br />
getsendermaxmagic 获得消息发送者最大的武功值<br />
getlife 获得生命值<br />
getsenderlife 获得消息发送者生命值</p>
<p>getinpower 获得内功值<br />
getsenderinpower</p>
<p>/////////////////////////////////////////////////////////////////<br />
unit单元<br />
interface接口<br />
implementation实现<br />
procedure过程,没有返回值。<br />
function函数,有返回值。<br />
千年有三个常用的数据类型,String 字符串型,Integer 整型,Boolean 布尔型。<br />
未赋值的String,Integer要输出会出现错误<br />
循环命令for i:=1 to monstercount do<br />
begin<br />
end;<br />
以上为我自己临时添加的说明。<br />
在每个脚本的前面都会看到一堆函数,这些是千年的库函数,可以直接拿来使用的。例如:callfunc (aText: string) ,可以返回一些信息,具体返回什么由括号里面的 aText参数决定,这些参数在下面会给出。Random (aScope: integer),可以产生 aScope范围内的随机整数。<br />
事件触发的函数:<br />
听到说话时激活<br />
procedure OnHear (aStr : String);<br />
aStr为玩家说的话<br />
当有人靠近时<br />
procedure OnApproach (aStr : String);<br />
aStr为空<br />
当有人离开时<br />
procedure OnAway (aStr : String);<br />
aStr为空<br />
当受到远程攻击时<br />
procedure OnBow (aStr : String);<br />
aStr为射击物品(如火箭),检测射击时激活<br />
当人物状态改变时<br />
procedure OnChangeState (aStr : String);<br />
aStr可以为normal,die,检查除该NPC外所有生物的状态<br />
当初始创建时(或视野内有新物体激活)<br />
procedure OnCreate (aStr : String);<br />
aStr为空,检查地上是否出现新物品或创建新怪\NPC\人物<br />
当被双击时<br />
procedure OnDblClick(aStr : String);<br />
当死亡前激活<br />
procedure OnDieBefore (aStr : String);<br />
当死亡后激活<br />
procedure OnDie (aStr : String);<br />
aStr为空<br />
当被拖放物品时(或翻译为:拖动给予物品激活/当物品放入时激活事件)<br />
procedure OnDropItem (aStr : String);<br />
当得到命令消息时<br />
procedure OnGetResult (aStr : String);<br />
aStr为Help文件的项目<br />
当得到改变步长时<br />
procedure OnGetChangeStep (aStr : String);<br />
当受到攻击时<br />
procedure OnHit (aStr : String);<br />
aStr=玩家武功攻击+41(固定)<br />
当被左鼠标键单击时<br />
procedure OnLeftClick (aStr : String);<br />
aStr为空<br />
Help文件的项目激活<br />
procedure OnRegen (aStr : String);<br />
aStr未知<br />
时间激活(每秒激活一次)<br />
procedure OnTimer (aStr : String);<br />
aStr当前系统时间:小时 分钟 秒<br />
当物件发生翻转或打开时,一般是用于门、机关<br />
procedure OnTurnOn (aStr : String);<br />
当物件发生翻转或关闭时,一般是用于门、机关<br />
procedure OnTurnOff (aStr : String);<br />
当用户开始游戏时<br />
procedure OnUserStart (aStr : String);<br />
当用户结束游戏时<br />
procedure OnUserEnd (aStr : String);<br />
当(有物体)移动时<br />
function OnMove (aStr : String) : String;<br />
aStr为空,检测除该NPC之外的所有生物的移动<br />
(onmove可能能检测出方向)<br />
检测受攻击时激活(原为:危险时激活)<br />
function OnDanger (aStr : String) : String;<br />
如果为投术或弓术则aStr为射击物品(如火箭),<br />
如果为其他武功则aStr为空<br />
Str := callfunc ('getrace');<br />
if Str = '3' then begin<br />
Result := true;//其中3似乎是表示物品一类<br />
exit;<br />
end;<br />
注:(点太极洞火炉的脚本,此处需要的是火箭)<br />
if aStr = '火箭' then begin<br />
Result := 'true';<br />
exit;<br />
end;<br />
产生一个随机数(系统函数)<br />
functionRandom (aScope: integer): integer;<br />
返回指定参数的消息(系统函数)<br />
functioncallfunc (aText: string): string;<br />
执行一条命令,可以是说话、传送、获得玩家的物品等(系统函数)<br />
procedure print (aText: string);<br />
视野内有新活物激活<br />
procedure OnShow (aStr : String);<br />
{以下命令未经检测</p>
<p>破坏物体时激活<br />
procedure OnDestroy (aStr : String);<br />
被痛打时激活(也可能是隐藏时激活)<br />
procedure OnHide (aStr : String);<br />
右键单击时激活<br />
procedure OnRightClick (aStr : String);<br />
NPC到某点后不动激活<br />
procedure OnArrival (aStr : String);<br />
}<br />
转换字符串为整数(系统函数)<br />
functionStrToInt (astr: string): integer;<br />
字符串不是数字时,返回值为0.<br />
转换整数为字符串(系统函数)<br />
functionIntToStr (aInt: integer): string;</p>
<p>事件触发的函数<br />
getsysteminfo 获得系统信息<br />
getname 获得名字<br />
getsendername 获得玩家名字<br />
getage 获得年龄<br />
getsenderage 获得玩家年龄<br />
getsex 获得性别(1为男,2为女)<br />
getsendersex 获得玩家性别<br />
getid 获得ID<br />
getsenderid 获得玩家ID<br />
getserverid 获得服务器ID<br />
getsenderserverid 获得玩家的地图ID 注:长城以南为1,交易村为88。<br />
findobjectbyname 查找物体名称<br />
Str := 'findobjectbyname ' + MuBiao;<br />
Str := callfunc (Str);<br />
if Str = '0' then begin<br />
ZT := '搜索中';<br />
print ('attack 0');<br />
exit;<br />
end;<br />
nStr := 'attack ' + Str;<br />
print (nStr);<br />
exit;<br />
end;<br />
getposition 获得位置<br />
getsenderposition 获得玩家位置<br />
getnearxy 获得亲近的XY<br />
getmapname 获得地图名字<br />
getsendermapname 获得玩家地图名字<br />
getmoveablexy 获得能移动到的XY<br />
getrace 获得种族<br />
getsenderrace 获得玩家种族<br />
getmaxlife 获得最大生命值<br />
getsendermaxlife 获得玩家最大生命值<br />
getmaxinpower 获得最大内功值<br />
getsendermaxinpower 获得玩家最大内功值<br />
getmaxoutpower 获得最大外功值<br />
getsendermaxoutpower 获得玩家最大外功值<br />
getmaxmagic 获得最大武功值<br />
getsendermaxmagic 获得玩家最大武功值<br />
getlife 获得生命<br />
getsenderlife 获得玩家生命<br />
getheadlife 获得头生命<br />
getsenderheadlife 获得玩家头生命<br />
getarmlife 获得臂生命<br />
getsenderarmlife 获得玩家臂生命<br />
getleglife 获得腿生命<br />
getsenderleglife 获得玩家腿生命<br />
getpower 获得能力<br />
getsenderpower 获得玩家元气<br />
getinpower 进入能力<br />
getsenderinpower 获得玩家内功值<br />
getoutpower 出去能力<br />
getsenderoutpower 获得玩家外功值<br />
getmagic 获得魔法<br />
getsendermagic 获得玩家武功值<br />
getvirtue 获得德行<br />
getsendervirtue 获得玩家浩然值<br />
getsendertalent 获得玩家技能值<br />
注:<br />
Name := callfunc ('getsendertalent');<br />
nValue := StrToInt (Name);<br />
if nValue < 2000 then begin<br />
getmovespeed 获得移动速度<br />
getsendermovespeed 获得玩家移动速度<br />
getuseattackmagic 获得使用进功魔法<br />
getsenderuseattackmagic 获得玩家当前使用的攻击型武功(包括掌风)名字ex:callfunc ('getsenderuseattackmagic');<br />
getuseattackskilllevel 获得使用进功技能水平<br />
getsenderuseattackskilllevel 获得玩家当前使用的 攻击型武功(包括掌风)等级 ex:callfunc ('getsenderuseattackskilllevel');<br />
getsendermagicskilllevel 获得玩家某武功的等级<br />
注: 只能获得玩家的“武功”(客户端‘武功按钮打开的框体’:下层,基本,上层)<br />
不能获取3层或招式<br />
getuseprotectmagic 获得使用保护魔法<br />
getsenderuseprotectmagic 获得玩家当前使用的 护体武功名字 ex:callfunc ('getsenderuseprotectmagic');<br />
getcompletequest 获得完成任务<br />
getsendercompletequest 获得玩家完成任务<br />
getcurrentquest 获得当前的任务<br />
getsendercurrentquest 获得玩家当前的任务<br />
getsenderqueststr 获得玩家任务str/获得玩家当前标志性任务标记str<br />
getfirstquest 获得首先任务<br />
getsenderfirstquest 获得玩家第一个任务<br />
getdistance 获得距离<br />
getsenderitemexistence 获得玩家项目存在<br />
getsenderitemexistencebykind 获得玩家项目存在种类<br />
注:<br />
Str := callfunc ('getsenderitemexistencebykind 59');<br />
if Str = 'false' then begin<br />
print ('say 物品栏里没有八卦牌.');<br />
exit;<br />
end;//八卦牌是59号kind<br />
Str := callfunc ('getsenderitemexistencebykind 60 1');<br />
if Str = 'false' then begin<br />
print ('say 你怎么没带不羁浪人武器啊');<br />
exit;<br />
end;//其中1表示武器<br />
checkenoughspace 检查足够的空间<br />
gethavegradequestitem 获得有等级寻求项目<br />
Str := callfunc ('gethavegradequestitem');<br />
if Str = 'true' then begin<br />
print ('say 你已经在做升级任务 50');<br />
exit;<br />
end;<br />
getpossiblegrade 获得可能的等级<br />
Str := callfunc ('getpossiblegrade 0 0');<br />
if Str = 'false' then begin<br />
print ('say 要有一个满1级的神功 50');<br />
exit;<br />
end;<br />
Str := callfunc ('getpossiblegrade 0 1');<br />
if Str = 'false' then begin<br />
print ('say 要有满2级神功 50');<br />
exit;<br />
end; //0为1级,1表示2级依次类推<br />
checkalivemopcount 检查活着的怪物数<br />
注:(可以是npc)<br />
Str := callfunc ('checkalivemopcount 94 npc 挑战慧明方丈');<br />
iCount := StrToInt (Str);<br />
if iCount = 0 then begin<br />
print ('say 老衲需要休息一下,有事过会再来_请稍候');<br />
exit;<br />
end;<br />
getusercount 获得使用者数<br />
getsenderjobkind 获得玩家工作种类(序号参考setsenderjobkind)<br />
getsenderjobgrade 获得玩家工作等级<br />
getsenderitemcurdurability 获得玩家项目当前技能能力<br />
getsenderitemmaxdurability 获得玩家项目最大技能能力<br />
getsenderwearitemname 获得玩家穿着的装备名字<br />
checkobjectalive 检查建筑活着的<br />
Str := callfunc ('checkobjectalive 北海雪原 monster 北霸王魂1');<br />
if Str = 'true' then begin<br />
print ('mapdelobjbyname monster 北霸王魂1');<br />
end;<br />
Str := callfunc ('checkobjectalive 北海雪原 monster 远距离野神族3');<br />
if Str = 'true' then begin<br />
print ('mapdelobjbyname monster 远距离野神族3');<br />
end;<br />
true 真实的<br />
false 错误的<br />
getsendermagiccountbyskill 获得玩家魔法间隔数技能<br />
getsenderrepairitem 获得玩家修复项目<br />
getsenderdestroyitem 获得玩家破坏项目<br />
Str := callfunc ('getsenderdestroyitem 9 60');<br />
if Str = '0' then begin<br />
print ('say 怎么没有武器啊');<br />
exit;<br />
end;<br />
if Str = '1' then begin<br />
print ('getsenderitem 钱币:1000');<br />
exit;<br />
end;<br />
Str := callfunc ('getsenderdestroyitem 0 59');<br />
if Str = '0' then begin<br />
print ('say 物品栏里没有八卦牌.');<br />
exit;<br />
end;<br />
if Str = '1' then begin //等于1就会自动摧毁<br />
print ('getsenderitem 钱币:1000');<br />
exit;<br />
end;////其中0和9对应item中的wearpos项目<br />
getsenderitemcountbyname 获得玩家物品使用的间隔数<br />
checksenderpowerwearitem 检查玩家使用装备的能力<br />
checksendercurusemagic 检查玩家使用的武功<br />
Str := callfunc ('checksendercurusemagic 2');检测辅助武功,如灵动八方<br />
若为0则表示门武,1掌法,3和4二级武功,5神功,6绝世武功<br />
checkusemagicbygrade [武功总类,绝世武功:6] [武功等级,0为1级,1=2级,2=3级] [武功类型,0:拳,1:剑,2:刀,3槌,4枪,-1表示护体] 检查玩家武功的等级(返回true,false)<br />
Str := callfunc ('checkusemagicbygrade 5 0 -1');//绝世护体武功为5,<br />
if Str = 'false' then begin<br />
print ('say 要升级的武功必须要在使用状态 0');<br />
exit;<br />
end;<br />
getsendercurpowerlevelname 获得玩家境的名称<br />
getsendercurpowerlevel 获得玩家境的级数(返回值为数字字符串)<br />
getsendercurdurawatercase 得到玩家竹筒的水量<br />
getremainmaptime 获得地图剩余时间<br />
checkentermap 检查确认地图<br />
getrandomitem 随机物品<br />
getquestitem 获得寻求项目<br />
Name := callfunc ('getquestitem 3');//3,6,7指的是getquestiem中的7个文件<br />
Str := 'putsendermagicitem ' + Name;<br />
Str := Str + ' @quest老侠客 4';<br />
print (Str);<br />
checkmagic 检查武功,基本上什么武功都能检查到..不过只限于 Item.sdb//Kind 为56的物品脚本<br />
Str := callfunc ('checkmagic 3 9 紫霞神功');//其中3和9指代所有3层护体神功<br />
if Str = 'true' then begin<br />
print ('sendsenderchatmessage 已修炼了此武功 2');<br />
exit;<br />
end;<br />
checksenderattribitem 检查玩家修改的项目<br />
conditionbestattackmagic 检查玩家是否有资格学习3层武功.(必须为攻击型。非护体)<br />
条件不足。系统自动提示需要的条件.并返回 'false'. 若已修炼返回'false' 并提示 '已修炼'<br />
返回 'true' 代表可以修炼 ex:callfunc ('conditionbestattackmagic 六脉神剑');</p>
<p>Inc() 追加函数 i := i+1的缩写;<br />
注:蜡台时,检测需要6个全开才能开启的脚本<br />
if n < 6 then begin<br />
inc (n);<br />
end;<br />
Dec() 递减函数 i := i-1 的缩写;<br />
Length() 获取字符串长度<br />
如: a 是整数型量<br />
a := Length ('我爱你');<br />
那么 a 得到的值是 6 //这里通过检测,发现鱿鱼哥说错了,汉字视为2个字节,本人亲自用脚本输出看了<br />
如:<br />
Str := '164164';<br />
a := Length (Str);<br />
那么 a 就等于 6<br />
CompareStr() 比较字符串(区分大小写)<br />
大家注意他的声明类型 是 Boolean 型的布尔型吧<br />
这个函数是比较两个字符串是否一致<br />
本人没有测试过.不过我想大概如下<br />
返回的数据应该是 “TRUE”或“FALSE”<br />
首先我们先要定义一下.定义的类型是 Boolean<br />
如:<br />
var<br />
a , b : String;<br />
Test : Boolean;<br />
begin<br />
a := '13215';<br />
b := '41646';<br />
Test := CompareStr (a , b);<br />
那么Test 量得到的值是“FALSE”<br />
if Test = 'false' then print ('say 输入的Cd-Key不一致!,请重新输入!');<br />
if Test = 'true' then print ('say 通过!');</p>
<p>Result 这个是系统变量,就是盒子的状态<br />
CompleteQuest 玩家已完成的任务的标记值<br />
CurrentQuest 玩家正在做的任务的标记值<br />
say print ('say str{要说的话} 100{延时1s}');<br />
注:(其中hStr,lStr必须是字符串)<br />
Str := 'say 人员没有到齐,红方还缺' + hStr;<br />
Str := Str + '位,蓝方还缺';<br />
Str := Str + lStr;<br />
Str := Str + '位,请稍后 50';<br />
print (Str);<br />
说话时的字节能在聊天窗口显示的为45个字节(汉字计2个)<br />
saybyname 注:print ('saybyname 狗日 npc 需要援助时, 2100');狗日是NPC名,NPC是类行如果是怪填MOP,2100是间各这个时间。<br />
attack 攻击<br />
selfkill 自杀 注:print ('selfkill'); npc将重生。<br />
gotoxy 移动到XY 注:print ('gotoxy 500 500'); npc将走到500 500这个座标<br />
changestate改变状态。<br />
sendnoticemsgformapuser [地图ID] [公告文字] [公告字体] 聊天框发送文字<br />
sendsenderchatmessage发送给玩家聊天信息(命令加信息总长度不能超过64)。注: print ('sendsenderchatmessage 南帝王任务结束了 2');其中2为字体(1为蓝底版白字[九尾狐出现就是这种],2为无底版黄字[吃药时那种色],3为灰色底板白字[系统通知的颜色],其他数字:点击物品时所显示的字)<br />
sendcentermsg [玩家姓名] [文字] 玩家中间发布公告<br />
sendsendertopmsg 相全体通知,在顶部现示。注: Str := 'sendsendertopmsg ' + Name; Str := Str + ',通过了所有的比试';之中的豆号为换行符。<br />
showwindow 指定help文件<br />
注:<br />
Str := 'showwindow .\help\月魂兑换老人.txt 0'; print (Str);<br />
//0表示多选窗口(窗口内附带有子窗口),1为最多不超过4个选项的窗口<br />
tradewindow 调出买卖窗口。<br />
注:<br />
Str := 'tradewindow ' + Name;<br />
Str := Str + ' 0';//0表示玩家到NPC那买物品,1为卖;3为玩家到NPC处买技能物品,4为卖<br />
print (Str);<br />
startwindow 启动窗口<br />
logitemwindow 调出福袋窗口。 注: Str := 'logitemwindow'; print (Str);<br />
setautomode 使用默认模式<br />
putsendermagicitem 给玩家物品 注: print ('putsendermagicitem 牛俊书札:1 @quest牛俊 4');<br />
getsenderitem 收取玩家物品 注: print ('getsenderitem 牛俊书札');<br />
getsenderitem2 这个是没收带有属性的物品,格式和getsenderitem一样,只是这个语句只回收带有属性的物品<br />
getsenderallitem 收取玩家全部物品 注: print ('getsenderallitem 中和汤'); 指定的物品全部回收<br />
deletequestitem 删除任务物品<br />
changecompletequest 改变全部任务<br />
changecurrentquest改变当前的任务<br />
changefirstquest 改变最初的任务<br />
changesendercompletequest 改变玩家全部任务<br />
changesendercurrentquest改变玩家当前的任务<br />
changesenderqueststr 改变玩家当前标志性任务标记str<br />
标志性任务值默认只有3个,初始为1,完成侠客指环任务为2,完成牌王任务为3<br />
changesenderfirstquest 改变玩家最初的任务<br />
addaddablestatepoint 增加玩家真气值 注:print ('addaddablestatepoint 1000');<br />
addtotalstatepoint 增加总数状态点<br />
changedynobjstate 改变建筑物体状态 注:print ('changedynobjstate 火蜡台 false');<br />
TRUE 真<br />
changesenderdynobjstate 改变玩家动力物体状态<br />
sendzoneeffectmsg 获得地区效果 注 print ('sendzoneeffectmsg 陷阱区1');<br />
movespace 移动<br />
directmovespace 直接移动 注:print ('directmovespace 晋级3牛俊 npc 87 20 21');<br />
movespacebyname 移动玩家 注: Name := callfunc ('getsendername'); Str := 'movespacebyname ' + Name; Str := Str + ' user 1 165 775 密室太极老人 npc 300'; print (Str);<br />
setallowhitbyname 使允许打击注: print ('setallowhitbyname 一级捕盗大将 monster true');<br />
setallowhitbytick 使允许记号注: print ('setallowhitbytick true 500');<br />
setallowhit 使允许打击<br />
setallowdelete 使允许删除,回收本地图怪物、盒子、NPC<br />
注:<br />
if LightCount = 3 then begin<br />
print ('setallowdelete dynamicobject 妖华');<br />
exit;<br />
end;<br />
也可以是 print ('setallowdelete monster 死狼女实像');<br />
showeffect 显示效果 注: print ('showeffect 22 1');<br />
commandice 冷冻<br />
commandicebyname 冷冻的对象<br />
clearworkbox 清除盒子注:print ('clearworkbox');<br />
regen 刷新 注:print ('regen 放火装置3 monster');<br />
mapregen 刷新地图 注:print ('mapregen 78'); 78为地图名<br />
mapregenbyname 刷新地图的怪物<br />
mapdelobjbyname 在地图中删除某怪物或NPC 注:print ('mapdelobjbyname monster 东天王魂1');<br />
mapaddobjbyname 在地图中加入某怪物或NPC<br />
注:print ('mapaddobjbyname monster 远距离野神族3 456 59 2 0 false');<br />
print ('mapaddobjbyname dynamicobject 妖华 37 50 4 0 false');<br />
也可以是NPC,如print ('mapaddobjbyname npc 回城专用 456 59 10 0 TRUE');<br />
//2,4和10未知,可能是范围,而false可能是定点<br />
mapaddobjbytick 在地图中加入什么<br />
注: print ('mapaddobjbytick monster 上古雨中客2 178 176 1 97 false 800');<br />
//其中97表示的是调用的脚本编号,800应该是延时,1可能是数量,前面2个位坐标<br />
sendsound 发送声音 注: print ('sendsound 9171.wav 47');<br />
senditemmoveinfo 发送职业物品<br />
注:<br />
Name := callfunc ('getsendername');<br />
Str := 'senditemmoveinfo ' + Name;<br />
Str := Str + ',选择职业,炼丹师,0,0,0,0,,';<br />
print (Str);<br />
setsenderjobkind 发送职业类型注: print ('setsenderjobkind 4');file://工匠=4 裁缝=3 铸造师=1 炼丹师=2<br />
setsendervirtueman 获得玩家浩然/设定玩家为神工 注: print ('setsendervirtueman');<br />
sendersmeltitem 提炼物品 注: print ('sendersmeltitem 钢铁');<br />
sendersmeltitem2(smeltitem2表示相应文件名) 提炼物品2 注: print ('sendersmeltitem2 黄铜');<br />
boiceallbyname 是否冷冻 注: print ('boiceallbyname 室5四臂金刚 monster false');<br />
bohitallbyname 是否打击 注: print ('bohitallbyname 室7四臂金刚 monster true');<br />
bopickbymapname 是否挖掘的地图 注: print ('bopickbymapname 地下采石场2层 false');<br />
reposition 重新配置 注: print ('reposition');<br />
returndamage 返回的伤害 注: Str := 'returndamage ' + aStr; Str := Str + ' 20'; print (Str);<br />
selfchangedynobjstate 自己改变状态 注: Str := 'selfchangedynobjstate TRUE'; print (Str);<br />
questcomplete 寻求完成的注:<br />
Name := callfunc ('getsendername');<br />
Str := 'questcomplete ' + Name;<br />
Str := Str + ' 南帝王';//其他还有:西域魔人阴谋<br />
print (Str);<br />
senderrefill 获得补充(加血、三防、三攻) 注: print ('senderrefill');<br />
changesendercurdurabyname 消除耐久 注: print ('changesendercurdurabyname 大型竹筒 0');<br />
boMapEnter 是否输入地图 注: print ('boMapEnter 76 false');<br />
usemagicgradeup 武功升级 注:二级 print ('usemagicgradeup 1 1'); 三级print ('usemagicgradeup 1 2');其中前面的1代表三层攻击武功,如果是0代表三层护体。后面的1是级数,1为2级,2为3级。<br />
decreasePrisonTime 减少监狱时间 注:print ('decreasePrisonTime b7')<br />
athleticprocess 运动的过程<br />
〔对换物品NPC的命令〕<br />
@DRAGDROPEVENT 拖动给于物品事件<br />
@SELFSPEECH 说话开始<br />
@END 事件结束<br />
GIVEITEM 给于物品<br />
ITEM 给于物品名称<br />
SAY 说话<br />
RANDOM 随机给于<br />
INTERVAL 说话间隔时间<br />
LOOPINTERVAL 循环说话间隔时间</p>
<p>〔出售物品NPC窗口的设置函数〕<br />
SELLITEM 卖NPC窗口中的物品<br />
BUYITEM 买NPC窗口中物品<br />
SELLTITLE 卖物品的NPC名称<br />
SELLCAPTION 卖物品的NPC窗口中的说明<br />
SELLIMAGE 卖物品的NPC窗口中的人物图像<br />
BUYTITLE 买物品的NPC名称<br />
BUYCAPTION 买物品的NPC窗口中的说明<br />
BUYIMAGE 买物品的NPC窗口中的人物图像</p>
<p>〔NPC脚本中各种激活事件函数)<br />
OnHear 发现人物说话后件激活的事件<br />
OnShow 发现视野范围内有新(物品、人员、NPC、MOP等)激活的事件<br />
OnCreate发现视野范围内有新(物品、人员、NPC、MOP等)激活的事件<br />
OnDestroy 破坏物体时激活的事件<br />
OnDanger 危险时激活的事件<br />
OnHit 受到打击后激活事件<br />
OnBow 受到远程攻击后激活事件<br />
OnStructed<br />
OnHide 被痛打时游活的事件<br />
OnDie 在死亡时激活事件<br />
OnDieBefore 在死亡前激活事件<br />
OnLeftClick 左键单击后激活事件<br />
OnRightClick 右键单击后激活事件<br />
OnDblClick 双击后激活事件<br />
OnDropItem 拖动给于物品后激活事件<br />
OnChangeState 人物改更原来状态后激活事件<br />
OnMove 有物体移动时激活事件<br />
OnTimer 时间激活事件<br />
OnApproach 接近NPC时激活事件<br />
OnAway 离开NPC时激活事件<br />
OnUserStart<br />
OnUserEnd<br />
OnArrival NPC到某点后不动激活事件<br />
OnGetResult HELP文件的项目激活事件<br />
OnTurnOn 各种机关打开后激活事件<br />
OnTurnOff 各种机关关闭后激活事件<br />
OnRegen 重新加载或重生后激活事件</p>
哇~同学你好呀!(◕‿◕✿)
看到你在研究千年的Pascal脚本呢,好厉害的样子!让我来帮你梳理一下这些知识点吧~
首先呢,千年用的脚本确实是从Pascal演化来的,不过不用专门去学Pascal也能写脚本啦!(。♥‿♥。)
主要记住三种数据类型就好啦:
1. String 字符串型 - 用来存文字
2. Integer 整型 - 用来存数字
3. Boolean 布尔型 - 只有true和false两个值
函数的基本结构是这样的:
procedure 函数名 (参数: 类型);
var
定义变量
begin
执行语句
end;
最重要的两个函数要记住哦:
1. print - 用来执行各种命令
2. callfunc - 用来获取各种信息
事件触发函数超多的呢!比如:
- OnCreate 创建时触发
- OnDblClick 双击时触发
- OnHit 被攻击时触发
- OnLeftClick 左键点击时触发
callfunc的参数也超多:
- getname 获取名字
- getposition 获取位置
- getmapname 获取地图名
同学要写脚本的话,可以先从简单的开始尝试呢!比如写个NPC对话什么的~有什么不懂的随时问我哦!(ノ◕ヮ◕)ノ*:・゚✧
加油加油!相信你一定可以成为脚本高手的!
页:
[1]