NPC脚本详细解析大全

NPCCreate是在DATA目录下的npc.txt里实现的,由于没有可实际运行的服务器端所以无法具体解释npc.txt

NPC的对话是在DATA目录下的msg.txt里定义的,格式为:对话编号  对话内容

 

Windowhealer 医疗窗口

Injurydoctor 治疗医生

Event        事件

Skillmaster  技能教学

StandEnemy   站立敌人

TownPeople   城镇居民

Jobsmaster   就职教学

Billboard    街道版

Brushman     兑换人

Itemshop2    商品商店

Titleman     称号人

以上是NPC人物所属的类型,个别的用处不大的就没写,银行是后想起来的,但我没写上,因为眼睛睁不开了,也不想找了

 

 

Windowhealer 护士尤美儿  0 7500 0 1 1 0 1112 8 30 8 30 8 30 8 30 1 60000 4 14090 0 1 0  100

 

Windowhealer   是他的类型

护士尤美儿       是此人物名字

0                                                      NPC编码,必须唯一的不可重复

1112                                           是地图代码

8  30            是坐标

4                NPC面朝位置

14090            是形象标号.

 

怀疑 4 代表的是游戏NPC面对的方向   采集的数据 2 4 6 0

NPC的最后的一个是显示他是什么样的一NPC 纯数字2010 表示他只说话,而说话的内容是在MSG里对应的编号

尾号的意思

纯数字2010:这类尾号的是只在游戏中显示一句话的,就是点他,他就说话,而且就这一句。MGS中的编号

而尾号是EV_rk_club01.txt  则表示事件的内容  一般有此结尾的都是Event类的人物,对应NPC文件夹里的脚本

结尾是1212|0012|145|4545|:这类都是贩卖类的

 

 

=======================================

 

 

NPC类型:Event

Event 77家的主管 0 999000 0 1 1 0 1522 233 102 233 102  233 102 233 102

1 60000 4 14070 0 1 0  npc_7701.txt

1522         地图  

233  102    是坐标 

4              NPC面朝位置 

 

 

关于NPCJOBmaster

 

40|0|5000|-1|18104|1|65100|65104|65105|65106|65107|65108|-1|18104|1|65109|65110|65111|65112|65113|65114|65115|65116|65117|65118|65119|65120|65121|65122|65123|65124|65125|65126|65127|65128|93|92|91|90|65129|66501|

40便是职业ID,就职相关。就职的NPC不需要脚本,这个NPC的类型就代表了。

18104是就职信,也就是itemset.txt里面的道具编号。就职所需要的道具了。

后面接着的65100|65104|65105|65106……这些都是MSG的对话内容

 

其中的-1和后面的93|92|91|90这些不知道什么意义,只知道这些所有就职相关的NPC都有这些……

 

 

 


关于NPC出现的时间的猜想

 

Event 流星山丘看守者 0 6131 0 1 1 0 300 204 236 204 236 204 236  204 236 1 60000 6 14107 0 1 9 EV_ijk_6131.txt

Event 古代人 0 6315 0 1 1 0 300 579 275  633 326 579 275 579 275 1 60000 4 14526 0 1  8 EV_mag_6315.txt

Event 古代人 0 6316 0 1 1 0 300 514 337 566 388 514 337  514 337 1 60000 4 14526 0 1 8 EV_mag_6316.txt

Event 古代人 0 6317 0 1 1 0 300 593 332 653 385 593 332  593 332 1 60000 4 14526 0 1 8 EV_mag_6317.txt

另外关于设置NPC的随机出现就可以参照古代人那样设置

300 579 275  633 326 579 275 579 275

300是地图的ID

579  275-----------NPC出现的第一个范围

633  326-----------NPC出现的第2个范围

总的来说,NPC随机出现在这些范围内,也可能出现在范围外的

设置的时候请注意一下,有的可能出现在大树下,那样就非常的难找了

 

 

※※※  空白类别  ※※※

