#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package Event.EventSrc.Operate_EquipEvolve  
 | 
#  
 | 
# @todo:×°±¸Éñ×°½ø½×  
 | 
# @author hxp  
 | 
# @date 2019-10-07  
 | 
# @version 1.0  
 | 
#  
 | 
# ÏêϸÃèÊö: ×°±¸Éñ×°½ø½×  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#"""Version = 2019-10-07 19:00"""  
 | 
#-------------------------------------------------------------------------------  
 | 
  
 | 
import GameWorld  
 | 
import ItemCommon  
 | 
import IPY_GameWorld  
 | 
import PlayerControl  
 | 
import IpyGameDataPY  
 | 
import ItemControler  
 | 
import ShareDefine  
 | 
import ChConfig  
 | 
import ChEquip  
 | 
  
 | 
  
 | 
#// A3 30 ×°±¸Éñ×°½ø½× #tagCMEquipEvolve  
 | 
#  
 | 
#struct    tagCMEquipEvolve  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#    BYTE        EquipIndex;    // Òª½ø½×µÄ×°±¸ÔÚ×°±¸±³°üÖÐË÷Òý  
 | 
#    BYTE        NeedEquipIDIndex;        // ËùÐè¹Ì¶¨×°±¸BÔÚ±³°üÖÐË÷Òý  
 | 
#    BYTE        NeedItemIDIndexCnt;    // ¸½¼Ó²ÄÁÏÔÚ±³°üÖÐË÷Òý¸öÊý  
 | 
#    BYTE        NeedItemIDIndex[NeedItemIDIndexCnt];    // ¸½¼Ó²ÄÁÏÔÚ±³°üµÄË÷ÒýÁÐ±í  
 | 
#    BYTE        NeedSuitIndexCnt;    // ËùÐèÌ××°²ÄÁÏÔÚ±³°üÖÐË÷Òý¸öÊý  
 | 
#    BYTE        NeedSuitIndex[NeedSuitIndexCnt];    // ËùÐèÌ××°²ÄÁÏÔÚ±³°üµÄË÷ÒýÁÐ±í  
 | 
#};  
 | 
def OnEquipWashEvolve(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    equipIndex = clientData.EquipIndex  
 | 
    needEquipIDIndex = clientData.NeedEquipIDIndex  
 | 
    needItemIDIndexList = clientData.NeedItemIDIndex  
 | 
    needSuitIndexList = clientData.NeedSuitIndex  
 | 
      
 | 
    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)  
 | 
    curEquip = equipPack.GetAt(equipIndex)  
 | 
    if not ItemCommon.CheckItemCanUse(curEquip):  
 | 
        return  
 | 
    equipItemID = curEquip.GetItemTypeID()  
 | 
    equipClassLV = ItemCommon.GetItemClassLV(curEquip)  
 | 
    ipyData = IpyGameDataPY.GetIpyGameData("EquipShenEvolve", equipItemID)  
 | 
    if not ipyData:  
 | 
        return  
 | 
    evolveEquipID = ipyData.GetEvolveEquipID()  
 | 
    needItemIDInfo = ipyData.GetEvolveNeedItemIDInfo()  
 | 
    needSuitCount = ipyData.GetEvolveNeedSuitCount()  
 | 
    needEquipID = ipyData.GetEvolveNeedEquipID()  
 | 
      
 | 
    evolveEquipItemData = GameWorld.GetGameData().GetItemByTypeID(evolveEquipID)  
 | 
    if not evolveEquipItemData:  
 | 
        return  
 | 
      
 | 
    # ÑéÖ¤ËùÐè²ÄÁÏ  
 | 
    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)  
 | 
    needItemCount = 0  
 | 
    if needItemIDInfo:  
 | 
        needItemCount = __CheckNeedItem(curPlayer, needItemIDInfo, needItemIDIndexList, itemPack)  
 | 
        if needItemCount == None:  
 | 
            return  
 | 
          
 | 
    if needSuitCount:  
 | 
        if not __CheckNeedSuitEquip(curPlayer, needSuitCount, equipClassLV, needSuitIndexList, itemPack):  
 | 
            return  
 | 
          
 | 
    if needEquipID:  
 | 
        if not __CheckNeedEquipID(curPlayer, needEquipID, needEquipIDIndex, itemPack):  
 | 
            return  
 | 
          
 | 
    drDict = {"equipItemID":equipItemID, "evolveEquipID":evolveEquipID}  
 | 
    # ¿Û³ý²ÄÁÏ  
 | 
    if needItemCount:  
 | 
        ItemCommon.ReduceItem(curPlayer, itemPack, needItemIDIndexList, needItemCount,   
 | 
                              False, ChConfig.ItemDel_EquipEvolve, drDict)  
 | 
      
 | 
    if needSuitCount:  
 | 
        ItemCommon.ReduceItem(curPlayer, itemPack, needSuitIndexList, needSuitCount,   
 | 
                              False, ChConfig.ItemDel_EquipEvolve, drDict)  
 | 
          
 | 
    if needEquipID:  
 | 
        ItemCommon.ReduceItem(curPlayer, itemPack, [needEquipIDIndex], 1,   
 | 
                              False, ChConfig.ItemDel_EquipEvolve, drDict)  
 | 
          
 | 
    # Ô×°±¸Ìæ»»³É½ø½××°±¸  
 | 
    evolveEquip = ItemControler.GetOutPutItemObj(evolveEquipID, curPlayer=curPlayer)  
 | 
    if not evolveEquip:  
 | 
        return  
 | 
    curEquip.AssignItem(evolveEquip)  
 | 
    curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitEquipEvolve, ChConfig.Def_ComposeState_Sucess)  
 | 
    GameWorld.DebugLog("½ø½×Éñ×°³É¹¦! equipItemID=%s,evolveEquipID=%s" % (equipItemID, evolveEquipID), playerID)  
 | 
      
 | 
    #Ë¢ÐÂÊôÐÔ  
 | 
    ChEquip.RefreshPlayerEquipAttribute(curPlayer, equipClassLV)  
 | 
    playControl = PlayerControl.PlayerControl(curPlayer)  
 | 
    playControl.RefreshPlayerAttrState()  
 | 
    return  
 | 
  
 | 
def __CheckNeedItem(curPlayer, needItemIDInfo, needItemIDIndexList, itemPack):  
 | 
    ## ¼ì²éËùÐè¶îÍâ²ÄÁÏÎïÆ·  
 | 
      
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    needItemID, needItemCount = needItemIDInfo  
 | 
    maxPackCount = itemPack.GetCount()  
 | 
    totalCount = 0  
 | 
    for index in needItemIDIndexList:  
 | 
        if index >= maxPackCount:  
 | 
            GameWorld.DebugLog("¸ÃÎïÆ·²ÄÁϸñ×ÓË÷Òý²»´æÔÚ!ÎÞ·¨½ø½×£¡index=%s,maxPackCount=%s"   
 | 
                               % (index, maxPackCount), playerID)  
 | 
            return  
 | 
        curItem = itemPack.GetAt(index)  
 | 
        if not ItemCommon.CheckItemCanUse(curItem):  
 | 
            GameWorld.DebugLog("¸ÃÎïÆ·²ÄÁϲ»¿ÉʹÓÃ!ÎÞ·¨½ø½×! index=%s" % (index), playerID)  
 | 
            return  
 | 
        itemID = curItem.GetItemTypeID()  
 | 
        if itemID != needItemID:  
 | 
            GameWorld.DebugLog("¸ÃÎïÆ·²ÄÁϲ»¿ÉÓÃÓÚ½ø½×!index=%s,itemID=%s != needItemID=%s"   
 | 
                               % (index, itemID, needItemID), playerID)  
 | 
            return  
 | 
        totalCount += curItem.GetCount()  
 | 
          
 | 
    if totalCount < needItemCount:  
 | 
        GameWorld.DebugLog("ËùÐè¶îÍâ²ÄÁϸöÊý²»×㣬ÎÞ·¨½ø½×! needItemIDIndexList=%s,totalCount=%s < needItemCount=%s"   
 | 
                               % (needItemIDIndexList, totalCount, needItemCount), playerID)  
 | 
        return  
 | 
      
 | 
    return needItemCount  
 | 
  
 | 
  
 | 
