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