129 【战斗】战斗系统-服务端(甄姬、曹操技能;增加本次技能万分比效果ID6004;)
4个文件已修改
1个文件已添加
101 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6004.py 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -37,13 +37,40 @@
        self._AffectBuffDict = {} # 被动buff {(触发方式, 有效来源):{buffID:[effID, ...], ...}, ...}
        return
    
    def GetPassiveEffByTrigger(self, triggerWay, connSkillTypeID=0):
    def GetPassiveEffByTrigger(self, triggerWay, connSkill=None, connSkillTypeID=0):
        '''获取可触发的效果列表,技能跟buff根据触发优先级按顺序触发,优先级越高越先执行,相同时技能优先
                        优先级之后有需要再扩展
        @return: [["skill/buff", skillID/buffID, effIDList], ...]
        '''
        effList = []
        
        if not connSkillTypeID and connSkill:
            connSkillTypeID = connSkill.GetSkillTypeID()
        if connSkill:
            skillID = connSkill.GetSkillID()
            skillManager = self._batObj.GetSkillManager()
            # 非对象身上的技能,读取本技能被动触发的效果,一般是主技能拆分的子技能
            if not skillManager.FindSkillByID(skillID):
                effIDList = []
                for index in xrange(connSkill.GetEffectCount()):
                    effect = connSkill.GetEffect(index)
                    effectID = effect.GetEffectID()
                    if effectID == 0:
                        continue
                    triggerWay = effect.GetTriggerWay()
                    triggerSrc = effect.GetTriggerSrc()
                    if not triggerWay:
                        continue
                    if triggerWay == ChConfig.TriggerWay_CurSkillEff:
                        continue
                    if triggerSrc != ChConfig.TriggerSrc_SkillSelf:
                        # 仅添加本技能的
                        continue
                    effIDList.append(effectID)
                if effIDList:
                    effList.append(["skill", skillID, effIDList])
        # 优先取关联技能的
        if connSkillTypeID and connSkillTypeID not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_SkillSelf, ChConfig.TriggerSrc_BuffSelf]:
            # 技能
@@ -641,6 +668,7 @@
        self._buffMgr = ObjPool.GetPoolMgr().acquire(BuffManager, self)
        self._passiveEffMgr = ObjPool.GetPoolMgr().acquire(PassiveEffManager, self)
        self._lastHurtValue = 0
        self._mainTagIDList = [] # 主技能目标ID列表,一般用于技能拆分成多个技能效果时,子技能可能会用到主技能的对象做逻辑
        
        # 统计
        self.hurtStat = 0 # 输出统计
@@ -832,6 +860,9 @@
    def GetLastHurtValue(self): return self._lastHurtValue
    def SetLastHurtValue(self, lastHurtValue): self._lastHurtValue = lastHurtValue
    
    def GetMainTagIDList(self): return self._mainTagIDList
    def SetMainTagIDList(self, mainTagIDList): self._mainTagIDList = mainTagIDList
    def StatHurtValue(self, hurtValue):
        ## 统计输出
        self.hurtStat += hurtValue
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4291,6 +4291,7 @@
PassiveEff_AddBuffLayerByWeight = 6001 # 根据权重随机添加buff层数 数值1-[[权重,层级], ...]
PassiveEff_ChangeHurtType = 6002 # 变更伤害类型: 值1-伤害类型;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
PassiveEff_ChangeHurtMulti = 6003 # 变更伤害倍值(可增可减): 值1-变更倍值;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
PassiveEff_AddSkillPer = 6004 # 增加本次技能万分比: 值1-增加的万分比;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
# 被动效果ID有触发值时就返回的
PassiveEffHappenValueList = [PassiveEff_ChangeHurtType]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6004.py
New file
@@ -0,0 +1,40 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_6004
#
# @todo:增加本次技能万分比
# @author hxp
# @date 2025-09-17
# @version 1.0
#
# 详细描述: 增加本次技能万分比
#
#-------------------------------------------------------------------------------
#"""Version = 2025-09-17 17:30"""
#-------------------------------------------------------------------------------
import BattleObj
#import GameWorld
def GetHappenValue(attacker, defender, curEffect, effSkill, **skillkwargs):
    checkInStateList = curEffect.GetEffectValue(1)
    if checkInStateList:
        checkMainSkillTag = curEffect.GetEffectValue(2)
        if checkMainSkillTag:
            inState = False
            objMgr = BattleObj.GetBatObjMgr()
            for tagID in attacker.GetMainTagIDList():
                tagObj = objMgr.getBatObj(tagID)
                if tagObj.CheckInState(checkInStateList):
                    inState = True
                    #GameWorld.DebugLog("主技能的目标在状态中! tagID=%s,%s" % (tagID, checkInStateList))
                    break
            if not inState:
                #GameWorld.DebugLog("主技能的目标都不在状态中! tagID=%s,%s" % (attacker.GetMainTagIDList(), checkInStateList))
                return
        else:
            if not defender.CheckInState(checkInStateList):
                return
    return curEffect.GetEffectValue(0)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -35,9 +35,7 @@
    ''' 触发被动效果,可能触发技能、buff,需根据优先级触发
    '''
    passiveEffMgr = batObj.GetPassiveEffManager()
    if not connSkillTypeID and connSkill:
        connSkillTypeID = connSkill.GetSkillTypeID()
    effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkillTypeID)
    effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkill, connSkillTypeID)
    if not effInfoList:
        return
    # [["skill/buff", skillID/buffID, effIDList], ...]
