xdh
2019-03-02 8df2bbe894731fb3691dfde36fa8e583bc8f5576
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -35,6 +35,8 @@
import PlayerWing
import Operate_EquipStone
import Operate_EquipSuitCompose
import PassiveBuffEffMng
import SkillCommon
import PlayerMagicWeapon
import time
import json
@@ -119,7 +121,7 @@
    if curEquip.GetUserAttr(ShareDefine.Def_IudetCreateTime) == 0:
        curEquip.SetUserAttr(ShareDefine.Def_IudetCreateTime, int(time.time()))
    #---换装成功---
    if equipPackIndex in PlayerControl.GetFaceEquipIndexList(curPlayer):
    if equipPackIndex in PlayerControl.GetFaceEquipIndexList(curPlayer) or equipPlace in ChConfig.Def_SyncEquipStateByIndex:
        #通知客户端交换物品
        curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
        
@@ -391,7 +393,7 @@
    playControl = PlayerControl.PlayerControl(curPlayer)
    playControl.RefreshPlayerAttrState()
    
    if equipPlace in ChConfig.Def_SyncEquipStateByIndex:
    if equipPackIndex in PlayerControl.GetFaceEquipIndexList(curPlayer) or equipPlace in ChConfig.Def_SyncEquipStateByIndex:
        curPlayer.Sync_UnEquipItem(equipID, equipPackIndex)
    return
@@ -455,7 +457,7 @@
    #allAttrListEquip = [{} for _ in range(4)]  # 装备其他
    #allAttrListPlusBase = [{} for _ in range(4)]  # 基础强化属性
    allAttrListStone = [{} for _ in range(4)]  # 宝石属性
    #allAttrListSuit = [{} for _ in range(4)]  # 套装属性
    allAttrListSuit = [{} for _ in range(4)]  # 套装属性
    #allAttrListWash = [{} for _ in range(4)]  # 洗练属性
    #allAttrListOutOfPrintEquip = [{} for _ in range(4)]  # 绝版装备属性 需在等级变化独立计算
    
@@ -464,7 +466,7 @@
    equipPartStarIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])
    #maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2)  #最大套装类型
    #equipPlaceList = []  # 有穿戴装备的装备位列表
    #suitCntDict = {}  #套装数量字典
    suitCntDict = {}  #套装数量字典
    #legendAttrDict = {}  #所有传奇属性
    equipScoreTotal = 0  #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
    
@@ -475,7 +477,7 @@
            continue
        equipIndex = ipyData.GetGridIndex()
        curEquip = playerEquip.GetAt(equipIndex)
        if curEquip.IsEmpty():
        if not curEquip or curEquip.IsEmpty():
            continue
            
        if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):
@@ -523,6 +525,12 @@
        CalcEquipStarAttr(curPlayer, classlv, equipPlace, equipPartStar, allAttrListStar)
        #计算装备宝石加成
        CalcEquipStone_Effect(curPlayer, equipIndex, allAttrListStone)
        #套装计数
        suiteID = curEquip.GetSuiteID()
        if suiteID:
            if suiteID not in suitCntDict:
                suitCntDict[suiteID] = []
            suitCntDict[suiteID].append(equipPartStar)
        
        #物品强化属性,佩饰强化不同要区分
#        if equipIndex in equipPartStarIndexList:
@@ -539,7 +547,7 @@
    #洗练套装属性
    #Operate_EquipWash.CalcAttr_EquipWashSpec(curPlayer, equipPlaceList, allAttrListWash)
    #套装属性
    #CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListSuit)
    CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListSuit)
    #GameWorld.DebugLog("所有传奇属性: %s" % legendAttrDict)
    #保存计算值
    #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allAttrListStone)
@@ -730,44 +738,48 @@
## 装备套装属性计算
#  @param curPlayer 当前玩家
#  @return None
def CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListEquip):
    Def_EquipSuitMaxCount = 3  #套装最大阶段
    myjob = curPlayer.GetJob()
    name = curPlayer.GetName()
    for suiteKey, cnt in suitCntDict.items():
        groupType, suiteType, suiteLV = suiteKey.split('_')
        suiteLV = int(suiteLV)
        job = 0 if groupType == ChConfig.EquipGroupType_Relics else myjob  #仙器组合默认职业0
        ipyData = IpyGameDataPY.GetIpyGameData('EquipSuitAttr', int(groupType), int(suiteType), int(suiteLV), job)
        if not ipyData:
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 i in range(1, Def_EquipSuitMaxCount + 1):
            countKeyName = 'GetCount%d' % i
            attrTypeKeyName = 'GetAttrType%d' % i
            attrValueKeyName = 'GetAttrValue%d' % i
            needCnt = getattr(ipyData, countKeyName)()
            if cnt >= needCnt:
                attrTypeList = getattr(ipyData, attrTypeKeyName)()
                attrValueList = getattr(ipyData, attrValueKeyName)()
                for j, attrID in enumerate(attrTypeList):
                    value = attrValueList[j]
                    PlayerControl.CalcAttrDict_Type(attrID, value, allAttrListEquip)
        #套装激活提示(只提示1次)
        paramList = [name, cnt, suiteLV, groupType, suiteType]
        notifyRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartSuiteNotify % (groupType, suiteType, cnt))
        if not notifyRecord & pow(2, suiteLV):
            if groupType == ChConfig.EquipGroupType_Armor:
                if cnt >= 5:
                    PlayerControl.WorldNotify(0, 'EquipSuit5', paramList)
                    notifyRecord |= pow(2, suiteLV)
        for ipyData in ipyDataList:
            suiteCnt = ipyData.GetSuiteCnt()
            star = ipyData.GetStar()
            skillID = ipyData.GetSkillID()
            if starList.count(star) >= suiteCnt:
                for attrID, attrValue in ipyData.GetAttrInfo().items():
                    PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSuit)
                #技能
                if skillID and not skillManager.FindSkillBySkillTypeID(skillID):
                    learnSkillList.append(skillID)
            else:
                PlayerControl.WorldNotify(0, 'EquipSuit5', paramList)
                notifyRecord |= pow(2, suiteLV)
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartSuiteNotify % (groupType, suiteType, cnt), notifyRecord)
                if skillID and skillManager.FindSkillBySkillTypeID(skillID):
                    delSkillID.append(skillID)
                    skillManager.DeleteSkillBySkillTypeID(skillID)
            notifyMark = ipyData.GetIsNotify()
            if notifyMark and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteNotify, notifyMark):
                PlayerControl.WorldNotify(0, 'AllStarLevelUp', [playerName, suiteID, suiteCnt, star])
                GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteNotify, notifyMark, 1)
    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
@@ -1117,7 +1129,7 @@
    if index == None:
        equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv')
        for equipPlace in ChConfig.Pack_EquipPart_CanPlusStar.get(IPY_GameWorld.rptEquip, []):
            for classlv in xrange(equipMaxClasslv):
            for classlv in xrange(1, equipMaxClasslv+1):
                ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace)
                if not ipyData:
                    continue