129 【战斗】战斗系统-服务端(王异所有技能;优化效果6009;增加效果6036;)
1个文件已添加
4个文件已修改
69 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6009.py 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6036.py 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4068,7 +4068,7 @@
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-增加层级上限
@@ -4095,6 +4095,7 @@
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, 
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6009.py
@@ -4,18 +4,38 @@
#
##@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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6036.py
New file
@@ -0,0 +1,27 @@
#!/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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -92,7 +92,7 @@
    # 没有类型的,纯配被动效果,有类型的技能在 OnUseSkill 统一处理回合次数,这里只处理纯被动效果的
    useCntLimit = None
    if not effSkill.GetSkillType(): 
        useCntLimit = TurnSkill.CheckSkillUseCntLimit(batObj, effSkill)
        useCntLimit = TurnSkill.CheckSkillUseCntLimit(turnFight, batObj, effSkill)
        if useCntLimit:
            return
        
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -86,7 +86,7 @@
            GameWorld.DebugLogEx("技能使用处于buff状态限制中! skillID=%s,buffStateGroups=%s,limitState=%s", skillID, buffStateGroups, limitState)
            return
        
    if CheckSkillUseCntLimit(curBatObj, useSkill):
    if CheckSkillUseCntLimit(turnFight, curBatObj, useSkill):
        return
    
    #没有指定目标,则按技能自身的目标逻辑
@@ -201,7 +201,7 @@
    useSkill.ResetUseRec()
    return True
def CheckSkillUseCntLimit(batObj, useSkill):
def CheckSkillUseCntLimit(turnFight, batObj, useSkill):
    ## 检查技能使用次数是否受限
    # @return: 是否受限,None-没有受限效果,False-不受限,True-受限了
    if not hasattr(useSkill, "GetEffectByID"):
@@ -214,12 +214,14 @@
    
    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)
@@ -2318,7 +2320,6 @@
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)