From 9aec240e848ba4bb6b473707ad8f48aee5180141 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 29 四月 2019 10:06:52 +0800
Subject: [PATCH] 6632 子 【开发】增加新的符印属性 / 【后端】增加新的符印属性

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py |   82 ++++++++++++++++++++---------------------
 1 files changed, 40 insertions(+), 42 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 493b90b..338b59f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
@@ -79,23 +79,7 @@
     return result
 
 
-#===============================================================================
-# # CanRepeatTime字段个位数
-# (
-# Def_BuffTime_Reset,     # 0    重置时间
-# Def_BuffTime_Add,   # 1    增加时间
-# Def_BuffTime_Keep,    # 2    时间不变
-# Def_BuffTime_Keep_AddValue, # 3    时间不变只增加值,默认为替换更强值
-# ) = range(4)
-# 
-# # CanRepeatTime字段十位数
-# (
-# Def_Buff_Replace_Better,    # 相同typeid取最高,如果新的是低级的则不处理
-# Def_Buff_Replace_New,       # 相同typeid替换最新,即使是低级的
-# Def_Buff_Coexist,           # 不同的释放者可共存
-# ) = range(3)
-#===============================================================================
-
+# 快捷搜索 CanRepeatTime字段
 # buff时间处理类型,个位数
 def GetBuffRepeatTimeType(curSkill):
     return curSkill.GetCanRepeatTime()%10
@@ -111,6 +95,19 @@
         layerMaxCnt = hasEffect.GetEffectValue(0)   # 能叠加的最大上限
 
     return layerMaxCnt
+
+# 改变BUFF持续时间
+def ChangeLastTime(attacker, curSkill):
+    buffTime = curSkill.GetLastTime() 
+    if not attacker:
+        return buffTime 
+    if curSkill.GetEffect(0).GetEffectID() == ChConfig.Def_Skill_Effect_Burn:
+        # 灼烧的时间特殊处理
+        buffTime = buffTime*(ChConfig.Def_MaxRateValue + PlayerControl.GetBurnTimePer(attacker))/ChConfig.Def_MaxRateValue
+    
+    buffTime += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, None, curSkill, ChConfig.TriggerType_BuffTime)
+    return buffTime
+    
 
 #---------------------------------------------------------------------
 ## 增加BUFF 减少BUFF(参数 -> 当前对象,buff类型,当前技能,当前时间,Buff总值->用于持续类技能 , Buff拥有者)
@@ -146,7 +143,7 @@
     #技能类型ID
     curSkillTypeID = curSkill.GetSkillTypeID()
     #当前技能持续时间
-    curSkillLastTime = curSkill.GetLastTime()
+    curSkillLastTime = ChangeLastTime(buffOwner, curSkill)
     #当前技能等级
     curSkillLV = curSkill.GetSkillLV()
     #替换模式
@@ -212,31 +209,36 @@
                 
         if buffSkillLV == curSkillLV:
             changeLayer = False
-            if layerMaxCnt:
-                curLayerCnt = curBuff.GetLayer()
-                if curLayerCnt < layerMaxCnt:
-                    if layerCalc == ChConfig.Def_BuffLayer_Add:
-                        curBuff.SetLayer(curLayerCnt + 1)
-                        #BUFF层级变化触发被动
-                        if buffOwner:
-                            curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, curBuff.GetLayer())
-                            PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
-                            PassiveBuffEffMng.OnPassiveBuffTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
-                            curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, 0)
-                    else:
-                        curBuff.SetLayer(layerMaxCnt)
-                    changeLayer = True
+            if layerMaxCnt and curBuff.GetLayer() < layerMaxCnt:
+                if layerCalc == ChConfig.Def_BuffLayer_Add:
+                    curBuff.SetLayer(curBuff.GetLayer() + 1)
+                    #BUFF层级变化触发被动
+                    if buffOwner:
+                        curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, curBuff.GetLayer())
+                        PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
+                        PassiveBuffEffMng.OnPassiveBuffTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
+                        curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, 0)
+                else:
+                    curBuff.SetLayer(layerMaxCnt)
+                changeLayer = True
+                    
+            # Def_Buff_Replace_New和Def_Buff_Recharge 均可走到此逻辑
             __BuffCanRemain(buffState, curBuff, i, resultTime, plusValueList, buffOwner)
             # 此处考虑下plusValue变强是否刷属性
             #DoAddBuffOver(curObj, curSkill, addBuff, tick)
             return changeLayer
         else:
+            if buffReplaceType == ChConfig.Def_Buff_Recharge:
+                # 充能型
+                __BuffCanRemain(buffState, curBuff, i, resultTime, plusValueList, buffOwner)
+                return
+            
             processInterval = curBuff.GetProcessInterval()
             ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
             buffState.DeleteBuffByIndex(i)
             SkillShell.ClearBuffEffectBySkillID(curObj, buffSkillID, ownerID, ownerType)
             return __AddBuff(curObj, buffState, curSkill, plusValueList, buffOwner, isDelRefresh, 
-                             tick, processInterval, layerMaxCnt, layerCalc)
+                             tick, curSkillLastTime, processInterval, layerMaxCnt, layerCalc)
         
         #已经找到同一类型的技能,立即退出不然会导致错乱
         return False
@@ -254,7 +256,7 @@
         isDelRefresh = True
     
     return __AddBuff(curObj, buffState, curSkill, plusValueList, buffOwner, isDelRefresh, 
-                     tick, 0, layerMaxCnt, layerCalc)
+                     tick, curSkillLastTime, 0, layerMaxCnt, layerCalc)
 
 
 ## 是否血包/蓝包buff
@@ -314,15 +316,15 @@
 # @param isDelRefresh 外界删除BUFF是否刷新
 # @param tick 时间戳
 # @return 是否刷新玩家属性
-def __AddBuff(curObj, buffState, curSkill, plusValueList, buffOwner, isDelRefresh, tick, 
-              updProcessInterval, layerMaxCnt, layerCalc):
+def __AddBuff(curObj, buffState, curSkill, plusValueList, buffOwner, isDelRefresh, tick,
+              curSkillLastTime, updProcessInterval, layerMaxCnt, layerCalc):
     skillID = curSkill.GetSkillID()
 
     #是否需要通知客户端
     isNotify = True if curSkill.GetClientEffectType() != 0 else False
     # 增加第四个参数是否立即广播
     addBuff = buffState.AddBuff(skillID, tick, isNotify, False)
-    buffIndex = buffState.GetBuffCount()    # buff在管理器中的索引
+    
     if updProcessInterval > 0:
         # 继承上一个buff的循环记录
         addBuff.SetProcessInterval(updProcessInterval)
@@ -337,11 +339,7 @@
         else:
             addBuff.SetLayer(layerMaxCnt)
 
-    if buffOwner:
-        addTime = PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(buffOwner, None, curSkill, ChConfig.TriggerType_BuffTime)
-        if addTime:
-            #有改变持续时间的技能
-            addBuff.SetRemainTime(curSkill.GetLastTime() + addTime)
+    addBuff.SetRemainTime(curSkillLastTime)
     
     # 同步主从技能时间
     SyncMasterBuffTime(curObj, addBuff, curSkill)

--
Gitblit v1.8.0