129 【战斗】战斗系统-服务端(词条技能1014 ~ 1019:增加技能初始CD支持,优化技能CD;优化技能属性、buff属性计算;修复纯buff怒技没有同步技能的bug;)
6个文件已修改
74 ■■■■■ 已修改文件
PySysDB/PySysDBPY.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -110,6 +110,7 @@
    list        EffectValues3;    //效果值列表3
    BYTE        TriggerWay3;    //触发方式
    BYTE        TriggerSrc3;    //有效来源
    WORD        CoolDownInit;    //初始冷却时间
    WORD        CoolDownTime;    //技能冷却时间
    list        BuffStateLimit;    //Buff状态限制组
    BYTE        CurBuffState;    //Buff״ֵ̬
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -337,6 +337,7 @@
    def GetEffectCount(self): return len(self._effList)
    def GetEffectByID(self, effID, triggerWay=0): return self._effDict.get((effID, triggerWay), None)
    def GetConnSkill(self): return self._ipyData.GetConnSkill()
    def GetCoolDownInit(self): return self._ipyData.GetCoolDownInit()
    def GetCoolDownTime(self): return self._ipyData.GetCoolDownTime()
    def GetBuffStateLimit(self): return self._ipyData.GetBuffStateLimit()
    def GetCurBuffState(self): return self._ipyData.GetCurBuffState()
@@ -609,6 +610,7 @@
    def GetEffectCount(self): return self._skillData.GetEffectCount()
    def GetEffectByID(self, effID, triggerWay=0): return self._skillData.GetEffectByID(effID, triggerWay)
    def GetConnSkill(self): return self._skillData.GetConnSkill()
    def GetCoolDownInit(self): return self._skillData.GetCoolDownInit()
    def GetCoolDownTime(self): return self._skillData.GetCoolDownTime()
    def GetBuffStateLimit(self): return self._skillData.GetBuffStateLimit()
    def GetCurBuffState(self): return self._skillData.GetCurBuffState()
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -830,6 +830,8 @@
            
        batLineup.posObjIDDict[posNum] = objID
        GameWorld.DebugLog("AddBatObj %s,skill=%s" % (GetObjName(batObj), skillManager.GetSkillIDList()))
        ResetObjSkill(batObj)
        if npcID:
            #副本指定NPC属性
            fbNPCInitAttrDict = FBLogic.GetFBNPCInitAttr(curPlayer, turnFight, batObj)
@@ -864,8 +866,7 @@
        buffMgr.ClearBuff()
        
        # 重置技能
        batObj.ResetSkillUseCnt()
        ResetObjSkillCD(batObj)
        ResetObjSkill(batObj)
        
        # 重刷属性、被动
        TurnBuff.RefreshBuffAttr(batObj)
@@ -1424,8 +1425,9 @@
            
            turnFight.ResetOneActionUseSkillCnt()
            batObj.SetTiming(ChConfig.TurnTiming_Before) # 重置时机到回合前
            RefreshObjSkillByTurn(batObj) # 优先刷技能CD
            if turnNum > 1: # 第1回合不用刷新技能
                RefreshObjSkillByTurn(batObj)
            TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_BigTurnStart)
            
    return
@@ -1480,21 +1482,26 @@
    RefreshObjBuffTime(turnFight, batObj)
    return
def ResetObjSkillCD(batObj):
    ## 重置所有技能CD
def ResetObjSkill(batObj):
    ## 重置所有技能,一般是每场战斗开始的重置
    curID = batObj.GetID()
    batObj.ResetSkillUseCnt() # 使用次数
    skillManager = batObj.GetSkillManager()
    for index in range(0, skillManager.GetSkillCount()):
        curSkill = skillManager.GetSkillByIndex(index)
        if not curSkill:
            continue
        remainTime = curSkill.GetRemainTime()
        if remainTime <= 0:
            continue
        curSkill.SetRemainTime(0)
        skillID = curSkill.GetSkillID()
        initCD = curSkill.GetCoolDownInit()
        if initCD:
            curSkill.SetRemainTime(initCD)
            GameWorld.DebugLog("技能初始CD: curID=%s,skillID=%s,initCD=%s" % (curID, skillID, initCD))
        elif curSkill.GetRemainTime():
            curSkill.SetRemainTime(0)
    return
