129 【战斗】战斗系统-服务端(韩遂技能;增加效果6016-对护盾造成伤害加成)
| | |
| | | PassiveEff_AddFinalDamPer = 6013 # 增加最终增伤(根据属性转化)
|
| | | PassiveEff_AddSkillRate = 6014 # 增加技能概率
|
| | | PassiveEff_AddRicochetCnt = 6015 # 增加弹射次数
|
| | | PassiveEff_AddShieldHurtPer = 6016 # 对护盾造成伤害加成
|
| | |
|
| | | # 被动效果ID有触发值时就返回的
|
| | | PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit]
|
| | |
| | | def __doAddBuff(curPlayer, msgList):
|
| | | faction = msgList[1] if len(msgList) > 1 else 2
|
| | | posNum = msgList[2] if len(msgList) > 2 else 1
|
| | | skillID = msgList[3] if len(msgList) > 3 else 0
|
| | | skillIDList = msgList[3:]
|
| | | if faction not in FactionList:
|
| | | GameWorld.DebugAnswer(curPlayer, "阵营: 1-左边;2-右边")
|
| | | return
|
| | |
| | | GameWorld.DebugAnswer(curPlayer, "对象已阵亡:阵营:%s,位置:%s" % (faction, posNum))
|
| | | return
|
| | |
|
| | | addBuff = TurnBuff.DoAddBuffBySkillID(turnFight, batObj, skillID)
|
| | | if addBuff:
|
| | | GameWorld.DebugAnswer(curPlayer, "添加buff成功! buffID=%s" % addBuff.GetBuffID()) |
| | | else:
|
| | | GameWorld.DebugAnswer(curPlayer, "添加buff失败")
|
| | | for skillID in skillIDList:
|
| | | addBuff = TurnBuff.DoAddBuffBySkillID(turnFight, batObj, skillID)
|
| | | if addBuff:
|
| | | GameWorld.DebugAnswer(curPlayer, "添加buff成功!skillID=%s,buffID=%s" % (skillID, addBuff.GetBuffID())) |
| | | else:
|
| | | GameWorld.DebugAnswer(curPlayer, "添加buff失败!skillID=%s" % (skillID))
|
| | | return
|
| | |
|
| | | def __printInfo(curPlayer, msgList):
|
| New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveTrigger.PassiveEff_6016
|
| | | #
|
| | | # @todo:对护盾造成伤害加成
|
| | | # @author hxp
|
| | | # @date 2025-10-28
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 对护盾造成伤害加成
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2025-10-28 18:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, **skillkwargs):
|
| | | return curEffect.GetEffectValue(0) |
| | |
| | |
|
| | | # 减伤盾减伤, 会改变 hurtValue
|
| | | hurtValue = max(0, hurtValue)
|
| | | |
| | | |
| | | # 承伤盾承伤,剩余时间短的优先承伤,承伤不影响输出,相当于额外的HP,仅用于抵扣掉血,仅 改变 realHurtHP
|
| | | realHurtHP = hurtValue
|
| | | shieldBuffList = []
|
| | |
| | | shieldBuffList.append([remainTime, buffValue, buff])
|
| | |
|
| | | if shieldBuffList:
|
| | | #可能需要同步盾伤跟实际扣血值给前端,具体看前端护盾怎么处理再优化
|
| | | shieldHurtPer = 10000 # 对护盾伤害比
|
| | | shieldHurtPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddShieldHurtPer, curSkill)
|
| | | shieldHurtPer /= 10000.0
|
| | | shieldHurtValue = int(hurtValue * shieldHurtPer) # 对护盾伤害
|
| | | GameWorld.DebugLog(" 对护盾总伤害: shieldHurtValue=%s,shieldHurtPer=%s,hurtValue=%s" % (shieldHurtValue, shieldHurtPer, hurtValue))
|
| | | shieldBuffList.sort()
|
| | | for _, buffValue, buff in shieldBuffList:
|
| | | if realHurtHP <= 0:
|
| | | if shieldHurtValue <= 0:
|
| | | break
|
| | | buffID = buff.GetBuffID()
|
| | | if realHurtHP < buffValue:
|
| | | damageShieldValue = realHurtHP
|
| | | if shieldHurtValue < buffValue:
|
| | | decShieldValue = shieldHurtValue
|
| | | else:
|
| | | damageShieldValue = buffValue
|
| | | GameWorld.DebugLog(" 承伤盾: buffID=%s,buffValue=%s,realHurtHP=%s,damageShieldValue=%s" % (buffID, buffValue, realHurtHP, damageShieldValue))
|
| | | realHurtHP -= damageShieldValue # 承伤值
|
| | | if damageShieldValue >= buffValue:
|
| | | GameWorld.DebugLog(" 删除盾: buffID=%s,realHurtHP=%s" % (buffID, realHurtHP))
|
| | | decShieldValue = buffValue
|
| | | GameWorld.DebugLog(" 承伤盾抵扣: buffID=%s,buffValue=%s,剩余盾伤=%s,扣除盾值=%s" % (buffID, buffValue, shieldHurtValue, decShieldValue))
|
| | | shieldHurtValue -= decShieldValue # 承伤值
|
| | | if decShieldValue >= buffValue:
|
| | | GameWorld.DebugLog(" 删除盾: buffID=%s,剩余盾伤=%s" % (buffID, shieldHurtValue))
|
| | | TurnBuff.DoBuffDel(turnFight, defObj, buff, relatedSkill=curSkill, afterLogic=True, tagObj=atkObj)
|
| | | else:
|
| | | updShieldValue = buffValue - damageShieldValue
|
| | | GameWorld.DebugLog(" 更新盾值: updShieldValue=%s,realHurtHP=%s" % (updShieldValue, realHurtHP))
|
| | | updShieldValue = buffValue - decShieldValue
|
| | | GameWorld.DebugLog(" 更新盾: updShieldValue=%s,剩余盾伤=%s" % (updShieldValue, shieldHurtValue))
|
| | | buff.SetValue1(updShieldValue % ChConfig.Def_PerPointValue)
|
| | | buff.SetValue2(updShieldValue / ChConfig.Def_PerPointValue)
|
| | | curSkill.AddAfterLogic(ChConfig.AfterLogic_SyncBuff, [defObj, buff, atkObj, "ReduceShieldValue"])
|
| | |
|
| | | realHurtHP = int(shieldHurtValue / shieldHurtPer)
|
| | | GameWorld.DebugLog(" 承伤后剩余伤血: realHurtHP=%s" % (realHurtHP))
|
| | | return hurtValue, max(0, realHurtHP), hurtTypes
|
| | |
|
| | | def CalcBounceHP(turnFight, atkObj, defObj, hurtObj, curSkill):
|