ScoutCannonHelper
童子军大炮辅助:手持大炮建造卷轴时按键显示炮口瞄准指示,并在屏幕角落实时显示从炮口看出去的瞄准小窗(画中画),一边看落点一边自由移动与放置;对准大炮长按按键可直接进入炮内(并可禁止走到大炮附近被原版自动吸入);在大炮内长按 E 键点火。三个功能各自独立开关,仅需你本地安装即可生效。童子军大炮(ScoutCannonHelper)
版本:0.1.6
为 PEAK 的童子军大炮提供三项辅助功能,每项都有独立开关,只写本地配置、不改动游戏本体数据,仅需你自己安装即可生效,其他玩家无需安装。与 ScoutCannonWhere(大炮落点预览)兼容。
功能
- 炮口瞄准指示:手持童子军大炮建造卷轴、地面出现大炮放置预览时,按一下切换键,屏幕上叠加显示放置预览的炮口指向(屏幕内为炮口准星;炮口指向屏幕上方/画面外时在屏幕边缘显示提示),据此看清大炮将打向哪里、方便决定放在什么位置;再按一下关闭。
- 屏幕角落瞄准小窗(画中画):同一状态下,在屏幕一角实时显示从炮口沿炮口方向看出去的画面,让你一边用主视角查看地面、移动并放置大炮,一边在小窗里直接看到炮口对准的远方目标——这是最直观的“同时看到炮口方向”的方式。
- 默认不改变相机朝向,因此在指示开启的同时,你仍可自由移动、瞄准地面落点、正常放置大炮,三者互不冲突。
- 可配置炮口准星的颜色、尺寸、投影距离、屏幕外边缘指示开关,以及小窗的位置、大小、视野角度、内准星等。
- 若想进一步让相机也贴齐炮口方向(便于直视远方目标),可打开
锁定视角到炮口;但请注意:大炮放置依赖相机朝地面发射线判定落点,锁住相机会导致无法放置,建议只在观察远方时临时开启(有了小窗后通常无需再开)。
- 一键进入大炮:对准一门已放置的大炮,长按进入键,直接把角色送入炮口内,免去跳不进去的麻烦。
- 禁止自动吸附本地玩家(默认开启):原版大炮会把走到炮口 1 米内的最近角色自动吸进炮内(这是原版装载队友的机制)。开启本项后,只有按进入键才会进入,避免你只是在大炮附近走动就被吸进去;此逻辑由主机执行,故仅当你是主机时生效。
- 炮内点火:当角色处于某门未点火大炮的炮口附近时,长按点火键(默认 E)即可点燃大炮,无需回头对准引信。
默认按键
| 功能 | 默认按键 | 触发方式 |
|---|---|---|
| 炮口瞄准指示 | V | 按一下显示,再按一下关闭 |
| 进入大炮 | X | 对准大炮长按(默认 0.3 秒) |
| 炮内点火 | E | 炮口附近长按(默认 1 秒) |
配置
配置文件:BepInEx/config/com.fufu.scoutcannonhelper.cfg
视角对准炮口/启用炮口瞄准指示:默认开启视角对准炮口/切换按键:默认 V视角对准炮口/锁定视角到炮口:默认关闭(开启后相机贴齐炮口,但会导致无法放置大炮)视角对准炮口/完全对齐炮口方向:默认开启(仅在锁定视角时生效;关闭则只对齐俯仰)视角对准炮口/显示炮口准星:默认开启视角对准炮口/屏幕外显示边缘指示:默认开启视角对准炮口/准星基础尺寸:6 ~ 80视角对准炮口/准星投影距离:20 ~ 1000 米(越大越接近炮口正前方,推荐 200 以上)视角对准炮口/准星颜色:十六进制颜色,默认#39FF6A瞄准小窗/启用瞄准小窗:默认开启(需额外渲染一遍场景,有少量开销)瞄准小窗/小窗位置:0=右下,1=右上,2=左下,3=左上(默认 0)瞄准小窗/小窗宽度(像素):96 ~ 800(默认 320,高度按 16:9 自动计算)瞄准小窗/小窗边距(像素):0 ~ 200(默认 16)瞄准小窗/视野角度:20 ~ 110(默认 60,越小越“拉近”)瞄准小窗/相机前移(米):0 ~ 5(默认 0.25;若小窗里看到炮管内壁或手臂可加大)瞄准小窗/小窗内准星:默认开启进入大炮/启用进入大炮:默认开启进入大炮/进入按键:默认 X进入大炮/长按时间(秒):0.05 ~ 3进入大炮/瞄准射线距离(米):2 ~ 200进入大炮/禁止自动吸附本地玩家:默认开启(避免走到大炮附近被原版自动吸进炮内;仅主机生效)炮内点火/启用炮内点火:默认开启炮内点火/点火按键:默认 E炮内点火/长按时间(秒):0.1 ~ 5炮内点火/炮内判定半径(米):0.5 ~ 6调试/详细日志:默认关闭
原理
- 炮口瞄准指示:默认不修改相机,只在屏幕上叠加投影炮口方向上的远端点(
炮口位置 + 炮口朝向 × 准星投影距离);该点位于屏幕内时绘制准星,位于屏幕外时钳到屏幕边缘显示,从而在俯视地面放置大炮时也能知道炮口朝向。之所以投影远端点而非近距离命中点,是因为相机位于角色头部、与炮口存在位置差,投影近距离命中点会产生明显视差,使准星偏离屏幕中心;投影远端点可消除该视差。炮口方向优先取放置预览中的Entry/Cannon节点,退回原版Constructable.UpdateAngle使用的GetChild(0).GetChild(0)炮管节点。 - 锁定视角到炮口(可选):开启后拦截
Character.RecalculateLookDirections(),在本地角色手持大炮卷轴且处于瞄准状态时,把data.lookValues改写为放置预览炮口方向对应的视角值(默认俯仰与水平都对齐,可配置为只对齐俯仰)。因放置依赖相机射向地面的射线,此模式默认关闭。 - 瞄准小窗(画中画):运行时新建一台独立相机,置于放置预览的炮口沿炮口方向前移处,把场景实时渲染到一个低分辨率
RenderTexture,再在OnGUI中画到屏幕角落。相机渲染时排除 UI 层,避免游戏 HUD 进入小窗;因游戏使用 URP,创建相机时会通过反射补上UniversalAdditionalCameraData。仅在瞄准状态且手持炮口有效时启用相机,其余时间关闭以节省开销。 - 进入大炮:从相机发射线命中
ScoutCannon后,通过反射调用原版Character.WarpPlayerRPC把角色直接送入炮口。反射按优先级匹配(Vector3, bool)和(Vector3, bool, PhotonMessageInfo)两种签名,缓存MethodInfo,兼容游戏更新导致的签名变化。 - 禁止自动吸附本地玩家:原版
ScoutCannon.FixedUpdate()(仅主机执行)会把距炮口Entry1 米内最近的角色沿炮管方向拉入(pullForce)。本 Mod 以 Harmony 前缀补丁在其执行前判断:若本地玩家正位于该吸附半径内,则跳过该方法,使你不会被动吸入;远离时原版吸附照常,队友仍可被正常装填。 - 炮内点火:以角色中心与
ScoutCannon炮口entry的距离判定“是否在炮内”,达到长按时间后调用原版ScoutCannon.Light()(其内部走 Photon RPC,联机行为与原版引信完全一致)。
兼容性
- 不修改
Constructable.CreateOrMovePreview,只读取Constructable.currentPreview,不与ScoutCannonWhere的落点预览冲突。 - 默认按键避开
ScoutCannonWhere的 C(其假人预览键)。 - 点火复用原版
ScoutCannon.Light()的 RPC 流程,多人与单机均正常。
安装
- 使用 gale 等 Mod 管理器直接安装本压缩包。
- 依赖
BepInEx-BepInExPack_PEAK-5.4.75301。