def RefreshObjSkillByTurn(batObj):
    '''按回合刷新技能:默认以大回合统一减1回合,使用技能后设置剩余CD统一默认加1回合,即配置1回合,设置的CD是2
    '''按回合刷新技能:默认以大回合统一减1回合
    '''
    curID = batObj.GetID()
    skillManager = batObj.GetSkillManager()
@@ -1504,7 +1511,6 @@
            continue
        skillID = curSkill.GetSkillID()
        preTurnUseCnt = batObj.GetSkillTurnUseCnt(skillID)
        batObj.ResetSkillTurnUseCnt() # 重置回合使用次数
        remainTime = curSkill.GetRemainTime()
        if remainTime <= 0:
            continue
@@ -1515,6 +1521,7 @@
        curSkill.SetRemainTime(remainTime)
        GameWorld.DebugLog("    更新技能CD: curID=%s,skillID=%s,remainTime=%s" % (curID, skillID, remainTime))
        
    batObj.ResetSkillTurnUseCnt() # 重置回合使用次数,放刷新CD后重置
    return
def RefreshObjBuffTime(turnFight, batObj):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -132,6 +132,7 @@
                        ("list", "EffectValues3", 0),
                        ("BYTE", "TriggerWay3", 0),
                        ("BYTE", "TriggerSrc3", 0),
                        ("WORD", "CoolDownInit", 0),
                        ("WORD", "CoolDownTime", 0),
                        ("list", "BuffStateLimit", 0),
                        ("BYTE", "CurBuffState", 0),
@@ -2531,15 +2532,16 @@
    def GetEffectValues3(self): return self.attrTuple[27] # 效果值列表3 list
    def GetTriggerWay3(self): return self.attrTuple[28] # 触发方式 BYTE
    def GetTriggerSrc3(self): return self.attrTuple[29] # 有效来源 BYTE
    def GetCoolDownTime(self): return self.attrTuple[30] # 技能冷却时间 WORD
    def GetBuffStateLimit(self): return self.attrTuple[31] # Buff状态限制组 list
    def GetCurBuffState(self): return self.attrTuple[32] # Buff״ֵ̬ BYTE
    def GetLastTime(self): return self.attrTuple[33] # 持续时间 WORD
    def GetLayerCnt(self): return self.attrTuple[34] # Buff层数 BYTE
    def GetLayerMax(self): return self.attrTuple[35] # 最大层数 BYTE
    def GetBuffRepeat(self): return self.attrTuple[36] # Buff叠加规则 DWORD
    def GetDispersedLimit(self): return self.attrTuple[37] # 驱散限制 BYTE
    def GetFightPower(self): return self.attrTuple[38] # 技能战斗力 DWORD
    def GetCoolDownInit(self): return self.attrTuple[30] # 初始冷却时间 WORD
    def GetCoolDownTime(self): return self.attrTuple[31] # 技能冷却时间 WORD
    def GetBuffStateLimit(self): return self.attrTuple[32] # Buff状态限制组 list
    def GetCurBuffState(self): return self.attrTuple[33] # Buff״ֵ̬ BYTE
    def GetLastTime(self): return self.attrTuple[34] # 持续时间 WORD
    def GetLayerCnt(self): return self.attrTuple[35] # Buff层数 BYTE
    def GetLayerMax(self): return self.attrTuple[36] # 最大层数 BYTE
    def GetBuffRepeat(self): return self.attrTuple[37] # Buff叠加规则 DWORD
    def GetDispersedLimit(self): return self.attrTuple[38] # 驱散限制 BYTE
    def GetFightPower(self): return self.attrTuple[39] # 技能战斗力 DWORD
# 武将表
class IPY_Hero():
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -371,7 +371,8 @@
            effID = effect.GetEffectID()
            if effID not in ChConfig.AttrIDList:
                continue
            if effect.GetTriggerWay():
            if effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
                # 技能时仅技能有效
                continue
            attrID = effID
            attrValue = effect.GetEffectValue(0)
@@ -395,6 +396,9 @@
            effID = effect.GetEffectID()
            if effID not in ChConfig.AttrIDList:
                continue
            if effect.GetTriggerSrc() and effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_BuffSelf]:
                # buff时,不配默认有效,或仅buff有效
                continue
            attrID = effID
            attrValue = (effect.GetEffectValue(0) + buff.GetEffectValueEx(attrID)) * layer
            calcType = effect.GetEffectValue(1)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -61,6 +61,10 @@
    
    objID = curBatObj.GetID()
    
    if hasattr(useSkill, "GetRemainTime") and useSkill.GetRemainTime() > 0:
        GameWorld.DebugLog("技能CD中! skillID=%s,RemainTime=%s" % (skillID, useSkill.GetRemainTime()))
        return
    buffStateGroups = useSkill.GetBuffStateLimit()
    if buffStateGroups:
        limitState = curBatObj.IsInBuffStateGroup(buffStateGroups)
@@ -189,7 +193,11 @@
def IsNeedSyncSkill(useSkill):
    ## 使用需要同步B427使用技能
    return useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk, ChConfig.Def_SkillType_Cure, ChConfig.Def_SkillType_CleanBuff]
    if useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk, ChConfig.Def_SkillType_Cure, ChConfig.Def_SkillType_CleanBuff]:
        return True
    if useSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_TurnNormaSkill, ChConfig.Def_SkillFuncType_AngerSkill]:
        return True
    return False
def GetSkillTags(turnFight, curBatObj, useSkill):
    ## 获取技能目标
@@ -1346,6 +1354,10 @@
        #GameWorld.DebugLog("###被动触发技能不触发自身,防止死循环! effSkillID=%s,effectID=%s,passiveSkillID=%s" % (effSkillID, effectID, passiveSkillID))
        return
    
    if hasattr(passiveSkill, "GetRemainTime") and passiveSkill.GetRemainTime() > 0:
        #GameWorld.DebugLog("被动触发技能CD中! skillID=%s,RemainTime=%s" % (passiveSkillID, passiveSkill.GetRemainTime()))
        return
    isOK = False
    # 继承主技能目标
    if passiveSkill.GetTagAim() == ChConfig.SkillTagAim_MainSkill: