全站-加入QQ频道-第一版.png
全站-加入QQ频道-第一版.png
近期平台发版更新修复了一些问题,如果还有问题请反馈给站长
(遇到相关问题请携带截图私信给站长残天

全站通知:

自定义副本

阅读

    

2023-03-08更新

    

最新编辑:神奇丶奶油

阅读:

  

更新日期:2023-03-08

  

最新编辑:神奇丶奶油

来自觅长生WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
神奇丶奶油
残天大魔王


自定义副本


自定义副本LOGO.jpg

5-star large.png
站长的评语:奶油哥哥,我爱你
自定义副本
自定义副本LOGO.jpg

介绍

本mod编写了一个全新框架用于创建觅长生的自定义副本,完美适配Next剧情框架,并提供了可视化编辑器。同时提供了比原版更强大的副本功能,包括:

  • 地图特点:
  1. 可生成最大100x100的超大地图。
  2. 可以开启玩家飞行,不受路的影响,只要看得见就能飞过去(前提有飞行遁术)。
  3. 允许生成海上副本。
  4. 允许玩家在地图中飞行(任意移动)不受路的影响,只要能看到路点。
  5. 地图视野计算功能,通过配置可以控制玩家能看见的范围。
  6. 地图移动速度自定义,包括动画速度以及时间变化速度。
  7. 双层地图背景,一层会跟随地图拖动,一层永远固定,可以根据需求自行选择。
  8. 自定义地图开始点位、手动退出点位及强制退出点位,以及能否手动退出。
  • 地图点特点:
  1. 组成:中心点、未知状态遮罩、看不见状态遮罩、内容贴图、地图点名称、8条方向的路
  2. 允许十字加对角线的8向路段,不再仅限于原版四个方向的路。所有路均为单向路段。
  3. 可以随意替换地图点中的图片素材,包括每一条路单独替换
  4. 自定义显示的名字的颜色、背景。

视频介绍及教程

【觅长生mod】自定义副本-前置插件

【觅长生mod】自定义副本编辑器教程

副本制作方法

  1.  游戏初始界面右下角点击副本编辑器进入编辑器
    自定义副本 (1).png
  2. 选择保存的路径地址,如果想编辑旧的请直接选择对应的Uid名称的文件夹。
    自定义副本 (2).png
    例:保存地址为D:\自定义副本,第一次制作了一个Uid为12345的副本,那么地图的文件地址为D:\自定义副本\12345,之后再次选择这个路径即可,然后直接点击生成副本进入编辑状态。
  3. 输入副本名称,这个可以随意输入,按自己需求决定,后续也是可以修改的。
  4. 输入副本的Uid,这个Uid为识别是否为同一个副本,并且后续不能使用编辑器修改。推荐用旁边的随机生成按钮,或者依据以下规则填写Uid:【作者名称】-【mod名称】-【副本名称】
  5. 输入X和Y坐标的最大值,这边不能超过100,也就是1w格。因为太大会占用太多内存,配置较差的电脑无法承担。同时大副本推荐使用多个副本进行拼接。
  6. 点击生成副本,进入编辑器页面。
  7. 编辑完成后点击右下角保存,复制Uid对应的文件夹至【你的Mod目录】/plugins/DungeonData即可在游戏中使用。

地图基础信息说明

  1. 地图的原点为左上角第一个地图点(1,1)
  2. 每个地图点之间的距离为1,斜向地图点使用勾股定理计算。
  3. 触发事件的顺序为1.先触发Next剧情事件,再触发代码事件;2.玩家移动后先触发给予物品事件,再触发地图点的事件,再触发地图全局的移动事件,最后判断是否强制退出

地图点信息说明

  1. 点击对应地图点即可编辑
  2. 所有地图点默认不可见,通过可视距离判断是否为可见状态,不可见的地图点无法移动上去。
  3. 可见状态地图点会移除【看不见的地图点的遮罩】,并显示【未知遮罩图片】和【未知时中心图片】。
  4. 当玩家走到该地图点上时,会移除【未知遮罩图片】,并显示【中心图片】,以及【遮罩图片】、【名称背景图片(显示该地图点名称)】。名称的字的颜色可以自行修改,参考RGBA。例:填入255,255,255,255则为纯白,如果填写的信息缺失会自动使用纯白的颜色。
  5. 地图点编号:地图点是识别码,每个点对应唯一编号。
  6. 名称:地图点的名字,默认不显示。
  7. 是否为空地图点:开启后永远为不可见状态(依然有看不见时显示的遮罩)。
  8. 是否为隐藏地图点:开启后,地图点将被隐藏(地图点及周围的路变成透明状态,玩家看不到)。
  9. 事件是否只触发一次:以下的2个事件只会触发一次。
  10. Next剧情事件:填写对应的Next剧情id,当玩家走上去便会自动触发剧情事件。
  11. C#代码事件:填写对应的C#注册代码的名称,当玩家走上去便会自动触发对应剧情事件,注册方式可以看下文。
  12. 给予物品的id以及数量:id中为物品id的列表,数量中填写给予的物品的数量的列表,二者一一对应,用英文逗号分隔每个id或者数量,只会在第一次走上去时触发。例:id填写【1,2,3】数量填写【10,20,30】,实际效果为第一次走上去时获得10个物品id为1的物品,20个物品id为2的物品,30个物品id为3的物品。
  13. Npc列表:用英文逗号隔开npcId,如果是游戏中固定Npc参考NpcImportantDateAvatarJsonData。如果是游戏中的非固定Npc需要填入对应的Id,推荐使用【代码事件】编辑。
  14. 路的设置:一共8条路,相互独立,图片也不同可以自行更改。例:允许向上移动则会显示向上的路。每个点的路都是独立的,同时路是单向的,能够向上并不意味着上方路点可以向下。如果路指向空地图点、未知地图点或指向地图外也是无法移动的。

副本全局设置说明

  1. 副本大背景:该背景不会随着鼠标移动而移动。
  2. 副本背景:该背景会随着放大缩小、拖动跟随变换,可以选择是否开启,若不开启则会显示【副本大背景】。
  3. 起始点位:本项必须填写,为初始进入时的点位,为地图点的编号,可以填多个,会自动随机选择,用英文逗号隔开,例如:填写1,2,3就是进入时会编号为1,2,3的地图点随机选择。
  4. 退出点位:当玩家走到对应编号的点位时,会自动弹出是否退出副本,填写格式同【起始点位】。
  5. 强制退出点位:当玩家走到对应编号的点位时,会被强制退出副本,没有选择的权力,会优先结算该点位的Next剧情事件或代码事件再退出。填写格式同【起始点位】。
  6. 是否可以手动退出:开启地图右下角会有一个箭头,可以手动退出。
  7. 是否可以飞行:开启玩家移动将不会受到路的限制,只要是能看到的点位都可以直接飞过去(需要装备飞行遁术)。
  8. 是否在海上:开启,没有装备飞行遁术的会转化为游泳状态,暂时不支持开船(贴图问题)。
  9. 是否初始显示所有点:开启后,所有地图点初始状态均为可见。
  10. 是否初始移除所有未知遮罩:开启后,为可见状态的地图点的未知遮罩会被移除,同时显示地图点的包含遮罩图片(如果启用了)。
  11. 可视距离:玩家基础能看到的距离,看不到的点无法走上去,会计算每个点与玩家当前点位的距离。
  12. 基础可视距离:玩家神识为0时,可以看到的距离。
  13. 每1点神识增加的可视距离:每1点神识会增加/减少(负数)玩家的视野距离。
  14. 当看不到时地图点会再次变成未知的状态:当地图点位于玩家视野之外时,会再次刷新成为未知状态。
  15. 当看不到时地图点会再次变成看不见的状态:当地图点位于玩家视野之外时,会再次刷新成为不可见状态。
  16. 是否有时间消耗:开启后每次移动最少消耗一天,具体消耗根据移动的距离以及以下参数决定,具体公式为(每1点距离消耗的时间X距离-每1点遁速减少消耗的时间)X移动方式修正值。
  17. 移动速度:玩家人物动画移动的速度,建议基础小于0.1,具体速度为:(基础移动速度+每1点遁速增加的速度)X移动方式修正值。
  18. 移动方式修正值:每一种移动方式对应都会有一个修正值,默认都是1,可以根据需要自行配置。会影响移动速度以及消耗的时间。
  19. 进入、退出、移动事件:分别为进入时触发,退出时触发,玩家移动时触发,填写规则同地图点事件一样。注:进入和退出是每一次进入和退出都会触发,包括加载旧的副本存档进入,如果要添加事件请做好判断。
  20. 记得点击保存以应用更改,如果放弃更改直接关闭设置界面即可。


C#代码事件注册

  1. 一个class对应一个事件
  2. class需要继承IDungeonCodeEvent,并且需要一个非静态的方法void RunEvent()
  3. 副本提供自动注册,需要给继承了IDungeonCodeEvent的class打一个标签DungeonCodeEvent,标签内有2个参数,分别为dungeonUid和eventName,前者代表了事件对应的副本,后者代表了事件的名称。也可以自行使用DungeonController.Instance.CodeEventAnalysis.RegisterCodeEvent注册,同样需要填入对应的dungeonUid以及eventName。
  4. 示例:
[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)是否可以向对应的方向移动