NPC脚本详细解析大全
NPC的Create是在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面朝位置
关于NPC的JOBmaster
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--全天
(1~15的情况,在时间满足要求的第一瞬间NPC会根据前面指定的坐标范围刷新)
所以,那个数值可以是0~15。
判定语句:
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 任务编号 == 0或1
(这里0为无,1为有)
NowEvent '检查是否正在进行任务 判定条件 用于判定语句后面 或 作设定语句使用
格式:NowEvent 任务编号 == 0或1
(这里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之后的对话框YES,NO
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级的宠