def __CheckNeedSuitEquip(curPlayer, needSuitCount, equipClassLV, needSuitIndexList, itemPack):  
 | 
    ## ¼ì²éËùÐèÌ××°²ÄÁÏ  
 | 
      
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    maxPackCount = itemPack.GetCount()  
 | 
    totalCount = 0  
 | 
    for index in needSuitIndexList:  
 | 
        if index >= maxPackCount:  
 | 
            GameWorld.DebugLog("¸ÃÌ××°¸ñ×ÓË÷Òý²»´æÔÚ!ÎÞ·¨½ø½×£¡index=%s,maxPackCount=%s"   
 | 
                               % (index, maxPackCount), playerID)  
 | 
            return  
 | 
        curItem = itemPack.GetAt(index)  
 | 
        if not ItemCommon.CheckItemCanUse(curItem):  
 | 
            GameWorld.DebugLog("¸ÃÌ××°²»¿ÉʹÓÃ!ÎÞ·¨½ø½×! index=%s" % (index), playerID)  
 | 
            return  
 | 
        classLV = ItemCommon.GetItemClassLV(curItem)  
 | 
        if classLV != equipClassLV:  
 | 
            GameWorld.DebugLog("¸ÃÌ××°²ÄÁϽײ»Ïàͬ£¬²»¿ÉÓÃÓÚ½ø½×!index=%s,classLV=%s != equipClassLV=%s"   
 | 
                               % (index, classLV, equipClassLV), playerID)  
 | 
            return  
 | 
        color = curItem.GetItemColor()  
 | 
        if color != ChConfig.Def_Quality_Orange:  
 | 
            GameWorld.DebugLog("¸ÃÌ××°²ÄÁϷdzÈ×°£¬²»¿ÉÓÃÓÚ½ø½×!index=%s,color=%s" % (index, color), playerID)  
 | 
            return  
 | 
        suieID = curItem.GetSuiteID()  
 | 
        if not suieID:  
 | 
            GameWorld.DebugLog("¸ÃÌ××°²ÄÁÏ·ÇÌ××°×°±¸£¬²»¿ÉÓÃÓÚ½ø½×!index=%s,suieID=%s" % (index, suieID), playerID)  
 | 
            return  
 | 
        if not ItemCommon.CheckJob(curPlayer, curItem):  
 | 
            GameWorld.DebugLog("¸ÃÌ××°²ÄÁϷDZ¾Ö°Òµ£¬²»¿ÉÓÃÓÚ½ø½×!index=%s" % (index), playerID)  
 | 
            return  
 | 
        totalCount += 1  
 | 
          
 | 
    if totalCount < needSuitCount:  
 | 
        GameWorld.DebugLog("ËùÐèÌ××°¸öÊý²»×㣬ÎÞ·¨½ø½×! needSuitIndexList=%s,totalCount=%s < needSuitCount=%s"   
 | 
                               % (needSuitIndexList, totalCount, needSuitCount), playerID)  
 | 
        return  
 | 
      
 | 
    return True  
 | 
  
 | 
def __CheckNeedEquipID(curPlayer, needEquipID, needEquipIDIndex, itemPack):  
 | 
    ## ¼ì²éËùÐè¶îÍâ×°±¸  
 | 
      
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    maxPackCount = itemPack.GetCount()  
 | 
    if needEquipIDIndex >= maxPackCount:  
 | 
        GameWorld.DebugLog("¸Ã¶îÍâ×°±¸Ë÷Òý²»´æÔÚ!ÎÞ·¨½ø½×£¡needEquipIDIndex=%s,maxPackCount=%s"   
 | 
                           % (needEquipIDIndex, maxPackCount), playerID)  
 | 
        return  
 | 
    curItem = itemPack.GetAt(needEquipIDIndex)  
 | 
    if not ItemCommon.CheckItemCanUse(curItem):  
 | 
        GameWorld.DebugLog("¸Ã¶îÍâ×°±¸²»¿ÉʹÓÃ!ÎÞ·¨½ø½×! needEquipIDIndex=%s" % (needEquipIDIndex), playerID)  
 | 
        return  
 | 
    itemID = curItem.GetItemTypeID()  
 | 
    if itemID != needEquipID:  
 | 
        GameWorld.DebugLog("¸Ã¶îÍâ×°±¸ID´íÎ󣬲»¿ÉÓÃÓÚ½ø½×!needEquipIDIndex=%s,itemID=%s != needEquipID=%s"   
 | 
                           % (needEquipIDIndex, itemID, needEquipID), playerID)  
 | 
        return  
 | 
      
 | 
    return True  
 | 
  
 | 
  
 |