0--全天(不刷新,固定在原地不变)

※※※  基本时间  ※※※

1--清晨

2--白天

4--黄昏

8--夜晚

当数值表示其中项目之和时,时间也是对应时间的并集

比如

※※※  时间相加  ※※※

3---清晨+白天

5---清晨+黄昏

9---夜晚+清晨

6---白天+黄昏

10--白天+夜晚

12--黄昏+夜晚

7---清晨+白天+黄昏

11--清晨+白天+夜晚

13--清晨+黄昏+夜晚

14--白天+黄昏+夜晚

15--全天

115的情况,在时间满足要求的第一瞬间NPC会根据前面指定的坐标范围刷新)

所以,那个数值可以是015

 

 

 

 


判定语句:

block '判定语句  

格式:block 判定条件

(用于出现对话框的条件  达到多个条件用 && 连接  多个条件中达到一个用 || 连接  下同)

 

Window_YES '对应Window里的按钮YES 判定语句  

格式:Window_YES 判定条件

 

Window_NO '对应Window里的按钮NO 判定语句  

格式:Window_NO 判定条件

 

Window_OK '对应Window里的按钮OK 判定语句  

格式:Window_OK 判定条件

 

 

 

 

 

判定条件:

ItemSpace '检查道具空间  判定条件  用于判定语句后面  

格式:ItemSpace == 数量 (等于)

ItemSpace >=  数量 (大于等于)

ItemSpace <=  数量 (小于等于)

ItemSpace !=  数量 (不等于)

 

Item '检查是否拥有道具  判定条件  用于判定语句后面

格式:Item 道具编号 == 数量 (等于)

Item 道具编号 >= 数量 (大于等于)

Item 道具编号 <= 数量 (小于等于)

 

HaveItem '检查是否拥有特定道具  判定条件  用于判定语句后面

格式:HaveItem == 道具编号

 

Group '未知  判定条件  用于判定语句后面

格式:Group == 数量 (等于)

Group >= 数量 (大于等于)

Group <= 数量 (小于等于)

 

Gold '检查金钱数量  判定条件  用于判定语句后面

格式:Gold == 数量 (等于)

Gold >= 数量 (大于等于)

Gold <= 数量 (小于等于)

 

BBImage(BImage) '检测玩家图号  判定条件  用于判定语句后面

格式:BBImage(BImage)  == 数量 (等于)

BBImage(BImage) >= 数量 (大于等于)

BBImage(BImage) <= 数量 (小于等于)

 

StrCmpChat '未知  判定条件  用于判定语句后面

格式:StrCmpChat == 数量 (等于)

StrCmpChat >=  数量 (大于等于)

StrCmpChat <=  数量 (小于等于)

 

CheckRealTime '时间  判定条件  用于判定语句后面

格式:CheckRealTime YYYY/MM/DD,TT:TT:TT == 0

(此处"0"的作用不清楚)

 

petlevel '检查特定宠物的等级  判定条件  用于判定语句后面

格式:petlevel 宠物编号 == 等级 (等于)

petlevel 宠物编号 >= 等级 (大于等于)

petlevel 宠物编号 <= 等级 (小于等于)

 

EquipItem '检查正装备着的道具  判定条件  用于判定语句后面(未确定)

格式:EquipItem == 道具编号 (等于)

 

CheckTitle '检查称号? 用法未知

Job '检查职业相关的  具体未知  判定条件  用于判定语句后面

格式:Job == 未知编号 (等于)

 

Fame 检查声望  判定条件  用于判定语句后面

格式:Fame == 数量 (等于)

Fame >= 数量 (大于等于)

Fame <= 数量 (小于等于)

 

HaveTitle '检查是否拥有称号  判定条件  用于判定语句后面

格式:HaveTitle == 称号编号 (等于)

 

TrialFlg '未知  判定条件  用于判定语句后面

格式:TrialFlg == 数量 (等于)

TrialFlg !=  数量 (不等于)

 