@@ -58,6 +56,8 @@
def __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill=None):
    skillMgr = batObj.GetSkillManager()
    effSkill = skillMgr.FindSkillByID(skillID)
    if not effSkill and connSkill and connSkill.GetSkillID() == skillID:
        effSkill = connSkill
    if not effSkill:
        return
    
@@ -114,8 +114,7 @@
    
    triggerWay = ChConfig.TriggerWay_CalcEffValue
    passiveEffMgr = atkObj.GetPassiveEffManager()
    connSkillTypeID = connSkill.GetSkillTypeID() if connSkill else 0
    effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkillTypeID)
    effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkill)
    if not effInfoList:
        return 0
    
@@ -130,6 +129,8 @@
        if sign == "skill":
            skillID, effIDList = effInfo[1:]
            effSkill = skillMgr.FindSkillByID(skillID)
            if not effSkill and connSkill and connSkill.GetSkillID() == skillID:
                effSkill = connSkill
        elif sign == "buff":
            buffID, effIDList = effInfo[1:]
            effBuff = buffMgr.GetBuff(buffID)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -94,8 +94,14 @@
    useSkill.SetBySkill(bySkill)
    
    curBatObj.ClearSkillTempAttr()
    tagIDList = []
    for tagObj in tagObjList:
        tagIDList.append(tagObj.GetID())
        tagObj.ClearSkillTempAttr()
    # 有功能分类的技能都认为是主技能
    if useSkill.GetFuncType():
        curBatObj.SetMainTagIDList(tagIDList)
        
    objID = curBatObj.GetID()
    useTag = ""
@@ -448,7 +454,7 @@
    
    skillID = useSkill.GetSkillID()
    for tagBatObj in useSkill.GetTagObjList():
        cureHP = CalcCureHP(curBatObj, tagBatObj, useSkill, largeNum=True)
        cureHP = CalcCureHP(turnFight, curBatObj, tagBatObj, useSkill, largeNum=True)
        if cureHP <= 0:
            continue
        
@@ -858,7 +864,7 @@
                continue
            
        effID = curEffect.GetEffectID()
        GameWorld.DebugLog("执行额外技能效果: %s, triggerWay=%s,missObjIDList=%s" % (effID, triggerWay, missObjIDList))
        GameWorld.DebugLog("◆执行额外技能效果: %s, triggerWay=%s,missObjIDList=%s" % (effID, triggerWay, missObjIDList))
        if effID == 5010:
            # 额外技能效果
            __doUseEnhanceSkill(turnFight, curObj, useSkill, curEffect, missObjIDList)
@@ -1088,6 +1094,8 @@
    dHP = defObj.GetHP()
    dDef = 0 if ignoreDef else defObj.GetDef() # 防守方防御力
    
    atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPer, curSkill)
    aFinalDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPer) # 最终加成
    dFinalDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPerDef) # 最终减伤
    
@@ -1313,7 +1321,7 @@
    TurnAttack.AddTurnObjCureHP(atkObj, atkObj, suckHP, cureHP)
    return
def CalcCureHP(userObj, tagObj, curSkill, largeNum=False):
def CalcCureHP(turnFight, userObj, tagObj, curSkill, largeNum=False):
    ''' 计算治疗值
    '''
    cureType = curSkill.GetCalcType()
@@ -1322,7 +1330,7 @@
    
    cureBaseValue = GetCalcBaseValue(cureType, userObj, tagObj)
    
    #skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(userObj, None, curSkill, ChConfig.TriggerType_AddHP)
    skillPer += TurnPassive.GetTriggerEffectValue(turnFight, userObj, tagObj, ChConfig.PassiveEff_AddSkillPer, curSkill)
    
    # 回合制
    curePer = 0 # 治疗加成