xdh
2019-04-29 da600c48b92c65ec78edea08544c6ca9a50b1143
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
@@ -110,13 +115,13 @@
            PlayerControl.SendMailByKey("DefaultLackSpace", [curPlayer.GetPlayerID()], prizeItemList)
        else:
            for giveItemID, itemCnt in giveItemIDDict.items():
                ItemControler.GivePlayerItem(curPlayer, giveItemID, itemCnt, True, [IPY_GameWorld.rptItem], True)
                ItemControler.GivePlayerItem(curPlayer, giveItemID, itemCnt, 0, [IPY_GameWorld.rptItem])
    
    #同步客户端
    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