NowTime '未知  时间相关  判定条件  用于判定语句后面

格式:NowTime == 数量 (等于)

NowTime !=  数量 (不等于)

 

HaveLeak1Item '检查拥有道具相关  具体未知  判定条件  用于判定语句后面

格式:HaveLeak1Item == 道具编号 (等于)

 

ShipGetStopTime2 '未知  船相关 判定条件  用于判定语句后面

格式:ShipGetStopTime2 < 未知数值

 

Imagetype '图象相关  未知  判定条件  用于判定语句后面

格式:Imagetype == 未知数值

 

 

 

 

设定语句:

Window '对话框弹出

格式:Window 对话编号,按钮类型1,按钮类型2

(类型有YES  NO  OK  CANCEL  NEXT)

 

EndWindow '对应 Window 可单独使用  

格式:EndWindow 对话编号(,按钮类型)

 

KillItem '交出道具  

格式:KillItem 道具编号,数量

 

KillItemAll '交出全部的特定道具  

格式:KillItemAll 道具编号

 

GiveItem '给予道具  

格式:GiveItem 道具编号,数量

特殊用法:GiveItem (道具编号获得机率,道具编号获得机率,道具编号获得机率)[未确定]

eg:GiveItem  (111%60,121%100,101%1)

这里%60 %100 %1是获得的机率,111 121 101是道具编号

 

GiveLeak1Item '给予道具相关  具体未知

格式:GiveLeak1Item 道具编号,数量

特殊用法:GiveLeak1Item (道具编号获得机率未知,道具编号获得机率未知,道具编号获得机率未知)[未确定]

eg:GiveLeak1Item (18690%1$1,18693%1$1)

这里%1 %1是获得的机率,18690 18693是道具编号,$1 $1未知

 

Warp '传送至  

格式:Warp 0,地图号,X坐标,Y坐标

(这里0的作用暂时不知道)

 

LeaveGroup '脱离团队  

格式LeaveGroup

 

Encount '发生战斗  

格式:未知

 

AddGold '给予或收取金钱

格式:AddGold 数量

(数量可以为负)

 

KillPetl '收走宠物

格式:KillPetl 宠物编号,数量

 

GivePet '给予宠物

格式:GivePet 宠物编号

 

ChangePal '未知

格式:ChangePal 未知数值,未知数值

 

SetHouse '未知  房子相关

格式:SetHouse 未知数值,未知数值

 

Message  '对话

格式:Message 对话编号

 

SetLoginPoint '设定登陆点  具体未知

格式:SetLoginPoint 未知数值

 

Setaction '设定NPC动作  

格式:Setaction 动作编号

 

playse '播放音效

格式:playse 音效编号,1,1

(这里1,1的作用未知)

 

 

 

 

判定及设定语句:

EndEvent '检查是否完成任务  判定条件  用于判定语句后面    作设定语句使用

格式:EndEvent 任务编号 == 01

(这里0为无,1为有)

 

NowEvent '检查是否正在进行任务  判定条件  用于判定语句后面    作设定语句使用

格式:NowEvent 任务编号 == 01

(这里0为无,1为有)

 

ShipCharTake '未知  船相关 判定条件  用于判定语句后面    作设定语句用

格式:ShipCharTake 未知数值,未知数值 == 未知数量

设定语句用法:ShipCharTake 未知数值,未知数值

 

ShipCharDown'未知  船相关  判定条件  用于判定语句后面    作设定语句用

格式:ShipCharDown 未知数值,未知数值 == 未知数量

设定语句用法:ShipCharDown 未知数值

 

 ===============================================

如:

 

酒吧的  喊头目万岁可以买到钥匙的NPC,分析如下

#NPC:悼狼 凯艰 魄概牢

#厘家:官 救虐葛俊 乐澜      //这句没有用

block  StrCmpChat != 12000 || StrCmpChat == R     //检查对话内容是否与12000相同    否则  循环           

##########  ##########                         //分割线

