Loadout Share(配装分享码)
《怪物猎人:荒野》的配装分享码 Mod:把整套配装压成一行分享码,复制即用。REFramework Lua 实现,loadout_share.lua 约 890 行。
为什么做这个
MH 玩家「抄作业」文化极强,但配装分享一直靠截图:发一张装备截图,对方得自己对着配,麻烦还容易错。
其实配装本质就是一堆数据:主武器、头胸手腰腿、护石、副武器,每件还有珠子、强化、技能。数据就能编码。做成一行分享码,发到群里、贴到评论区,对方粘贴一下就能加载。
怎么用
- 游戏内把当前配装导出成分享码(复制到剪贴板)
- 发到群 / 帖子 / 视频评论区
- 对方粘贴分享码,解析预览后存入装备箱,手动装备
分享码天然自带传播属性:每个拿到码的玩家,都会成为下一个分发节点。
核心设计
凭空生成,不做装备匹配。 一开始考虑过「按码匹配已有装备」,但每个人炼化、强化、技能都不一样,匹配必失败。最后决定:按码重建对应装备,写入装备箱空位。
FC1 分享码格式:FC1.<base64>.<CRC32>。满 8 槽配装码约 185213 字符(4.24.8x 压缩),带 CRC 校验,损坏或恶意的码直接拒绝。
纯 Lua 自适应算术编码。REFramework 的 Lua 环境没有 bit 库,压缩只能手写纯 Lua 位运算 + order-0 range coder,符号频率随流自适应,不查表、兼容新 DLC ID。
无损还原:护甲性别、随机护石技能、弩炮自定义件、珠子、极限强化、操虫棍猎虫(每把棍一只),逐字段一致。
安全边界:只追加写入、绝不覆盖已有预设;希望护石(不可售)黑名单排除;联动外观是外观层,天然不进入 8 个真实装备槽。
开发过程中踩的坑
require("bit")直接崩游戏:REF 的 Lua 环境没有 bit 库,顶层 require 抛错传到 C++ 层生成 crash dump。改纯 Lua 数学位运算(逐位循环 + 取模防 2^53 溢出)。- 导出码全空:
_EquipIndex.Index分步访问会丢类型上下文返回 nil,字段访问读到 Category=-1。改用单表达式链式访问 + 官方方法getEquipWorkBox。 - 操虫棍猎虫折腾最久:第一版复制成游戏内置的「欧米茄」默认虫;改从武器字段读真实虫箱索引后又遇到字段写反、
setMyset把虫字段覆盖成 -1、无虫清空把防具也写成 0/1 导致整套预设校验失败。四轮迭代,最后靠 post-write 补写 + 回读验证解决,升到 v1.0.1。 - 随机护石技能丢失:
setMyset对随机护石会丢随机技能,必须走convertEquipWorkToJudgeResult(签名错了会挂死)+ 护石直写set_Item(6)克隆条目。
测试
8 轮:基础往返、元素/性别/强化、普通+随机护石、弩炮、猎虫、特殊物品、跨玩家实测(朋友收到码导入成功)、离线回归(LuaJIT 2.1 权威测试)。
发布
v1.0.1,中文界面,依赖 REFramework 与 _CatLib。Nexus Mods:https://www.nexusmods.com/monsterhunterwilds/mods/4781