自定义副本
阅读
2023-03-08更新
最新编辑:神奇丶奶油
阅读:
更新日期:2023-03-08
最新编辑:神奇丶奶油
自定义副本

介绍
本mod编写了一个全新框架用于创建觅长生的自定义副本,完美适配Next剧情框架,并提供了可视化编辑器。同时提供了比原版更强大的副本功能,包括:
- 地图特点:
- 可生成最大100x100的超大地图。
- 可以开启玩家飞行,不受路的影响,只要看得见就能飞过去(前提有飞行遁术)。
- 允许生成海上副本。
- 允许玩家在地图中飞行(任意移动)不受路的影响,只要能看到路点。
- 地图视野计算功能,通过配置可以控制玩家能看见的范围。
- 地图移动速度自定义,包括动画速度以及时间变化速度。
- 双层地图背景,一层会跟随地图拖动,一层永远固定,可以根据需求自行选择。
- 自定义地图开始点位、手动退出点位及强制退出点位,以及能否手动退出。
- 地图点特点:
- 组成:中心点、未知状态遮罩、看不见状态遮罩、内容贴图、地图点名称、8条方向的路
- 允许十字加对角线的8向路段,不再仅限于原版四个方向的路。所有路均为单向路段。
- 可以随意替换地图点中的图片素材,包括每一条路单独替换
- 自定义显示的名字的颜色、背景。
视频介绍及教程
【觅长生mod】自定义副本-前置插件
【觅长生mod】自定义副本编辑器教程
副本制作方法
- 游戏初始界面右下角点击副本编辑器进入编辑器
- 选择保存的路径地址,如果想编辑旧的请直接选择对应的Uid名称的文件夹。
例:保存地址为D:\自定义副本
,第一次制作了一个Uid为12345的副本,那么地图的文件地址为D:\自定义副本\12345
,之后再次选择这个路径即可,然后直接点击生成副本进入编辑状态。 - 输入副本名称,这个可以随意输入,按自己需求决定,后续也是可以修改的。
- 输入副本的Uid,这个Uid为识别是否为同一个副本,并且后续不能使用编辑器修改。推荐用旁边的随机生成按钮,或者依据以下规则填写Uid:
【作者名称】-【mod名称】-【副本名称】
。 - 输入X和Y坐标的最大值,这边不能超过100,也就是1w格。因为太大会占用太多内存,配置较差的电脑无法承担。同时大副本推荐使用多个副本进行拼接。
- 点击生成副本,进入编辑器页面。
- 编辑完成后点击右下角保存,复制Uid对应的文件夹至
【你的Mod目录】/plugins/DungeonData
即可在游戏中使用。
地图基础信息说明
- 地图的原点为左上角第一个地图点(1,1)
- 每个地图点之间的距离为1,斜向地图点使用勾股定理计算。
- 触发事件的顺序为1.先触发Next剧情事件,再触发代码事件;2.玩家移动后先触发给予物品事件,再触发地图点的事件,再触发地图全局的移动事件,最后判断是否强制退出
地图点信息说明
- 点击对应地图点即可编辑
- 所有地图点默认不可见,通过可视距离判断是否为可见状态,不可见的地图点无法移动上去。
- 可见状态地图点会移除【看不见的地图点的遮罩】,并显示【未知遮罩图片】和【未知时中心图片】。
- 当玩家走到该地图点上时,会移除【未知遮罩图片】,并显示【中心图片】,以及【遮罩图片】、【名称背景图片(显示该地图点名称)】。名称的字的颜色可以自行修改,参考RGBA。例:填入255,255,255,255则为纯白,如果填写的信息缺失会自动使用纯白的颜色。
- 地图点编号:地图点是识别码,每个点对应唯一编号。
- 名称:地图点的名字,默认不显示。
- 是否为空地图点:开启后永远为不可见状态(依然有看不见时显示的遮罩)。
- 是否为隐藏地图点:开启后,地图点将被隐藏(地图点及周围的路变成透明状态,玩家看不到)。
- 事件是否只触发一次:以下的2个事件只会触发一次。
- Next剧情事件:填写对应的Next剧情id,当玩家走上去便会自动触发剧情事件。
- C#代码事件:填写对应的C#注册代码的名称,当玩家走上去便会自动触发对应剧情事件,注册方式可以看下文。
- 给予物品的id以及数量:id中为物品id的列表,数量中填写给予的物品的数量的列表,二者一一对应,用英文逗号分隔每个id或者数量,只会在第一次走上去时触发。例:id填写【1,2,3】数量填写【10,20,30】,实际效果为第一次走上去时获得10个物品id为1的物品,20个物品id为2的物品,30个物品id为3的物品。
- Npc列表:用英文逗号隔开npcId,如果是游戏中固定Npc参考
NpcImportantDate
和AvatarJsonData
。如果是游戏中的非固定Npc需要填入对应的Id,推荐使用【代码事件】编辑。 - 路的设置:一共8条路,相互独立,图片也不同可以自行更改。例:允许向上移动则会显示向上的路。每个点的路都是独立的,同时路是单向的,能够向上并不意味着上方路点可以向下。如果路指向空地图点、未知地图点或指向地图外也是无法移动的。
副本全局设置说明
- 副本大背景:该背景不会随着鼠标移动而移动。
- 副本背景:该背景会随着放大缩小、拖动跟随变换,可以选择是否开启,若不开启则会显示【副本大背景】。
- 起始点位:本项必须填写,为初始进入时的点位,为地图点的编号,可以填多个,会自动随机选择,用英文逗号隔开,例如:填写1,2,3就是进入时会编号为1,2,3的地图点随机选择。
- 退出点位:当玩家走到对应编号的点位时,会自动弹出是否退出副本,填写格式同【起始点位】。
- 强制退出点位:当玩家走到对应编号的点位时,会被强制退出副本,没有选择的权力,会优先结算该点位的Next剧情事件或代码事件再退出。填写格式同【起始点位】。
- 是否可以手动退出:开启地图右下角会有一个箭头,可以手动退出。
- 是否可以飞行:开启玩家移动将不会受到路的限制,只要是能看到的点位都可以直接飞过去(需要装备飞行遁术)。
- 是否在海上:开启,没有装备飞行遁术的会转化为游泳状态,暂时不支持开船(贴图问题)。
- 是否初始显示所有点:开启后,所有地图点初始状态均为可见。
- 是否初始移除所有未知遮罩:开启后,为可见状态的地图点的未知遮罩会被移除,同时显示地图点的包含遮罩图片(如果启用了)。
- 可视距离:玩家基础能看到的距离,看不到的点无法走上去,会计算每个点与玩家当前点位的距离。
- 基础可视距离:玩家神识为0时,可以看到的距离。
- 每1点神识增加的可视距离:每1点神识会增加/减少(负数)玩家的视野距离。
- 当看不到时地图点会再次变成未知的状态:当地图点位于玩家视野之外时,会再次刷新成为未知状态。
- 当看不到时地图点会再次变成看不见的状态:当地图点位于玩家视野之外时,会再次刷新成为不可见状态。
- 是否有时间消耗:开启后每次移动最少消耗一天,具体消耗根据移动的距离以及以下参数决定,具体公式为(每1点距离消耗的时间X距离-每1点遁速减少消耗的时间)X移动方式修正值。
- 移动速度:玩家人物动画移动的速度,建议基础小于0.1,具体速度为:(基础移动速度+每1点遁速增加的速度)X移动方式修正值。
- 移动方式修正值:每一种移动方式对应都会有一个修正值,默认都是1,可以根据需要自行配置。会影响移动速度以及消耗的时间。
- 进入、退出、移动事件:分别为进入时触发,退出时触发,玩家移动时触发,填写规则同地图点事件一样。注:进入和退出是每一次进入和退出都会触发,包括加载旧的副本存档进入,如果要添加事件请做好判断。
- 记得点击保存以应用更改,如果放弃更改直接关闭设置界面即可。
C#代码事件注册
- 一个class对应一个事件
- class需要继承
IDungeonCodeEvent
,并且需要一个非静态的方法void RunEvent()
- 副本提供自动注册,需要给继承了
IDungeonCodeEvent
的class打一个标签DungeonCodeEvent
,标签内有2个参数,分别为dungeonUid和eventName,前者代表了事件对应的副本,后者代表了事件的名称。也可以自行使用DungeonController.Instance.CodeEventAnalysis.RegisterCodeEvent
注册,同样需要填入对应的dungeonUid以及eventName。 - 示例:
[DungeonCodeEvent("测试副本", "testEvent")]
public class TestClass : IDungeonCodeEvent{
public void RunEvent()
{
//此处为对应的事件的代码
}
}
Next指令
副本全局指令
指令 | 介绍 |
---|---|
Dungeon_Show*副本Uid#版本号 | Uid为副本Uid,版本号可以不填,默认为0,如果不为0则会去存档中寻找对应的,可以直接填版本号,如果没有对应的副本存档会生成新的副本。
注:必须要有副本原始数据(plugins下DungeonData对应的数据),才能正确加载对应存档副本,只有存档中数据会加载失败! |
Dungeon_Save*版本号 | 将副本存档,保存当前地图状态以及所在点位,以供后续剧情再次使用。版本号与上面的Dungeon_Show 的版本号对应,不能填0!填0会判定为自动生成新的副本。
|
Dungeon_Exit* | 退出当前副本。 |
Dungeon_TeleportTo*地图点编号 | 将玩家直接传送到对应的地图点上。 |
Dungeon_MoveTo*地图点编号 | 玩家尝试移动到对应的地图点上,如果不能飞行只能移动到相邻一圈的地图点上,同时需要拥有对应的路才能移动。 |
Dungeon_SetPosition*地图点编号 | 将玩家的位置直接设置到某个点(不会触发该地图点的事件) |
Dungeon_MoveUp* | 玩家尝试向上移动,若不存在路则无法移动。 |
Dungeon_MoveUpRight* | 玩家尝试向右上移动,若不存在路则无法移动。 |
Dungeon_MoveRight* | 玩家尝试向右移动,若不存在路则无法移动。 |
Dungeon_MoveDownRight* | 玩家尝试向右下移动,若不存在路则无法移动。 |
Dungeon_MoveDown* | 玩家尝试向下移动,若不存在路则无法移动。 |
Dungeon_MoveDownLeft* | 玩家尝试向左下移动,若不存在路则无法移动。 |
Dungeon_MoveLeft* | 玩家尝试向左移动,若不存在路则无法移动。 |
Dungeon_MoveUpLeft* | 玩家尝试向左上移动,若不存在路则无法移动。 |
Dungeon_ClearAllNpc* | 将整个地图上的所有Npc移除 |
地图点指令
指令 | 介绍 |
---|---|
DungeonMapPoint_SetName*地图点编号#地图点名称 | 设置对应地图点的名称。 |
DungeonMapPoint_SetName*地图点编号#Next剧情Id | 设置对应地图点的Next剧情Id。 |
DungeonMapPoint_SetName*地图点编号#代码事件名称 | 设置对应地图点的C#代码事件。 |
DungeonMapPoint_SetOnce*地图点编号#(0或1,0为[否]False,1为[是]True) | 设置对应地图点的事件是否只触发一次。 |
DungeonMapPoint_SetTriggered*地图点编号#(0或1,0为[否]False,1为[是]True) | 设置对应地图点的事件是否触发过(慎用)。 |
DungeonMapPoint_SetOnce*地图点编号#(0或1,0为[否]False,1为[是]True) | 设置对应地图点能否被看见。 |
DungeonMapPoint_SetOnce*地图点编号#图片名称 | 设置对应地图点看不见时的图片名称。 |
DungeonMapPoint_SetIsUnknown*地图点编号#(0或1,0为[否]False,1为[是]True) | 设置对应地图点是否处于未知状态。 |
DungeonMapPoint_SetAlwaysKnown*地图点编号#(0或1,0为[否]False,1为[是]True) | 设置对应地图点是否一直处于已知状态。 |
DungeonMapPoint_SetCanSee*地图点编号#(0或1,0为[否]False,1为[是]True) | 设置对应地图点是否一直处于可见状态。 |
DungeonMapPoint_SetUnknownMaskImageName*地图点编号#图片名称 | 设置对应地图点未知遮罩的图片名称。 |
DungeonMapPoint_SetIsShowMask*地图点编号#(0或1,0为[否]False,1为[是]True) | 设置对应地图点是否显示地图点额外遮罩。 |
DungeonMapPoint_SetMaskImageName*地图点编号#图片名称 | 设置对应地图点额外遮罩的图片名称。 |
DungeonMapPoint_SetIsShowName*地图点编号#(0或1,0为[否]False,1为[是]True) | 设置对应地图点是否显示地图点名称。 |
DungeonMapPoint_SetNameImageName*地图点编号#图片名称 | 设置对应地图点名称显示时的背景板的图片名称。 |
DungeonMapPoint_SetNameTextColor*地图点编号#R#G#B#A | 设置对应地图点名称显示时的名称颜色,颜色填写为(RGBA)(0-255)。 |
DungeonMapPoint_AddGiveItem*地图点编号#物品Id#物品数量 | 添加对应地图点第一次走上去给的物品奖励。 |
DungeonMapPoint_RemoveGiveItem*地图点编号 | 移除对应地图点上第一次走上去给的所有物品奖励。 |
DungeonMapPoint_AddNpc*地图点编号#NpcId | 将Npc添加到某个地图点上。 |
DungeonMapPoint_RemoveNpc*地图点编号#NpcId | 将Npc从某个地图点上移除。 |
DungeonMapPoint_ClearNpc*地图点编号 | 将某个地图点上的所有Npc移除。 |
DungeonMapPoint_SetIsNone*地图点编号#(0或1,0为[否]False,1为[是]True) | 设置对应地图点是否为空。 |
DungeonMapPoint_SetIsHide*地图点编号#(0或1,0为[否]False,1为[是]True) | 设置对应地图点是否隐藏。 |
DungeonMapPoint_SetCanMove*地图点编号#方向Id#(0或1,0为[否]False,1为[是]True) | 设置对应地图点是否隐藏。方向Id为【0-7】依次对应(CanUp、CanUpRight、CanRight、CanDownRight、CanDown、CanDownLeft、CanLeft、CanUpLeft) |
Next环境参数
文本 | 介绍 |
---|---|
Dungeon_GetData() | 直接获取整个地图数据 |
Dungeon_GetMapPoint(x,y) | 获取某个地图点的数据。注:若x和y都填了,则会获取对应坐标的地图点数据;若只填了x没有填y,则会获取编号为x的地图点数据。 |
Dungeon_GetMapCustomData() | 获取地图的自定义数据 |
Dungeon_GetMapPointCustomData(x,y) | 获取地图点的自定义数据。注:若x和y都填了,则会获取对应坐标的地图点数据;若只填了x没有填y,则会获取编号为x的地图点数据。 |
DungeonData数据参考
参数 | 介绍 |
---|---|
NowIndex | (int)当前玩家位置 |
PreIndex | (int)玩家的上一个位置 |
MaxX | (int)地图最大X坐标 |
MaxY | (int)地图最大Y坐标 |
IndexNum | (int)地图点总数 |
IsOnSea | (bool)地图是否在海上 |
CanQuit | (bool)能否手动退出 |
ExitShowText | (string)退出时显示的文本 |
MapBackGroundName | (string)地图不可移动的背景的图片名称 |
MapPointBackGroundName | (string)地图可移动的背景的图片名称,会跟随地图点被鼠标拖动 |
StartMapPointIndex | (List<int>)地图点的起始点位,填写多个会随机选择 |
ExitMapPointIndex | (List<int>)地图点的退出点位,需要手动确认 |
AutoExitMapPointIndex | (List<int>)地图点的强制退出点位,无需手动确认 |
DoTimeCost | (bool)移动是否消耗时间 |
BasicTimeCost | (int)移动消耗的基础时间 |
SpeedReduceTimeCost | (float)每提升1点遁速降低的移动时间,最低降至1天 |
BasicMovingSpeed | (float)移动的基础动画速度 |
SpeedAddMovingSpeed | (float)每提升1点遁速提升的移动动画速度 |
SwimMovingSpeedPercent | (float)游泳的速度修正值,对时间消耗和动画都生效 |
WalkMovingSpeedPercent | (float)走路的速度修正值,对时间消耗和动画都生效 |
FlyMovingSpeedPercent | (float)遁术飞行的速度修正值,对时间消耗和动画都生效 |
BoatMovingSpeedPercent | (float)灵舟的速度修正值,对时间消耗和动画都生效 |
CanFly | (bool)能否任意移动,无视地图点的路,需要飞行遁术 |
ShowAllPoint | (bool)是否显示所有的路 |
ShowAllUnknownPoint | (bool)是否显示所有未探索的路 |
BasicSeeDistance | (float)基础视距,与地图点距离小于视距则会解除未知状态 |
SenseAddSeeDistance | (float)每提升1点神识增加的视距 |
EnterNextEvent | (string)进入副本时触发的Next事件 |
EnterCodeEvent | (string)进入副本时触发的代码事件 |
ExitNextEvent | (string)退出副本时触发的Next事件 |
ExitCodeEvent | (string)退出副本时触发的代码事件 |
MoveNextEvent | (string)玩家移动后触发的Next事件 |
MoveCodeEvent | (string)玩家移动后触发的代码事件 |
MapPointData数据参考
参数 | 介绍 |
---|---|
Index | (int)【禁止修改】地图点编号 |
X | (int)【禁止修改】地图点X坐标(左上第一个X为1,往右X变大) |
Y | (int)【禁止修改】地图点Y坐标(左上第一个Y为1,往下Y变大) |
Name | (string)地图点名称 |
NextEvent | (string)地图点绑定Next事件 |
CodeEvent | (string)地图点绑定代码事件 |
Once | (bool)地图点绑定的事件是否只触发一次(只会在第一次走到这个地图点上触发) |
Trigged | (bool)【谨慎修改】地图点绑定的事件是否触发过(可用于判断玩家是是否曾经走到过这个地图点) |
CanSee | (bool)能否被看见(看不见时默认为黑地图块,可以自行修改图片) |
CanSeeMaskImageName | (string)看不见时显示的图片名称(默认为黑地图块) |
IsUnknown | (bool)是否未知(默认没有到过的地图点为未知状态),会显示未知遮罩(默认为云雾) |
AlwaysKnown | (bool)是否永远处于已知状态 |
AlwaysCanSee | (bool)是否永远处于可以被看见的状态 |
UnknownMaskImageName | (string)未知遮罩的图片名称(默认为云雾) |
IsShowMask | (bool)是否显示地图点额外遮罩,在地图点处于已知状态时可见(参考未知遮罩效果) |
MaskImageName | (string)地图点额外遮罩图片名称 |
IsShowName | (bool)是否显示地图点名称 |
NameImageName | (string)地图点名称显示时的背景板的图片名称 |
NameTextColor | (List<int>)名称显示时的颜色,默认为白色,填写时为列表,四个元素对应RGBA,如白色:[255,255,255,255] |
NpcList | (List<int>)地图点上的左侧可交互Npc,填写时为列表,若填写的NpcId小于20000会自动去查找对应的Npc,如倪旭欣可填写609 |
GiveItemList | (List<int>)第一次到地图点上时给的物品的Id,填写时为列表,需要与数量对应 |
GiveItemNum | (List<int>)第一次到地图点上给的物品的数量,填写时为列表,需要与物品Id对应 |
IsNone | (bool)是否为空地图点 |
IsHide | (bool)是否隐藏地图点 |
AlwaysCanSee | (bool)是否可以一直处于可见状态 |
AlwaysKnown | (bool)是否可以一直处于已知状态(前提是可见) |
CanUp、CanUpRight、CanRight、CanDownRight、CanDown、CanDownLeft、CanLeft、CanUpLeft | (bool)是否可以向对应的方向移动 |