From e17fcba64e93fceb1459b12cbe70663039d40314 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 11 一月 2024 18:22:45 +0800 Subject: [PATCH] 10019 【砍树】回合战斗(回合战斗buff持续时间处理及持续性buff定时触发时机处理支持;增加回合战斗死亡及复活支持;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py | 61 ++++++++++++++++++++++++------ 1 files changed, 48 insertions(+), 13 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py index 560665d..d6d7cb4 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py @@ -351,6 +351,11 @@ # 继承上一个buff的循环记录 addBuff.SetProcessInterval(updProcessInterval) + turnFightTimeline = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline) + if turnFightTimeline: + addBuff.SetCalcStartTick(turnFightTimeline) + #GameWorld.DebugLog(" SetCalcStartTick:%s, skillID=%s,objID=%s" % (turnFightTimeline, skillID, curObj.GetID())) + #设置buff属性 __SetBuffValue(addBuff , plusValueList , buffOwner) @@ -402,7 +407,7 @@ PYSync_RefreshBuff(curObj, addBuff, SkillCommon.GetBuffType(curSkill), notifyAll=False, owner = buffOwner, errSkillID=skillID) #添加BUFF后的特殊处理 - DoAddBuffOver(curObj, curSkill, addBuff, buffOwner, tick) + DoAddBuffOver(curObj, buffState, curSkill, addBuff, buffOwner, tick) #检查是否属于刷新BUFF #=========================================================================== @@ -419,7 +424,7 @@ # @param addBuff 玩家身上的BUFF实例 # @param tick 时间戳 # @return None -def DoAddBuffOver(curObj, curSkill, addBuff, buffOwner, tick): +def DoAddBuffOver(curObj, buffState, curSkill, addBuff, buffOwner, tick): #触发被动技能 if buffOwner: PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddBuffOver, tick) @@ -451,6 +456,10 @@ callFunc(curObj, addBuff, curEffect, tick, buffOwner) + # 回合制下,持续型处理buff添加后立即处理一次 + if isLstSkill and curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline): + SkillShell.ProcessSinglePersistBuff(curObj, buffState, addBuff, tick, True) + return @@ -565,7 +574,7 @@ buffState.Sync_RefreshBuff(buffIndex, curBuff.GetRemainTime()) - DoAddBuffOver(curObj, curBuff.GetSkill(), curBuff, buffOwner, GameWorld.GetGameWorld().GetTick()) + DoAddBuffOver(curObj, buffState, curBuff.GetSkill(), curBuff, buffOwner, GameWorld.GetGameWorld().GetTick()) return #--------------------------------------------------------------------- @@ -655,7 +664,8 @@ index = 0 isPlayerTJG = (curObj.GetGameObjType() == IPY_GameWorld.gotPlayer and PlayerTJG.GetIsTJG(curObj)) - turnNum = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightNum) # 回合编号,大于0同时也代表回合制中 + turnFightTimeline = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline) + turnNum, actionNum = turnFightTimeline / 100, turnFightTimeline % 100 skillIDListInDelBuff = [] # buff消失中需要处理添加buff,外层处理避免错乱 @@ -678,17 +688,42 @@ #GameWorld.DebugLog("脱机挂状态下不刷新buff时间: skillTypeID=%s" % curSkill.GetSkillTypeID()) continue - remainTime = curBuffRemainTime - ( tick - curBuff.GetCalcStartTick() ) + # buff回合时长计算 if turnNum > 0: - remainTime -= ChConfig.Def_PerTurnTick - GameWorld.DebugLog(" 刷新buff时间: objID=%s,skillID=%s,remainTime=%s,turnNum=%s" % (curObj.GetID(), curSkill.GetSkillID(), remainTime, turnNum)) + #回合制下持续性类型buff由process时机处理 ProcessSinglePersistBuff + if curSkill.GetSkillType() in ChConfig.Def_LstBuff_List: + index += 1 + continue + calcTick = curBuff.GetCalcStartTick() + calcTurnNum, calcActionNum = calcTick / 100, calcTick % 100 + passTurnNum = turnNum - calcTurnNum # 经过的回合数 + if passTurnNum > 0: + if actionNum < calcActionNum: + passTurnNum -= 1 # 还未到该buff的计算节点,可视为本回合未到,需-1 + + remainTime = curBuffRemainTime + if passTurnNum > 0: # 最小单位1回合,有满1回合才减时长 + remainTime = curBuffRemainTime - ChConfig.Def_PerTurnTick * passTurnNum + GameWorld.DebugLog(" 刷新回合buff时间: objID=%s,skillID=%s,remainTime=%s,calcTick=%s,timeline=%s,passTurnNum=%s" + % (curObj.GetID(), curSkill.GetSkillID(), remainTime, calcTick, turnFightTimeline, passTurnNum)) + curBuff.SetCalcStartTick(turnFightTimeline) + curBuff.SetRemainTime(remainTime) + + #还有剩余时间 + if remainTime > 0: + index += 1 + continue - #还有剩余时间 - if remainTime > 0: - curBuff.SetCalcStartTick( tick ) - curBuff.SetRemainTime( remainTime ) - index += 1 - continue + # buff常规时长计算 + else: + remainTime = curBuffRemainTime - ( tick - curBuff.GetCalcStartTick() ) + + #还有剩余时间 + if remainTime > 0: + curBuff.SetCalcStartTick( tick ) + curBuff.SetRemainTime( remainTime ) + index += 1 + continue #-------------------无剩余时间了 curBuff.SetRemainTime(0) -- Gitblit v1.8.0