You are viewing a potentially older version of this package. View all versions.
DestinyWind-SelfResurrection-1.9.0 icon

SelfResurrection

一键复活自己。在死亡/幽灵状态下按快捷键(默认 Home)弹出复活菜单,选择队友即可复活并传送到其身边,带防弹飞处理。

Date uploaded 14 hours ago
Version 1.9.0
Download link DestinyWind-SelfResurrection-1.9.0.zip
Downloads 94
Dependency string DestinyWind-SelfResurrection-1.9.0

This mod requires the following mods to function

BepInEx-BepInExPack_PEAK-5.4.2403 icon
BepInEx-BepInExPack_PEAK

BepInEx pack for PEAK. Preconfigured and ready to use.

Preferred version: 5.4.2403

README

Self Resurrection for PEAK

一键复活自己的 PEAK 模组。死亡变成幽灵后,按快捷键弹出复活菜单,选择队友即可原地复活并传送到队友身边,自带防弹飞处理。

作者: DestinyWind

功能特性

  • 一键复活:死亡/幽灵状态下按快捷键(默认 Home)弹出复活菜单
  • 选择队友传送:复活时可选择传送到任意队友身边
  • 只复活自己:不影响其他客户端玩家,仅同步显示
  • 昏迷队友可选:昏迷(未死亡)的队友也可作为传送目标
  • 防弹飞处理:使用游戏自带 WarpPlayer 协程 + 上方偏移,避免传送弹飞
  • 快捷键选择:支持数字键 1-9 和字母键 Q-P 快速选择队友(最多 19 个)
  • 配置文件自定义:所有参数可通过 cfg 配置文件修改
  • 中途加入支持:无论开局还是中途加入游戏,死亡后均可复活
  • 只在游戏内生效:主菜单/加载界面不会误触发

安装方法

  1. 安装 BepInEx 5.4.2403 for PEAK
  2. 下载本模组的最新版本
  3. DestinyWind.SelfResurrection.dll 复制到 PEAK/BepInEx/plugins/ 目录
  4. 启动游戏,首次加载会自动生成配置文件

使用方法

基本操作

  1. 游戏中死亡后变成幽灵(观战状态)
  2. Home 键(默认)打开复活菜单
  3. 菜单显示所有可选队友列表:
选择复活目标队友
昏迷的队友也可作为目标

[1]  玩家A   距离 15m
[2]  玩家B   距离 23m
[3]  玩家C   距离 45m
...

操作:点击列表项 或 按对应数字/字母键 [1-9 Q-P] 快速选择
关闭:ESC 或再次按菜单键
[关闭 (ESC)]

选择队友的三种方式

方式 操作 说明
鼠标点击 点击列表项 直接选择
数字键 1-9 选择第 1-9 个队友(主键盘数字键,笔记本也能用)
字母键 Q W E R T Y U I O P 选择第 10-19 个队友(支持 20+ 玩家房间)

关闭菜单

  • ESC
  • 再次按 Home 键(菜单键)
  • 点击"关闭"按钮

配置说明

配置文件位置:PEAK/BepInEx/config/destinywind.peak.selfresurrection.cfg

首次启动游戏后自动生成,可用文本编辑器修改:

[按键]

## 打开复活菜单的按键,可改为任意 KeyCode(如 F1/F5/T/Keypad7/Mouse3 等)。仅死亡/幽灵状态下生效。
# 设置类型:KeyCode
# 默认值:Home
MenuKey = Home

[防弹飞]

## 传送到队友上方的偏移(米)
# 设置类型:Single
# 默认值:2
TeleportOffsetUp = 2

[行为]

## 复活冷却秒数
# 设置类型:Single
# 默认值:1.5
Cooldown = 1.5

常用 KeyCode 值

按键 KeyCode
Home Home
F1-F15 F1 - F15
字母 A-Z A - Z
数字 0-9 Alpha0 - Alpha9
小键盘 0-9 Keypad0 - Keypad9
鼠标左/右/中键 Mouse0 / Mouse1 / Mouse2
Insert / Delete / End Insert / Delete / End
Tab / Space Tab / Space

防弹飞机制

