• 注册
  • 界面UI&大背包 界面UI&大背包 关注:12260 内容:237

    V3.X大背包丢失物品修复1.0.0.1

  • 查看作者
  • 打赏作者
  • 界面UI&大背包
  • Lv.10
    企业
  • 原创

  • 该内容使用了刷新卡,原发布时间:6天前

    背包自动扩容修复 · FL_Backpack_AutoFit 

    适用:7 Days To Die V3.0(b252 / b257 / b259 等同系列)。作者:BD
    作用:修复 “安装大背包 mod 后,超过原版 45 格的物品放不进、或会消失“的问题。
    特性:自动识别背包格数(无需配置文件);专用服支持客户端零安装

    ···

    一、它解决什么问题

    安装了把背包改大的 mod(如 90 格、115 格)后:

    • 界面上能看到更多格子;

    • 但物品只能正常放到第 45 格

    • 往第 46 格及以后放:放不进,或者关闭背包 / 重进世界 / 存档读档后消失

    • 有的还需要 “手动拖一个物品到下面、再点整理 “才勉强能用。

    装上本 mod 后:背包自动按真实格数工作,超出 45 的格子正常存放、不再丢失,也不用手动整理

    ···

    二、为什么会这样(原理详解)

    #1. 背包真实大小在游戏 “开始 “之前就被定死成 45

    7DTD 玩家实体初始化顺序:Awake()、后 Init(entityClass)。背包在 Awake() 里创建:

    csharp
    // EntityPlayer.Awake()
    CarryCapacity = (int)EffectManager.GetValue(PassiveEffects.BagSize, null, 45f, this, ...);
    bag = new Bag(CarryCapacity);

    EffectManager.GetValue 开头有一道 “门 “:

    csharp
    if (!GameManager.Instance.gameStateManager.IsGameStarted())
        return _originalValue;   // 游戏还没"开始" → 直接返回兜底值 45

    Awake() 时游戏尚未 IsGameStarted(),于是 GetValue(BagSize) 返回硬编码的 45,读不到 entityclasses.xml 里的 BagSize。结果:无论 XML 把 BagSize 改成多少,背包数组都被固定为 45

    #2. 纯 XML 大背包 mod 只改了 “界面 “,没改 “后端 “

    来源 大背包 mod 改了吗
    界面网格(看到的格子数) windows.xml(XUi) ✅ 改了(所以能看到 90 / 115 格)
    后端数据(真正存物品的 Bag 数组) 代码 new Bag(45) ❌ 没改(被定死 45)

    于是出现 界面 90 / 后端 45 的错位,第 46 格之后是 “空壳格“。

    #3. 空壳格为什么 “放不进 / 丢东西 / 要手动整理 “

    • 绑定时只接前 N 个格子XUiC_Backpack.SetStacks 只把 min(后端格数, 界面格数) 个格子接到后端。若开背包那一刻后端还是 45,就只绑了 45,第 46 格之后是 “死格 “。

    • 越界写入被丢弃Bag.SetSlot(index,…)if (index < items.Length),索引 ≥ 后端长度的写入被静默忽略,物品消失。

    • “手动拖 + 整理 “为什么能救:整理按钮会 Bag.SetSlots(…) → 触发一次刷新,重新按当前后端长度绑定;如果那时后端已被扩大,就把全部格子接上了。本 mod 把 “扩容 “放在绑定之前、并在绑定之后自动刷新一次,所以你不用再手动整理。

    #4. 这不是某版本改坏的

    BagXUiC_BackpackXUiC_ItemStackGridXUiM_PlayerInventoryEntityPlayer.Awake()b252 / b257 / b259 完全相同,整个 3.0 都是这套机制,回退版本解决不了,必须代码层修补(即本 mod)。

    ···

    三、本 mod 做了什么(详解)

    核心:把后端 Bag 自动对齐到应有格数,保留已有物品、只扩不缩。三条通路 + 自动识别:

    #通路 A —— 客户端开背包(最可靠)

    Hook XUiC_Backpack.OnOpen

    • Prefix:在界面绑定之前,读界面真实格数(itemControllers.Length,你装的大背包定义的 90 / 115…),把本地 bag 扩到一致。

    • Postfix:绑定之后再强制刷新一次(RefreshBackpackSlots),等于自动替你点了 “整理 “ → 第一次开包就绑满,无需手动拖 + 整理

    #通路 B —— 进入世界时

    Hook ModEvents.PlayerSpawnedInWorld:玩家进世界时把其 bag 扩到 max(BagSize, 本地界面格数, 目标值)。服务端 / 主机 / 本地客户端都会跑。

    #通路 C —— 客户端零安装(服务端)

    Hook PlayerDataFile.Load:专用服在玩家进服、原版把存档背包NetPackagePlayerId 下发给客户端之前,先把它扩好。客户端收到后 PlayerDataFile.ToPlayer 会执行 player.bag = bag(整包直接赋值)→ 客户端本地背包变成目标大小。因此客户端不用装任何东西(详见 “部署 · 模式二 “)。

    #自动识别格数(无需配置文件)

    服务端没界面,就读 entityclassesBagSize(你的大背包 mod 设的值)。优先级:
    backpack_size.txt(可选手动覆盖)> 自动识别的 BagSize > 兜底 96。
    换更大的背包(如 115)无需改本 mod:只要那个 mod 也设了 BagSize=115,重启服务器即自动识别。

    #共同特性

    • 只扩不缩:后端比目标小才扩,绝不缩小。

    • 保留物品:扩容时原样复制原有格子。

    • 老角色也能修:老角色被存档定死的尺寸,会在开包 / 进服时扩好并写回。

    • 自适应任意格数:换别的大背包 mod 无需改本 mod。

    ···

    四、安装与部署

    💡 建议

    前提
    相关端 EAC 关闭(Harmony 必需);服务器与客户端游戏大版本一致;UI 大背包 mod 为纯 XML(含 entityclassesBagSize)。

    #模式一:单机 / 双装(体验最好,全场景无缝)

    把以下文件夹放进各自 …\7 Days To Die\Mods\(单机就一台;联机则客户端和服务器都放):

    • 0_TFP_Harmony(Harmony 加载器,必需)

    • 你的 UI 大背包 mod(如 V3.X90格背包,提供界面 + BagSize

    • FL_Backpack_AutoFit(本 mod)

    所有情况都无缝,包括全新角色第一次进服 / 开档(通路 A 开包即扩 + 刷新)。

    #模式二:专用服 · 客户端零安装

    只在服务器 Mods\ 放上述三件套;客户端什么都不装(但连服时客户端要以无 EAC 方式启动)。

    • 原理:服务器把界面、BagSizeSendToClients 配置下发给客户端显示大背包;通路 C 在下发存档前把背包扩好,客户端拿到即为目标大小。

    • 老角色 / 有存档玩家:进服即大背包、能存、退出不丢。

    • 全新角色第一次进服:服务器还没他的存档,这一局仍是 45 格;退出重进一次后即为大背包(之后一直正常)。想连这一步也免掉 → 用模式一。

    ···

    五、注意事项

    • 界面格数应与 BagSize 一致:UI 网格格数最好等于 entityclassesBagSize,避免多余空壳格。

    • CarryCapacity 建议也一起设:否则超过 CarryCapacity 的格子会 “负重 “减速(但不丢东西)。

    • EAC 必须关闭(相关端),否则 DLL / Harmony mod 不生效;零安装模式下客户端也要无 EAC 启动才能连服。

    • 版本一致:服务器与客户端游戏大版本需一致。

    • 游戏更新:若大版本改动了相关类签名,本 mod 需重新编译。

    • 日志:认准 [BD][BackpackAutoFit] 前缀;服务端零安装扩容会打印 (server/zero-install) … grown to N …

    • V3.X大背包丢失物品修复1.0.0.1V3.X大背包丢失物品修复1.0.0.1V3.X大背包丢失物品修复1.0.0.1

    🔗 七日杀布丁服务器租赁

    © 版权声明:本内容由作者原创,转载请注明来源;如内容侵犯到任何版权,请联系删除;资源仅供学习交流,请于下载后 24 小时内删除。
    ✦ 本文由 doc.71mi.com 排版生成

    隐藏内容需要回复可以看见

    回复

    "点赞是美意,打赏是鼓励"

    感谢大佬的付出,赞一个!

    回复
    Lv.6
    冲向2023

    6666666666

    回复

    这个逼装的我给82分,剩下的用666的方式打给你!

    回复

    感谢大佬的付出,赞一个!

    回复
    Lv.3

    这个逼装的我给82分,剩下的用666的方式打给你!

    回复
    Lv.6

    我看看怎么个事?

    回复
    Lv.8
    浴火重生

    感谢修复问题

    回复
    Lv.9
    闪耀星神

    感谢大佬的付出,赞一个!

    回复

    感谢大佬的付出,赞一个!

    回复
    Lv.1

    感谢大佬分享

    回复

    MOD板块严查恶意、辱骂、讽刺等评论,如发现此类评论轻则小黑屋,重则永久封禁!

    如果发现帖子违规,用户可以点击帖子标题旁的向下箭头,选择举报内容

    涉及版权纠纷请确保你有所属版权,否则中文网有权不作处理

    请登录之后再进行评论

    登录
    • 大版主
    • 小版主
  • 英雄大人
    英雄大人
    白天在工作,晚上在睡觉,有事可以留言,不一定能及时回复!
  • yichen
    yichen
    无限恐怖762251937/不死者末日1080207504
  • 林小天
    林小天
    我还活着买断制版本,私聊我qq3807190901请标明来意
  • 雾凇
    雾凇
    ifdian.net/a/jrzpz/plan
  • 摸鱼摸鱼摸
    摸鱼摸鱼摸
    交流吹水群967780922
  • 银河
    银河
    CSOL大灾变欢迎你的到来。QQ群:967780922
  • 安安
    安安
    大背包、常显、叠加、除草树,唯一作者QQ383125283
  • 最强打野贝爷
    最强打野贝爷
    上班!上班!上班!
  • Cure_805
    Cure_805
    晚上在睡觉,白天在工作,不一定能及时回复,有事可以留言!
  • happy!
    happy!
    住院中
  • 妮可Neko
    妮可Neko
    无聊写些小玩意儿
  • 赞助广告位

  • 点击展示图片即可一键加入QQ群
    赞助广告:100R/月 目前空缺广告位:0

    分享网站

  • 繁体中文
  • 任务
  • 动态
  • 到底部
  • 帖子间隔 侧栏位置: