129 【战斗】战斗系统-服务端(王异所有技能;优化效果6009;增加效果6036;)
| | |
| | | PassiveEff_AddSkillPerByJob = 6006 # 增加本次技能万分比(验证目标职业)
|
| | | PassiveEff_AddSkillTagCnt = 6007 # 增加技能目标数
|
| | | PassiveEff_ImmuneControlBuff = 6008 # 生命值低于x%时免疫控制效果
|
| | | PassiveEff_MustSuperHit = 6009 # 生命值低于x%时必定暴击
|
| | | PassiveEff_MustSuperHit = 6009 # 必定暴击
|
| | | PassiveEff_AddSkillPerByHP = 6010 # 增加本次技能万分比(验证当前生命)
|
| | | PassiveEff_AddSkillPerByBuffLayer = 6011 # 增加本次技能万分比(根据buff层级)
|
| | | PassiveEff_AddBuffLayerMax = 6012 # 添加buff层级上限: 数值1-增加层级上限
|
| | |
| | | PassiveEff_ImmuneBadBuff = 6033 # 概率免疫buff类型(免疫添加,针对减益、控制、dot类)
|
| | | PassiveEff_IgnoreSex = 6034 # 去除性别验证
|
| | | PassiveEff_AddBuffTime = 6035 # 增加buff持续时间
|
| | | PassiveEff_AddSkillUseCntLimit = 6036 # 增加7009回合数
|
| | |
|
| | | # 被动效果ID有触发值时就返回的
|
| | | PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit, PassiveEff_SkillInvalid,
|
| | |
| | | #
|
| | | ##@package Skill.PassiveTrigger.PassiveEff_6009
|
| | | #
|
| | | # @todo:目标生命值低于x%必定暴击
|
| | | # @todo:必定暴击
|
| | | # @author hxp
|
| | | # @date 2025-09-23
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 目标生命值低于x%必定暴击
|
| | | # 详细描述: 必定暴击
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2025-09-23 19:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameWorld
|
| | |
|
| | | def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
|
| | | lowerThanPer = curEffect.GetEffectValue(0)
|
| | | nowPer = defender.GetHP() / float(defender.GetMaxHP()) * 100
|
| | | return 1 if nowPer < lowerThanPer else 0
|
| | | checkValue = curEffect.GetEffectValue(0) # 判断参数
|
| | | checkType = curEffect.GetEffectValue(1) # 判断方式: 0-按目标生命, 1-按目标状态
|
| | | defID = defender.GetID()
|
| | | |
| | | # 0 - 按目标生命低于x%;参数:单值即可,如30就是30%
|
| | | if checkType == 0:
|
| | | lowerThanPer = checkValue
|
| | | defHP = defender.GetHP()
|
| | | defMaxHP = defender.GetMaxHP()
|
| | | nowPer = defHP / float(defMaxHP) * 100
|
| | | if nowPer < lowerThanPer:
|
| | | GameWorld.DebugLogEx("必定暴击->目标血量低于%s%%: defID=%s,hp:%s/%s", lowerThanPer, defID, defHP, defMaxHP)
|
| | | return 1
|
| | | |
| | | # 1 - 按目标处于状态;参数:支持多状态列表 [状态1, ...]
|
| | | elif checkType == 1:
|
| | | if defender.CheckInState(checkValue):
|
| | | GameWorld.DebugLogEx("必定暴击->目标处于状态%s: defID=%s", checkValue, defID)
|
| | | return 1
|
| | | |
| | | return
|
| New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveTrigger.PassiveEff_6036
|
| | | #
|
| | | # @todo:增加最多触发回合数(对7009效果提升)
|
| | | # @author hxp
|
| | | # @date 2025-12-31
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 增加最多触发回合数(对7009效果提升)
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2025-12-31 17:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
|
| | | LimitByTurnAll = skillkwargs.pop("LimitByTurnAll", 0)
|
| | | if LimitByTurnAll:
|
| | | return curEffect.GetEffectValue(0)
|
| | | |
| | | LimitByTurnPer = skillkwargs.pop("LimitByTurnPer", 0)
|
| | | if LimitByTurnPer:
|
| | | return curEffect.GetEffectValue(1)
|
| | | |
| | | return 0
|
| | |
| | | # 没有类型的,纯配被动效果,有类型的技能在 OnUseSkill 统一处理回合次数,这里只处理纯被动效果的
|
| | | useCntLimit = None
|
| | | if not effSkill.GetSkillType():
|
| | | useCntLimit = TurnSkill.CheckSkillUseCntLimit(batObj, effSkill)
|
| | | useCntLimit = TurnSkill.CheckSkillUseCntLimit(turnFight, batObj, effSkill)
|
| | | if useCntLimit:
|
| | | return
|
| | |
|
| | |
| | | GameWorld.DebugLogEx("技能使用处于buff状态限制中! skillID=%s,buffStateGroups=%s,limitState=%s", skillID, buffStateGroups, limitState)
|
| | | return
|
| | |
|
| | | if CheckSkillUseCntLimit(curBatObj, useSkill):
|
| | | if CheckSkillUseCntLimit(turnFight, curBatObj, useSkill):
|
| | | return
|
| | |
|
| | | #没有指定目标,则按技能自身的目标逻辑
|
| | |
| | | useSkill.ResetUseRec()
|
| | | return True
|
| | |
|
| | | def CheckSkillUseCntLimit(batObj, useSkill):
|
| | | def CheckSkillUseCntLimit(turnFight, batObj, useSkill):
|
| | | ## 检查技能使用次数是否受限
|
| | | # @return: 是否受限,None-没有受限效果,False-不受限,True-受限了
|
| | | if not hasattr(useSkill, "GetEffectByID"):
|
| | |
| | |
|
| | | skillID = useSkill.GetSkillID()
|
| | | if useCntLimit:
|
| | | useCntLimit += TurnPassive.GetTriggerEffectValue(turnFight, batObj, None, ChConfig.PassiveEff_AddSkillUseCntLimit, useSkill, LimitByTurnAll=1)
|
| | | useCnt = batObj.GetSkillUseCnt(skillID)
|
| | | if useCnt >= useCntLimit:
|
| | | GameWorld.DebugLogEx("技能每场战斗使用次数受限! skillID=%s,useCnt=%s >= %s", skillID, useCnt, useCntLimit)
|
| | | return True
|
| | |
|
| | | if turnUseCntLimit:
|
| | | turnUseCntLimit += TurnPassive.GetTriggerEffectValue(turnFight, batObj, None, ChConfig.PassiveEff_AddSkillUseCntLimit, useSkill, LimitByTurnPer=1)
|
| | | turnUseCnt = batObj.GetSkillTurnUseCnt(skillID)
|
| | | if turnUseCnt >= turnUseCntLimit:
|
| | | GameWorld.DebugLogEx("技能每大回合使用次数受限! skillID=%s,turnUseCnt=%s >= %s", skillID, turnUseCnt, turnUseCntLimit)
|
| | |
| | |
|
| | | def CanSuperHit(turnFight, atkObj, defObj, curSkill):
|
| | | if TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_MustSuperHit, curSkill):
|
| | | GameWorld.DebugLogEx("目标血量低于百分x时必定暴击: defID=%s,hp:%s/%s", defObj.GetID(), defObj.GetHP(), defObj.GetMaxHP())
|
| | | return True
|
| | |
|
| | | aSuperHitRate = atkObj.GetBatAttrValue(ChConfig.AttrID_SuperHitRate)
|