ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -38,6 +38,7 @@
import PlayerMagicWeapon
import time
import json
import FormulaControl
#---------------------------------------------------------------------
##检查玩家是否可以换装
@@ -69,6 +70,7 @@
    
    if not ItemCommon.CheckItemCanUseByExpireTime(curItem):
        # 过期
        GameWorld.DebugLog("装备已过期!")
        return False
    
    changeItemEquipPlace = curItem.GetEquipPlace()
@@ -93,6 +95,7 @@
    changeItemHoleCnt = 0#curItem.GetCanPlaceStoneCount()
    changeItemUseData = curItem.GetUserData()
    itemQuality = curItem.GetItemQuality()
    endureReduceType = curItem.GetEndureReduceType()
    #changeItemIsHorse = (curItem.GetType() == ChConfig.Def_Item_Type_Horse)
    
    #执行换装动作
@@ -111,7 +114,8 @@
        #通知客户端交换物品
        curPlayer.ChangeEquip(changeItemID, equipPlace, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
        
    if not endureReduceType:
        EventShell.EventRespons_EquipByPlace(curPlayer, equipPlace)
    #记录橙装、红装
    #===========================================================================
    # if itemQuality in [ChConfig.Def_Quality_Orange, ChConfig.Def_Quality_Red]:
@@ -431,6 +435,7 @@
## 计算装备对基本属性的改变 
#  @return None
def __CalcEquips_Effect(curPlayer):
    baseEquipAttrDict = {}
    baseEquipAttr_Weapon = [{} for _ in range(4)] # 武器基础, 物品表装备基础效果属性
    baseEquipAttr_Armor = [{} for _ in range(4)] # 防具基础, 物品表装备基础效果属性
    baseEquipAttr_Relics = [{} for _ in range(4)] # 圣器基础, 物品表装备基础效果属性
@@ -449,6 +454,7 @@
    equipPlaceList = [] # 有穿戴装备的装备位列表
    suitCntDict = {} #套装数量字典
    legendAttrDict = {} #所有传奇属性
    equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
    
    #玩家当前可装备的装备类型
    for equipIndex in xrange(playerEquip.GetCount()):
@@ -456,7 +462,7 @@
            continue
        
        # 翅膀属性在翅膀功能单独刷新
        if equipIndex == ShareDefine.retWing:
        if equipIndex in ChConfig.EquipItemNoRefreshState:
            continue
        
        curEquip = playerEquip.GetAt(equipIndex)
@@ -468,6 +474,7 @@
            continue
        
        equipPlaceList.append(equipIndex)
        equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)
        
        #基础属性效果
        for i in range(0, curEquip.GetEffectCount()):
@@ -496,7 +503,8 @@
            #其他非基础部位的
            else:
                PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrListEquip)
            baseEquipAttrDict[effectID] = baseEquipAttrDict.get(effectID, 0) + effectValue
        groupType = GetEquipPartSuiteGroupType(curPlayer, equipIndex)
        for suiteType in range(1, maxSuiteType+1):
            suitelv = GetEquipPartSuiteLV(curPlayer, equipIndex, suiteType)
@@ -537,6 +545,11 @@
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Suit, allAttrListSuit)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allAttrListWash)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
    #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
    equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
    #GameWorld.DebugLog("装备评分战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Equip, equipFightPowerEx)
    return
@@ -576,9 +589,13 @@
        return
    
    lv = curPlayer.GetLV()
    OutOfPrintAttrFormatDict = IpyGameDataPY.GetFuncEvalCfg("OutOfPrintValue", 2, {})
    for i, attrID in enumerate(OutOfPrintAttrIDList):
        if str(attrID) not in OutOfPrintAttrFormatDict:
            continue
        attrFormat = OutOfPrintAttrFormatDict[str(attrID)]
        maxOOPValue = OutOfPrintAttrValueList[i]
        value = eval(IpyGameDataPY.GetFuncCompileCfg("OutOfPrintValue", 1))
        value = eval(FormulaControl.GetCompileFormula("OutOfPrintAttrFormat_%s" % attrID, attrFormat))
        GameWorld.DebugLog("加绝版属性: %s +%s" % (attrID, value))
        PlayerControl.CalcAttrDict_Type(attrID, value, allAttrListOutOfPrintEquip)
        
@@ -729,7 +746,7 @@
    for suiteKey, cnt in suitCntDict.items():
        groupType,suiteType,suiteLV = suiteKey.split('_')
        suiteLV = int(suiteLV)
        job = 0 if groupType == '2' else myjob #仙器组合默认职业0
        job = 0 if groupType == ChConfig.EquipGroupType_Relics else myjob #仙器组合默认职业0
        ipyData = IpyGameDataPY.GetIpyGameData('EquipSuitAttr', int(groupType), int(suiteType), int(suiteLV), job)
        if not ipyData:
            continue
@@ -750,7 +767,7 @@
        paramList= [name, cnt, suiteLV, groupType, suiteType]
        notifyRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartSuiteNotify % (groupType, suiteType, cnt))
        if not notifyRecord & pow(2, suiteLV):
            if groupType == '1':
            if groupType == ChConfig.EquipGroupType_Armor:
                if cnt >=5:
                    PlayerControl.WorldNotify(0, 'EquipSuit5', paramList)
                    notifyRecord |= pow(2, suiteLV)
@@ -966,6 +983,24 @@
            break
    return findGroupType
#  获取满套装化的最低阶数,如5件套,4件5级,1件3级,则返回3
def GetEquipSuitsLVByType(curPlayer, suitType, groupType):
    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 NotifyEquipPartSuiteLV(curPlayer, index=None):
@@ -1072,7 +1107,7 @@
    
    SyncAllEquipAttrActiveInfo(curPlayer, activeType)
    if activeType == 0:
        PlayerMagicWeapon.CalcMagicWeaponAttr(curPlayer)
        PlayerMagicWeapon.CalcMagicWeaponSoulAttr(curPlayer)
    else:
        RefreshPlayerEquipAttribute(curPlayer)