PEAK 游戏中传送可能因物理碰撞导致角色被弹飞。本模组采用三重防护:

  1. 位置偏移:传送到队友上方 2 米处,避免踩到队友碰撞体
  2. 游戏自带 Warp:使用 WarpPlayerRPC(poof=true),游戏内部协程会关闭碰撞→逐帧移动→清零速度→恢复碰撞
  3. 上方偏移可调:如仍遇弹飞,可在配置文件把 TeleportOffsetUp 调大到 3-4 米

复活机制说明

  • 死亡→幽灵:游戏在角色死亡后自动创建 PlayerGhost 进入观战
  • 复活流程:清除死亡/昏迷状态 → 清除所有状态效果 → 触发外观同步 RPC → 游戏自动销毁幽灵退出观战
  • 复活惩罚:游戏自带 5% 诅咒 + 30% 饥饿(applyStatus=true 时)
  • 网络同步:复活和传送通过 PhotonView RPC 同步到所有客户端,仅作用于自己的角色

常见问题

Q: 按键没反应?

  • 确认 DLL 已放在 BepInEx/plugins/ 目录
  • 确认 BepInEx 已正确安装(检查 BepInEx/LogOutput.log 是否有加载日志)
  • 确认只在死亡/幽灵状态下才有效(活着时按键会提示"只有死亡/幽灵状态下才能复活")

Q: 配置文件没生成?

  • 首次启动游戏后会在 BepInEx/config/ 自动生成
  • 如果没生成,检查 BepInEx 日志确认模组是否加载成功
  • 配置文件名:destinywind.peak.selfresurrection.cfg

Q: 复活后被弹飞?

  • 在配置文件增大 TeleportOffsetUp(默认 2,可调到 3-4)
  • 确保传送到的是开阔区域的队友

Q: 中途加入游戏能用吗?

  • 可以。无论开局还是中途加入,死亡后都能正常复活

Q: 会不会复活其他玩家?

  • 不会。复活逻辑只在本地执行,网络 RPC 仅同步显示,不会影响其他玩家的角色状态

Q: 队友死了能传送到他身边吗?

  • 不能。已死亡或变成幽灵的队友会从列表中排除(三重检查:data.dead + IsGhost + 列表渲染检查)
  • 昏迷(未死)的队友可以选择

兼容性

  • BepInEx: 5.4.2403 (PEAK 版)
  • 游戏版本: PEAK 最新版
  • 多人游戏: 完全兼容,其他客户端无需安装本模组
  • 冲突: 不修改任何游戏原始方法,仅通过 RPC 调用,兼容性良好

更新日志

详见 CHANGELOG.md

技术实现

  • 通过反射调用游戏内部 Character.RPCA_Revive(bool) 方法实现本地复活
  • 通过 PhotonView.RPC("RPCA_Revive", RpcTarget.Others) 同步其他客户端
  • 通过 PhotonView.RPC("WarpPlayerRPC", RpcTarget.All, pos, true) 实现防弹飞传送
  • 使用 Character.IsGhostCharacterData.dead 双重判断幽灵状态
  • 使用 Character.AllCharacters 遍历可选队友

License

MIT License - 自由使用、修改、分发

CHANGELOG

Changelog

v1.9.0

  • 全面审核复活功能,增强安全性和信息展示
  • 菜单新增队友高度(H)显示,帮助判断队友是否在安全位置(避免传送到高空/地下)
  • 菜单新增队友状态标记:[昏迷]/[半昏迷],直观显示队友状态
  • 本地距离计算增加位置验证,死亡时本地位置异常不显示距离(避免误导)
  • 复活后增加本地状态验证,确认 dead/fullyPassedOut 已清除
  • 传送前重新获取队友最新位置,避免菜单打开期间队友移动导致传送到旧位置
  • 最新位置异常时回退到之前验证过的安全位置

v1.8.2

  • 修复复活传送到地图外的问题
  • 根因:Character.AllCharacters 残留旧实例的 Center(躯干位置)在旧场景/已销毁坐标,导致传送目标错误
  • 去重逻辑改为优先选 activeInHierarchy 的活跃实例,而非距离本地最近(死亡时本地位置可能在地下)
  • 新增位置合理性验证:ally.Center.y 必须在 -50 到 1000 之间(PEAK 海拔范围),异常则拒绝传送
  • 传送前验证队友 GameObject 活跃,避免传送到已禁用的残留实例位置
  • 菜单渲染时也跳过非活跃实例

