传奇引擎的NPC脚本能干的事比多数人想的要多。除了买卖、传送、发奖励,它还能直接往服务端目录里写文件。这个能力在版本调试阶段特别顺手,比如自动生成名单、记录玩家数据、留调试痕迹。下面把创建指定文本文件的写法讲清楚,再把LegendM2引擎新沙城门涉及到的数据库修改数据整理出来,方便直接对照着改。
一、用NPC创建文本文件的命令格式
负责建文件的是CreateFile命令,属于文件操作类脚本命令。它的作用是在服务端Envir目录下生成一个空白txt文件,路径和文件名都能自己指定,不用手动去新建文件夹和文档。
最基础的写法是这样:
[@Text]
#IF
#ACT
CreateFile QuestDiary测试.txt
MessageBox 创建文本成功!
逐行看这个结构。[@Text]是这一段脚本的标签,玩家点NPC之后要跳到这个标签,才会执行标签下面的内容。#IF是条件判断头,后面接检测条件,留空表示不做判断直接往下走。#ACT是执行标识,写在它下面的命令才会真正跑起来。CreateFile后面跟的就是要创建的文件路径加文件名,例子里的QuestDiary测试.txt表示在QuestDiary目录下建一个叫“测试.txt”的文件。MessageBox是执行完成后弹给玩家的提示框,弹什么内容自己写就行。
路径这一块是新手最容易出错的地方。Envir是服务端脚本的总目录,文件默认落在它下面,所以路径写的是相对Envir的位置,不是磁盘的绝对路径。常见的几种写法:
写下“..\QuestDiary\NewFile.txt”,前面的..\表示回到Envir根目录,再进QuestDiary文件夹。#SAY后面跟“在Envir\QuestDiary目录中建立了一个文件.”。
不写..\、直接写“QuestDiary\NewFile.txt”的写法,在部分引擎里同样能落在QuestDiary目录下,具体看引擎对相对路径的解释。
只写文件名,比如“测试.txt”,文件会直接生成在Envir根目录,适合不需要归档的临时文件。
不同引擎的写法有一点区别,照抄的时候要对上自己的引擎。GOM引擎写CreateFile ..\QuestDiary\NewFile.txt,文件保存在Envir目录中。HGE引擎写CreateFile QuestDiary\NewFile.txt。GEE引擎的说明里命令是大写CREATEFILE,写法是CREATEFILE ..\QuestDiary\名称列表.txt。LegendM2引擎写CreateFile QuestDiary测试.txt。几个引擎名字不同、大小写不同,前缀带不带..\也不同,但作用是一样的,都是往Envir下写文件。
二、创建文件的进阶用法
学会基础写法之后,可以按实际需求调整路径和触发条件。
建到子目录里,方便分类。比如想把玩家日志单独存放,路径写成“..\QuestDiary\PlayerData\PlayerLog.txt”,引擎会自动把PlayerData这层目录带上,不用提前建好文件夹。
加条件再建文件。想让只有满足条件的玩家触发建文件,就在#IF下面加检测命令。举例:
[@CreateHigh]
#IF
CHECKLEVELEX > 50
#ACT
CreateFile QuestDiaryHighLevel.txt
MessageBox 等级达标,已生成高阶玩家记录文件
这样只有50级以上的玩家点NPC时才会生成那个文件,达不到等级的什么都不会发生,适合做按需生成。
触发方式不止点NPC。写在上线脚本里,玩家每次小退大退上线都会跑一遍;写在走路触发里,走一步就检测一次。同一个文件可以被多个NPC调用,比如第一大陆、第二大陆的NPC用的是同一份数据文件,只改一处,两边的显示一起变,省得来回改。
三、调试和排错
脚本写完不生效,多半是下面几个原因。
路径分隔符必须用反斜杠,用正斜杠会建不出来文件。相对前缀..\不要随手省略,省略了文件生成的位置会跑到别处去。文件名只留中文、英文、数字和下划线,掺进特殊符号容易报权限错误。脚本改完要在M2控制台点“控制——重新加载所有NPC”,不重载引擎读不到新指令。还有一点,部分精简过的版本对文件操作命令做了删减,命令写对了也未必能执行,这种情况换完整版本的引擎再试。
标签和调用要对得上。如果NPC脚本里是用调用文件的方式执行的,调用处的标签名和被调用文件里的标签名必须完全一致,差一个字就会点不动,M2控制台还会给出找不到文件的红色提示。这一条在写独立数据文件的时候尤其要注意,两边标签保持一致是硬要求。
四、LegendM2引擎新沙城门数据库对应修改参考
把老版沙巴克换成新沙巴克,改的不是地图,而是数据库。原因在于城门和城墙在引擎里本质上是怪物类型,所以改它们要在怪物数据库里动手。
先看外观编号。老沙巴克的城墙外观编号换成新沙巴克,要整体往后顺延三位:
Appr 901 改成 904
Appr 902 改成 905
Appr 903 改成 906
对照下来,三道城墙的数据行大致是这样:
沙巴克左城墙;111;98;904;60;0;0;1;5000;0;20;99;0;0;0;0;15;1;1000;1;0;1000;
沙巴克右城墙;111;98;905;60;0;0;1;5000;0;20;99;0;0;0;0;15;1;1000;1;0;1000;
沙巴克中城墙;111;98;906;60;0;0;1;5000;0;20;99;0;0;0;0;15;1;1000;1;0;1000;
每行分号之间是一段字段,第一段是名字,第二段是外观所属的类别号,第三段是血量等级相关值,第四段就是前面改的Appr外观编号,后面的字段是攻击、防御、血量、移动、回避这些怪物通用属性。新旧版本字段排列一致,改的时候只需要把名字和Appr对上新数据,其余字段沿用原行即可。
再看城堡配置文件。文件在 D:\MirServer\Mir200\Castle\0\SabukW.txt。这里要提醒一句,下面的数据是拿来查找替换的,不是整段覆盖。城门、城墙的DB名字要按自己版本里的实际名字来填,名字对不上,引擎加载时会直接报错。
需要核对和修改的关键字段如下:
CastleMapList=0151,0152,0153,0154,0155,0156,new0151,new0152,new0153,new0154,new0155,new0156,
CastlePlaceMap=new0150
CastleHomeMap=3
CastleHomeX=627
CastleHomeY=280
MainDoorX=673
MainDoorY=331
MainDoorName=沙巴克城门
LeftWallX=609
LeftWallY=271
LeftWallName=沙巴克左城墙
CenterWallX=620
CenterWallY=265
CenterWallName=沙巴克右城墙
RightWallX=613
RightWallY=272
RightWallName=沙巴克中城墙
CastleMapList是附属沙巴克的地图代码,新版本把new0151到new0156这批新地图一起挂进来。CastlePlaceMap指向沙巴克皇宫地图new0150。CastleHomeMap、CastleHomeX、CastleHomeY三项定的是沙巴克回城点的地图和坐标。MainDoor是主城门,MainDoorX、MainDoorY是它的坐标,MainDoorName是对应的怪物数据库名字。LeftWall、CenterWall、RightWall分别是左、中、右三道城墙,字段结构和主城门一样,X、Y是坐标,Name是要和怪物数据库对上的名字。
城门状态和血量在配置文件的另一段里控制。MainDoorOpen表示城门开关,值填1是打开,填0是关闭。MainDoorHP是城门剩余血量,LeftWallHP、CenterWallHP、RightWallHP是各道城墙的剩余血量,这些值要大于0,填0等于城墙一碰就碎。
五、配套的地图和连接修改
光改数据库和城堡配置还不够,地图层面对不上,人物走过去会莫名反弹。
SabukW.txt里的城墙坐标,要和MapInfo.txt里进入城堡的坐标保持一致。两边不一致,人物在城门口来回弹,进不去也出不来。
Mir200\Map目录里要放最新的地图文件。用旧地图文件,新沙城里有些地面走不过去,同样会反弹。
小地图代码要在MiniMap.txt里补一行,写“3 13024”,不然新沙城的小地图显示不出来。
MapInfo.txt里要补上新沙城的整套地图连接,包括皇宫new0150、武器店new0151、服饰店new0152、药品店new0153、杂货店new0154、书店new0155等。每张子地图和主城地图3之间的双向连接都要写全,进得去也出得来。地图参数按自己版本的习惯配,比如皇宫通常加NORECALL、NODEARRECALL、NOGUILDRECALL这类限制,防止被随机传送令直接拉进皇宫。
沙城暗道D701的通道口也要跟着新坐标调整,衣服后面、垃圾堆、沙后面这几个入口的坐标按新地图重新对一遍,双向连接缺一边就会出现单边可走的情况。
六、改动前后的检查顺序
动手之前先备份,怪物数据库、SabukW.txt、MapInfo.txt、MiniMap.txt这几个文件各留一份原始副本,改坏了能马上还原。
改完按这个顺序过一遍:先确认怪物数据库里的城墙名字和Appr编号改对,再确认SabukW.txt里的名字和坐标跟数据库一一对应,接着检查MapInfo.txt的连接是否双向齐全,最后看MiniMap.txt和地图文件是否到位。全部确认无误再启动引擎,把城门开起来实测一遍,从城外往城里走、从城里往城外走,两个方向都不反弹、不卡位,改动就算落地了。
新沙城门的名字如果和数据库不一致,配置加载阶段就会报错,这一步别偷懒,宁可多核对一遍名字字段,也别直接拿别人的数据整段复制过来。
传奇引擎NPC脚本创建指定文本文件与新沙城门数据库修改对照实操
来源:
作者:
点击:

