#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
##@package ChEquip  
 | 
# ×°±¸Âß¼´¦Àí  
 | 
#  
 | 
# @author alee  
 | 
# @date 2017-07-29 00:30  
 | 
# @version 1.0  
 | 
#  
 | 
# ÐÞ¸Äʱ¼ä ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ  
 | 
#------------------------------------------------------------------------------   
 | 
#"""Version = 2017-07-29 00:30"""  
 | 
#------------------------------------------------------------------------------   
 | 
import IPY_GameWorld  
 | 
import GameWorld  
 | 
import ItemControler  
 | 
import SkillShell  
 | 
import PlayerControl  
 | 
import ChConfig  
 | 
import ChItem  
 | 
import ItemCommon  
 | 
import FBLogic  
 | 
import OperControlManager  
 | 
import Operate_EquipWash  
 | 
import Operate_EquipPlus  
 | 
import ShareDefine  
 | 
import ChPyNetSendPack  
 | 
import NetPackCommon  
 | 
import EventShell  
 | 
import IpyGameDataPY  
 | 
import PlayerWing  
 | 
import Operate_EquipStone  
 | 
import OpenServerCampaign  
 | 
import PassiveBuffEffMng  
 | 
import time  
 | 
import json  
 | 
import FormulaControl  
 | 
import PyGameData  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
  
 | 
##¼ì²éÍæ¼ÒÊÇ·ñ¿ÉÒÔ»»×°  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @return ·µ»ØÖµ, ÊÇ·ñͨ¹ý¼ì²é  
 | 
# @remarks ¼ì²éÍæ¼ÒÊÇ·ñ¿ÉÒÔ»»×°  
 | 
def CheckPlayerCanEquipItem(curPlayer):  
 | 
    if curPlayer.GetPlayerAction() not in ChConfig.Def_Player_DoEquip_State:  
 | 
        #InsteadEquip ¶Ô²»Æð,µ±Ç°×´Ì¬ÎÞ·¨¸ü»»×°±¸  
 | 
        #InsteadEquipÌæ»»ÎªGeRen_chenxin_436832  
 | 
        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_436832")  
 | 
        return False  
 | 
      
 | 
    return True  
 | 
  
 | 
  
 | 
## Ö´ÐÐÍæ¼Ò»»×°Âß¼  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param curItem ÎïÆ·ÊµÀý  
 | 
#  @param equipPackIndex ×°±¸±³°üË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return ²¼¶ûÖµ  
 | 
#  @remarks Ö´ÐÐÍæ¼Ò»»×°Âß¼  
 | 
def DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick):   
 | 
    if equipPackIndex < 0:  
 | 
        return False  
 | 
    playerItemControl = ItemControler.PlayerItemControler(curPlayer)  
 | 
      
 | 
    #---ÑéÖ¤ÊÇ·ñ¿ÉÒÔ»»Õâ¼þ×°±¸---  
 | 
    if not ItemCommon.CheckItemCanUse(curItem):  
 | 
        return False  
 | 
      
 | 
    if not ItemCommon.CheckItemCanUseByExpireTime(curItem):  
 | 
        # ¹ýÆÚ  
 | 
        GameWorld.DebugLog("×°±¸ÒѹýÆÚ!")  
 | 
        return False  
 | 
      
 | 
    changeItemEquipPlace = curItem.GetEquipPlace()  
 | 
    if changeItemEquipPlace not in ShareDefine.RoleEquipType:  
 | 
        return False  
 | 
      
 | 
    if ItemCommon.GetEquipPackIndex(curItem) != equipPackIndex:  
 | 
        #¼ì²é×°±¸Î»ÖúÍÌî±íÊÇ·ñÒ»Ö  
 | 
        return False  
 | 
      
 | 
    #--ÉèÖô©ÉÏÎïÆ·ÐǼ¶--  
 | 
    #===========================================================================  
 | 
    # if changeItemEquipPlace in ShareDefine.RoleEquipType:  
 | 
    #    equipPartStar = GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, changeItemEquipPlace)  
 | 
    #    if equipPartStar != curItem.GetItemStarLV():  
 | 
    #        curItem.SetItemStarLV(equipPartStar)  
 | 
    #===========================================================================  
 | 
            #GameWorld.DebugLog("´©ÉϵÄ×°±¸ÉèÖÃÐǼ¶: index=%s,star=%s" % (changeItemEquipPlace, equipPartStar))  
 | 
      
 | 
    #---¿ªÊ¼»»×°Âß¼---  
 | 
      
 | 
    #¼Ç¼»»×°ÎïÆ·ÐÅÏ¢  
 | 
    itemClassLV = ItemCommon.GetItemClassLV(curItem)  
 | 
    changeItemID = curItem.GetItemTypeID()  
 | 
    changeItemStarLV = 0  #curItem.GetItemStarLV()  
 | 
    changeItemStoneCnt = 0  #curItem.GetUseStoneCount()  
 | 
    changeItemHoleCnt = 0  #curItem.GetCanPlaceStoneCount()  
 | 
    changeItemUseData = curItem.GetUserData()  
 | 
    suiteID = curItem.GetSuiteID()  
 | 
    endureReduceType = curItem.GetEndureReduceType()  
 | 
    #changeItemIsHorse = (curItem.GetType() == ChConfig.Def_Item_Type_Horse)  
 | 
      
 | 
    #Ö´Ðл»×°¶¯×÷  
 | 
    equipPlace = playerItemControl.EquipItem(curItem, equipPackIndex)  
 | 
      
 | 
    if equipPlace == -1:  
 | 
        return False  
 | 
      
 | 
    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)  
 | 
    curEquip = equipPack.GetAt(equipPackIndex)  
 | 
  
 | 
    if curEquip.GetUserAttr(ShareDefine.Def_IudetCreateTime) == 0:  
 | 
        curEquip.SetUserAttr(ShareDefine.Def_IudetCreateTime, int(time.time()))  
 | 
    #---»»×°³É¹¦---  
 | 
    if equipPackIndex in PlayerControl.GetFaceEquipIndexList(curPlayer) or equipPlace in ChConfig.Def_SyncEquipStateByIndex:  
 | 
        #֪ͨ¿Í»§¶Ë½»»»ÎïÆ·  
 | 
        curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)  
 | 
    if itemClassLV == GetEquipFacadeClassLV(curPlayer):  
 | 
        #´©µ±Ç°Íâ¹Û½×µÄÌ××°  
 | 
        ChangeEquipfacadeByClassLV(curPlayer, itemClassLV)  
 | 
      
 | 
    if not endureReduceType:  
 | 
        EventShell.EventRespons_EquipByPlace(curPlayer, itemClassLV, equipPlace)  
 | 
    #¼Ç¼³È×°¡¢ºì×°  
 | 
    #===========================================================================  
 | 
    # if itemQuality in [ChConfig.Def_Quality_Orange, ChConfig.Def_Quality_Red]:  
 | 
    #    classLV = ItemCommon.GetItemClassLV(curItem)  
 | 
    #    EventReport.WriteEvent_orange_equip(curPlayer, changeItemEquipPlace, classLV, itemQuality)  
 | 
    #===========================================================================  
 | 
          
 | 
    #ÌØÊâ×°±¸, ²»ÐèҪˢÊôÐÔ  
 | 
    if changeItemEquipPlace in ChConfig.EquipItemNoRefreshState:  
 | 
        return True  
 | 
      
 | 
    curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_Equip)  
 | 
      
 | 
    #ÏÈË¢×°±¸BUFF ÔÙ¼ÆËãÊôÐÔ  
 | 
    if changeItemEquipPlace in ChConfig.EquipPlace_LingQi:  
 | 
        RefreshPlayerLingQiEquipAttr(curPlayer)  
 | 
    elif itemClassLV:  
 | 
        RefreshPlayerEquipAttribute(curPlayer, itemClassLV)  
 | 
      
 | 
    #Ë¢ÐÂËùÓÐÊôÐÔ  
 | 
    playControl = PlayerControl.PlayerControl(curPlayer)  
 | 
    playControl.RefreshPlayerAttrState()  
 | 
      
 | 
    #×°±¸µÄ±»¶¯´¥·¢À༼ÄÜ  
 | 
    PassiveBuffEffMng.GetPassiveEffManager().RegistSuperEquipSkillDict(curPlayer)  
 | 
    return True  
 | 
  
 | 
  
 | 
## Ë¢ÐÂ×°±¸¶ÔÈËÎïÊôÐÔµÄ¸Ä±ä  
 | 
#  @param self ÀàʵÀý  
 | 
#  @return ·µ»ØÖµÎÞÒâÒå  
 | 
#  @remarks Ë¢ÐÂ×°±¸¶ÔÈËÎïÊôÐÔµÄ¸Ä±ä  
 | 
def RefreshPlayerEquipAttribute(curPlayer, classLV=0):  
 | 
    GameWorld.DebugLog("Start RefreshPlayerEquipAttribute classLV=%s!!!" % classLV)  
 | 
    classlvList = xrange(1, IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') + 1) if classLV == 0 else [classLV]  
 | 
    for rclasslv in classlvList:  
 | 
        __CalcEquips_Effect(curPlayer, rclasslv)  
 | 
  
 | 
    #if isRefreshEquipBuff:  
 | 
    #    __RefreshPlayerAllEquipBuff(curPlayer)  
 | 
      
 | 
    if classLV:  
 | 
        playerID = curPlayer.GetPlayerID()  
 | 
        if playerID not in PyGameData.g_equipChangeClassLVInfo:  
 | 
            PyGameData.g_equipChangeClassLVInfo[playerID] = []  
 | 
        classLVList = PyGameData.g_equipChangeClassLVInfo[playerID]  
 | 
        if classLV not in classLVList:  
 | 
            classLVList.append(classLV)  
 | 
            #GameWorld.DebugLog("Ìí¼Ó×°±¸»º´æ±ä¸ü½×: classLV=%s, %s" % (classLV, classLVList), playerID)  
 | 
    return  
 | 
  
 | 
def OnPlayerEquipLoginLogic(curPlayer):  
 | 
    ''' Íæ¼ÒµÇ¼ͳһ´¦Àí×°±¸£¬Ö»±éÀúÒ»´Î×°±¸±³°ü£¬Í¨ÖªÐÅÏ¢¡¢¸üÐÂÒ»´ÎÊý¾Ý£¬·ÀÖ¹×ܵȼ¶Í³¼ÆÒì³£  
 | 
                    ×°±¸Æ·ÖʳÈ×°¼°ÒÔÉÏÊýÁ¿¡¢×°±¸×ÜÐÇÊý¡¢Ç¿»¯×ܵȼ¶¡¢½ø»¯×ܵȼ¶¡¢Ï´Á·×ܵȼ¶¡¢±¦Ê¯×ܵȼ¶  
 | 
    '''  
 | 
      
 | 
    #NotifyEquipPartPlusLV(curPlayer)  
 | 
    #NotifyEquipPartStar(curPlayer)  
 | 
    #Operate_EquipWash.OnEquipWashLogin(curPlayer)  
 | 
    #×°±¸Î»±¦Ê¯ÏâǶ֪ͨ  
 | 
    #Operate_EquipStone.OnLogin(curPlayer)  
 | 
#    if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_LingGenShow):  
 | 
#        GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_LingGenShow, 1)  
 | 
#        ChangeEquipfacadeByLingGen(curPlayer)  
 | 
      
 | 
    ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarInfo() # A3 B1 ×°±¸²¿Î»ÐÇÊýÐÅÏ¢ #tagMCEquipPartStarInfo  
 | 
    ePartPlusLVPack = ChPyNetSendPack.tagMCEquipPartPlusInfo() # A3 B3 ×°±¸²¿Î»Ç¿»¯ÐÅÏ¢ #tagMCEquipPartPlusInfo  
 | 
    ePartXLPack = ChPyNetSendPack.tagMCEquipPartXLAttrInfo() # A3 BB ×°±¸Î»Ï´Á·ÊôÐÔÐÅÏ¢ #tagMCEquipPartXLAttrInfo  
 | 
    ePartStonePack = ChPyNetSendPack.tagMCStoneInfo() # A3 BC Í¨Öª×°±¸Î»¿×λ±¦Ê¯ID #tagMCStoneInfo  
 | 
      
 | 
    orangeEquipCount = 0  
 | 
    totalStar = 0  
 | 
    totalPlusLV = 0  
 | 
    totalEvolveLV = 0  
 | 
    totalWashLV = 0  
 | 
    totalStoneLV = 0  
 | 
    holeIndexList = Operate_EquipStone.GetAllEquipPlaceHoleIndex()  
 | 
      
 | 
    gameData = GameWorld.GetGameData()  
 | 
    packType = IPY_GameWorld.rptEquip  
 | 
    equipPack = curPlayer.GetItemManager().GetPack(packType)  
 | 
    for index in xrange(equipPack.GetCount()):  
 | 
        ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':index}, isLogNone=False)  
 | 
        if not ipyData:  
 | 
            continue  
 | 
        # Ö»¼ÆËãÓн׵ľ³½ç×°±¸  
 | 
        if not ipyData.GetClassLV():  
 | 
            continue  
 | 
          
 | 
        curEquip = equipPack.GetAt(index)  
 | 
        if not curEquip.IsEmpty():  
 | 
            if curEquip.GetItemColor() >= ShareDefine.Def_Item_Color_Orange:  
 | 
                orangeEquipCount += 1  
 | 
                  
 | 
        # ÐǼ¶  
 | 
        starLV = GetEquipPartStar(curPlayer, index)  
 | 
        totalStar += starLV  
 | 
          
 | 
        # Ç¿»¯µÈ¼¶  
 | 
        plusProficiency = GetEquipPartProficiency(curPlayer, packType, index)  
 | 
        plusLV = GetEquipPartPlusLV(curPlayer, packType, index)  
 | 
        totalPlusLV += plusLV  
 | 
          
 | 
        # ½ø»¯µÈ¼¶  
 | 
        evolveLV = GetEquipPartPlusEvolveLV(curPlayer, packType, index)  
 | 
        totalEvolveLV += evolveLV  
 | 
          
 | 
        # Ï´Á·µÈ¼¶  
 | 
        washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % index)  
 | 
        totalWashLV += washLV  
 | 
          
 | 
        # ±¦Ê¯µÈ¼¶  
 | 
        stoneIDList, stoneIsBindList = [], []  
 | 
        for holeIndex in holeIndexList:  
 | 
            stoneID, stoneIsBind = Operate_EquipStone.GetEquipIndexStoneIDAndIsBand(curPlayer, index, holeIndex)  
 | 
            stoneIDList.append(stoneID)  
 | 
            stoneIsBindList.append(stoneIsBind)  
 | 
            if stoneID == 0:  
 | 
                continue  
 | 
            curStone = gameData.GetItemByTypeID(stoneID)  
 | 
            stoneLV = 0 if not curStone else curStone.GetEffectByIndex(0).GetEffectValue(1)  
 | 
            totalStoneLV += stoneLV  
 | 
              
 | 
        # ÐǼ¶ÐÅÏ¢°ü  
 | 
        if starLV:  
 | 
            ePartStarLV = ChPyNetSendPack.tagMCEquipPartStar()  
 | 
            ePartStarLV.Clear()  
 | 
            ePartStarLV.EquipPackIndex = index  
 | 
            ePartStarLV.Star = starLV  
 | 
            ePartStarLVPack.InfoList.append(ePartStarLV)  
 | 
          
 | 
        # Ç¿»¯¡¢½ø»¯ÐÅÏ¢°ü  
 | 
        if plusLV or plusProficiency or evolveLV:  
 | 
            ePartPlusLV = ChPyNetSendPack.tagMCEquipPartPlusLV()  
 | 
            ePartPlusLV.Clear()  
 | 
            ePartPlusLV.PackType = packType  
 | 
            ePartPlusLV.EquipIndex = index  
 | 
            ePartPlusLV.EquipPartStarLV = plusLV  
 | 
            ePartPlusLV.Proficiency = plusProficiency  
 | 
            ePartPlusLV.EvolveLV = evolveLV  
 | 
            ePartPlusLVPack.InfoList.append(ePartPlusLV)  
 | 
              
 | 
        # Ï´Á·ÐÅÏ¢°ü  
 | 
        hasXLValue = False  
 | 
        xlAttrList = []  
 | 
        for attrNum in xrange(1, Operate_EquipWash.Def_EquipWashMaxAttrCount + 1):  
 | 
            washValue = ChPyNetSendPack.tagMCEquipPartXLAttrValue()  
 | 
            washValue.XLAttrValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (index, attrNum))  
 | 
            washValue.XLAttrChange = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValueTemp % (index, attrNum))  
 | 
            xlAttrList.append(washValue)  
 | 
            if washValue.XLAttrValue or washValue.XLAttrChange:  
 | 
                hasXLValue = True  
 | 
        if hasXLValue or washLV:  
 | 
            ePartXLAttr = ChPyNetSendPack.tagMCEquipPartXLAttr()  
 | 
            ePartXLAttr.EquipPlace = index  
 | 
            ePartXLAttr.XLAttrLV = washLV  
 | 
            ePartXLAttr.XLAttrList = xlAttrList  
 | 
            ePartXLAttr.XLAttrCnt = len(ePartXLAttr.XLAttrList)  
 | 
            ePartXLPack.InfoList.append(ePartXLAttr)  
 | 
              
 | 
        # ±¦Ê¯ÐÅÏ¢°ü  
 | 
        stoneCount = len(stoneIDList)  
 | 
        if stoneIDList.count(0) != stoneCount:  
 | 
            stoneMsg = ChPyNetSendPack.tagMCStoneMsg()  
 | 
            stoneMsg.EquipPlace = index  
 | 
            stoneMsg.MaxStoneCount = stoneCount   
 | 
            stoneMsg.StoneInfo = stoneIDList  
 | 
            stoneMsg.StoneBind = stoneIsBindList  
 | 
            ePartStonePack.InfoList.append(stoneMsg)  
 | 
              
 | 
    # Í¨Öª·â°ü£¬ÓÐֵʱ²Å֪ͨ  
 | 
    if ePartStarLVPack.InfoList:  
 | 
        ePartStarLVPack.Count = len(ePartStarLVPack.InfoList)  
 | 
        NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack)  
 | 
      
 | 
    if ePartPlusLVPack.InfoList:  
 | 
        ePartPlusLVPack.Count = len(ePartPlusLVPack.InfoList)  
 | 
        NetPackCommon.SendFakePack(curPlayer, ePartPlusLVPack)  
 | 
      
 | 
    if ePartXLPack.InfoList:  
 | 
        ePartXLPack.Count = len(ePartXLPack.InfoList)  
 | 
        NetPackCommon.SendFakePack(curPlayer, ePartXLPack)  
 | 
          
 | 
    if ePartStonePack.InfoList:  
 | 
        ePartStonePack.EquipCount = len(ePartStonePack.InfoList)    
 | 
        NetPackCommon.SendFakePack(curPlayer, ePartStonePack)  
 | 
          
 | 
    Operate_EquipPlus.SyncEquipMasterPlusLVInfo(curPlayer)  
 | 
      
 | 
    # ¸üÐÂͳ¼Æ»ã×ÜÖµ  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PlayerKey_EquipOrangeCount, orangeEquipCount)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipStar, totalStar)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusLV, totalPlusLV)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusEvolveLV, totalEvolveLV)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipWashLV, totalWashLV)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalStoneLV, totalStoneLV)  
 | 
    GameWorld.DebugLog("µÇ¼¸üÐÂ×°±¸Ïà¹ØÖµ»ã×Ü: orangeEquipCount=%s,totalStar=%s,totalPlusLV=%s,totalEvolveLV=%s,totalWashLV=%s,totalStoneLV=%s"   
 | 
                       % (orangeEquipCount, totalStar, totalPlusLV, totalEvolveLV, totalWashLV, totalStoneLV))  
 | 
    Sync_EquipPartSuiteActivateInfo(curPlayer)  
 | 
    return  
 | 
  
 | 
## Ë¢ÐÂËùÓÐ×°±¸¶ÔÈËÎïÊôÐÔµÄ¸Ä±ä  
 | 
#  @param self ÀàʵÀý  
 | 
#  @return ·µ»ØÖµÎÞÒâÒå  
 | 
#  @remarks Ë¢ÐÂ×°±¸¶ÔÈËÎïÊôÐÔµÄ¸Ä±ä  
 | 
#===============================================================================  
 | 
# def __RefreshPlayerAllEquipBuff(curPlayer):  
 | 
#    #³õʼ»¯ÈËÎï×°±¸buff  
 | 
#    curPlayer.GetEquipBuff().Clear()  
 | 
#   
 | 
#    packType = IPY_GameWorld.rptEquip  
 | 
#          
 | 
#    equipPackList = [IPY_GameWorld.rptEquip, IPY_GameWorld.rptHorseEquip]  
 | 
#      
 | 
#    #stoneLVCntList = []  
 | 
#    #===========================================================================  
 | 
#    orangeQualityCnt = 0 #³Èɫװ±¸ÊýÁ¿(°üº¬³ÈɫƷÖÊÒÔÉϵÄ×°±¸ÊýÁ¿)  
 | 
#    for packIndex in equipPackList:  
 | 
#        equipPack = curPlayer.GetItemManager().GetPack(packIndex)  
 | 
#      
 | 
#        for equipIndex in range(0, equipPack.GetCount()):  
 | 
#              
 | 
#            #±¸ÓÃ×°±¸À¸²»´¦Àí  
 | 
#            if packIndex == IPY_GameWorld.rptEquip and equipIndex not in ShareDefine.RoleEquipType:  
 | 
#                continue  
 | 
#              
 | 
#            curEquip = equipPack.GetAt(equipIndex)  
 | 
#              
 | 
#            if curEquip.IsEmpty():  
 | 
#                continue  
 | 
#   
 | 
#            if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):  
 | 
#                # ¹ýÆÚ  
 | 
#                continue  
 | 
#              
 | 
#            #×°±¸´¥·¢µÄ¼¼ÄÜ £¨È«Éí£©  
 | 
#            CalcCurEquip_SkillBuff(curPlayer, curEquip)  
 | 
#              
 | 
#              
 | 
#              
 | 
#            # ºóÃæµÄΪ½Çɫװ±¸×¨Óô¦Àí  
 | 
#            #===================================================================  
 | 
#            # if packIndex != IPY_GameWorld.rptEquip:  
 | 
#            #    continue  
 | 
#            #   
 | 
#            # if isSuite or curEquip.GetItemTypeID() in ReadChConfig.GetEvalChConfig("AddSuiteNumEquitList"):  
 | 
#            #    suiteEquipCnt += 1  
 | 
#            #===================================================================  
 | 
#              
 | 
#    #Ì××°¼Óbuff ¸ù¾Ý×°±¸ÏÖÓеÄÌ××°µÄ¸öÊý×Öµä   
 | 
# #===============================================================================  
 | 
# #    #È«Éí³Èɫװ±¸ÊýÁ¿´¥·¢Ïà¹Ø  
 | 
# #    OnOrangeQualityCntChange(curPlayer, orangeQualityCnt)  
 | 
# #      
 | 
# #    # ÖØÖü¤»îÌáʾÀàÐÍΪNone  
 | 
# #    curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_None)  
 | 
# #===============================================================================  
 | 
#      
 | 
#    # ×°±¸ÄÚ²ãbuff  
 | 
#    allAttrListEquip = [{} for i in range(4)] # ²»°üº¬³á°ò¼°×°±¸ÉÏÏâǶµÄ±¦Ê¯  
 | 
#    SkillShell.CalcCurBuffer_Effect(curPlayer.GetEquipBuff(), curPlayer, allAttrListEquip)  
 | 
#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBuff, allAttrListEquip)  
 | 
#      
 | 
#    # ×°±¸Íâ²ãbuffÊôÐÔ£¬´ËbuffËãÕ½Á¦  
 | 
#    allAttrListEquptBuffs = [{} for i in range(4)]  
 | 
#    SkillShell.CalcCurBuffer_Effect(curPlayer.GetEquipBuff(), curPlayer,   
 | 
#                                    allAttrListEquptBuffs, [], ChConfig.CalcBuffLevel_1)  
 | 
#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBuff1, allAttrListEquptBuffs)  
 | 
#      
 | 
#    return  
 | 
#===============================================================================  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
# #//07 03 ÈËÎï×°±¸ÎïÆ·#tagCEquipItem  
 | 
# //½Çɫװ±¸ÀàÐÍ  
 | 
# int GetRoleEquipType();  
 | 
# //ÎïÆ·ÔÚÎïÆ·±³°üµÄË÷Òý  
 | 
# int GetItemIndex();  
 | 
#===============================================================================  
 | 
## ÈËÎï×°±¸ÎïÆ·  
 | 
#  @param index ±³°üË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //07 03 ÈËÎï×°±¸ÎïÆ·#tagCEquipItem  
 | 
def PlayerEquipItem(index, tick):  
 | 
    GameWorld.GetPsycoFunc(__Func_PlayerEquipItem)(index, tick)  
 | 
    return  
 | 
  
 | 
  
 | 
## ÈËÎï×°±¸ÎïÆ·  
 | 
#  @param index ±³°üË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //07 03 ÈËÎï×°±¸ÎïÆ·#tagCEquipItem  
 | 
def __Func_PlayerEquipItem(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    sendPack = IPY_GameWorld.IPY_CEquipItem()  
 | 
    #ÎïÆ·ÔÚÎïÆ·±³°üµÄË÷Òý  
 | 
    packItemIndex = sendPack.GetItemIndex()  
 | 
    #½Çɫװ±¸²¿Î»  
 | 
    equipPackIndex = sendPack.GetRoleEquipType()  
 | 
      
 | 
    #¼ì²éÍæ¼Ò״̬ÊÇ·ñ¿ÉÒÔ»»×°  
 | 
    if not CheckPlayerCanEquipItem(curPlayer):  
 | 
        return  
 | 
      
 | 
    #¼ì²é»»×°¼ä¸ô  
 | 
    #===========================================================================  
 | 
    # if tick - curPlayer.GetLastChangeEquipTick() <= ChConfig.Def_MinChangeEquipTime:  
 | 
    #    #GameWorld.Log("¸ü»»×°±¸Ê±¼ä¹ý¶Ì! %d"%(tick - curPlayer.GetLastChangeEquipTick()))         
 | 
    #    return  
 | 
    #   
 | 
    # curPlayer.SetLastChangeEquipTick(tick)  
 | 
    #===========================================================================  
 | 
      
 | 
    #---»ñÈ¡·â°üÐèҪװ±¸µÄÎïÆ·---  
 | 
    rolePack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)  
 | 
    curItem = rolePack.GetAt(packItemIndex)  
 | 
    #---Ö´ÐÐÍæ¼Ò»»×°Âß¼---  
 | 
    if DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick):  
 | 
        return  
 | 
      
 | 
    #»»×°Ê§°Ü֪ͨ¿Í»§¶ËÐÅÏ¢  
 | 
    curPlayer.Notify_ItemPutFail(IPY_GameWorld.rptItem, packItemIndex, IPY_GameWorld.rptEquip, 0)  
 | 
    return  
 | 
  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
## Ò»¼ü»»×°£¨·â°ü£©  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def OneKeyChangeEquip(index, tick):  
 | 
    return  
 | 
  
 | 
  
 | 
## Íæ¼ÒжÏÂ×°±¸(·â°ü²ÎÊý)  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def PlayerUnEquip(index, tick):  
 | 
    GameWorld.GetPsycoFunc(__Func_PlayerUnEquip)(index, tick)  
 | 
    return  
 | 
  
 | 
  
 | 
#---------------------------------------------------------------------      
 | 
## Íæ¼ÒжÏÂ×°±¸(·â°ü²ÎÊý)  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def __Func_PlayerUnEquip(index, tick):  
 | 
    sendPack = IPY_GameWorld.IPY_CUnEquipItem()  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    if not CheckPlayerCanEquipItem(curPlayer):  
 | 
        return  
 | 
      
 | 
    equipPackIndex = sendPack.GetEquipIndex()  
 | 
  
 | 
    #Èç¹ûжϵÄÊÇÂíÆ¥£¬ÐèÒªÅж¨Èç¹ûÂíÆ¥×°±¸±³°üÓÐÎïÆ·£¬²»È÷ÅÏ  
 | 
    #===========================================================================  
 | 
    # if equipIndex == IPY_GameWorld.rptHorse :  
 | 
    #    itemEquipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptHorseEquip)  
 | 
    #      
 | 
    #    if not ItemControler.GetPackIsEmpty(itemEquipPack):  
 | 
    #        PlayerControl.NotifyCode(curPlayer, "7E355D97-520A-4A8C-8BC993AAEAF6071F")  
 | 
    #        return  
 | 
    #===========================================================================  
 | 
      
 | 
    playerItemControl = ItemControler.PlayerItemControler(curPlayer)  
 | 
    result = playerItemControl.UnEquipItem(equipPackIndex, sendPack.GetPackIndex())  
 | 
      
 | 
    if not result:  
 | 
        #жÏÂ×°±¸Ê§°Ü  
 | 
        return  
 | 
      
 | 
    equipID = result[0]  
 | 
    equipPlace = result[1]  
 | 
    itemClassLV = result[2]  
 | 
      
 | 
    ##ÌØÊâ×°±¸ , ²»ÐèÒª³åË¢ÊôÐÔ  
 | 
    if equipPlace in ChConfig.EquipItemNoRefreshState:  
 | 
        return  
 | 
      
 | 
    #ÏÈË¢×°±¸BUFF ÔÙ¼ÆËãÊôÐÔ  
 | 
    if equipPlace in ChConfig.EquipPlace_LingQi:  
 | 
        RefreshPlayerLingQiEquipAttr(curPlayer)  
 | 
    elif itemClassLV:  
 | 
        RefreshPlayerEquipAttribute(curPlayer, itemClassLV)  
 | 
      
 | 
    #Ë¢ÐÂËùÓÐÊôÐÔ  
 | 
    playControl = PlayerControl.PlayerControl(curPlayer)  
 | 
    playControl.RefreshPlayerAttrState()  
 | 
      
 | 
    #×°±¸µÄ±»¶¯´¥·¢À༼ÄÜ  
 | 
    PassiveBuffEffMng.GetPassiveEffManager().RegistSuperEquipSkillDict(curPlayer)  
 | 
    return  
 | 
  
 | 
#// A3 18 ÁéÆ÷Í»ÆÆ #tagCMLingQiEquipBreak  
 | 
#  
 | 
#struct    tagCMLingQiEquipBreak  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#    DWORD        ItemID;  //Í»ÆÆµÄÎïÆ·ID  
 | 
#};   
 | 
def OnLingQiEquipBreak(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    breakItemID = clientData.ItemID  
 | 
    ipyData = IpyGameDataPY.GetIpyGameData('LingQiAttr', breakItemID)  
 | 
    if not ipyData:  
 | 
        return  
 | 
    nextItemID = ipyData.GetNextItemID() #Í»ÆÆºóµÄÎïÆ·ID  
 | 
    if not IpyGameDataPY.GetIpyGameData('LingQiAttr', nextItemID):  
 | 
        return  
 | 
    breakItemData = GameWorld.GetGameData().GetItemByTypeID(breakItemID)  
 | 
    nextItemData = GameWorld.GetGameData().GetItemByTypeID(nextItemID)  
 | 
    if not breakItemData or not nextItemData:  
 | 
        return  
 | 
    equipIndex = ItemCommon.GetEquipPackIndex(breakItemData)  
 | 
    if equipIndex != ItemCommon.GetEquipPackIndex(nextItemData):  
 | 
        GameWorld.DebugLog("Í»ÆÆµÄÎïÆ·ºÍÍ»ÆÆºóµÄÎïÆ·²»ÊÇͬ¸ö×°±¸Î»£¡breakItemID=%s,nextItemID=%s"   
 | 
                           % (breakItemID, nextItemID))  
 | 
        return  
 | 
    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)  
 | 
    curEquip = equipPack.GetAt(equipIndex)  
 | 
    if not curEquip or curEquip.IsEmpty():  
 | 
        GameWorld.DebugLog("Í»ÆÆµÄÎïÆ·Î´´©´÷£¡breakItemID=%s"   
 | 
                           % (breakItemID))  
 | 
        return  
 | 
    if curEquip.GetEndureReduceType():  
 | 
        GameWorld.DebugLog("Í»ÆÆµÄÎïÆ·ÊÇʱЧÎïÆ·£¡breakItemID=%s"   
 | 
                           % (breakItemID))  
 | 
        return  
 | 
    if curEquip.GetItemTypeID() != breakItemID:  
 | 
        GameWorld.DebugLog("Í»ÆÆµÄÎïÆ·Î´´©´÷£¡breakItemID=%s"   
 | 
                           % (breakItemID))  
 | 
        return  
 | 
          
 | 
          
 | 
    costItemDict = ipyData.GetUpCostItem()  
 | 
    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)  
 | 
    lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(costItemDict, itemPack)  
 | 
    if lackItemDict:  
 | 
        GameWorld.DebugLog("Í»ÆÆÏûºÄÎïÆ·²»×㣡breakItemID=%s,costItemDict=%s,lackItemDict=%s"   
 | 
                           % (breakItemID, costItemDict, lackItemDict))  
 | 
        return  
 | 
      
 | 
    #¿ÛÏûºÄ  
 | 
    ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, 'LingQiEquipBreak')  
 | 
    ItemCommon.DelItem(curPlayer, curEquip, 1, False, ChConfig.ItemDel_LingQiEquipBreak, {}, True)  
 | 
    #¸øÍ»ÆÆºóÁéÆ÷  
 | 
    if not ItemControler.PutItemInTempSwap(curPlayer, nextItemID):  
 | 
        GameWorld.Log("ÁéÆ÷Í»ÆÆºóID(%s)·ÅÈëÁÙʱ½»»»±³°üʧ°Ü!" % (nextItemID), curPlayer.GetID())  
 | 
        return  
 | 
    ItemCommon.DoLogicSwitchItemEx(curPlayer, ShareDefine.rptTempSwap, IPY_GameWorld.rptEquip, 0, equipIndex)  
 | 
  
 | 
    changeItemStarLV = 0  #curItem.GetItemStarLV()  
 | 
    changeItemStoneCnt = 0  #curItem.GetUseStoneCount()  
 | 
    changeItemHoleCnt = 0  #curItem.GetCanPlaceStoneCount()  
 | 
    changeItemUseData = ''  
 | 
    curPlayer.ChangeEquip(nextItemID, equipIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)  
 | 
    #Ë¢ÊôÐÔ  
 | 
    RefreshPlayerLingQiEquipAttr(curPlayer)  
 | 
    playControl = PlayerControl.PlayerControl(curPlayer)  
 | 
    playControl.RefreshPlayerAttrState()  
 | 
    #֪ͨ½á¹û  
 | 
    resultPack = ChPyNetSendPack.tagMCLingQiEquipBreakResult()  
 | 
    resultPack.Clear()  
 | 
    resultPack.MakeItemID = nextItemID  
 | 
    NetPackCommon.SendFakePack(curPlayer, resultPack)  
 | 
    PlayerControl.WorldNotify(0, 'SpiritOrgan', [curPlayer.GetName(), breakItemID, nextItemID])  
 | 
    return  
 | 
  
 | 
def RefreshPlayerLingQiEquipAttr(curPlayer):  
 | 
    ''' Ë¢ÐÂÍæ¼ÒÁéÆ÷×°±¸ÊôÐÔ  
 | 
    '''  
 | 
      
 | 
    classLV = 0 # ÁéÆ÷½×ĬÈÏΪ0  
 | 
    allAttrList = [{} for _ in range(4)]  
 | 
    lingQiAttrList = [{} for _ in range(4)]  
 | 
    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)  
 | 
    equipScoreTotal = 0  
 | 
    lv = curPlayer.GetLV()  
 | 
    lqAttrFormatDict = IpyGameDataPY.GetFuncEvalCfg("OutOfPrintValue", 2, {})  
 | 
      
 | 
    for equipPlace in ChConfig.EquipPlace_LingQi:  
 | 
          
 | 
        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)  
 | 
        if not ipyData:  
 | 
            continue  
 | 
          
 | 
        equipIndex = ipyData.GetGridIndex()  
 | 
        curEquip = equipPack.GetAt(equipIndex)  
 | 
        if not curEquip or curEquip.IsEmpty():  
 | 
            continue  
 | 
          
 | 
        if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):  
 | 
            # ¹ýÆÚ  
 | 
            continue  
 | 
          
 | 
        equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)  
 | 
          
 | 
        itemID = curEquip.GetItemTypeID()  
 | 
        #»ù´¡ÊôÐÔЧ¹û  
 | 
        for effIndex in xrange(curEquip.GetEffectCount()):  
 | 
            curEff = curEquip.GetEffectByIndex(effIndex)  
 | 
            effID = curEff.GetEffectID()  
 | 
            if effID == 0:  
 | 
                break  
 | 
            PlayerControl.CalcAttrDict_Type(effID, curEff.GetEffectValue(0), lingQiAttrList)  
 | 
              
 | 
        #ÁéÆ÷ÊôÐÔ  
 | 
        lingQiIpyData = IpyGameDataPY.GetIpyGameDataNotLog("LingQiAttr", itemID)  
 | 
        if lingQiIpyData:  
 | 
            lingQiAttrIDList = lingQiIpyData.GetLingQiAttrID()  
 | 
            lingQiAttrValueList = lingQiIpyData.GetLingQiAttrValue()  
 | 
            for lqIndex, lqAttrID in enumerate(lingQiAttrIDList):  
 | 
                if str(lqAttrID) in lqAttrFormatDict:  
 | 
                    attrFormat = lqAttrFormatDict[str(lqAttrID)]  
 | 
                    maxOOPValue = lingQiAttrValueList[lqIndex]  
 | 
                    lqAttrValue = eval(FormulaControl.GetCompileFormula("LingQiAttrFormat_%s" % lqAttrID, attrFormat))  
 | 
                else:  
 | 
                    lqAttrValue = lingQiAttrValueList[lqIndex]  
 | 
                      
 | 
                PlayerControl.CalcAttrDict_Type(lqAttrID, lqAttrValue, lingQiAttrList)  
 | 
                  
 | 
        #ÁéÆ÷¸÷²¿Î»ÆäËûÊôÐÔ  
 | 
        if equipPlace == ShareDefine.retWing:  
 | 
            PlayerWing.CalcWingAttrEx(curPlayer, curEquip, allAttrList)  
 | 
          
 | 
    lqFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))  
 | 
    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_LingQi, lqFightPowerEx)  
 | 
      
 | 
    #GameWorld.DebugLog("ÁéÆ÷ÊôÐÔ1: %s" % allAttrList)  
 | 
    #GameWorld.DebugLog("ÁéÆ÷ÊôÐÔ2: %s" % lingQiAttrList)  
 | 
    #GameWorld.DebugLog("ÁéÆ÷ÆÀ·ÖÕ½Á¦: equipScoreTotal=%s, %s" % (equipScoreTotal, lqFightPowerEx))  
 | 
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQi, allAttrList)  
 | 
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQiAttr, lingQiAttrList)  
 | 
    return  
 | 
  
 | 
def __CalcEquips_Effect(curPlayer, classLV):  
 | 
    ''' ¾³½ç×°±¸ÏµÍ³ÊôÐÔ  
 | 
    1. ×°±¸Ä£¿é£¬Ã¿¸ö¾³½ç½×¶ÀÁ¢£¬Ã¿¸ö¾³½çÕ½Á¦¶ÀÁ¢Ä£¿é¼ÆËã  
 | 
        1.1 ×°±¸±¾ÉíÊôÐÔ: ²»ÄÜÓÐÓ°ÏìÆäËû¾³½ç×°±¸µÄÊôÐÔ  
 | 
                                »ù´¡ÊôÐÔ: ÎïÆ·±íÖеÄÅäÖà  
 | 
                                ´«ÆæÊôÐÔ:   
 | 
                                  
 | 
    2.×°±¸Î»ÐǼ¶Ä£¿é      
 | 
        2.1 ×°±¸Î»ÉýÐÇÊôÐÔ£º²»ÄÜÓÐÓ°ÏìÆäËû¾³½ç×°±¸µÄÊôÐÔ  
 | 
                                ÉýÐÇ»ù´¡ÊôÐÔ£¬ÊôÐÔÊôÓÚ×°±¸»ù´¡  
 | 
                                ÉýÐǵȼ¶ÊôÐÔ£¬»áÓ°Ïì±¾½××°±¸»ù´¡  
 | 
                                ÐǼ¶Ì××°ÊôÐÔ£¬Ïê¼ûÌ××°ÊôÐÔ  
 | 
                      
 | 
        2.2 ×°±¸Î»Ì××°ÊôÐÔ£º²»ÄÜÓÐÓ°ÏìÆäËû¾³½ç×°±¸µÄÊôÐÔ  
 | 
                                ÓÉ×°±¸Î»ÊÇ·ñÌ××°¼°ÐǼ¶Êý¾ö¶¨Ì××°ÊôÐÔ  
 | 
              
 | 
    3.×°±¸Î»Ç¿»¯Ä£¿é£ºÕ½Á¦ÎªËùÓо³½ç×°±¸Î»Ç¿»¯ÊôÐÔ×ܺÍÕ½Á¦  
 | 
                    Ç¿»¯µÈ¼¶ÊôÐÔ      
 | 
                    ½ø»¯µÈ¼¶ÊôÐÔ£¬Ó°Ïì±¾²¿Î»±¾¾³½ç×°±¸»ù´¡  
 | 
                      
 | 
    4.×°±¸Î»±¦Ê¯ÊôÐÔ£ºÕ½Á¦ÎªËùÓо³½ç×°±¸Î»±¦Ê¯ÊôÐÔ×ܺÍÕ½Á¦  
 | 
                    ±¦Ê¯µÈ¼¶ÊôÐÔ  
 | 
                    ±¦Ê¯¾õÐÑÊôÐÔ£¬»áÓ°Ïì±¾½××°±¸»ù´¡  
 | 
                      
 | 
    5.×°±¸Î»Ï´Á·ÊôÐÔ£ºÕ½Á¦ÎªËùÓо³½ç×°±¸Î»Ï´Á·ÊôÐÔ×ܺÍÕ½Á¦  
 | 
                    Ï´Á·µÈ¼¶ÊôÐÔ  
 | 
                    Ï´Á·Ì××°ÊôÐÔ£¬»áÓ°Ïì±¾½××°±¸»ù´¡  
 | 
    '''  
 | 
      
 | 
    if classLV < 1:  
 | 
        GameWorld.ErrLog("Ë¢¾³½ç×°±¸ÊôÐÔ½×´íÎó!µ±Ç°²»Ö§³Ö¸Ã½×Ä£¿é: classLV=%s" % classLV)  
 | 
        return  
 | 
    #GameWorld.DebugLog("----- Ë¢¾³½ç×°±¸Õ½Á¦: classLV=%s" % (classLV))  
 | 
      
 | 
    allEquipBaseAttrDict = {} # ËùÓÐ×°±¸»ù´¡ÊôÐÔ {attrID:value, ...}  
 | 
    baseEquipBaseAttrDict = {} # »ù´¡×°±¸»ù´¡ÊôÐÔ{attrID:value, ...}  
 | 
    equipBaseAttrDict = {} # ×°±¸»ù´¡ÊôÐÔ {×°±¸Î»:{attrID:value, ...}, ...}  
 | 
      
 | 
    allAttrListEquip = [{} for _ in range(4)]  # ×°±¸ÊôÐÔ  
 | 
    equip_addEquipBaseAttrPerList = [{}, {}, {}] # ×°±¸¹¦Äܵã¶Ô×°±¸»ù´¡µÄ¼Ó³ÉÐÅÏ¢ [ËùÓв¿Î», »ù´¡²¿Î», Ö¸¶¨²¿Î»]  
 | 
    allAttrListStar = [{} for _ in range(4)]  # ÉýÐÇÊôÐÔ  
 | 
    star_addEquipBaseAttrPerList = [{}, {}, {}] # ÉýÐǹ¦Äܵã¶Ô×°±¸»ù´¡µÄ¼Ó³ÉÐÅÏ¢ [ËùÓв¿Î», »ù´¡²¿Î», Ö¸¶¨²¿Î»]  
 | 
    allAttrListPlus = [{} for _ in range(4)]  # Ç¿»¯ÊôÐÔ  
 | 
    plus_addEquipBaseAttrPerList = [{}, {}, {}] # Ç¿»¯¹¦Äܵã¶Ô×°±¸»ù´¡µÄ¼Ó³ÉÐÅÏ¢ [ËùÓв¿Î», »ù´¡²¿Î», Ö¸¶¨²¿Î»]  
 | 
    allAttrListStone = [{} for _ in range(4)]  # ±¦Ê¯ÊôÐÔ  
 | 
    #stone_addEquipBaseAttrPerList = [{}, {}, {}] # ±¦Ê¯¹¦Äܵã¶Ô×°±¸»ù´¡µÄ¼Ó³ÉÐÅÏ¢ [ËùÓв¿Î», »ù´¡²¿Î», Ö¸¶¨²¿Î»]  
 | 
    allAttrListWash = [{} for _ in range(4)]  # Ï´Á·ÊôÐÔ  
 | 
    #wash_addEquipBaseAttrPerList = [{}, {}, {}] # Ï´Á·¹¦Äܵã¶Ô×°±¸»ù´¡µÄ¼Ó³ÉÐÅÏ¢ [ËùÓв¿Î», »ù´¡²¿Î», Ö¸¶¨²¿Î»]  
 | 
      
 | 
    packType = IPY_GameWorld.rptEquip  
 | 
    playerEquip = curPlayer.GetItemManager().GetPack(packType)  
 | 
    equipPartStarIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])  
 | 
    #maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2)  #×î´óÌ××°ÀàÐÍ  
 | 
    #equipPlaceList = []  # Óд©´÷×°±¸µÄ×°±¸Î»ÁÐ±í  
 | 
    suitCntDict = {}  #Ì××°ÊýÁ¿×Öµä  
 | 
    #legendAttrDict = {}  #ËùÓд«ÆæÊôÐÔ  
 | 
    equipScoreTotal = 0  #Ϊ½â¾ö×°±¸ÆÀ·Ö¡¢Õ½Á¦²»Ò»ÖµÄÇé¿ö£¬×°±¸Õ½Á¦¸ÄΪÓÉÆÀ·Ö×÷Ϊ²ÎÊý¼ÆËãÕ½Á¦  
 | 
      
 | 
    basePlusLVMin = None # »ù´¡×°±¸×îСǿ»¯µÈ¼¶£¬¼ÆËã´óʦǿ»¯ÊôÐÔÓà  
 | 
      
 | 
    # 1. Ñ»·±éÀú±¾½××°±¸  
 | 
    for equipPlace in equipPartStarIndexList:  
 | 
        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)  
 | 
        if not ipyData:  
 | 
            continue  
 | 
        equipIndex = ipyData.GetGridIndex()  
 | 
        curEquip = playerEquip.GetAt(equipIndex)  
 | 
        if not curEquip or curEquip.IsEmpty():  
 | 
            continue  
 | 
          
 | 
        #if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):  
 | 
        #    # ¹ýÆÚ£¬Ôݲ»Åжϣ¬ÒÔºó¾³½ç×°±¸ÓÐʱЧװ±¸ÔÙ¿ªÆô  
 | 
        #    continue  
 | 
          
 | 
        #equipPlaceList.append(equipIndex)  
 | 
        equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)  
 | 
          
 | 
        baseAttrDict = {} # ×°±¸Î»»ù´¡ÊôÐÔ: ÎïÆ·±í + ÐǼ¶»ù´¡  
 | 
        isBaseEquip = equipPlace in ChConfig.EquipPlace_Base  
 | 
          
 | 
        #GameWorld.DebugLog("×°±¸Î» %s: itemID=%s,isBaseEquip=%s,equipScoreTotal=%s" % (equipPlace, curEquip.GetItemTypeID(), isBaseEquip, equipScoreTotal))  
 | 
          
 | 
        #»ù´¡ÊôÐÔЧ¹û  
 | 
        for i in xrange(curEquip.GetEffectCount()):  
 | 
            curEffect = curEquip.GetEffectByIndex(i)  
 | 
            if not curEffect:  
 | 
                break  
 | 
            effectID = curEffect.GetEffectID()  
 | 
            if effectID == 0:  
 | 
                #×îºóÒ»¸ö  
 | 
                break  
 | 
            effectValue = curEffect.GetEffectValue(0)  
 | 
            if not effectValue:  
 | 
                continue  
 | 
            PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrListEquip)  
 | 
            baseAttrDict[effectID] = baseAttrDict.get(effectID, 0) + effectValue  
 | 
            allEquipBaseAttrDict[effectID] = allEquipBaseAttrDict.get(effectID, 0) + effectValue  
 | 
            if isBaseEquip:  
 | 
                baseEquipBaseAttrDict[effectID] = baseEquipBaseAttrDict.get(effectID, 0) + effectValue  
 | 
            #GameWorld.DebugLog("    ÎïÆ·±íÊôÐÔ: ID=%s +%s" % (effectID, effectValue))  
 | 
                  
 | 
        #ÐÇÊýÊôÐÔ  
 | 
        equipPartStar = GetEquipPartStarByRank(curPlayer, equipIndex, curEquip) # ÉúЧµÄÐÇÊý  
 | 
        if equipPartStar:  
 | 
            #GameWorld.DebugLog("    ÐǼ¶ÊôÐÔ: classLV=%s, equipPlace=%s, equipPartStar=%s" % (classLV, equipPlace, equipPartStar))  
 | 
            ipyData = IpyGameDataPY.GetIpyGameData('EquipStarUp', classLV, equipPlace, equipPartStar)  
 | 
            starBaseAttrDict = {} if not ipyData else ipyData.GetBaseAttrInfo() # ÐǼ¶»ù´¡  
 | 
            for starBaseAttrID, starBaseAttrValue in starBaseAttrDict.items():  
 | 
                PlayerControl.CalcAttrDict_Type(starBaseAttrID, starBaseAttrValue, allAttrListStar)  
 | 
                baseAttrDict[starBaseAttrID] = baseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue  
 | 
                allEquipBaseAttrDict[starBaseAttrID] = allEquipBaseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue  
 | 
                if isBaseEquip:  
 | 
                    baseEquipBaseAttrDict[starBaseAttrID] = baseEquipBaseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue  
 | 
                #GameWorld.DebugLog("    ÐǼ¶»ù´¡ÊôÐÔ: ID=%s +%s" % (starBaseAttrID, starBaseAttrValue))  
 | 
                      
 | 
            starAttrDict = {} if not ipyData else ipyData.GetStarAttrInfo() # ÐǼ¶¸½¼Ó  
 | 
            for starAttrID, starAttrValue in starAttrDict.items():  
 | 
                PlayerControl.CalcAttrDict_Type(starAttrID, starAttrValue, allAttrListStar)  
 | 
                #GameWorld.DebugLog("    ÐǼ¶¸½¼ÓÊôÐÔ: ID=%s +%s" % (starAttrID, starAttrValue))  
 | 
                __CalcFuncAddEquipAttrPer(equipPlace, starAttrID, starAttrValue, star_addEquipBaseAttrPerList)  
 | 
                  
 | 
        equipBaseAttrDict[equipPlace] = baseAttrDict  
 | 
          
 | 
        #Ì××°¼ÆÊý  
 | 
        suiteID = curEquip.GetSuiteID()  
 | 
        if suiteID:  
 | 
            if suiteID not in suitCntDict:  
 | 
                suitCntDict[suiteID] = []  
 | 
            suitCntDict[suiteID].append(equipPartStar)  
 | 
              
 | 
        #´«ÆæÊôÐÔ  
 | 
        legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curEquip)  
 | 
        for i, legendAttrID in enumerate(legAttrIDList):  
 | 
            legendAttrValue = legAttrValueList[i]  
 | 
            PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrListEquip)  
 | 
            #GameWorld.DebugLog("    ´«ÆæÊôÐÔ: ID=%s +%s" % (legendAttrID, legendAttrValue))  
 | 
            __CalcFuncAddEquipAttrPer(equipPlace, legendAttrID, legendAttrValue, equip_addEquipBaseAttrPerList)  
 | 
          
 | 
        #ÎïÆ·Ç¿»¯ÊôÐÔ  
 | 
        plusLV = __CalcAttr_ItemPlus(curPlayer, curEquip, packType, equipIndex, allAttrListPlus, plus_addEquipBaseAttrPerList)  
 | 
        if isBaseEquip:  
 | 
            basePlusLVMin = plusLV if basePlusLVMin == None else min(basePlusLVMin, plusLV)  
 | 
              
 | 
        #¼ÆËã×°±¸±¦Ê¯¼Ó³É  
 | 
        CalcEquipStone_Effect(curPlayer, equipIndex, allAttrListStone)  
 | 
          
 | 
        #Ï´Á·ÊôÐÔ  
 | 
        Operate_EquipWash.CalcAttr_EquipWash(curPlayer, equipIndex, equipPlace, allAttrListWash)  
 | 
      
 | 
#    GameWorld.DebugLog("    ×°±¸Ñ»·ÊôÐÔ: %s" % (allAttrListEquip))  
 | 
#    GameWorld.DebugLog("    ÉýÐÇÑ»·ÊôÐÔ: %s" % (allAttrListStar))  
 | 
#    GameWorld.DebugLog("    Ç¿»¯Ñ»·ÊôÐÔ: %s" % (allAttrListPlus))  
 | 
#    GameWorld.DebugLog("    ±¦Ê¯Ñ»·ÊôÐÔ: %s" % (allAttrListStone))  
 | 
#    GameWorld.DebugLog("    Ï´Á·Ñ»·ÊôÐÔ: %s" % (allAttrListWash))  
 | 
#    GameWorld.DebugLog("    -----" )  
 | 
    # 2. ¼ÆËã±éÀúºóµÄ¸½¼ÓÊôÐÔ  
 | 
    #Ì××°ÊôÐÔ£¬ÔݹéΪÐǼ¶Ì××°ÊôÐÔ  
 | 
    CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListStar)  
 | 
    #´óʦ  
 | 
    __CalcMasterPlusLVAttr(curPlayer, classLV, basePlusLVMin, allAttrListPlus, plus_addEquipBaseAttrPerList)  
 | 
      
 | 
#    GameWorld.DebugLog("    ÉýÐÇÊôÐÔÌ××°: %s" % (allAttrListEquip))  
 | 
      
 | 
    # 3. ¼ÆËã¶Ô×°±¸»ù´¡µÄ¸½¼Ó¼Ó³É  
 | 
#    GameWorld.DebugLog("    -----" )  
 | 
#    GameWorld.DebugLog("    ËùÓÐ×°±¸»ù´¡ÊôÐÔ: %s" % (allEquipBaseAttrDict))  
 | 
#    GameWorld.DebugLog("    »ù´¡×°±¸»ù´¡ÊôÐÔ: %s" % (baseEquipBaseAttrDict))  
 | 
#    GameWorld.DebugLog("    µ¥¼þ×°±¸»ù´¡ÊôÐÔ: %s" % (equipBaseAttrDict))  
 | 
#    GameWorld.DebugLog("    -----" )  
 | 
    #¼ÆË㹦Äܵã¶Ô×°±¸»ù´¡µÄ¼Ó³É  
 | 
    insideAttrDictEquip, insideAttrDictStar, insideAttrDictPlus, insideAttrDictStone, insideAttrDictWash = {}, {}, {}, {}, {}  
 | 
    __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, equip_addEquipBaseAttrPerList, insideAttrDictEquip, "Equip")  
 | 
    __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, star_addEquipBaseAttrPerList, insideAttrDictStar, "Star")  
 | 
    __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, plus_addEquipBaseAttrPerList, insideAttrDictPlus, "Plus")  
 | 
    #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, stone_addEquipBaseAttrPerList, insideAttrDictStone, "Stone")  
 | 
    #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, wash_addEquipBaseAttrPerList, insideAttrDictWash, "Wash")  
 | 
      
 | 
    #¼ÆËã×°±¸»ù´¡ÊôÐÔ¸½¼ÓÕ½Á¦ (Ŀǰ×é³É: ÆÀ·ÖÕ½Á¦ + ...)  
 | 
    equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))  
 | 
      
 | 
    # 4. ÀÛ¼ÓËùÓн××°±¸Î»ÊôÐÔ  
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    if playerID not in PyGameData.g_playerEquipPartAttrDict:  
 | 
        PyGameData.g_playerEquipPartAttrDict[playerID] = {}  
 | 
    equipPartAttrDict = PyGameData.g_playerEquipPartAttrDict[playerID]  
 | 
    equipPartAttrDict[classLV] = [equipFightPowerEx, allAttrListEquip, insideAttrDictEquip, allAttrListStar, insideAttrDictStar,  
 | 
                                  allAttrListPlus, insideAttrDictPlus, allAttrListStone, insideAttrDictStone, allAttrListWash, insideAttrDictWash]  
 | 
      
 | 
#    GameWorld.DebugLog("    ----- ÀÛ¼ÓËùÓн××°±¸Î»Ñø³ÉÊôÐÔ")  
 | 
#    GameWorld.DebugLog("    ±¾½××°±¸Õ½Á¦: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))  
 | 
#    GameWorld.DebugLog("    ±¾½××°±¸ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allAttrListEquip, insideAttrDictEquip))  
 | 
#    GameWorld.DebugLog("    ±¾½×ÉýÐÇÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allAttrListStar, insideAttrDictStar))  
 | 
#    GameWorld.DebugLog("    ±¾½×Ç¿»¯ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allAttrListPlus, insideAttrDictPlus))  
 | 
#    GameWorld.DebugLog("    ±¾½×±¦Ê¯ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allAttrListStone, insideAttrDictStone))  
 | 
#    GameWorld.DebugLog("    ±¾½×Ï´Á·ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allAttrListWash, insideAttrDictWash))  
 | 
      
 | 
    allClassEquipFightPowerEx = 0  
 | 
    allClassAttrListEquip, allClassInsideAttrDictEquip = [{} for _ in range(4)], {}  
 | 
    allClassAttrListStar, allClassInsideAttrDictStar = [{} for _ in range(4)], {}  
 | 
    allClassAttrListPlus, allClassInsideAttrDictPlus = [{} for _ in range(4)], {}  
 | 
    allClassAttrListStone, allClassInsideAttrDictStone = [{} for _ in range(4)], {}  
 | 
    allClassAttrListWash, allClassInsideAttrDictWash = [{} for _ in range(4)], {}  
 | 
    for classLV, attrList in equipPartAttrDict.items():  
 | 
        equipFightPowerEx, allAttrListEquip, insideAttrDictEquip, allAttrListStar, insideAttrDictStar, \  
 | 
            allAttrListPlus, insideAttrDictPlus, allAttrListStone, insideAttrDictStone, allAttrListWash, insideAttrDictWash = attrList  
 | 
        #GameWorld.DebugLog("    classLV=%s, %s" % (classLV, attrList))  
 | 
        allClassEquipFightPowerEx += equipFightPowerEx  
 | 
        for i in xrange(4):  
 | 
            PlayerControl.AddAttrDictValue(allClassAttrListEquip[i], allAttrListEquip[i])  
 | 
            PlayerControl.AddAttrDictValue(allClassAttrListStar[i], allAttrListStar[i])  
 | 
            PlayerControl.AddAttrDictValue(allClassAttrListPlus[i], allAttrListPlus[i])  
 | 
            PlayerControl.AddAttrDictValue(allClassAttrListStone[i], allAttrListStone[i])  
 | 
            PlayerControl.AddAttrDictValue(allClassAttrListWash[i], allAttrListWash[i])  
 | 
        PlayerControl.AddAttrDictValue(allClassInsideAttrDictEquip, insideAttrDictEquip)  
 | 
        PlayerControl.AddAttrDictValue(allClassInsideAttrDictStar, insideAttrDictStar)  
 | 
        PlayerControl.AddAttrDictValue(allClassInsideAttrDictPlus, insideAttrDictPlus)  
 | 
        PlayerControl.AddAttrDictValue(allClassInsideAttrDictStone, insideAttrDictStone)  
 | 
        PlayerControl.AddAttrDictValue(allClassInsideAttrDictWash, insideAttrDictWash)  
 | 
          
 | 
#    GameWorld.DebugLog("    ËùÓн××°±¸Õ½Á¦: %s" % (allClassEquipFightPowerEx))  
 | 
#    GameWorld.DebugLog("    ËùÓн××°±¸ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allClassAttrListEquip, allClassInsideAttrDictEquip))  
 | 
#    GameWorld.DebugLog("    ËùÓн×ÉýÐÇÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allClassAttrListStar, allClassInsideAttrDictStar))  
 | 
#    GameWorld.DebugLog("    ËùÓн×Ç¿»¯ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allClassAttrListPlus, allClassInsideAttrDictPlus))  
 | 
#    GameWorld.DebugLog("    ËùÓнױ¦Ê¯ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allClassAttrListStone, allClassInsideAttrDictStone))  
 | 
#    GameWorld.DebugLog("    ËùÓн×Ï´Á·ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allClassAttrListWash, allClassInsideAttrDictWash))  
 | 
    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Equip, allClassEquipFightPowerEx)  
 | 
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Equip, allClassAttrListEquip, allClassInsideAttrDictEquip)  
 | 
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Star, allClassAttrListStar, allClassInsideAttrDictStar)  
 | 
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Plus, allClassAttrListPlus, allClassInsideAttrDictPlus)  
 | 
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allClassAttrListStone, allClassInsideAttrDictStone)  
 | 
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allClassAttrListWash, allClassInsideAttrDictWash)  
 | 
    return  
 | 
  
 | 
def __CalcFuncAddEquipAttrPer(equipPlace, attrID, attrValue, addPerInfoList):  
 | 
    ## ¼ÆËãÆäËû¹¦ÄÜÊôÐÔ¶Ô×°±¸»ù´¡ÊôÐÔµÄ¼Ó³É  
 | 
          
 | 
    if attrID not in ChConfig.EquipBassAttrAddInfoSet:  
 | 
        return  
 | 
    effPlace, calcAttrList = ChConfig.EquipBassAttrAddInfoSet[attrID]  
 | 
    #GameWorld.DebugLog("        ×°±¸»ù´¡¼Ó³ÉÐÅÏ¢: ID=%s,effPlace=%s,calcAttrList=%s" % (attrID, effPlace, calcAttrList))  
 | 
    # ËùÓв¿Î»  
 | 
    if effPlace == -1:  
 | 
        allPlaceAddPerDict = addPerInfoList[0]  
 | 
        for calcAttrIndex in calcAttrList:  
 | 
            allPlaceAddPerDict[calcAttrIndex] = allPlaceAddPerDict.get(calcAttrIndex, 0) + attrValue  
 | 
        #GameWorld.DebugLog("            µ±Ç°¼Ó³ÉÐÅÏ¢=%s" % (addPerInfoList))  
 | 
        return  
 | 
          
 | 
    # »ù´¡²¿Î»  
 | 
    if effPlace == -2:  
 | 
        basePlaceAddPerDict = addPerInfoList[1]  
 | 
        for calcAttrIndex in calcAttrList:  
 | 
            basePlaceAddPerDict[calcAttrIndex] = basePlaceAddPerDict.get(calcAttrIndex, 0) + attrValue  
 | 
        #GameWorld.DebugLog("            µ±Ç°¼Ó³ÉÐÅÏ¢=%s" % (addPerInfoList))  
 | 
        return  
 | 
      
 | 
    # Ö¸¶¨²¿Î»  
 | 
    elif effPlace > 0 and equipPlace == effPlace:  
 | 
        assignPlaceAddPerDict = addPerInfoList[2]  
 | 
        if equipPlace not in assignPlaceAddPerDict:  
 | 
            assignPlaceAddPerDict[equipPlace] = {}  
 | 
        curPlaceAddPerDict = assignPlaceAddPerDict[equipPlace]  
 | 
        for calcAttrIndex in calcAttrList:  
 | 
            curPlaceAddPerDict[calcAttrIndex] = curPlaceAddPerDict.get(calcAttrIndex, 0) + attrValue  
 | 
        #GameWorld.DebugLog("            µ±Ç°¼Ó³ÉÐÅÏ¢=%s" % (addPerInfoList))  
 | 
        return  
 | 
      
 | 
    return  
 | 
  
 | 
def __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, addEquipBaseAttrPerList, allAttrDict, sign=""):  
 | 
    ## ¼ÆËãÆäËû¹¦ÄÜÊôÐÔ¶Ô×°±¸»ù´¡ÊôÐԼӳɵÄÊôÐÔ¾ßÌåÖµ  
 | 
    allPlaceAddPerDict, basePlaceAddPerDict, assignPlaceAddPerDict = addEquipBaseAttrPerList  
 | 
    #GameWorld.DebugLog("    ¼ÆË㹦Äܵã¶Ô×°±¸»ù´¡ÊôÐÔ¼Ó³É: %s" % sign)  
 | 
    #GameWorld.DebugLog("        È«²¿×°±¸ÊôÐÔ: %s, ¼Ó³É%s" % (allEquipBaseAttrDict, allPlaceAddPerDict))  
 | 
    for attrID, addPer in allPlaceAddPerDict.items():  
 | 
        if attrID not in allEquipBaseAttrDict:  
 | 
            continue  
 | 
        baseValue = allEquipBaseAttrDict[attrID]  
 | 
        addValue = int(baseValue * addPer / 10000.0)  
 | 
        PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)  
 | 
        #GameWorld.DebugLog("            ¼Ó³É: ID=%s +%s %s" % (attrID, addValue, addPer))  
 | 
      
 | 
    #GameWorld.DebugLog("        »ù´¡×°±¸ÊôÐÔ: %s, ¼Ó³É%s" % (baseEquipBaseAttrDict, basePlaceAddPerDict))  
 | 
    for attrID, addPer in basePlaceAddPerDict.items():  
 | 
        if attrID not in baseEquipBaseAttrDict:  
 | 
            continue  
 | 
        baseValue = baseEquipBaseAttrDict[attrID]  
 | 
        addValue = int(baseValue * addPer / 10000.0)  
 | 
        PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)  
 | 
        #GameWorld.DebugLog("            ¼Ó³É: ID=%s +%s %s" % (attrID, addValue, addPer))  
 | 
          
 | 
    #GameWorld.DebugLog("        Ö¸¶¨×°±¸ÊôÐÔ: %s, ¼Ó³É%s" % (equipBaseAttrDict, assignPlaceAddPerDict))  
 | 
    for equipPlace, addPerDict in assignPlaceAddPerDict.items():  
 | 
        if equipPlace not in equipBaseAttrDict:  
 | 
            continue  
 | 
        baseAttrDict = equipBaseAttrDict[equipPlace]  
 | 
        for attrID, addPer in addPerDict.items():  
 | 
            if attrID not in baseAttrDict:  
 | 
                continue  
 | 
            baseValue = baseAttrDict[attrID]  
 | 
            addValue = int(baseValue * addPer / 10000.0)  
 | 
            PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)  
 | 
            #GameWorld.DebugLog("            ¼Ó³É: ID=%s +%s %s" % (attrID, addValue, addPer))  
 | 
    return  
 | 
  
 | 
def CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict={}):  
 | 
    ## ¼ÆËã´«ÆæÊôÐÔ  
 | 
      
 | 
    legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curEquip)  
 | 
    if not legAttrIDList:  
 | 
        #GameWorld.DebugLog("ûÓд«ÆæÊôÐÔ£¡")  
 | 
        return  
 | 
    #GameWorld.DebugLog("´«ÆæÊôÐÔ: place=%s,IDList=%s, v=%s" % (curEquip.GetEquipPlace(), legAttrIDList, legAttrValueList))  
 | 
      
 | 
    for i, legendAttrID in enumerate(legAttrIDList):  
 | 
        legendAttrValue = legAttrValueList[i]  
 | 
        #GameWorld.DebugLog("¼Ó´«ÆæÊôÐÔ: %s +%s" % (legendAttrID, legendAttrValue))  
 | 
        PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrListEquip)  
 | 
        #legendAttrDict[attrID] = legendAttrDict.get(attrID, 0) + value  
 | 
          
 | 
    return  
 | 
  
 | 
def __CalcAttr_ItemPlus(curPlayer, curEquip, packType, equipIndex, allAttrList, plus_addEquipBaseAttrPerList):  
 | 
    ## ¼ÆËã×°±¸Ç¿»¯ºóµÄÊôÐÔ  
 | 
    equipPartPlusLV = GetEquipPartPlusLV(curPlayer, packType, equipIndex)  
 | 
    equipPartPlusEvolveLV = GetEquipPartPlusEvolveLV(curPlayer, packType, equipIndex)  
 | 
      
 | 
    if not equipPartPlusLV:  
 | 
        return equipPartPlusLV  
 | 
    plusType = GetEquipPlusType(curEquip)  
 | 
    if plusType is None:  
 | 
        return equipPartPlusLV  
 | 
      
 | 
    #GameWorld.DebugLog("    Ç¿»¯ÊôÐÔ: plusType=%s,equipPartPlusLV=%s,equipPartPlusEvolveLV=%s" % (plusType, equipPartPlusLV, equipPartPlusEvolveLV))  
 | 
    ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", plusType, equipPartPlusLV)  
 | 
    if not ipyData:  
 | 
        return equipPartPlusLV  
 | 
    attrTypeList, attrValueList = ipyData.GetAttrType(), ipyData.GetAttrValue()  
 | 
    for i, attrID in enumerate(attrTypeList):  
 | 
        #GameWorld.DebugLog("    Ç¿»¯»ù´¡ÊôÐÔ: ID=%s +%s" % (attrID, attrValueList[i]))  
 | 
        PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList)  
 | 
      
 | 
    if not equipPartPlusEvolveLV:  
 | 
        return equipPartPlusLV  
 | 
    #½ø»¯ÊôÐÔ  
 | 
    equipPlace = curEquip.GetEquipPlace()  
 | 
    ipyData = IpyGameDataPY.GetIpyGameData('EquipPlusEvolve', equipPlace, equipPartPlusEvolveLV)  
 | 
    if not ipyData:  
 | 
        return equipPartPlusLV  
 | 
    for attrID, attrValue in ipyData.GetAttr().items():  
 | 
        #GameWorld.DebugLog("    Ç¿»¯½ø½×ÊôÐÔ: ID=%s +%s" % (attrID, attrValue))  
 | 
        PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)  
 | 
        __CalcFuncAddEquipAttrPer(equipPlace, attrID, attrValue, plus_addEquipBaseAttrPerList)  
 | 
          
 | 
    return equipPartPlusLV  
 | 
  
 | 
def __CalcMasterPlusLVAttr(curPlayer, classLV, basePlusLVMin, allAttrListPlus, plus_addEquipBaseAttrPerList):  
 | 
    ## ¼ÆËã×°±¸´óʦǿ»¯ÊôÐÔ  
 | 
      
 | 
    ipyDataList = IpyGameDataPY.GetIpyGameDataList("ItemPlusMaster", classLV)  
 | 
    if not ipyDataList:  
 | 
        return  
 | 
      
 | 
    actMasterPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartMasterPlusLV % classLV) # ÒѼ¤»îµÄ×î´ó´óʦµÈ¼¶  
 | 
      
 | 
    for ipyData in ipyDataList:  
 | 
        needMasterPlusLV = ipyData.GetMasterPlusLV()  
 | 
        if basePlusLVMin < needMasterPlusLV:  
 | 
            #GameWorld.DebugLog("    Î´´ïµ½´óʦǿ»¯µÈ¼¶! classLV=%s,basePlusLVMin=%s < needMasterPlusLV=%s" % (classLV, basePlusLVMin, needMasterPlusLV))  
 | 
            continue  
 | 
        if actMasterPlusLV < needMasterPlusLV:  
 | 
            #GameWorld.DebugLog("    Î´¼¤»î´óʦǿ»¯µÈ¼¶! classLV=%s,actMasterPlusLV=%s < needMasterPlusLV=%s" % (classLV, actMasterPlusLV, needMasterPlusLV))  
 | 
            continue  
 | 
          
 | 
        attrIDList = ipyData.GetMasterPlusAttrIDList()  
 | 
        attrValueList = ipyData.GetMasterPlusAttrValueList()  
 | 
        for i, attrID in enumerate(attrIDList):  
 | 
            attrValue = attrValueList[i]  
 | 
            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListPlus)  
 | 
            __CalcFuncAddEquipAttrPer(None, attrID, attrValue, plus_addEquipBaseAttrPerList)  
 | 
            #GameWorld.DebugLog("    Ç¿»¯´óʦÊôÐÔ! needMasterPlusLV=%s, attrID=%s + %s" % (needMasterPlusLV, attrID, attrValue))  
 | 
              
 | 
    return  
 | 
  
 | 
## ×°±¸Ì××°ÊôÐÔ¼ÆËã  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @return None  
 | 
def CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListSuit):  
 | 
    if not suitCntDict:  
 | 
        return  
 | 
    #GameWorld.DebugLog('    suitCntDict=%s'%suitCntDict)  
 | 
    learnSkillList = []  
 | 
    delSkillID = []  
 | 
    skillManager = curPlayer.GetSkillManager()  
 | 
    playerName = curPlayer.GetName()  
 | 
    for suiteID, starList in suitCntDict.items():  
 | 
        ipyDataList = IpyGameDataPY.GetIpyGameDataList('EquipSuitAttr', suiteID)  
 | 
        if not ipyDataList:  
 | 
            continue  
 | 
        for ipyData in ipyDataList:  
 | 
            suiteCnt = ipyData.GetSuiteCnt()  
 | 
            needStar = ipyData.GetStar()  
 | 
            skillID = ipyData.GetSkillID()  
 | 
            activateIndex = ipyData.GetActivateIndex()  
 | 
            isActivate = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteActivate, activateIndex)  
 | 
            #GameWorld.DebugLog("suiteID=%s,suiteCnt=%s,needStar=%s,isActivate=%s" % (suiteID, suiteCnt, needStar, isActivate))  
 | 
            if isActivate and [1 if star >= needStar else 0 for star in starList].count(1) >= suiteCnt:  
 | 
                #GameWorld.DebugLog("    Ì××°: suiteID=%s,suiteCnt=%s,needStar=%s" % (suiteID, suiteCnt, needStar))  
 | 
                for attrID, attrValue in ipyData.GetAttrInfo().items():  
 | 
                    PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSuit)  
 | 
                    #GameWorld.DebugLog("        ÊôÐÔ: ID=%s +%s" % (attrID, attrValue))  
 | 
                #¼¼ÄÜ  
 | 
                if skillID and not skillManager.FindSkillBySkillTypeID(skillID):  
 | 
                    learnSkillList.append(skillID)  
 | 
#                #¹ã²¥£¬¸ÄΪ¼¤»îʱ¹ã²¥¼´¿É  
 | 
#                notifyMark = ipyData.GetIsNotify()  
 | 
#                if notifyMark and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteNotify, notifyMark):  
 | 
#                    PlayerControl.WorldNotify(0, 'AllStarLevelUp' if needStar else 'AllStarLevelUp2', [playerName, suiteID, suiteCnt, needStar])  
 | 
#                    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteNotify, notifyMark, 1)  
 | 
  
 | 
            else:  
 | 
                if skillID and skillManager.FindSkillBySkillTypeID(skillID):  
 | 
                    delSkillID.append(skillID)  
 | 
                    skillManager.DeleteSkillBySkillTypeID(skillID)  
 | 
                              
 | 
              
 | 
    for skillID in learnSkillList:  
 | 
        GameWorld.DebugLog('    ¼¤»îÌ××°¼¼ÄÜ skillResID=%s' % (skillID))  
 | 
        skillData = GameWorld.GetGameData().FindSkillByType(skillID, 1)  
 | 
        if not skillData:  
 | 
            continue  
 | 
        skillManager.LVUpSkillBySkillTypeID(skillID)     
 | 
        PlayerControl.PlayerControl(curPlayer).RefreshSkillFightPowerEx(skillID, 0)  
 | 
    if learnSkillList or delSkillID:  
 | 
        # ÖØË¢±»¶¯¼¼ÄÜ  
 | 
        PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer)      
 | 
    return  
 | 
  
 | 
#// A5 C6 ×°±¸²¿Î»ÐǼ¶Ì××°¼¤»î #tagCMEquipPartSuiteActivate  
 | 
#  
 | 
#struct    tagCMEquipPartSuiteActivate  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#    BYTE    ClassLV;    // ËùÊô×°±¸½×  
 | 
#    WORD    SuiteID;    // Ì××°ID  
 | 
#    BYTE    SuiteCount;    // ¼þÊý  
 | 
#    BYTE    Star;    // ÐÇÊý  
 | 
#};  
 | 
def OnEquipPartSuiteActivate(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    classLV = clientData.ClassLV  
 | 
    suiteID = clientData.SuiteID  
 | 
    suiteCount = clientData.SuiteCount  
 | 
    star = clientData.Star  
 | 
    ipyDataList = IpyGameDataPY.GetIpyGameDataList('EquipSuitAttr', suiteID)  
 | 
    if not ipyDataList:  
 | 
        return  
 | 
      
 | 
    actIpyData = None  
 | 
    for ipyData in ipyDataList:  
 | 
        needCount = ipyData.GetSuiteCnt()  
 | 
        needStar = ipyData.GetStar()  
 | 
        if suiteCount == needCount and star == needStar:  
 | 
            actIpyData = ipyData  
 | 
            break  
 | 
          
 | 
    if not actIpyData:  
 | 
        return  
 | 
    activateIndex = actIpyData.GetActivateIndex()  
 | 
    # ÕâÀï¾Í²»ÅжÏÊÇ·ñÂú×ã¼þÊý¡¢ÐÇÊýÌõ¼þÁË£¬ËãÊôÐÔµÄʱºò±¾ÉíÒ²ÊÇÌõ¼þÖ®Ò»£¬ÊÇ·ñ¼¤»îÖ»ÊǸ½¼ÓÌõ¼þ£¬ÕâÀïÖ»´¦Àí¼¤»î״̬±ä¸ü£¬ÄÜ·ñ¼¤»îǰ¶ËÅжϼ´¿É  
 | 
    isActivate = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteActivate, activateIndex)  
 | 
    if isActivate:  
 | 
        return  
 | 
    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteActivate, activateIndex, 1)  
 | 
    Sync_EquipPartSuiteActivateInfo(curPlayer)  
 | 
      
 | 
    #¹ã²¥  
 | 
    notifyMark = actIpyData.GetIsNotify()  
 | 
    if notifyMark:  
 | 
        PlayerControl.WorldNotify(0, 'AllStarLevelUp' if needStar else 'AllStarLevelUp2', [curPlayer.GetPlayerName(), suiteID, suiteCount, star])  
 | 
          
 | 
    RefreshPlayerEquipAttribute(curPlayer, classLV)  
 | 
    #Ë¢ÐÂËùÓÐÊôÐÔ  
 | 
    playControl = PlayerControl.PlayerControl(curPlayer)  
 | 
    playControl.RefreshPlayerAttrState()  
 | 
    return  
 | 
  
 | 
def Sync_EquipPartSuiteActivateInfo(curPlayer):  
 | 
    ## Í¬²½×°±¸Î»ÐǼ¶Ì××°¼¤»î״̬ÐÅÏ¢  
 | 
    keyCount = 10  
 | 
    activateStateList = []  
 | 
    for i in xrange(keyCount):  
 | 
        activateStateList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartSuiteActivate % i))  
 | 
    if activateStateList.count(0) == keyCount:  
 | 
        return  
 | 
    activateInfo = ChPyNetSendPack.tagMCEquipPartSuiteActivateInfo()  
 | 
    activateInfo.SuiteActivateStateInfo = activateStateList  
 | 
    activateInfo.Count = len(activateInfo.SuiteActivateStateInfo)  
 | 
    NetPackCommon.SendFakePack(curPlayer, activateInfo)  
 | 
    return  
 | 
  
 | 
##È«Éí³Èɫװ±¸ÊýÁ¿´¥·¢Ïà¹Ø(°üº¬³ÈɫƷÖÊÒÔÉϵÄ×°±¸ÊýÁ¿)  
 | 
def OnOrangeQualityCntChange(curPlayer, orangeQualityCnt):  
 | 
    notifyType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrActivatyNotify)  
 | 
    if notifyType == ChConfig.Def_AttrActivatyNotify_Equip:  
 | 
        EventShell.EventRespons_OrangeQualityCnt(curPlayer, orangeQualityCnt)  
 | 
    return  
 | 
  
 | 
  
 | 
## 1Ëã×°±¸´¥·¢µÄ¼¼ÄÜ £¨È«Éí£©   
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param curEquip µ±Ç°×°±¸  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def CalcCurEquip_SkillBuff(curPlayer, curEquip):  
 | 
    SkillShell.RefreshSkillBuffByEquip(curPlayer, curEquip)  
 | 
    return  
 | 
  
 | 
  
 | 
