水桶这种上限为一的 合并同类项时拿不到bug 解决
This commit is contained in:
1 parent
97520502b7
commit
8e24c02cb3
2 files changed
+26
-5
No files matched your search
+4
-1
@@ -555,7 +555,10 @@ class RucksackScreen(baseScreen):
|
||||
:param destinationSlot: 目标物品槽位
|
||||
:return:
|
||||
"""
|
||||
itemDict1, itemDict2 = DeclareItemAnyNum(self.items[originSlot], 64 - self.items[destinationSlot]['count'])
|
||||
itemInfo = GetItemBaseInfoSafely(self.items[originSlot])
|
||||
maxStack = (itemInfo or {}).get('maxStackSize') or 64
|
||||
itemDict1, itemDict2 = DeclareItemAnyNum(
|
||||
self.items[originSlot], maxStack - self.items[destinationSlot]['count'])
|
||||
self.SetItemAbs(originSlot, itemDict1)
|
||||
return itemDict2
|
||||
|
||||
|
||||
+22
-4
@@ -773,7 +773,8 @@ class BlueFoxServerSystem(serverBaseSystem):
|
||||
# ============================================================================
|
||||
# 统一"主动获得物品"接口(任务一):
|
||||
# 所有给玩家的物品一律按优先级分发, 而非直接掉落:
|
||||
# 1) 背包(0~35格)存在同类且未堆满(64) -> 数量 +count 合并
|
||||
# 1) 背包(0~35格)存在同类且未堆满(按物品真实堆叠上限) -> 数量 +count 合并
|
||||
# (上限<=1 的物品如水桶/工具不合并, 由 2/3/4 步处理)
|
||||
# 2) 主手为空 -> 放到主手
|
||||
# 3) 主手有物 -> 放入背包(同类叠加/空位)
|
||||
# 4) 背包满且主手有物 -> 掉落物形式(在 pos 上方生成)
|
||||
@@ -832,14 +833,31 @@ class BlueFoxServerSystem(serverBaseSystem):
|
||||
pass
|
||||
return False
|
||||
|
||||
def _getItemMaxStack(self, itemName, aux=0):
|
||||
"""取物品真实的堆叠上限。取不到时回退 64(与原行为一致, 保证未知物品仍可合并)。"""
|
||||
try:
|
||||
info = serverCompFactory.CreateItem(LevelId).GetItemBasicInfo(
|
||||
itemName, aux, False)
|
||||
size = (info or {}).get("maxStackSize")
|
||||
if size:
|
||||
return int(size)
|
||||
except Exception:
|
||||
pass
|
||||
return 64
|
||||
|
||||
def _mergeSameStackInv(self, playerId, itemName, count=1, aux=0):
|
||||
"""把 count 个 (itemName, aux) 合并进背包(0~35格)里已有的同类堆叠(未满64)。
|
||||
"""把 count 个 (itemName, aux) 合并进背包(0~35格)里已有的同类堆叠(未满真实上限)。
|
||||
返回"剩余没能合并的数量"(0 = 全部并进了已有堆叠)。
|
||||
上限取物品真实 maxStackSize, 上限<=1 的物品(水桶/工具等)一律不合并,
|
||||
交由后续主手/背包(引擎接口)/掉落处理, 避免出现"一格被叠成多个"。
|
||||
读写用本工程已验证可用的 GetPlayerAllItems(0) + SetInvItemNum
|
||||
(参考 FastComp.DeclarePlayerInvItem); 逐格独立 try 保护, 单格异常不影响其它格。"""
|
||||
remain = count
|
||||
if remain <= 0:
|
||||
return 0
|
||||
maxStack = self._getItemMaxStack(itemName, aux)
|
||||
if maxStack <= 1:
|
||||
return remain
|
||||
try:
|
||||
itemComp = serverCompFactory.CreateItem(playerId)
|
||||
allItems = itemComp.GetPlayerAllItems(0) # 0 = ItemPosType.INVENTORY(0~35)
|
||||
@@ -857,9 +875,9 @@ class BlueFoxServerSystem(serverBaseSystem):
|
||||
if (d.get("newAuxValue") or 0) != aux:
|
||||
continue
|
||||
cur = d.get("count") or 0
|
||||
if cur <= 0 or cur >= 64:
|
||||
if cur <= 0 or cur >= maxStack:
|
||||
continue
|
||||
add = min(64 - cur, remain)
|
||||
add = min(maxStack - cur, remain)
|
||||
if itemComp.SetInvItemNum(index, cur + add):
|
||||
remain -= add
|
||||
except Exception:
|
||||
|
||||
Reference in new issue
Block a user