| | |
| | | #
|
| | | #
|
| | | ##@package Buff_801
|
| | | # @todo: 麒麟盾,吸收XX%伤害,护盾吸收伤害达到血量上限的xx%值或者3秒后爆发所吸收的伤害
|
| | | # @todo: 增加可吸收受到伤害的10%护盾,护盾存在上限为生命20%血量,持续6秒,护盾破裂或者6秒后对周围目标造成吸收伤害值200%的伤害
|
| | | #
|
| | | # @author Alee
|
| | | # @date 2017-10-31 14:10
|
| | |
| | | """Version = 2017-10-31 14:10"""
|
| | |
|
| | |
|
| | | import IPY_GameWorld
|
| | | import GameWorld
|
| | | import ChConfig
|
| | | import SkillShell
|
| | | import PassiveBuffEffMng
|
| | | import PySkillManager
|
| | | import SkillCommon
|
| | | import GameObj
|
| | |
|
| | | #===============================================================================
|
| | | # ## 根据释放方的属性添加效果
|
| | | # # @param defender Buff承受者
|
| | | # # @param curEffect 技能效果
|
| | | # # @param calcDict 技能效果累加总表
|
| | | # # @return None
|
| | | # def OnCalcBuffEx(curObj, curEffect, calcDict, curBuff):
|
| | | # GameWorld.DebugLog("801 ǰ OnCalcBuffEx-------------%s"%curEffect.GetEffectValue(0))
|
| | | # buffValue = curEffect.GetEffectValue(0) + PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(
|
| | | # curObj, None, curBuff.GetSkill(), ChConfig.TriggerType_AbsorbShield)
|
| | | # GameWorld.DebugLog("801 ǰ OnCalcBuffEx------buffValue-------%s"%buffValue)
|
| | | # # 吸收伤害比率, SetAtkAbsorb记录已吸收伤害值
|
| | | # curObj.SetDefanceAbsorb(buffValue)
|
| | | # maxValue = int(curEffect.GetEffectValue(1)/float(ChConfig.Def_MaxRateValue)*GameObj.GetMaxHP(curObj))
|
| | | # curObj.SetAtkAbsorb(maxValue)
|
| | | # return
|
| | | # |
| | | # |
| | | # ## 返回buff类型,线性与否
|
| | | # # @param None
|
| | | # # @return 线性
|
| | | # # @remarks 函数详细说明.
|
| | | # def GetCalcType():
|
| | | # return ChConfig.TYPE_Linear
|
| | | #===============================================================================
|
| | |
|
| | | ## 添加BUFF后的逻辑
|
| | | # @param None
|
| | | # @return None
|
| | | def DoAddBuffOver(curObj, addBuff, curEffect, tick):
|
| | | buffValue = curEffect.GetEffectValue(0) + PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(
|
| | | curObj, None, addBuff.GetSkill(), ChConfig.TriggerType_AbsorbShield)
|
| | | # 战斗属性 在刷新的时候会清空,不能用在此函数中
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShieldValue, buffValue) # 吸收的伤害百分比
|
| | | maxValue = int(curEffect.GetEffectValue(1)/float(ChConfig.Def_MaxRateValue)*GameObj.GetMaxHP(curObj))
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShieldMax, maxValue) # 吸收上限值
|
| | | |
| | | def DoAddBuffOver(curObj, addBuff, curEffect, tick, buffOwner):
|
| | | # SetValue1用于当前吸收值
|
| | | addBuff.SetValue(GameObj.GetMaxHP(curObj)*curEffect.GetEffectValue(1)/ChConfig.Def_MaxRateValue) # 吸收上限
|
| | | return
|
| | |
|
| | | ##吸收伤害百分比
|
| | | # @param attacker 攻击者实例
|
| | | # @param curSkill 技能实例
|
| | | # @param curEffect 当前技能效果1
|
| | | # @return 总值
|
| | | def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
|
| | | if not changeBuffValueDict:
|
| | | return []
|
| | | |
| | | return [changeBuffValueDict.get(i, 0) for i in range(ChConfig.Def_BuffValue_Count)]
|
| | |
|
| | |
|
| | | def OnBuffDisappear(curObj, curSkill, curBuff, curEffect, tick):
|
| | | if not curObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShield):
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShieldValue, 0) # 吸收的伤害百分比
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShieldMax, 0) # 吸收上限值
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShield, 0)
|
| | | skillID = curEffect.GetEffectValue(2)
|
| | | if not skillID:
|
| | | return
|
| | | boomValue = curBuff.GetValue1()
|
| | | # 剩余护盾值用于爆炸
|
| | | if boomValue == 0:
|
| | | return
|
| | |
|
| | | #效果值 第三个值为技能ID
|
| | | boomID = curEffect.GetEffectValue(2)
|
| | | skillData = GameWorld.GetGameData().GetSkillBySkillID(boomID)
|
| | | skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | | if not skillData:
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShieldValue, 0) # 吸收的伤害百分比
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShieldMax, 0) # 吸收上限值
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShield, 0)
|
| | | return
|
| | | |
| | | # 存储起来用于伤害
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_MoreHurtValue, |
| | | curObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShield))
|
| | | skillEffect = SkillCommon.GetSkillEffectByEffectID(skillData, ChConfig.Def_Skill_Effect_Attack)
|
| | | if not skillEffect:
|
| | | return
|
| | | boomValue = boomValue*skillEffect.GetEffectValue(2)/ChConfig.Def_MaxRateValue
|
| | | if boomValue == 0:
|
| | | return
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_MoreHurtValue, boomValue)
|
| | |
|
| | | SkillShell.Trigger_UseSkill(curObj, None, skillData, tick, curObj.GetPosX(), curObj.GetPosY())
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_MoreHurtValue, 0)
|
| | | |
| | | curObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShieldValue, 0) # 吸收的伤害百分比
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShieldMax, 0) # 吸收上限值
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShield, 0)
|
| | | return
|