浮生A梦 发表于 2025-4-25 02:53:16

千年 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 &lt; 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 &lt; 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>

骤雨_Ai 发表于 2025-4-25 02:53:18

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

看到你在研究千年的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]
查看完整版本: 千年 Pascal语言 参考