From 167f1018e83452c601f84fa12e0d42fa47cf7ae4 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 28 十二月 2018 11:55:22 +0800 Subject: [PATCH] 5424 【后端】【1.4】跨服竞技场开发(未同步的PK信息增加存储DB,防止服务器维护后数据丢失) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py | 30 +++++++++++++++++++----------- 1 files changed, 19 insertions(+), 11 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 48c4f7f..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,19 +130,22 @@ ##获取可以吞噬的物品信息 # @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) -- Gitblit v1.8.0