## ¼ÆËã×°±¸ÏâǶ±¦Ê¯¸½¼ÓЧ¹û->»ù±¾ÊôÐÔ (±¦Ê¯)   
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param curEquip µ±Ç°×°±¸  
 | 
#  @param allAttrList ÊôÐÔÐÅÏ¢   
 | 
#  @return ÎÞ·µ»ØÖµ  
 | 
def CalcEquipStone_Effect(curPlayer, equipIndex, allAttrList):  
 | 
    gameData = GameWorld.GetGameData()  
 | 
  
 | 
    effIndexList = [1, 2, 3, 4]  # µÚÒ»¸öЧ¹ûÖµÊÇÀàÐ͵ȼ¶Ð§¹ûÖµ£¬·ÇÊôÐÔЧ¹ûÖµ  
 | 
    gemLVList = []  
 | 
    for holeIndex in Operate_EquipStone.GetAllEquipPlaceHoleIndex():  
 | 
          
 | 
        curGemID = Operate_EquipStone.GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0]  
 | 
        if curGemID == 0:  
 | 
            continue  
 | 
        curGem = gameData.GetItemByTypeID(curGemID)  
 | 
        if not curGem:  
 | 
            GameWorld.ErrLog('equip stone id:%s not in item table' % (curGemID))  
 | 
            continue      
 | 
        for effIndex in effIndexList:           
 | 
            curGemEffect = curGem.GetEffectByIndex(effIndex)  
 | 
            effectID, effectValue = curGemEffect.GetEffectID(), curGemEffect.GetEffectValue(0)  
 | 
            if effectID and effectValue:  
 | 
                PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrList)  
 | 
        gemEffect = curGem.GetEffectByIndex(0)  
 | 
        gemLV = gemEffect.GetEffectValue(1)  
 | 
        gemLVList.append(gemLV)  
 | 
    return gemLVList  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
## ×°±¸Ìí¼ÓBuff   
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param addSkillID ¼¼ÄÜID  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def EquipAddBuff(curPlayer, addSkillID, value=0):  
 | 
  
 | 
    curBuff = curPlayer.GetEquipBuff().AddBuff(addSkillID, 0, False)  
 | 
    curBuff.SetOwnerID(curPlayer.GetID())  
 | 
    curBuff.SetOwnerType(curPlayer.GetGameObjType())  
 | 
    if value > 0:  
 | 
        curBuff.SetValue(value)  
 | 
    return  
 | 
  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# #//03 2F ÇëÇó×°±¸ÏÔÒþ#tagRequestEquipShowHide  
 | 
# //×°±¸ÏÔʾ¿ª¹Ø  
 | 
# int GetEquipShowSwitch(); Áé³èÍâ¹ÛË÷Òý*10000000+×øÆïÍâ¹ÛË÷Òý*1000000+Áé¸ùÌØÐ§±íkey * 1000+µÚ¼¸Ì×*10+ÊÇ·ñÓÐÌ××°  
 | 
#===============================================================================  
 | 
##ÇëÇó×°±¸ÏÔÒþ. £¨ÉèÖÃÏÔʾÄÄÌ××°±¸Íâ¹Û£©  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 2F ÇëÇó×°±¸ÏÔÒþ#tagRequestEquipShowHide  
 | 
def RequestEquipShowHide(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    #---¼ì²éˢмä¸ô--  
 | 
    interval = ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_RequestEquipShowHide]  
 | 
      
 | 
    if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_RequestEquipShowHide) < interval:  
 | 
        #ûÓе½Ë¢Ð¼ä¸ô£¬54Íâ¹Ò£¬²»¸øÌáʾ  
 | 
#        GameWorld.ErrLog('ÇëÇó×°±¸ÏÔÒþ, Ã»Óе½Ë¢Ð¼ä¸ô')  
 | 
        return  
 | 
    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_RequestEquipShowHide, tick)  
 | 
    sendPack = IPY_GameWorld.IPY_CRequestEquipShowHide()  
 | 
    classLV = sendPack.GetEquipShowSwitch()  
 | 
    oldClassLV = GetEquipFacadeClassLV(curPlayer)  
 | 
    if oldClassLV == classLV:  
 | 
        return  
 | 
    if not ChangeEquipfacadeByClassLV(curPlayer, classLV):  
 | 
        return  
 | 
      
 | 
    #֪ͨÍâ¹Û×°±¸  
 | 
    updFaceEquipIndex = 0  
 | 
    equipIndexList = []  
 | 
      
 | 
    for equipPlace in [ShareDefine.retWeapon, ShareDefine.retWeapon2, ShareDefine.retClothes]:  
 | 
        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)  
 | 
        if not ipyData:  
 | 
            continue  
 | 
        gridIndex = ipyData.GetGridIndex()  
 | 
        updFaceEquipIndex = updFaceEquipIndex * 1000 + gridIndex  
 | 
        equipIndexList.append(gridIndex)  
 | 
  
 | 
    PlayerControl.SetFaceEquipIndex(curPlayer, updFaceEquipIndex)  
 | 
    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)  
 | 
    for equipPackIndex in equipIndexList:  
 | 
        curEquip = equipPack.GetAt(equipPackIndex)  
 | 
        if not ItemCommon.CheckItemCanUse(curEquip):  
 | 
            continue  
 | 
        changeItemID = curEquip.GetItemTypeID()  
 | 
        changeItemStarLV = 0  #curItem.GetItemStarLV()  
 | 
        changeItemStoneCnt = 0  #curItem.GetUseStoneCount()  
 | 
        changeItemHoleCnt = 0  #curItem.GetCanPlaceStoneCount()  
 | 
        changeItemUseData = curEquip.GetUserData()  
 | 
        curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)  
 | 
      
 | 
    return  
 | 
  
 | 
def ChangeEquipfacadeByClassLV(curPlayer, classLV):  
 | 
    ##±ä¸üµÚXÌ××°±¸Íâ¹Û Áé¸ùÌØÐ§±íkey * 1000+µÚ¼¸Ì×*10+ÊÇ·ñÓÐÌ××°  
 | 
    oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()  
 | 
    realSuit=1  
 | 
    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)  
 | 
    for place in ChConfig.EquipPlace_Base:  
 | 
        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place)  
 | 
        if not ipyData:  
 | 
            realSuit = 0  
 | 
            break  
 | 
        gridIndex = ipyData.GetGridIndex()  
 | 
        curEquip = equipPack.GetAt(gridIndex)  
 | 
        if not ItemCommon.CheckItemCanUse(curEquip):  
 | 
            realSuit = 0  
 | 
            break  
 | 
        if not curEquip.GetSuiteID():  
 | 
            realSuit = 0  
 | 
            break  
 | 
    updEquipShowSwitch = oldEquipShowSwitch /1000*1000+ classLV*10+realSuit  
 | 
    if oldEquipShowSwitch == updEquipShowSwitch:  
 | 
        return  
 | 
    curPlayer.SetEquipShowSwitch(updEquipShowSwitch)  
 | 
    ChangeEquipEffectByPlusMaster(curPlayer, classLV)  
 | 
    return True  
 | 
  
 | 
#!!! ÌØÐ§¸ù¾ÝÁé¸ùÆ·¼¶±ä»¯¸Ä³É¸ù¾ÝÇ¿»¯´óʦ±ä»¯  
 | 
def ChangeEquipfacadeByLingGen(curPlayer):  
 | 
#    ## Áé¸ùÆ·¼¶±ä»¯Ó°Ïì½ÇÉ«Íâ¹ÛÏÔʾ Áé¸ùÌØÐ§±íkey * 1000+µÚ¼¸Ì×*10+ÊÇ·ñÓÐÌ××°  
 | 
#    pointValueInfo = [[ShareDefine.Def_Effect_Metal,PlayerControl.GetMetalQualityLV(curPlayer)],  
 | 
#                          [ShareDefine.Def_Effect_Wood,PlayerControl.GetWoodQualityLV(curPlayer)],  
 | 
#                          [ShareDefine.Def_Effect_Water,PlayerControl.GetWaterQualityLV(curPlayer)],  
 | 
#                          [ShareDefine.Def_Effect_Fire,PlayerControl.GetFireQualityLV(curPlayer)],  
 | 
#                          [ShareDefine.Def_Effect_Earth,PlayerControl.GetEarthQualityLV(curPlayer)],  
 | 
#                          ]  
 | 
#    g_skillElementCntDict = {} #Áé¸ù¶ÔӦʹÓÃר¾«¼¼ÄÜÊýÁ¿  
 | 
#    skillManager = curPlayer.GetSkillManager()  
 | 
#    gameData = GameWorld.GetGameData()  
 | 
#    for i in xrange(skillManager.GetSkillCount()):  
 | 
#        curSkill = skillManager.GetSkillByIndex(i)  
 | 
#        skillID = curSkill.GetSkillTypeID()  
 | 
#        curSelectSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % skillID)  
 | 
#        if not curSelectSkillID:  
 | 
#            continue  
 | 
#        elementSkillData = gameData.GetSkillBySkillID(curSelectSkillID)  
 | 
#        if not elementSkillData:  
 | 
#            continue  
 | 
#        skillElementType = SkillShell.GetSkillElementType(elementSkillData)  
 | 
#        g_skillElementCntDict[skillElementType] = g_skillElementCntDict.get(skillElementType, 0) + 1  
 | 
#      
 | 
#    showPointID, showQualityLV = 0, 0  
 | 
#    for pointID, qualityLV in pointValueInfo:  
 | 
#        if qualityLV > showQualityLV:  
 | 
#            showQualityLV = qualityLV  
 | 
#            showPointID = pointID  
 | 
#        elif showQualityLV and qualityLV == showQualityLV:  
 | 
#            #±È˵Äר¾«¼¼ÄÜÊýÁ¿¶à  
 | 
#            if g_skillElementCntDict.get(pointID, 0) > g_skillElementCntDict.get(showPointID, 0):  
 | 
#                showQualityLV = qualityLV  
 | 
#                showPointID = pointID  
 | 
#    effectID = 0  
 | 
#    if showPointID:  
 | 
#        ipyData = IpyGameDataPY.GetIpyGameData('LingGenEffect', showPointID, showQualityLV)  
 | 
#        if not ipyData:  
 | 
#            return  
 | 
#        effectID = ipyData.GetID()  
 | 
#    oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()  
 | 
#    updEquipShowSwitch = oldEquipShowSwitch % 1000 + oldEquipShowSwitch / 1000000 * 1000000+ 1000 * effectID  
 | 
#    GameWorld.DebugLog('Áé¸ùÆ·¼¶±ä»¯Ó°Ïì½ÇÉ«Íâ¹ÛÏÔʾg_skillElementCntDict=%s,oldEquipShowSwitch=%s,updEquipShowSwitch=%s'%  
 | 
#                       (g_skillElementCntDict, oldEquipShowSwitch, updEquipShowSwitch))  
 | 
#    if oldEquipShowSwitch != updEquipShowSwitch:  
 | 
#        curPlayer.SetEquipShowSwitch(updEquipShowSwitch)  
 | 
    return  
 | 
def ChangeEquipEffectByPlusMaster(curPlayer, classLV):  
 | 
    # Ç¿»¯´óÊ¦ÌØÐ§  
 | 
    if (classLV != GetEquipFacadeClassLV(curPlayer)):  
 | 
        return  
 | 
      
 | 
    masterPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartMasterPlusLV % classLV)  
 | 
    ## Ç¿»¯´óʦӰÏì½ÇÉ«Íâ¹ÛÏÔʾ Ç¿»¯´óʦµÈ¼¶ * 1000+µÚ¼¸Ì×*10+ÊÇ·ñÓÐÌ××°  
 | 
    oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()  
 | 
    updEquipShowSwitch = oldEquipShowSwitch % 1000 + oldEquipShowSwitch / 1000000 * 1000000+ 1000 * masterPlusLV  
 | 
    GameWorld.DebugLog('Ç¿»¯´óʦӰ±ä»¯Ó°Ïì½ÇÉ«Íâ¹ÛÏÔʾ,oldEquipShowSwitch=%s,updEquipShowSwitch=%s'%  
 | 
                       (oldEquipShowSwitch, updEquipShowSwitch))  
 | 
    if oldEquipShowSwitch != updEquipShowSwitch:  
 | 
        curPlayer.SetEquipShowSwitch(updEquipShowSwitch)  
 | 
    return  
 | 
  
 | 
  
 | 
def ChangeEquipfacadeByHorsePetSkin(curPlayer, skinType, skinIndex):  
 | 
    ##Æï³è¾õÐÑÍâ¹Û±ä¸ü  Áé³èÍâ¹ÛË÷Òý*10000000+×øÆïÍâ¹ÛË÷Òý*1000000+Áé¸ùÌØÐ§±íkey * 1000+µÚ¼¸Ì×*10+ÊÇ·ñÓÐÌ××°  
 | 
    oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()  
 | 
    if skinType == 1:  
 | 
        updEquipShowSwitch = GameWorld.ChangeDataByDigitPlace(oldEquipShowSwitch, 7, skinIndex)  
 | 
    else:  
 | 
        updEquipShowSwitch = GameWorld.ChangeDataByDigitPlace(oldEquipShowSwitch, 8, skinIndex)  
 | 
          
 | 
    if oldEquipShowSwitch == updEquipShowSwitch:  
 | 
        return  
 | 
    curPlayer.SetEquipShowSwitch(updEquipShowSwitch)  
 | 
    return  
 | 
  
 | 