v1.8.1

  • 修复每个队友显示两个的问题
  • Character.AllCharacters 在重连/场景切换时可能残留旧 Character 实例,导致同一玩家出现多个
  • 按 Photon ActorNumber 去重,每个网络玩家只保留一个 Character 实例
  • 同一玩家若有多个实例,保留距离本地最近的(当前活跃角色,而非过时残留位置)
  • 排除自己改为引用比较 + ActorNumber 双重保险,防止 localCharacter 引用失效

v1.8.0

  • 彻底重写复活逻辑,解决本地不复活的问题
  • 改用游戏自带 Character.Revive() public static 方法(游戏官方复活命令)
  • 该方法内部用 localCharacter.view.RPC("RPCA_Revive", RpcTarget.All, true),能直接访问 view 字段
  • 无论房主与否都能自己复活,本地与其他客户端状态完全同步
  • RPCA_Revive 无 IsMine 检查,所有客户端都会执行清除死亡/昏迷状态
  • MainCameraMovement.LateUpdate 检测 fullyPassedOut=false 后自动销毁幽灵退出观战
  • 传送用 MonoBehaviourPun.photonView 基类属性(public),可靠获取 PhotonView
  • 增加详细日志,记录复活前后状态和 RPC 发送情况
  • 删除不再需要的反射辅助代码(InvokeRpcRevive/GetPhotonView)

v1.7.0

  • 修复复活无效的核心问题
  • 改用 RpcTarget.All 让本地也通过 Photon RPC 执行复活(模仿游戏自带 Character.Revive()
  • 去掉不可靠的反射调用 internal RPCA_Revive(跨程序集访问 internal 方法会失败)
  • 改用 GetComponent<PhotonView>() 获取网络视图(view 字段实际不可直接访问)
  • 传送 RPC 参数也改为直接传值,不用 object 数组包装

v1.5.1

  • 面板尺寸恢复原始大小(380x320)
  • 面板底部新增操作说明,告诉用户怎么选择复活
  • 左上角提示字体增大 100%(16 → 32)

v1.5.0

  • 提示字体增大 100%
  • 选择面板增大 100%
  • 新增数字键 1-9 和字母键 Q-P 快速选择队友(支持 20+ 玩家房间)
  • 队友列表显示快捷键标签和距离

v1.4.2

  • 修复模组无法加载导致配置文件不生成的问题
  • 移除错误的 BepInDependency 特性(BepInEx-BepInExPack_PEAK 不是运行时插件 GUID)

v1.4.1

  • 新增 Config.Save() 强制写入配置文件,确保首次加载就生成 cfg

v1.4.0

  • 只有死亡/幽灵状态下才能复活(非死亡状态按键会被拒绝)
  • 新增复活菜单选择队友(居中面板,列出所有活着且非自己的队友)
  • 防弹飞三重保险:上方偏移 + 游戏自带 WarpPlayer 协程 + 额外清零速度
  • 新增可配置项:传送偏移、清零速度开关
  • 防止复活到其他幽灵身边(三重 IsGhost + data.dead 检查)
  • 按键支持自定义(配置文件修改 KeyCode)

v1.3.0

  • 精简功能(ponytail):删除冗余代码,DLL 体积减小 20%
  • 昏迷队友也可作为复活目标
  • 只在游戏内生效(本地角色未加载时拒绝操作)
  • 健壮性加固:Update/OnGUI 异常保护、菜单状态保护、集合遍历快照

v1.2.0

  • 只有幽灵状态才能复活
  • 复活菜单选择队友
  • 防弹飞处理

v1.1.0

  • 确保只复活自己,不影响其他客户端玩家
  • 网络同步改为 RpcTarget.Others,仅作用于自己的 PhotonView

v1.0.0

  • 初始版本
  • 一键复活自己(默认 Home 键)
  • 通过反射调用 RPCA_Revive 实现原地复活