# 扁促府绊 乐菌绢. 寸脚 楷遏盔B瘤?        //显示文字

Window 12006,YES,NO                             //窗口显示12006的文字,选择按纽 YES NO

##########   ##########

# 构!? 穿备衬  ! 历府  !

Window_NO                                 //选择NO

Endwindow  12007                                 //选择NO之后显示12007的内容

##########   ##########

# 亮酒, 弊烦  鞠龋甫  富秦.                  

Window_YES                                 //选择YES

Endwindow  12008                                 //选择YES之后显示12008的内容

block StrCmpChat == 12000                       //判定对话为12000显示的内容则继续

##########   ##########

# 滴格丛 弥绊!! 凯艰, 啊瘤绊  吭绢. 距加措肺 10俺俊 100G促. 宝满瘤?

Window 12001,YES,NO                                   //判定12000之后的对话框YESNO

Window_YES gold < 100                                  //选是的同时判定金钱大于100  

# 绢捞绢捞, 捣捞  何练秦. 愁府绰  芭扼搁  倒酒啊.  

Endwindow  12003                                        //如果不够则提示 12003

Window_YES                                           //如果是则继续

ItemSpace  == 0                                    //ItemSpace 检查道具是否有位置  

# 绢捞绢捞,  寸脚 捞惑 啊龙 绝阑刨单?    //如果没有则提示

Endwindow  12004                                   //如果没有位置则显示12004的内容  

Window_YES ItemSpace >= 1                     //有位置 0是没有位置 1是有

AddGold  -100                                            //金钱-100

GiveLeak1Item 16000,10                            //给予16000号物品,数量10

# 捞霸  拱扒捞促. 家吝洒 荤侩窍扼备. 坷具葫 弥绊!!    

Endwindow  12005                                                  //购买结束显示的内容 12005中的条目  

Window_NO                                     //对话框选否

# 鞘夸绝绰 扒啊? 捞惑茄 籍捞焙            //对话框选否显示的内容

Endwindow 12002

——————————————————————————————————————————

脚本中

# 后边跟的是对话内容

####### 是分割脚本用的,方便浏览之用,并不在游戏中显示

——————————————————————————————————————————

很明显,要定义地图上的遇敌设置,你需要改的文件有最少三个,ENCOUNT定义地图,GROUP定义怪物队型,ENEMYAI定义怪物使用技能

 


【Npc】

里边涉及到各种NPC类型和脚本的设置,写任务必须.必学内容


脚本语句

addfeversec = 加卡时

addgold = 加钱

addgoldlevel

addluck =加幸运度

addskillslot = 加技能格

addstampcount

albumitemflg =变更人物头象

bankitem

BBImage(BImage) =判断人物图形编号

block = NPC指令开端(类似设定一块一块脚本块)

Changepal = 改变地图调色板 例如 changepal 15,180 参数15为调色板值,180为时间,单位秒

checkitemcategory

CheckRealTime =检查真实时间

checkskillslot =检查技能格数

checktitle =檢查是否有新称号

else =配合IF

encount =打怪

endblock

endevent =赋予指定event编号

endif =配合IF

EndWindow =对话结束关闭对话视窗

EquipItem

fame =称号值

floor 判断所在地图的编号比如法兰 1000

fp =给予+-生命值

gaendwindow 全队endwindow?

gaglobalflag 全队globalFlag条件判断

gawindow 全队window?

getalbumflgtotal

giveitem =给予指定道具编号指令(道具鉴定与否看itemset中的设置几率)

GiveLeak0Item =给予特定道具编号指令(未鉴定道具)

GiveLeak1Item =给予指定关键道具编号指令(已鉴定道具)

givepet 给予指定宠物

giverecipe =给予指定技能编号

givestackitem

globalFlag 类似ENDEVENT的判断?? 登出效果不消失,服务器重启归零

globaltimer

Gold =检查当前金钱值

gotob 用于语句跳转,向上跳(goto back)

