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