terraria吧 关注:789,142贴子:10,157,918

智能堆叠改动评价

只看楼主收藏回复

我昨晚反编译了最新版的Terraria(用于学习用途),看了一下智能堆叠的逻辑,就此评价一下


IP属地:湖北来自Android客户端1楼2026-02-28 08:23回复
    让我看看


    IP属地:江苏来自Android客户端2楼2026-02-28 08:24
    回复
      2026-04-04 20:19:40
      广告
      不感兴趣
      开通SVIP免广告
      首先是所有的智能堆叠逻辑都指向了QuickStackToNearbyChests函数


      IP属地:湖北来自Android客户端3楼2026-02-28 08:25
      回复
        然后这个函数的关键是Transfer函数,这个函数有一个开关,可以控制是否是智能堆叠


        IP属地:湖北来自Android客户端4楼2026-02-28 08:26
        回复
          首先要说一下是如何进行堆叠的。
          首先肯定是要进行普通的堆叠。这里有一点很关键,如果箱子里相应的物品栏全满了,确实不会有任何动作。
          然后就会根据开关,判断是否进行智能堆叠。


          IP属地:湖北来自Android客户端5楼2026-02-28 08:32
          回复
            判断智能堆叠的逻辑,就是给箱子进行打分。
            打分的逻辑就是统计箱子里相应类别的物品各有多少。
            而这个物品的类别判定,是直接基于ID的,和物品排序是一个逻辑。


            IP属地:湖北来自Android客户端6楼2026-02-28 08:37
            回复
              泰拉瑞亚将物品的种类分为了52种:
              WeaponsMelee – 近战武器(伤害>0、近战、非消耗品、非弹药、无工具属性)
              WeaponsRanged – 远程武器(伤害>0、远程,或具有远程武器优先级)
              WeaponsMagic – 魔法武器(伤害>0、魔法)
              WeaponsMinions – 召唤武器(伤害>0、召唤)
              WeaponsAssorted – 其他武器(伤害>0、非弹药、无工具属性,且不属于前三类)
              WeaponsAmmo – 弹药类武器(弹药且可造成伤害,如箭、子弹)
              ToolsPicksaws – 钻头/锯刃(同时拥有镐力和斧力)
              ToolsHamaxes – 斧锤(同时拥有斧力和锤力)
              ToolsPickaxes – 镐(只有镐力)
              ToolsAxes – 斧(只有斧力)
              ToolsHammers – 锤(只有锤力)
              ToolsTerraforming – 地形改造工具(如环境改造枪,通过优先级标记)
              ToolsFishing – 钓鱼相关(鱼竿、鱼饵、任务鱼、渔获宝箱等)
              ToolsGolf – 高尔夫相关物品(高尔夫球杆、球等)
              ToolsInstruments – 乐器(如铃鼓、吉他)
              ToolsKeys – 钥匙类(各种钥匙、钥匙模具)
              ToolsKites – 风筝
              ToolsAmmoLeftovers – 非伤害性弹药(如特殊弹药,但排除食物和橡实)
              ToolsMisc – 杂项工具(通过优先级标记的工具)
              ArmorCombat – 战斗盔甲(有头部/身体/腿部槽位,且不是时装)
              ArmorVanity – 时装盔甲(有槽位且为时装)
              ArmorAccessories – 饰品(可装备的配饰)
              EquipGrapple – 抓钩(发射钩爪的武器)
              EquipMount – 坐骑(普通坐骑,非矿车)
              EquipCart – 矿车(坐骑中的矿车)
              EquipLightPet – 照明宠物(提供光源的宠物)
              EquipVanityPet – 宠物(纯观赏宠物)
              PotionsDyes – 染料(可染色的物品及染料材料)
              PotionsHairDyes – 头发染料
              PotionsLife – 生命药水(仅恢复生命,不包括蘑菇)
              PotionsJustTheMushroom – 蘑菇(专指 ID 5 的蘑菇)
              PotionsMana – 魔力药水(仅恢复魔力)
              PotionsElixirs – 复合药水(同时恢复生命和魔力)
              PotionsBuffs – 增益药水(提供临时增益,不包括食物)
              PotionsFood – 食物(提供增益的消耗品,如蛋糕、鱼)
              MiscValuables – 贵重品(通过优先级标记的特殊收藏品)
              MiscPainting – 画作与涂料(画、油漆、涂层)
              MiscWiring – 电路物品(电线、开关、机械等)
              MiscMaterials – 普通材料(矿石、木材等)
              MiscJustTheGlowingMushroom – 发光蘑菇(专指 ID 183)
              MiscExtractinator – 提炼机原料(泥沙、化石等)
              MiscRopes – 绳子类(各种绳、链条)
              MiscHerbsAndSeeds – 草药和种子(种植相关)
              MiscAcorns – 橡实
              MiscGems – 宝石(钻石、红宝石等)
              MiscBossBags – 宝藏袋(Boss 掉落的袋子)
              MiscCritters – 小动物(可释放的 NPC,如兔子、鸟)
              LastMaterials – 最后处理的材料(稀有度非负且不生成图格的物品)
              LastTilesImportant – 重要图格(框架重要的可放置物,如门、箱子)
              LastTilesCommon – 普通图格与墙(可放置的方块和墙,不含重要框架)
              LastNotTrash – 非垃圾物品(稀有度 ≥0 的剩余物品)
              LastTrash – 垃圾物品(所有未被前面层捕获的物品,按价值排序)


              IP属地:湖北来自Android客户端7楼2026-02-28 08:39
              收起回复
                然后就是智能堆叠到附近箱子的逻辑,这里有个非常神奇的地方。
                这里的智能堆叠开关竟然关联的是一个设置里的选项,也就是配置文件里面的StackToChestsPreferredMode。
                通过右键快速堆叠按钮,可以在两种模式之间切换。
                但我看手机端上似乎不能很好的切换这两种模式。🧐


                IP属地:湖北来自Android客户端8楼2026-02-28 09:04
                收起回复
                  2026-04-04 20:13:40
                  广告
                  不感兴趣
                  开通SVIP免广告
                  然后这里堆叠到附近箱子就有一个非常奇怪的"bug"。
                  由于对箱子打分是看这箱子里面相同类别的物品有多少栏(注意这不是多少个)。
                  所以可能会出现一种情况,一个箱子里面有非常多魔法武器,另外一个新的箱子里面有一个火之花,背包里的火之花就会被自动堆叠到有非常多魔法武器的箱子里面。


                  IP属地:湖北来自Android客户端9楼2026-02-28 09:11
                  回复
                    我想知道相同词缀的物品为什么不能快速堆叠反而要相似堆叠


                    IP属地:广西来自Android客户端10楼2026-02-28 09:17
                    收起回复
                      另外还有一个非常神奇的地方,我不知道老版本有没有。
                      新版的自动堆叠似乎还会检测你背包里面是否有虚空袋,自动将虚空袋中的物品也堆叠到附近的箱子里。
                      相当于是假如虚空袋里如果有信息配饰,也有可能一起被移出去。
                      这个改动相当于默认你现在会把信息配饰直接放到装饰栏或者背包里面,可以说是有利有弊吧


                      IP属地:湖北来自Android客户端11楼2026-02-28 09:24
                      收起回复
                        所以说在面对不同词缀的武器时,这个bug会造成一个差异。
                        如果武器的词缀相同,在附近堆叠就能正确找到相应的位置。
                        但是如果词缀不同的话,在附近堆叠就会优先寻找对应同类物品多的箱子。


                        IP属地:湖北来自Android客户端12楼2026-02-28 09:41
                        回复
                          所以总结来说,对有词缀的堆叠逻辑比较混乱。
                          不同词缀的物品在堆叠上不属于一个物品,而是属于相似物品。


                          IP属地:湖北来自Android客户端13楼2026-02-28 10:10
                          回复
                            还有达到物品上限的也不算同一个物品,使用的相似物品的逻辑


                            IP属地:湖北来自Android客户端14楼2026-02-28 10:53
                            回复
                              2026-04-04 20:07:40
                              广告
                              不感兴趣
                              开通SVIP免广告
                              现在背包上的快速堆叠和以前的快速堆叠已经不是一回事了,更像是一个半成品


                              IP属地:湖北来自Android客户端16楼2026-02-28 10:54
                              回复