| | |
| | | GameWorld.DebugLog("RefreshBuffAttr ID:%s,atk=%s,def=%s,hp=%s/%s,batAttrDict=%s"
|
| | | % (objID, batObj.GetAtk(), batObj.GetDef(), befHP, befMaxHP, batAttrDict))
|
| | |
|
| | | skbufAttrDict = {}
|
| | | |
| | | # 属性技能
|
| | | skillAttrDict = {}
|
| | | skillManager = batObj.GetSkillManager()
|
| | | for index in range(0, skillManager.GetSkillCount()):
|
| | | curSkill = skillManager.GetSkillByIndex(index)
|
| | | if not curSkill:
|
| | | continue
|
| | | for eIndex in range(curSkill.GetEffectCount()):
|
| | | effect = curSkill.GetEffect(eIndex)
|
| | | effID = effect.GetEffectID()
|
| | | if effID not in ChConfig.AttrIDList:
|
| | | continue
|
| | | if effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
|
| | | # 技能时仅技能有效
|
| | | continue
|
| | | attrID = effID
|
| | | attrValue = effect.GetEffectValue(0)
|
| | | calcType = effect.GetEffectValue(1)
|
| | | if calcType == 2: # 减少,其他默认增加
|
| | | attrValue = -attrValue
|
| | | skillAttrDict[attrID] = skillAttrDict.get(attrID, 0) + attrValue
|
| | | skbufAttrDict[attrID] = skbufAttrDict.get(attrID, 0) + attrValue
|
| | | skillAttrDict and GameWorld.DebugLog(" skillAttrDict=%s" % skillAttrDict)
|
| | | |
| | | # buff
|
| | | buffAttrDict = {} # buff属性 {attrID:value, } value可能是负值
|
| | | buffsAttrDict = {} # buff属性 {attrID:value, } value可能是负值
|
| | | buffMgr = batObj.GetBuffManager()
|
| | | for index in range(buffMgr.GetBuffCount()):
|
| | | buff = buffMgr.GetBuffByIndex(index)
|
| | |
| | | effID = effect.GetEffectID()
|
| | | if effID not in ChConfig.AttrIDList:
|
| | | continue
|
| | | if effect.GetTriggerSrc() and effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_BuffSelf]:
|
| | | # buff时,不配默认有效,或仅buff有效
|
| | | continue
|
| | | attrID = effID
|
| | | attrValue = (effect.GetEffectValue(0) + buff.GetEffectValueEx(attrID)) * layer
|
| | | calcType = effect.GetEffectValue(1)
|
| | | if calcType == 2: # 减少,其他默认增加
|
| | | attrValue = -attrValue
|
| | | buffAttrDict[attrID] = buffAttrDict.get(attrID, 0) + attrValue
|
| | | buffsAttrDict[attrID] = buffsAttrDict.get(attrID, 0) + attrValue
|
| | | skbufAttrDict[attrID] = skbufAttrDict.get(attrID, 0) + attrValue
|
| | |
|
| | | GameWorld.DebugLog(" buffAttrDict=%s" % buffAttrDict)
|
| | | buffsAttrDict and GameWorld.DebugLog(" buffsAttrDict=%s" % buffsAttrDict)
|
| | | GameWorld.DebugLog(" skbufAttrDict=%s" % skbufAttrDict)
|
| | |
|
| | | objID = batObj.GetID()
|
| | | # 先计算百分比加成或降低的
|
| | | perIDList = ChConfig.AttrPerDict.values()
|
| | | for attrID, attrPerID in ChConfig.AttrPerDict.items():
|
| | | if attrPerID not in buffAttrDict:
|
| | | if attrPerID not in skbufAttrDict:
|
| | | continue
|
| | | attrPerValue = buffAttrDict[attrPerID] # 可能是负值
|
| | | attrPerValue = skbufAttrDict[attrPerID] # 可能是负值
|
| | | attrValue = batObj.GetBatAttrValue(attrID, False)
|
| | | if attrValue <= 0:
|
| | | continue
|
| | |
| | | GameWorld.DebugLog(" attrID=%s(PerID:%s),attrValue=%s(PerValue:%s),updValue=%s" % (attrID, attrPerID, attrValue, attrPerValue, updValue))
|
| | |
|
| | | # 再累加非百分比的固定值
|
| | | for attrID, addValue in buffAttrDict.items():
|
| | | for attrID, addValue in skbufAttrDict.items():
|
| | | if attrID in perIDList:
|
| | | continue
|
| | | attrValue = batObj.GetBatAttrValue(attrID, False)
|