From 05251cfca26ce5f044923793da7c97597413ed1b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 13 八月 2025 19:18:54 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(主线掉落物品默认不堆叠;注:单个物品的个数可能大于1,单个战利品ID可能一次掉多个;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/MainLevel.py                        |   14 ++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py                           |    3 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py |   21 +++++++++++++++------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                                     |    2 +-
 4 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 7e191b0..9abacf7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -571,7 +571,7 @@
 
 def GetItemPackType(itemData, defaultPack=IPY_GameWorld.rptItem):
     ## 获取物品对应存放的默认背包类型
-    if defaultPack in [ShareDefine.rptTreasure, ShareDefine.rptTempItem]:
+    if defaultPack in [ShareDefine.rptTreasure, ShareDefine.rptTempItem, IPY_GameWorld.rptIdentify]:
         #寻宝背包、临时背包不做处理
         return defaultPack
     import IpyGameDataPY
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/MainLevel.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/MainLevel.py
index 1446e64..64bc3ad 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/MainLevel.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/MainLevel.py
@@ -19,6 +19,9 @@
 import PlayerControl
 import IpyGameDataPY
 import GameLogic_MainLevel
+import IPY_GameWorld
+import ClearPack
+import ChConfig
 
 def OnExec(curPlayer, gmList):
     
@@ -26,6 +29,7 @@
         GameWorld.DebugAnswer(curPlayer, "重置主线: MainLevel 0")
         GameWorld.DebugAnswer(curPlayer, "设置主线: MainLevel 章节 关卡 波")
         GameWorld.DebugAnswer(curPlayer, "测试掉落: MainLevel d 战锤数")
+        GameWorld.DebugAnswer(curPlayer, "重置掉落: MainLevel d 0 [是否清掉落背包]")
         GameWorld.DebugAnswer(curPlayer, "重置战利: MainLevel b 0")
         GameWorld.DebugAnswer(curPlayer, "设置战利: MainLevel b 战利品ID 已掉落个数")
         return
@@ -34,6 +38,16 @@
     
     if value == "d":
         unXiantao = gmList[1] if len(gmList) > 1 else 1
+        if unXiantao == 0:
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntExp, 0)
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntEquip, 0)
+            GameLogic_MainLevel.ResetBootyDropToday(curPlayer)
+            clearDropPack = gmList[2] if len(gmList) > 2 else 0
+            if clearDropPack:
+                ClearPack.__DoLogic_Clear_Pack(curPlayer, IPY_GameWorld.rptIdentify)
+            GameWorld.DebugAnswer(curPlayer, "重置未结算战锤掉落OK!")
+            return
+        
         GameLogic_MainLevel.GMTestKillDrop(curPlayer, unXiantao)
         return
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
index a40cae8..65f15e2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
@@ -91,7 +91,8 @@
 
 def __doMainDrop(curPlayer):
     # 装备掉落
-    __doDropEquip(curPlayer)
+    if __doDropEquip(curPlayer) == -1:
+        return
     
     playerID = curPlayer.GetPlayerID()
     DailyBootyUpperList = []
@@ -102,10 +103,16 @@
            
     GameWorld.DebugLog("可掉落战利品上限: chapterID=%s, %s" % (chapterID, DailyBootyUpperList), playerID)
     
+    # 战利品掉落默认不堆叠,故最多只能掉落剩余空格子个数的物品
+    spaceCount = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptIdentify)
+    
     # 其他战利品掉落
     bootyDropNeedDict = IpyGameDataPY.GetFuncEvalCfg("MainBootyDrop", 1, {})
     bootyDropCntDict = IpyGameDataPY.GetFuncEvalCfg("MainBootyDrop", 2, {})
     for itemID, dropUpper in DailyBootyUpperList:
+        if spaceCount <= 0:
+            GameWorld.DebugLog("掉落背包已满!", playerID)
+            break
         if dropUpper <= 0:
             continue
         todyDropCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BootyDropToday % itemID)
@@ -137,7 +144,8 @@
         if dropCntTotal <= 0:
             continue
         
-        GameWorld.DebugLog("掉落战利品! itemID=%s,unXiantaoCntBooty=%s,次数=%s,dropCntTotal=%s" % (itemID, unXiantaoCntBooty, dropBootyCnt, dropCntTotal), playerID)
+        GameWorld.DebugLog("掉落战利品! itemID=%s,unXiantaoCntBooty=%s,次数=%s,dropCntTotal=%s,spaceCount=%s" 
+                           % (itemID, unXiantaoCntBooty, dropBootyCnt, dropCntTotal, spaceCount), playerID)
         curItem = ItemControler.GetOutPutItemObj(itemID, dropCntTotal, False, curPlayer=curPlayer)
         if curItem == None:
             continue
@@ -147,23 +155,24 @@
         unXiantaoCntBooty = unXiantaoCntBooty % dropOneNeed
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntBooty % itemID, unXiantaoCntBooty)
         SetBootyDropToday(curPlayer, itemID, todyDropCnt + dropCntTotal)
+        spaceCount -= 1
         
     return
 
 def __doDropEquip(curPlayer):
     ## 主线掉落装备
+    playerID = curPlayer.GetPlayerID()
     unXiantaoCntEquip = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UnXiantaoCntEquip)
     dropOneNeed = IpyGameDataPY.GetFuncCfg("MainEquipDrop", 1) # 每消耗X个战锤掉落一件装备
     dropEquipCnt = unXiantaoCntEquip / dropOneNeed
     if dropEquipCnt <= 0:
-        GameWorld.DebugLog("主线暂不能掉落! unXiantaoCntEquip=%s,dropOneNeed=%s,dropEquipCnt=%s" % (unXiantaoCntEquip, dropOneNeed, dropEquipCnt))
+        GameWorld.DebugLog("主线暂不能掉落! unXiantaoCntEquip=%s,dropOneNeed=%s,dropEquipCnt=%s" % (unXiantaoCntEquip, dropOneNeed, dropEquipCnt), playerID)
         return
     dropEquipCnt = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptIdentify, dropEquipCnt)
     if not dropEquipCnt:
-        GameWorld.DebugLog("掉落鉴定背包没有空间!")
-        return
+        GameWorld.DebugLog("掉落背包已满!", playerID)
+        return -1
     
-    playerID = curPlayer.GetPlayerID()    
     treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
     ipyData = IpyGameDataPY.GetIpyGameData("TreeLV", treeLV)
     if not ipyData:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 7edbaed..beb9b37 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -1038,6 +1038,9 @@
         else:
             maxPackCount = curItemData.GetPackCount()
             
+        if packIndex == IPY_GameWorld.rptIdentify:
+            defaultPile = False # 掉落背包默认不判断堆叠
+            
         # 虚拟背包, 默认不做叠加
         if packIndex in ShareDefine.Def_VPack_TypeList:
             return self.PutItemInVPack(packIndex, tagItem, event)

--
Gitblit v1.8.0