129 【战斗】战斗系统-服务端(王异技能;支持被动增加暴击率;支持被动变更伤害类型;)
5个文件已修改
1个文件已添加
74 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6002.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4286,6 +4286,17 @@
TriggerSrc_SkillSelf = 3    # 本技能有效
TriggerSrc_BuffSelf = 4     # 本buff有效
# 被动效果ID,属性类的直接使用属性ID当做效果ID
PassiveEff_AddBuffLayerByWeight = 6001 # 根据权重随机添加buff层数 数值1-[[权重,层级], ...]
PassiveEff_ChangeHurtType = 6002 # 变更伤害类型: 值1-伤害类型;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
# 被动效果ID有触发值时就返回的
PassiveEffHappenValueList = [PassiveEff_ChangeHurtType]
# 被动效果ID触发值取最大值的
PassiveEffValueMaxList = []
# 被动效果ID触发值取最小值的
PassiveEffValueMinList = []
(
TriggerType_BeSuperHit, # 被暴击触发技能 1
TriggerType_BuffState,  # 进入4012的某个状态触发技能
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6002.py
New file
@@ -0,0 +1,25 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_6002
#
# @todo:变更本次伤害类型
# @author hxp
# @date 2025-09-16
# @version 1.0
#
# 详细描述: 变更本次伤害类型
#
#-------------------------------------------------------------------------------
#"""Version = 2025-09-16 17:00"""
#-------------------------------------------------------------------------------
def GetHappenValue(attacker, defender, curEffect, effSkill, **skillkwargs):
    checkInStateList = curEffect.GetEffectValue(1)
    if checkInStateList:
        if not defender.CheckInState(checkInStateList):
            return
    attrValue = curEffect.GetEffectValue(0)
    return attrValue
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py
@@ -20,7 +20,7 @@
    checkInStateList = curEffect.GetEffectValue(2)
    if checkInStateList:
        if not defender.CheckInState(checkInStateList):
            return 0
            return
        
    attrValue = curEffect.GetEffectValue(0)
    calcType = curEffect.GetEffectValue(1)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -63,7 +63,7 @@
    skillTypeID = buffSkill.GetSkillTypeID()
    buffRepeat = buffSkill.GetBuffRepeat()
    addLayerCnt = buffSkill.GetLayerCnt()
    addLayerEff = buffSkill.GetEffectByID(6001)
    addLayerEff = buffSkill.GetEffectByID(ChConfig.PassiveEff_AddBuffLayerByWeight)
    if addLayerEff:
        addLayerCnt = GameWorld.GetResultByWeightList(addLayerEff.GetEffectValues(), addLayerCnt)
        
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -162,15 +162,18 @@
            if value is None:
                continue
            
            #if triggerType in TriggerValueMaxList:
            #    curValue = max(curValue, value) # 取最大值
            #elif triggerType in TriggerValueMinList:
            #    if not curValue:
            #        curValue = value
            #    elif value > 0:
            #        curValue = min(curValue, value) # 取最小值
            #else:
            curValue += value
            if effID in ChConfig.PassiveEffHappenValueList:
                if value:
                    return value
            elif effID in ChConfig.PassiveEffValueMaxList:
                curValue = max(curValue, value) # 取最大值
            elif effID in ChConfig.PassiveEffValueMinList:
                if not curValue:
                    curValue = value
                elif value > 0:
                    curValue = min(curValue, value) # 取最小值
            else:
                curValue += value
            #if skillTypeID not in Def_PassiveSkillValueNoCD:
            #    if curSkill.GetCoolDownTime():
            #        SkillCommon.SetSkillRemainTime(curSkill, 0, tick, attacker)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -1011,13 +1011,19 @@
def CalcHurtHP(turnFight, atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, **kwargs):
    '''计算伤害,默认按攻击计算
    '''
    skillID = curSkill.GetSkillID()
    pmType = GetPMType(atkObj, curSkill)
    ignoreDef = IsIgnoreDef(curSkill)
    
    changeHurtType = TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_ChangeHurtType, curSkill)
    if changeHurtType == 1:
        ignoreDef = True
        GameWorld.DebugLog("强制变更本次伤害为无视防御! skillID=%s" % skillID)
    atkID = atkObj.GetID()
    defID = defObj.GetID()
    
    skillID = curSkill.GetSkillID()
    isTurnNormalSkill = SkillCommon.isTurnNormalSkill(curSkill)
    isAngerSkill = SkillCommon.isAngerSkill(curSkill)
    isDot = ("damageoftime" in kwargs)
@@ -1051,7 +1057,7 @@
    isSuperHit, isParry, isStun = False, False, False
    aSuperDamPer, dSuperDamPerDef = 0, 0
    if not isDot:
        isSuperHit = CanSuperHit(atkObj, defObj) # 是否暴击
        isSuperHit = CanSuperHit(turnFight, atkObj, defObj, curSkill) # 是否暴击
        isParry = (isTurnNormalSkill and CanParry(turnFight, atkObj, defObj, curSkill)) # 是否格挡,仅针对普攻
        isStun = CanStun(turnFight, atkObj, defObj, curSkill) # 是否击晕
        
@@ -1140,8 +1146,9 @@
    hurtValue = max(1, int(hurtValue)) # 负值、保底防范
    return hurtValue, hurtTypes
def CanSuperHit(atkObj, defObj):
def CanSuperHit(turnFight, atkObj, defObj, curSkill):
    aSuperHitRate = atkObj.GetBatAttrValue(ChConfig.AttrID_SuperHitRate)
    aSuperHitRate += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SuperHitRate, curSkill)
    dSuperHitRateDef = defObj.GetBatAttrValue(ChConfig.AttrID_SuperHitRateDef)
    happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("SuperHitCfg", 1))
    if GameWorld.CanHappen(happenRate):