khalil-Scrap_Clean icon

Scrap Clean

Press F to enter clean mode and remove dropped items or player-placed objects. Highlight the target you aim at, or sweep a ground-hugging dashed circle to clear everything inside it.

By khalil
Last updated a day ago
Total downloads 31
Total rating 0 
Categories
Dependency string khalil-Scrap_Clean-1.1.0
Dependants 0 other packages depend on this package

This mod requires the following mods to function

BepInEx-BepInExPack_PEAK-5.4.75301 icon
BepInEx-BepInExPack_PEAK

BepInEx pack for PEAK. Preconfigured and ready to use.

Preferred version: 5.4.75301

README

Scrap Clean

PEAK 的清理模组:一键清理掉落物放置物

安装

  1. 通过模组管理器(r2modman / Thunderstore Mod Manager)安装,或手动解压到 BepInEx/plugins/
  2. 前置依赖:BepInExPack PEAK

使用

操作 效果
F 进入 / 退出清理模式
滚动滚轮 在「单选清理」与「范围清理」之间切换(无界,每滚一次换一个模式)
鼠标左键 执行清理

进入模式、退出模式、切换模式都有明确的文字提示与上下滚动动画, 屏幕下方常驻的信息条会实时显示当前将清理哪个目标。

单选清理

按视线挑选:准星指向的掉落物或放置物会被高亮,左键清理它。

判定顺序为「距离上限(默认 100 米)→ 在视野锥内 → 无地形遮挡 → 与准星夹角最小」, 所以不在玩家眼中的东西不会被选中,也不会被误清理。

判定基于物体的视觉包围盒而不是它的坐标原点:像大炮(原点在底座)、 墙上的踏板菇(原点在墙面接触点)这类目标,用原点做判定会被自己的地面 / 墙面挡住而永远选不中。

范围清理

视线中会出现一个贴合表面的虚线圆形(半径 3 米,可配置)。圆心是准星命中的那个点, 圆环沿该点的表面法线展开并逐点吸附到真实几何体上: 地面贴地、墙面贴墙、斜坡沿坡面起伏,不会穿模。

圆内的所有掉落物与放置物会被一起清理。

什么是「掉落物」和「放置物」

  • 掉落物:任何被丢在地上的道具(Item.itemState == Ground)。 手里拿的、背包里的永远不会被清理。
  • 放置物:玩家使用道具后留在地图上的物体。已确认支持:
    • 绳索锚点(绳索炮 / 绳索卷轴打出的锚点)与其绳索
    • 岩钉(ClimbingSpikeHammered,含劣质岩钉)
    • 检查点旗帜(Flag_Planted_Checkpoint
    • 便携炉(PortableStovetop_Placed
    • 侦察兵大炮(ScoutCannon_Placed
    • 踏板菇 / 弹跳菇 / 满血蘑菇 / 云真菌的「已放置」形态
    • 魔法豆藤蔓(MagicBeanVine
    • 锁链(ChainShootable)与丛林藤蔓(JungleVine
    • 系在玩家身上的气球(TiedBalloon

世界生成的地形、岩石、建筑、木质平台等固定景物绝不会被清理

多人联机说明

清理分三条路径,全部依据 PUN 的实际规则实现:

  1. 自己的东西 → 直接删除。
  2. 别人的掉落物 → 物品允许接管所有权,抢过来后删除。
  3. 别人的放置物 → PUN 禁止转移这类物体的所有权, Scrap Clean 会向该物体的所有者客户端发送一个自定义事件(事件码 190), 由对方代为删除。对端也需要安装本模组,否则该物体保留不动(安全失败,绝不越权破坏)。

可以用 Network/AllowOwnershipTakeover = false 完全关闭跨玩家清理。

配置

配置文件:BepInEx/config/com.zhuanban.peak.scrapclean.cfg

默认 说明
General/ToggleKey F 开关快捷键
General/SingleRange 100 单选清理的视线判定距离上限(米),范围 5~300
General/AreaRadius 3 范围清理圆半径(米)
Filter/CleanDroppedItems true 是否清理掉落物
Filter/CleanPlacedObjects true 是否清理放置物
Network/AllowOwnershipTakeover true 是否允许跨玩家清理
UI/ToastSeconds 2 文字提示停留时间(秒)
Debug/VerboseLogs false 详细诊断日志(排查问题时才打开)

按键冲突

游戏自带的 InputActions 没有占用 F,因此默认使用 F,不会与游戏功能冲突。

清理模式只接管鼠标左键滚轮(进入期间它们只用于清理), 移动、跳跃、交互、语音等全部保持正常。 右键在清理模式下同样被抑制,避免误用手持道具的次要功能。

已知边界

  • 清理别人的放置物需要对方也在线:模组会先请求对方代删; 对方没有安装模组或迟迟没有响应时,模组会在一小段等待后由本机接管所有权完成清理 (需保持 Network/AllowOwnershipTakeover 开启)。
  • 绳索需要连带处理:绳索本体与锚点是两次独立实例化, 模组会把锚点对应的绳索一起登记;跨客户端时由持有绳索的那一端在执行删除时一并处理。
  • 范围清理受视线影响:圆心是准星命中的表面点,准星没打到任何表面时不会显示圆环。
  • 高亮覆盖面:模组使用游戏原生的 _Interactable 材质属性做高亮,与游戏悬停高亮同一条路径。 极少数材质(例如踏板菇的岩石 shader、便携炉的 URP/Lit)没有该属性, 对这些目标高亮不可见,但清理功能不受影响
  • 活体生物:蝎子 / 青蛙等身上带 MobItem : Item,走动时状态就是 Ground, 因此也会被当作掉落物清理(这是刻意保留的行为)。
给开发者:构建与代码结构

构建

dotnet build -c Release

默认输出到 bin\Release\ScrapClean.dll 并自动复制到 BepInEx/plugins/。 游戏目录可用 -p:GameRoot=... 覆盖,或用 -p:DeployToGame=false 关闭自动部署。

目录结构

src/
  ScrapCleanPlugin.cs   生命周期与 Harmony 挂载
  ScrapCleanConfig.cs   BepInEx 配置
  CleanMode.cs          主状态机(输入 / 扫描 / 高亮 / 清理 / 提示)
  TargetScanner.cs      候选目标的扫描与分类
  Cleaner.cs            删除执行(三条网络路径)
  CleanRequestRelay.cs  跨客户端清理请求(自定义事件 190)
  HighlightRenderer.cs  原生 _Interactable 属性高亮
  GroundRing.cs         贴合表面的虚线圆环
  CleanUI.cs            提示文字与滚动动画
  HarmonyPatches.cs     CharacterInput.Sample 后置补丁(输入抑制)
  SCInput.cs            输入读取
  CenterCache.cs        视觉包围盒与代表点
  SCLog.cs              日志
tools/                   只读研究脚本(资源探测,不参与构建)