129 【战斗】战斗系统-服务端(丁奉反伤,孙鲁育技能;增加释放方式1004 - 反伤盾/荆棘;增加buff状态定义:21-承伤盾,22-反伤盾;)
2个文件已修改
1个文件已添加
80 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuffs/BuffAtkType_1004.py 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3157,7 +3157,10 @@
    BatObjState_Chaos, # 混乱 17
    BatObjState_18, # Ȩı 18
    BatObjState_FocusFire, # 军令/集火 19
) = range(20)
    BatObjState_20, # 贯龙枪 20
    BatObjState_DamShield, # 承伤盾 21
    BatObjState_DamBackShield, # 荆棘盾 22
) = range(1 + 22)
#玩家状态定义,不能超过31个,如超过,需扩展多个key支持
Def_PlayerStateList = (
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuffs/BuffAtkType_1004.py
New file
@@ -0,0 +1,23 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.TurnBuffs.BuffAtkType_1004
#
# @todo:荆棘盾
# @author hxp
# @date 2025-09-26
# @version 1.0
#
# 详细描述: 荆棘盾
#
#-------------------------------------------------------------------------------
#"""Version = 2025-09-26 10:30"""
#-------------------------------------------------------------------------------
import TurnSkill
def CalcBuffValue(turnFight, attacker, defender, curSkill):
    skillPer = curSkill.GetSkillPer()
    skillPer += TurnSkill.GetAddSkillPer(turnFight, attacker, defender, curSkill)
    return [skillPer]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -124,11 +124,6 @@
        curBatObj.SetMainTagIDList(tagIDList)
        
    useTag = ""
    #这个技能是Buff
    if SkillCommon.IsBuff(useSkill):
        __doAddBuff(turnFight, curBatObj, useSkill)
    else:
        # 主技能额外触发的技能可不下发,前端视为仅释放一个主技能
        if batType != ChConfig.TurnBattleType_Enhance:
            # 因为可能触发连击,所以标记需带上累计使用技能次数,确保唯一
@@ -139,6 +134,10 @@
            clientPack.Sign = 0
            turnFight.addBatPack(clientPack)
            
    #这个技能是Buff
    if SkillCommon.IsBuff(useSkill):
        __doAddBuff(turnFight, curBatObj, useSkill)
    else:
        __doUseSkill(turnFight, curBatObj, useSkill)
        
    DoAttackResult(turnFight, curBatObj, useSkill)
@@ -791,7 +790,9 @@
        if hurtObj.GetSuckHP() > 0:
            isSuckHP = True
            
    curObj.SetLastHurtValue(totalHurtValue) # 记录最后一次总伤害
    # 记录最后一次总伤害,有伤害目标才记录
    if useSkill.GetHurtObjList():
        curObj.SetLastHurtValue(totalHurtValue)
    
    # 群攻只触发一次特长
    if isSuperHit:
@@ -1379,17 +1380,13 @@
    if hurtValue <= 0:
        return 0, 0, hurtTypes
    
    if defObj.CheckInState(ChConfig.BatObjState_Wudi):
        hurtTypes |= pow(2, ChConfig.HurtType_Immune) # 添加免疫
        buffMgr = defObj.GetBuffManager()
        for index in range(buffMgr.GetBuffCount()):
            buff = buffMgr.GetBuffByIndex(index)
            if not buff:
                continue
    wudiBuffList = buffMgr.FindBuffListByState(ChConfig.BatObjState_Wudi)
    if wudiBuffList:
        hurtTypes |= pow(2, ChConfig.HurtType_Immune) # 添加免疫
        for buff in wudiBuffList:
            skillData = buff.GetSkillData()
            if skillData.GetCurBuffState() != ChConfig.BatObjState_Wudi:
                continue
            # 记录免疫的积攒伤害
            # 记录免疫积攒的伤害
            buffValue = buff.GetValue1() + buff.GetValue2() * ChConfig.Def_PerPointValue
            updBuffValue = buffValue + hurtValue
            buff.SetValue1(updBuffValue % ChConfig.Def_PerPointValue)
@@ -1404,12 +1401,8 @@
    # 承伤盾承伤,剩余时间短的优先承伤,承伤不影响输出,相当于额外的HP,仅用于抵扣掉血,仅 改变 realHurtHP
    realHurtHP = hurtValue
    shieldBuffList = []
    buffMgr = defObj.GetBuffManager()
    for index in range(buffMgr.GetBuffCount()):
        buff = buffMgr.GetBuffByIndex(index)
    for buff in buffMgr.FindBuffListByState(ChConfig.BatObjState_DamShield):
        skillData = buff.GetSkillData()
        # 承伤盾
        if SkillCommon.isDamageShieldSkill(skillData):
            remainTime = buff.GetRemainTime() # 剩余回合
            if not skillData.GetLastTime():
                remainTime = 999 # 永久盾
@@ -1442,15 +1435,24 @@
def CalcBounceHP(turnFight, atkObj, defObj, hurtObj, curSkill):
    '''计算反弹反弹伤害
    注:反伤/荆棘暂不做属性支持,仅做buff效果支持
    '''
    if not atkObj.GetCanAttack():
        return
    
    bounceHP = int(hurtObj.GetHurtHP() * random.uniform(0.1, 0.2))
    damBackPer = 0
    buffMgr = defObj.GetBuffManager()
    for buff in buffMgr.FindBuffListByState(ChConfig.BatObjState_DamBackShield):
        damBackPer += buff.GetValue1()
    if damBackPer <= 0:
        return
    bounceHP = int(hurtObj.GetHurtHP() * damBackPer / 10000.0)
    if bounceHP <= 0:
        return
    
    GameWorld.DebugLog("    反弹伤害=%s,%s/%s" % (bounceHP, atkObj.GetHP(), atkObj.GetMaxHP()))
    GameWorld.DebugLog("    反弹伤害=%s,%s/%s, damBackPer=%s" % (bounceHP, atkObj.GetHP(), atkObj.GetMaxHP(), damBackPer))
    bounceHP, realBounceHP, _ = CalcHurtHPWithBuff(turnFight, defObj, atkObj, curSkill, bounceHP)
    if bounceHP <= 0:
        GameWorld.DebugLog("        bounceHP=%s" % (bounceHP))
@@ -1511,6 +1513,12 @@
        cureHPEx = __calcCureHP(turnFight, userObj, tagObj, curSkill, cureType, skillPer, largeNum)
        cureHP += cureHPEx
        
    hurtShareEff = curSkill.GetEffectByID(ChConfig.SkillEff_HurtShare)
    if hurtShareEff:
        tagCnt = max(1, len(curSkill.GetTagObjList()))
        cureHP = cureHP / tagCnt
        GameWorld.DebugLog("    目标均摊治疗: cureHP=%s,tagCnt=%s" % (cureHP, tagCnt))
    return max(1, int(cureHP)) # 保底1点
def __calcCureHP(turnFight, userObj, tagObj, curSkill, cureType, skillPer, largeNum=False):