gotof 用语语句跳转,向下跳(goto forward)

Group =检查当前組对人数

guildmember

HaveItem 检测是否拥有道具

haveleak0item

haveleak1item

havetitle 检测是否拥有称号

houseid

if =搭配ELES指令

imagetype =判断0:GIRL 1:BOY 2:CHILDBOY 3:CHILDGIRL 4:MAN 5:WOMAN 6:OLDMAN 7OG

Item =道具编号开端(如Item1234)

ItemCreateTime =判断道具创建到現在的时间差

itemdur =判断指定道具当前耐久

itemdurper

ItemSpace =判断道具空间

job =判断人物职业编号

jobancestry

jobrank =判断人物职业等級

killdrugdish

killitem =刪除指定编号道具

killitemall =刪除指定编号下的所有道具

killleak0item =刪除指定编号下未鉴定的所有道具

killleak1item =刪除指定编号下已鉴定的所有道具

killpet =刪除指定宠物

killpeth

killpetl =刪除指定宠物

LeaveGroup =强制离队

level =判断等級

localcount 本地计量?类似与局部计量变量

localflag

lp =判断生命值

maxfp =判断最大魔法值

maxlp =判断最大生命值

Message = 显示系统提示 ,参数为msg编号

metamocount =人物指定变更变身编号

moveto

Next =搭配Window指令

no =搭配Window指令

nowevent =判断当前event值

nowtime =判断当前魔力时间(0~15)

OK =搭配Window指令

pequipitem 整个队伍中有几人装备某道具 例 EV_tomita_comtest0204

petlevel =设定指定宠物等级

petspace =判断宠物栏当前剩余空格

phitem 整个队伍的道具判断

Play_SE =播放指定音效

playse =播放指定音效

random 随即数设定

Setaction =指定npc动作(必須是可动的npc),动作参数应该是0-9

setcharm =设定魅力值

SetDur 设定物品耐久,例如 setdur 18776,-1 18776为物品ID,-1表示减1耐久度

setfeverflg =设定称号值

sethouse =设定房间剩余时间

sethouselimit

setlevel

SetLoginPoint =设定登陆点指令,已知的参数为 0:法兰|1:阿凯鲁法|2:哥拉尔|3:应该是新城那个

SetLp =设定生命值

SetObject 设定指定不可穿越道具

setparameter

setvisitor 在流行山丘的大地鼠婆婆的脚本里有用到 setvisitor +1

shapenext 设定NPC变换形象,举例"shapenext 外观编号"

shapeoff

shapeon

shipchardown 下船?

shipchartake 上船

shipgetstoptime

skilllevel =设定技能等級

stackitemspace

StrCmpChat =判断 msg对话字句

strstrchat 同上?

systemmessage 系统信息?

total 全局总量

tglobalflag

trueimage

warp =移动指令

Window_NO =搭配Window_yes使用(玩家选no时)

Window_OK =玩家选确定后

Window_YES = 玩家选"yes"时

xpos =指定x坐标

yes 搭配window使用

Ypos =指定y坐标


共享npc脚本变量的说明和未被用到的编号

LocalCount

生命周期:某个脚本内,跳出脚本既归0

类型:整型

未被用到的编号:14-19,21-28

LocalFlag

生命周期:某个脚本内,跳出脚本既归0

类型:布尔型

未被用到的编号:4-24,26-256

globalFlag

生命周期:登出不消失,服务器重启归0

类型:布尔型

未被用到的编号:73-255

NowEvent 和 EndEvent

生命周期:永久存在,保存到数据库

类型:布尔型


EquipItem 检查正装备着的道具 判定条件 用于判定语句后面

格式:EquipItem == 道具编号


killpet =刪除指定宠物

killpeth

killpetl =刪除指定宠物

killpeth和killpetl 后面跟的代码是enemybase.txt 里的代码

区别在于

killpeth 删除大于1级的宠

killpetl 删除1级的宠