Skip to content

chenxi-Eumenides/Duckov_Mod_Add_Custom_Teleport_Point

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 

Repository files navigation

自定义传送点 Mod

项目概述

Add_Custom_TelePort_Point 是一个为游戏《Escape from Duckov》开发的模组,旨在为游戏添加自定义传送点功能。该模组允许玩家在不同地图之间快速传送,提高游戏体验的便利性。

默认为游戏添加2个传送点。

一个从J-Lab一层到农场镇,用于在找不到二级卡时,能够不回家重新进入J-Lab;

另一个从J-Lab的BOSS房到零号区,用于在打败boss后,能够不回家进入风暴区。

主要功能

当前功能

  • 创建自定义传送点
  • 可配置传送点名称、位置
  • 支持生成双向传送点
  • 支持生成一次性传送点
  • 支持json配置

未来计划

  • 支持设定交互时间
  • 生成类似游戏本身传送点的外观
  • 支持其他模组调用
  • 支持加载撤离收获统计

项目结构

Duckov_Add_Custom_Teleport_Point/
├── ModAssembly/
│   ├── ModBehaviour.cs          # 模组入口类
│   ├── TeleporterManager.cs     # 传送点管理器
│   ├── CustomTeleporter.cs      # 自定义传送组件
│   ├── CustomLocation.cs        # 自定义位置类
│   ├── DataStructure.cs         # 自定义数据结构定义
│   ├── Constant.cs              # 常量定义
│   ├── HarmonyLoader.cs         # Harmony 加载器
│   ├── Patch.cs                 # Harmony 补丁类
│   ├── RFH.cs                   # 反射辅助类
│   ├── Utils.cs                 # 工具类
│   ├── ModAssembly.csproj       # 项目文件
│   ├── preview.png              # 模组预览图片
│   ├── info.ini                 # 模组信息配置
│   └── Test.cs                  # 开发测试工具类,未使用
├── README.md
└── .gitignore

配置说明

注册传送点配置

// csharp代码
TeleporterManager.registerTeleportPoint(
    sourceSceneId: Constant.SCENE_ID_BASE,      // 在该子场景下创建传送点
    sourcePosition: new Vector3(-5f, 0f, -85f), // 在该坐标创建传送点
    targetSceneId: Constant.SCENE_ID_BASE_2,    // 传送目标的子场景名
    targetPosition: new Vector3(95f, 0f, -40f), // 传送目标的坐标
    interactName: "同地图传送",                  // 显示的名称
    backTeleport: true,                         // 是否创建双向传送点
    disposable: false                           // 是否是一次性传送点
);
// json
[
    {
        "sourceSceneId": "Base_SceneV2",
        "sourcePosition": [ -5.0, 0.0, -85.0 ],
        "targetSceneId": "Level_JLab_1",
        "targetPosition": [ -152.5, 1.0, 125.8 ],
        "interactName": "测试用",
        "backTeleport": true,
        "disposable": true
    },
    // ...
]

游戏代码研究

跨主场景使用SceneLoader.Instance.LoadScene函数。sceneReference参数需要是目标主场景的scene对象,location中需要是目标子场景的sceneid。

同主场景使用MultiSceneCore.Instance.LoadAndTeleport函数。

同子场景直接设置玩家坐标。

游戏场景加载时的事件有:

  • SceneLoader.LoadScene 加载顺序为
    1. SceneLoader.onStartedLoadingScene
    2. SceneLoader.onBeforeSetSceneActive
    3. SceneLoader.onFinishedLoadingScene
    4. LevelManager.OnLevelBeginInitializing
    5. *MultiSceneCore.OnSubSceneWillBeUnloaded
    6. MultiSceneCore.OnSubSceneLoaded
    7. LevelManager.OnLevelInitialized
    8. SceneLoader.onAfterSceneInitialize
    9. LevelManager.OnAfterLevelInitialized
  • MultiSceneCore.LoadAndTeleport 加载顺序为
    1. *MultiSceneCore.OnSubSceneWillBeUnloaded
    2. MultiSceneCore.OnSubSceneLoaded

致谢

本项目在开发过程中参考和使用了以下开源项目,特此致谢:

  1. duckovAPI
  2. Duckov_Modding_Template
  3. duckovsrc

About

逃离鸭科夫 添加自定义传送点 模组。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages