水桶这种上限为一的 合并同类项时拿不到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: 目标物品槽位
|
:param destinationSlot: 目标物品槽位
|
||||||
:return:
|
: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)
|
self.SetItemAbs(originSlot, itemDict1)
|
||||||
return itemDict2
|
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) 主手为空 -> 放到主手
|
# 2) 主手为空 -> 放到主手
|
||||||
# 3) 主手有物 -> 放入背包(同类叠加/空位)
|
# 3) 主手有物 -> 放入背包(同类叠加/空位)
|
||||||
# 4) 背包满且主手有物 -> 掉落物形式(在 pos 上方生成)
|
# 4) 背包满且主手有物 -> 掉落物形式(在 pos 上方生成)
|
||||||
@@ -832,14 +833,31 @@ class BlueFoxServerSystem(serverBaseSystem):
|
|||||||
pass
|
pass
|
||||||
return False
|
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):
|
def _mergeSameStackInv(self, playerId, itemName, count=1, aux=0):
|
||||||
"""把 count 个 (itemName, aux) 合并进背包(0~35格)里已有的同类堆叠(未满64)。
|
"""把 count 个 (itemName, aux) 合并进背包(0~35格)里已有的同类堆叠(未满真实上限)。
|
||||||
返回"剩余没能合并的数量"(0 = 全部并进了已有堆叠)。
|
返回"剩余没能合并的数量"(0 = 全部并进了已有堆叠)。
|
||||||
|
上限取物品真实 maxStackSize, 上限<=1 的物品(水桶/工具等)一律不合并,
|
||||||
|
交由后续主手/背包(引擎接口)/掉落处理, 避免出现"一格被叠成多个"。
|
||||||
读写用本工程已验证可用的 GetPlayerAllItems(0) + SetInvItemNum
|
读写用本工程已验证可用的 GetPlayerAllItems(0) + SetInvItemNum
|
||||||
(参考 FastComp.DeclarePlayerInvItem); 逐格独立 try 保护, 单格异常不影响其它格。"""
|
(参考 FastComp.DeclarePlayerInvItem); 逐格独立 try 保护, 单格异常不影响其它格。"""
|
||||||
remain = count
|
remain = count
|
||||||
if remain <= 0:
|
if remain <= 0:
|
||||||
return 0
|
return 0
|
||||||
|
maxStack = self._getItemMaxStack(itemName, aux)
|
||||||
|
if maxStack <= 1:
|
||||||
|
return remain
|
||||||
try:
|
try:
|
||||||
itemComp = serverCompFactory.CreateItem(playerId)
|
itemComp = serverCompFactory.CreateItem(playerId)
|
||||||
allItems = itemComp.GetPlayerAllItems(0) # 0 = ItemPosType.INVENTORY(0~35)
|
allItems = itemComp.GetPlayerAllItems(0) # 0 = ItemPosType.INVENTORY(0~35)
|
||||||
@@ -857,9 +875,9 @@ class BlueFoxServerSystem(serverBaseSystem):
|
|||||||
if (d.get("newAuxValue") or 0) != aux:
|
if (d.get("newAuxValue") or 0) != aux:
|
||||||
continue
|
continue
|
||||||
cur = d.get("count") or 0
|
cur = d.get("count") or 0
|
||||||
if cur <= 0 or cur >= 64:
|
if cur <= 0 or cur >= maxStack:
|
||||||
continue
|
continue
|
||||||
add = min(64 - cur, remain)
|
add = min(maxStack - cur, remain)
|
||||||
if itemComp.SetInvItemNum(index, cur + add):
|
if itemComp.SetInvItemNum(index, cur + add):
|
||||||
remain -= add
|
remain -= add
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|||||||
Reference in new issue
Block a user