Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
EasyWeapon
[AI-generated] Client-only weapon tweaks: faster reload (crossbows/grappling hook), reloads that survive run/jump/dodge, and a tuned chain lightning (weapon proc chance + ChainLightningRed effect parameters).
By s6652289
CHANGELOG
Changelog
1.1.0
新增功能 3:连锁闪电强化 —— 改 prefab 静态数据,纯客户端生效。
武器侧:凡「命中时生成连锁预制体」的攻击槽,主/副攻击的 m_spawnOnHitChance
统一成同一个值(默认 0.66;原版主攻击 0.25、副攻击 0.20)。
特效侧:ChainLightningRed(雷血 / BloodLightning 那一族武器用的连锁特效)的参数可配:
| 参数 | 原版 | 本版默认 |
|---|---|---|
起始判定 m_chainStartChance |
0.9 | 1.0 |
每目标几率 m_chainChancePerTarget |
0.3 | 0.66 |
目标数 m_chainMinTargets ~ m_chainMaxTargets |
2 ~ 4 | 4 ~ 6 |
逐跳衰减 m_chainStartChanceFalloff |
0.6 | 0.8 |
起始延迟 m_chainStartDelay |
0.18 s | 0.18 s |
判定半径 m_radius |
8 m | 12 m |
特效存活 m_ttl |
3 s | 不改(保持游戏默认,本模组完全不碰该字段) |
每跳闪电伤害 m_damage.m_lightning |
75 | 90 |
实现
- 武器侧挂
ObjectDB.Awake的 postfix,特效侧挂ZNetScene.Awake的 postfix (反汇编确认ZNetScene.Awake开头就填m_namedPrefabs,postfix 时GetPrefab(name)可用; 且 ZNetScene 没有"运行时注册预制体"的方法 ⇒ 名字表在 Awake 后固定,必须赶在实例化前改)。 - 识别判据与游戏自己的
Attack.SpawnOnHit()完全一致 (m_spawnOnHitChance > 0且m_spawnOnHit != null,再加"目标预制体名以ChainLightning开头") ⇒ 不写死武器名单,游戏日后新增连锁武器会自动跟上。 - ⚠️ 特效存活时长
m_ttl不修改 —— 保持游戏默认值(3 秒)。 配置项RedTtl的默认值是-1,含义就是"保持游戏默认、完全不碰这个字段", 只有填正数才覆盖 ⇒ 将来游戏改了默认值也不会被本模组顶掉。 - 全部是绝对值赋值(不是乘倍率)⇒ 天然幂等;另有"已应用"标记防止场景重建时重复刷日志。
注意
- ⚠️ 只改
ChainLightningRed一族。另一族ChainLightning(闪电附魔$item_*_lightning那批武器用的)的参数本模组不动 —— 但它们的触发几率同样受WeaponProcChance影响。 - ⚠️ 改的是 prefab 静态数据 ⇒ 效果只体现在装了本模组的一端:伤害由攻击者本地计算后同步, 但别人屏幕上看到的连锁范围/存活时长仍按他们自己的 prefab 数据。
- 三项功能互相独立,
3 - Chain Lightning节的Enabled可单独关闭。
1.0.1
仅文档与源码注释,行为不变(因此 DLL 重新编译、指纹变化,但功能与 1.0.0 完全一致)。
- EasyGear 1.0.5 已把「跑步时也能切换武器 / 工具」整体剔除 ⇒ 本模组 README 与源码注释里
"与 EasyGear 共存"的说明随之过时,改为中性描述:本模组不依赖任何上游,
Priority.Low保留给将来可能出现的同类模组(让别人的判定先做)。 - 版本号一并升 —— 保持「版本号唯一标识内容」,避免同一个 1.0.0 对应两份不同的文件。
1.0.0
首个版本。
新增
- 装填时间倍率 —— 弩(8 把:Arbalest / Ripper×4 变体 / Gold×3 变体)与钩索默认减半 (时间 ×0.5)。钩索 2.0 s → 1.0 s;弩 3.5 s → 1.75 s(弩技能满级时 1.75 s → 0.875 s)。 法杖(闪电法杖充能 1.9 s)与其它「需要装填」的武器各有独立开关,默认关闭。
- 装填不被打断 —— 奔跑 / 跳跃 / 闪避翻滚时不再清掉正在进行的装填动作, 装填进度与进度条都不归零。攻击仍然照原版打断。
实现
- 功能 1 挂
ItemData.GetWeaponLoadingTime()的 postfix(该方法是全程序集 唯一调用点为Player.QueueReloadAction的纯计算函数,改动影响面被天然圈死)。 绕开了!m_requiresReload返回常量1f的分支。 - 功能 2 挂
Player.ClearActionQueue(override,实际执行的那份;Humanoid上的是空实现)。原版该方法只有m_actionQueue.Clear()一条语句、无其它副作用, 所以「只清空非装填动作」与整体清空在其它方面完全等价。 队列字段Player.m_actionQueue为私有,用AccessTools.FieldRefAccess反射。 来源判定用深度计数(非 bool),标Priority.Low让其它模组的判定先执行。
兼容
- 纯客户端;无
NetworkCompatibilityAttribute、无 Jotunn、无 ServerSync / CCS。 - 与 EasyGear 的「跑步时也能切换武器 / 工具」共存无冲突(两者都是"保留队列"的语义)。