From a82c6b75220814b4e498f536754a61d6b28d6de3 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 17 一月 2019 20:58:15 +0800
Subject: [PATCH] 2899 【1.4.100】【1.5】跨服竞技积分超过65535报错

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py |   36 +++++++++++++++++++++++-------------
 1 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py
index 36db689..63b2383 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py
@@ -51,10 +51,11 @@
 #struct    tagCMEquipDecompose
 #{
 #    tagHead        Head;
-#    BYTE        IndexCount;        //材料所在背包索引的数量
-#    BYTE        IndexList[IndexCount];    //材料所在背包索引列表
+#    BYTE        Count;        //材料所在背包索引的数量
+#    WORD        IndexList[Count];    //材料所在背包索引列表
+#    DWORD        ItemIDList[Count];    //材料所在背包物品ID列表
+#    BYTE        IsAuto;        //是否自动分解
 #};
-
 ## 玩家分解装备封包 A5 08
 #  @param playerIndex 玩家索引  
 #  @param clientData 客户端封包  
@@ -62,15 +63,19 @@
 #  @return None
 def OnDoEquipDecompose(index, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    
+    if not clientData.Count:
+        return
     eatIndexList = clientData.IndexList
-    
-    EatItems(curPlayer, eatIndexList)
+    eatItemIDList = clientData.ItemIDList
+    isAuto = clientData.IsAuto
+    EatItems(curPlayer, eatIndexList, eatItemIDList, isAuto)
     return
 
 # 吞噬物品, 返回被吞数量
-def EatItems(curPlayer, eatIndexList):
-    drDelItemList, totalAddExp, delAllCnt = __GetCanEatItemInfo(curPlayer, eatIndexList)
+def EatItems(curPlayer, eatIndexList, eatItemIDList, isAuto=False):
+    if len(eatIndexList) != len(eatItemIDList):
+        return 0, 0
+    drDelItemList, totalAddExp, delAllCnt = __GetCanEatItemInfo(curPlayer, eatIndexList, eatItemIDList)
     if not totalAddExp:
         GameWorld.DebugLog("    装备吸收 没有可吞噬物品!")
         return 0, 0
@@ -116,7 +121,7 @@
     Sync_EDLVInfo(curPlayer, jsonItemList)
     # 流向
     saveDataDict = {"ExpBefore":Exp, "AddTotalExp":reduceTotalExp, "ExpAfter":updExp,
-                    "DelItemList(ItemID,delCnt,baseExp,addExp)":drDelItemList}
+                    "DelItemList(ItemID,delCnt,baseExp,addExp)":drDelItemList, 'isAuto':isAuto}
     DataRecordPack.DR_ClassUpSystem(curPlayer, "EquipDecomposeUp", updLV, saveDataDict)
     
     #EventReport.WriteEvent__lv(curPlayer, LV, updLV, Exp, updExp)
@@ -125,23 +130,26 @@
 ##获取可以吞噬的物品信息
 #  @param curPlayer: 玩家实例
 #  @return [可吞噬的物品列表], 最大可提供的经验
-def __GetCanEatItemInfo(curPlayer, expIndexList):
+def __GetCanEatItemInfo(curPlayer, expIndexList, eatItemIDList):
     eatItemList = []
     totalAddExp = 0
     allitemCnt = 0
     petEatItemAddExpPer = PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_EatItem)
     itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    for index in expIndexList:
+    for i, index in enumerate(expIndexList):
         eatItem = itemPack.GetAt(index)
         
         if not eatItem or eatItem.IsEmpty():
             continue
 
         eatItemID = eatItem.GetItemTypeID()
+        if eatItemIDList[i] != eatItemID:
+            GameWorld.ErrLog('    装备分解客户端发的物品索引与实际物品ID不对应  index=%s,eatItemID=%s,wantEatItemID=%s'%(index, eatItemID, eatItemIDList[i]))
+            continue
         if eatItem.GetType() == ChConfig.Def_ItemType_EquipDecomposeExp:
             curEff = eatItem.GetEffectByIndex(0)
             baseExp = curEff.GetEffectValue(0)
-        else:
+        elif ItemCommon.CheckItemIsEquip(eatItem):
             itemColor = eatItem.GetItemColor()
             itemClass = eatItem.GetLV()
             ipyData = IpyGameDataPY.GetIpyGameData("PetEatEquip", itemColor, itemClass)
@@ -149,7 +157,9 @@
                 GameWorld.DebugLog("    tagPetEatEquip.txt,未配置该物品! eatItemID=%s, EquipColor=%s,EquipClass=%s" % (eatItemID, itemColor, itemClass))
                 continue
             baseExp = ipyData.GetExp()
-        
+        else:
+            GameWorld.ErrLog('    不可分解的道具index=%s eatItemID=%s'%(index, eatItemID))
+            continue
         itemCnt = eatItem.GetCount() # 装备一般默认1,如是经验道具则一般可叠加
         addExp = baseExp * itemCnt
         

--
Gitblit v1.8.0