| | |
| | | import PlayerWing
|
| | | import Operate_EquipStone
|
| | | import Operate_EquipSuitCompose
|
| | | import PassiveBuffEffMng
|
| | | import SkillCommon
|
| | | import PlayerMagicWeapon
|
| | | import time
|
| | | import json
|
| | |
| | | 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)
|
| | |
|
| | |
| | | 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
|
| | |
|
| | |
| | | #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)] # 绝版装备属性 需在等级变化独立计算
|
| | |
|
| | |
| | | equipPartStarIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])
|
| | | #maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2) #最大套装类型
|
| | | #equipPlaceList = [] # 有穿戴装备的装备位列表
|
| | | #suitCntDict = {} #套装数量字典
|
| | | suitCntDict = {} #套装数量字典
|
| | | #legendAttrDict = {} #所有传奇属性
|
| | | equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
|
| | |
|
| | |
| | | continue
|
| | | equipIndex = ipyData.GetGridIndex()
|
| | | curEquip = playerEquip.GetAt(equipIndex)
|
| | | if curEquip.IsEmpty():
|
| | | if not curEquip or curEquip.IsEmpty():
|
| | | continue
|
| | |
|
| | | if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):
|
| | |
| | | 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:
|
| | |
| | | #洗练套装属性
|
| | | #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)
|
| | |
| | | ## 装备套装属性计算
|
| | | # @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
|
| | |
|
| | |
|
| | |
| | | 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
|