def GetPlayerMaxEquipClassLV(curPlayer):  
 | 
    ## »ñÈ¡Íæ¼Òµ±Ç°½âËøµÄ×°±¸½×  
 | 
    key = "RealmEquipClassLVMap"  
 | 
    RealmEquipClassLVMap = IpyGameDataPY.GetConfigEx(key)  
 | 
    if not RealmEquipClassLVMap:  
 | 
        RealmEquipClassLVMap = {}  
 | 
        infoDict = {}  
 | 
        ipyDataMgr = IpyGameDataPY.IPY_Data()  
 | 
        for index in xrange(ipyDataMgr.GetEquipControlCount()):  
 | 
            ipyData = ipyDataMgr.GetEquipControlByIndex(index)  
 | 
            infoDict[ipyData.GetNeedRealmLV()] = ipyData.GetClassLV()  
 | 
        needReamlLVList = infoDict.keys()  
 | 
        needReamlLVList.sort() # ÉýÐòÅÅ  
 | 
        for i, realmLV in enumerate(needReamlLVList):  
 | 
            classLV = infoDict[realmLV]  
 | 
            if i == len(needReamlLVList) - 1:  
 | 
                RealmEquipClassLVMap[realmLV] = classLV  
 | 
            if i == 0:  
 | 
                continue  
 | 
            else:  
 | 
                preRealmLV = needReamlLVList[i - 1]  
 | 
                preClassLV = infoDict[preRealmLV]  
 | 
                for pRealmLV in range(preRealmLV, realmLV):  
 | 
                    RealmEquipClassLVMap[pRealmLV] = preClassLV  
 | 
        GameWorld.DebugLog("¼ÓÔØ¾³½ç¶ÔÓ¦¿ª·Å×î´ó×°±¸½×ÉèÖÃ: %s" % RealmEquipClassLVMap)  
 | 
        IpyGameDataPY.SetConfigEx(key, RealmEquipClassLVMap)  
 | 
          
 | 
    playerRealmLV = curPlayer.GetOfficialRank()  
 | 
    if playerRealmLV in RealmEquipClassLVMap:  
 | 
        return RealmEquipClassLVMap[playerRealmLV]  
 | 
      
 | 
    maxRealmLV = max(RealmEquipClassLVMap)  
 | 
    if playerRealmLV >= maxRealmLV:  
 | 
        return RealmEquipClassLVMap[maxRealmLV]  
 | 
      
 | 
    return 0  
 | 
  
 | 
#»ñÈ¡µ±Ç°Êǵڼ¸Ì××°±¸Íâ¹Û  
 | 
def GetEquipFacadeClassLV(curPlayer):return curPlayer.GetEquipShowSwitch()%1000/10  
 | 
  
 | 
## »ñÈ¡¹«¹²²¿Î»Ç¿»¯ÊìÁ·¶È  
 | 
def GetEquipPartProficiency(curPlayer, packType, index):  
 | 
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartProficiency % (packType, index))  
 | 
  
 | 
## ÉèÖù«¹²²¿Î»Ç¿»¯ÊìÁ·¶È  
 | 
def SetEquipPartProficiency(curPlayer, packType, index, value):  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartProficiency % (packType, index), value)  
 | 
    return  
 | 
  
 | 
## »ñÈ¡¹«¹²²¿Î»Ç¿»¯µÈ¼¶  
 | 
def GetEquipPartPlusLV(curPlayer, packType, index):  
 | 
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index))  
 | 
  
 | 
## ÉèÖù«¹²²¿Î»Ç¿»¯µÈ¼¶  
 | 
def SetEquipPartPlusLV(curPlayer, packType, index, curEquip, setPlusLV):  
 | 
    befPlusLV = GetEquipPartPlusLV(curPlayer, packType, index)  
 | 
    if befPlusLV == setPlusLV:  
 | 
        return  
 | 
      
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartPlusLV % (packType, index), setPlusLV)  
 | 
    #===========================================================================  
 | 
    # if curEquip and not curEquip.IsEmpty():  
 | 
    #    curEquip.SetItemStarLV(starLV)  
 | 
    #===========================================================================  
 | 
      
 | 
    # Í¬²½¸üÐÂÇ¿»¯×ܵȼ¶  
 | 
    befTotalPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusLV)  
 | 
    updTotalPlusLV = max(0, befTotalPlusLV + setPlusLV - befPlusLV)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusLV, updTotalPlusLV)  
 | 
    GameWorld.DebugLog("ÉèÖÃÇ¿»¯µÈ¼¶: index=%s,befPlusLV=%s,setPlusLV=%s,befTotalPlusLV=%s,updTotalPlusLV=%s"   
 | 
                       % (index, befPlusLV, setPlusLV, befTotalPlusLV, updTotalPlusLV))  
 | 
    return  
 | 
  
 | 
## »ñÈ¡¹«¹²²¿Î»Ç¿»¯½ø»¯µÈ¼¶  
 | 
def GetEquipPartPlusEvolveLV(curPlayer, packType, index):  
 | 
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index))  
 | 
  
 | 
  
 | 
## ÉèÖù«¹²²¿Î»Ç¿»¯½ø»¯µÈ¼¶  
 | 
def SetEquipPartPlusEvolveLV(curPlayer, packType, index, setEvolveLV):  
 | 
    befEvolveLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index))  
 | 
    if befEvolveLV == setEvolveLV:  
 | 
        return  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index), setEvolveLV)  
 | 
      
 | 
    # Í¬²½¸üнø»¯×ܵȼ¶  
 | 
    befTotalPlusEvolveLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusEvolveLV)  
 | 
    updTotalPlusEvolveLV = max(0, befTotalPlusEvolveLV + setEvolveLV - befEvolveLV)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusEvolveLV, updTotalPlusEvolveLV)  
 | 
    GameWorld.DebugLog("ÉèÖýø»¯µÈ¼¶: index=%s,befEvolveLV=%s,setEvolveLV=%s,befTotalPlusEvolveLV=%s,updTotalPlusEvolveLV=%s"   
 | 
                       % (index, befEvolveLV, setEvolveLV, befTotalPlusEvolveLV, updTotalPlusEvolveLV))  
 | 
    return  
 | 
  
 | 
## Í¨Öª¹«¹²²¿Î»Ç¿»¯µÈ¼¶  
 | 
def NotifyEquipPartPlusLV(curPlayer, packType=IPY_GameWorld.rptEquip, index=None):  
 | 
    ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartPlusInfo()  
 | 
    ePartStarLVPack.Clear()  
 | 
    ePartStarLVPack.InfoList = []  
 | 
      
 | 
    syncIndexList = []  
 | 
    if index == None:  
 | 
        equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv')  
 | 
        for equipPlace in ChConfig.Pack_EquipPart_CanPlusStar.get(packType, []):  
 | 
            for classlv in xrange(1, equipMaxClasslv+1):  
 | 
                ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace)  
 | 
                if not ipyData:  
 | 
                    continue   
 | 
                syncIndexList.append(ipyData.GetGridIndex())  
 | 
    else:  
 | 
        syncIndexList = [index]  
 | 
          
 | 
    for i in syncIndexList:  
 | 
        ePartStarLV = ChPyNetSendPack.tagMCEquipPartPlusLV()  
 | 
        ePartStarLV.Clear()  
 | 
        ePartStarLV.PackType = packType  
 | 
        ePartStarLV.EquipIndex = i  
 | 
        ePartStarLV.EquipPartStarLV = GetEquipPartPlusLV(curPlayer, packType, i)  
 | 
        ePartStarLV.Proficiency = GetEquipPartProficiency(curPlayer, packType, i)  
 | 
        ePartStarLV.EvolveLV = GetEquipPartPlusEvolveLV(curPlayer, packType, i)  
 | 
        ePartStarLVPack.InfoList.append(ePartStarLV)  
 | 
              
 | 
    ePartStarLVPack.Count = len(ePartStarLVPack.InfoList)  
 | 
    NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack)  
 | 
    return  
 | 
  
 | 
  
 | 
## È«ÉíÇ¿»¯µÈ¼¶  
 | 
def GetTotalPlusLV(curPlayer, isActive=True):  
 | 
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusLV)  
 | 
  
 | 
## È«Éí½ø»¯µÈ¼¶  
 | 
def GetTotalPlusEvolveLV(curPlayer):  
 | 
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusEvolveLV)  
 | 
  
 | 
## È«Éí³È×°¼°ÒÔÉÏ×°±¸Êý  
 | 
def GetEquipOrangeCount(curPlayer):  
 | 
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PlayerKey_EquipOrangeCount)  
 | 
  
 | 
  
 | 
# »ñȡװ±¸µÄÇ¿»¯ÀàÐÍ  
 | 
def GetEquipPlusType(curEquip):  
 | 
    equipPlace = curEquip.GetEquipPlace()  
 | 
    plusTypeDict = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelLimit", 1)  
 | 
    if not plusTypeDict:  
 | 
        GameWorld.ErrLog("ûÓÐÇ¿»¯ÀàÐÍÓ³Éä±í")  
 | 
        return  
 | 
      
 | 
    return plusTypeDict.get(equipPlace)  
 | 
  
 | 
  
 | 
#  »ñÈ¡ÂúÌ××°»¯µÄ×îµÍ½×Êý£¬Èç5¼þÌ×£¬4¼þ5¼¶£¬1¼þ3¼¶£¬Ôò·µ»Ø3  
 | 
def GetEquipSuitsLVByType(curPlayer, suitType, groupType):  
 | 
    return 0  
 | 
#    suiteLV = 999  
 | 
#    equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType')  
 | 
#    if groupType not in equipSuitTypeDict:  
 | 
#        return 0  
 | 
#    maxCnt = len(equipSuitTypeDict[groupType])  
 | 
#    cnt = 0  
 | 
#    for equipPlace in equipSuitTypeDict[groupType]:  
 | 
#        curSuiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suitType)  
 | 
#        if curSuiteLV > 0:  
 | 
#            cnt += 1  
 | 
#        suiteLV = min(curSuiteLV, suiteLV)  
 | 
#          
 | 
#    if cnt != maxCnt:  
 | 
#        return 0  
 | 
#    return 0 if suiteLV == 999 else suiteLV  
 | 
  
 | 
  
 | 
  
 | 
def SetEquipPartStar(curPlayer, index, setStarLV):  
 | 
    #ÉèÖù«¹²²¿Î»ÐÇÊý  
 | 
      
 | 
    befStarLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStar % index)  
 | 
    if befStarLV == setStarLV:  
 | 
        return      
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartStar % index, setStarLV)  
 | 
      
 | 
    # Í¬²½¸üÐÂÐǼ¶×ܵȼ¶  
 | 
    befTotalStarLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalEquipStar)  
 | 
    updTotalStarLV = max(0, befTotalStarLV + setStarLV - befStarLV)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipStar, updTotalStarLV)  
 | 
    # ¿ª·þ»î¶¯Êý¾Ý  
 | 
    OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_StarLV, updTotalStarLV)  
 | 
    GameWorld.DebugLog("ÉèÖò¿Î»ÐǼ¶: index=%s,befStarLV=%s,setStarLV=%s,befTotalStarLV=%s,updTotalStarLV=%s"   
 | 
                       % (index, befStarLV, setStarLV, befTotalStarLV, updTotalStarLV))  
 | 
    return  
 | 
  
 | 
  
 | 
def GetEquipPartStar(curPlayer, equipPackindex):  
 | 
    #»ñÈ¡¹«¹²²¿Î»ÐÇÊý  
 | 
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStar % equipPackindex)  
 | 
  
 | 
  
 | 
## »ñÈ¡¹«¹²²¿Î»ÉúЧµÄÐÇÊý, Òò×°±¸µÄ×î¸ß¿Éµ½ÐÇÊýÓ°Ï죬ÓÃÓÚË㵱ǰװ±¸ÊôÐÔʹÓ㬠²»Ó°ÏìÈ«ÉíÐǼ¶  
 | 
def GetEquipPartStarByRank(curPlayer, equipPackindex, curEquip):  
 | 
    maxStarLV = ItemCommon.GetItemMaxStar(curEquip)  
 | 
    return min(GetEquipPartStar(curPlayer, equipPackindex), maxStarLV)  
 | 
  
 | 
def GetTotalEquipStars(curPlayer):  
 | 
    ##»ñÈ¡²¿Î»×ÜÐÇÊý  
 | 
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalEquipStar)  
 | 
  
 | 
## Í¨Öª¹«¹²²¿Î»ÐÇÊý  
 | 
def NotifyEquipPartStar(curPlayer, index=None):  
 | 
    ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarInfo()  
 | 
    ePartStarLVPack.Clear()  
 | 
    ePartStarLVPack.InfoList = []  
 | 
    syncIndexList = []  
 | 
    if index == None:  
 | 
        equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv')  
 | 
        for equipPlace in ChConfig.Pack_EquipPart_CanPlusStar.get(IPY_GameWorld.rptEquip, []):  
 | 
            for classlv in xrange(1, equipMaxClasslv+1):  
 | 
                ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace)  
 | 
                if not ipyData:  
 | 
                    continue   
 | 
                syncIndexList.append(ipyData.GetGridIndex())  
 | 
    else:  
 | 
        syncIndexList = [index]  
 | 
      
 | 
    for index in syncIndexList:  
 | 
        ePartStarLV = ChPyNetSendPack.tagMCEquipPartStar()  
 | 
        ePartStarLV.Clear()  
 | 
        ePartStarLV.EquipPackIndex = index  
 | 
        ePartStarLV.Star = GetEquipPartStar(curPlayer, index)  
 | 
        ePartStarLVPack.InfoList.append(ePartStarLV)  
 | 
              
 | 
    ePartStarLVPack.Count = len(ePartStarLVPack.InfoList)  
 | 
    NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack)  
 | 
    return  
 | 
  
 |