| | |
| | | aimObjList.sort(key=lambda o:(o.GetHP()), reverse=False)
|
| | | #GameWorld.DebugLogEx("血量最低排序: %s", [[o.GetID(), o.GetHP(), o.GetMaxHP()] for o in aimObjList])
|
| | |
|
| | | # 血量百分比最低
|
| | | elif tagAffect == ChConfig.SkillTagAffect_HPPerLowest:
|
| | | aimObjList.sort(key=lambda o:(o.GetHP() / float(o.GetMaxHP())), reverse=False)
|
| | | #GameWorld.DebugLogEx("血量百分比最低排序: %s", [[o.GetID(), o.GetHP(), o.GetMaxHP(), o.GetHP() / float(o.GetMaxHP())] for o in aimObjList])
|
| | | |
| | | # 血量最高
|
| | | elif tagAffect == ChConfig.SkillTagAffect_HPHighest:
|
| | | aimObjList.sort(key=lambda o:(o.GetHP()), reverse=True)
|
| | |
| | |
|
| | | # 统计伤血,可能单个技能对同一目标造成多次伤害
|
| | | totalHurtValue = 0
|
| | | isSuckHP = False
|
| | | suckObjIDList = [] # 吸血的对象ID列表
|
| | | missObjIDList, immuneObjIDList = [], [] # 闪避、免疫对象ID列表
|
| | | stunObjIDList, superHitObjIDList, parryObjIDList = [], [], []
|
| | | beHurtObjIDList = [] # 受伤的对象ID列表
|
| | |
| | | if tagObj not in caorenProtectList:
|
| | | caorenProtectList.append(tagObj)
|
| | |
|
| | | if hurtObj.GetSuckHP() > 0:
|
| | | isSuckHP = True
|
| | | |
| | | if hurtObj.GetSuckHP() > 0 and not hurtObj.HaveHurtType(ChConfig.HurtAtkType_PoisonCureSuck):
|
| | | if hurtObjID not in suckObjIDList:
|
| | | suckObjIDList.append(hurtObjID)
|
| | | |
| | | # 判断自己死亡,因为反弹、平摊伤害的原因,有可能自己干死自己
|
| | | if curObj.IsAlive() and curObj.GetHP() <= 0:
|
| | | if curObj.CanNoDead():
|
| | |
| | | DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuperHit, relatedSkillID)
|
| | | if stunObjIDList:
|
| | | DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_Stun, relatedSkillID)
|
| | | if isSuckHP:
|
| | | if suckObjIDList:
|
| | | DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuckHP, relatedSkillID)
|
| | |
|
| | | # 结算副本相关的攻击结果,仅主动发起玩家阵容武将触发
|
| | |
| | | # 掉血时
|
| | | if tagID in beHurtObjIDList:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeHurt, curObj, connSkill=useSkill)
|
| | | #TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_HurtTag, tagObj, connSkill=useSkill) 暂时用不到先屏蔽
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_HurtTag, tagObj, connSkill=useSkill)
|
| | |
|
| | | # 受到任意效果时(除直接攻击外的任意效果,如buff、dot、治疗、额外怒技)
|
| | | if not isAttackDirect:
|
| | |
| | | if tagID in parryObjIDList:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeParry, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill)
|
| | | |
| | | # 吸血
|
| | | if tagID in suckObjIDList:
|
| | | if not triggerOne:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuckHPOne, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuckHP, curObj, connSkill=useSkill)
|
| | |
|
| | | # 连击
|
| | | if batType == ChConfig.TurnBattleType_Combo:
|
| | |
| | | GameWorld.DebugLogEx(" 伤害最高限制: hurtValue=%s,hurtAtkPerMax=%s,aAtk=%s", hurtValue, hurtAtkPerMax, aAtk)
|
| | |
|
| | | # 均摊
|
| | | hurtShareEff = curSkill.GetEffectByID(ChConfig.SkillEff_HurtShare)
|
| | | if hurtShareEff:
|
| | | if HaveShareEff(atkObj, curSkill):
|
| | | tagCnt = max(1, len(curSkill.GetTagObjList()))
|
| | | hurtValue = hurtValue / tagCnt
|
| | | GameWorld.DebugLogEx(" 目标均摊伤害: hurtValue=%s,tagCnt=%s", hurtValue, tagCnt)
|
| | |
|
| | | hurtValue = max(1, int(hurtValue)) # 负值、保底防范,放最后
|
| | | return hurtValue, hurtTypes
|
| | |
|
| | | def HaveShareEff(atkObj, curSkill):
|
| | | ## 玩家技能是否有分摊效果: 均摊伤害/治疗/承伤盾值
|
| | | hurtShareEff = curSkill.GetEffectByID(ChConfig.SkillEff_HurtShare)
|
| | | if not hurtShareEff:
|
| | | return False
|
| | | needLearnSkillID = hurtShareEff.GetEffectValue(0)
|
| | | if needLearnSkillID:
|
| | | if not atkObj.GetSkillManager().FindSkillByID(needLearnSkillID):
|
| | | GameWorld.DebugLogEx("所需技能未学习,分摊效果不生效! skillID=%s,needLearnSkillID=%s", curSkill.GetSkillID(), needLearnSkillID)
|
| | | return False
|
| | | return True
|
| | |
|
| | | def GetAddSkillPer(turnFight, atkObj, defObj, curSkill):
|
| | | ## 获取额外增加的技能万分比
|
| | |
| | | cureHP = int(cureHP * multiValue)
|
| | | GameWorld.DebugLogEx(" 治疗倍值: cureHP=%s,multiValue=%s", cureHP, multiValue)
|
| | |
|
| | | hurtShareEff = curSkill.GetEffectByID(ChConfig.SkillEff_HurtShare)
|
| | | if hurtShareEff:
|
| | | if HaveShareEff(userObj, curSkill):
|
| | | tagCnt = max(1, len(curSkill.GetTagObjList()))
|
| | | cureHP = cureHP / tagCnt
|
| | | GameWorld.DebugLogEx(" 目标均摊治疗: cureHP=%s,tagCnt=%s", cureHP, tagCnt)
|