From 1b25d47f1fa7ec2e93e16593eb045ebc8be6a6fd Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 03 一月 2024 15:18:55 +0800
Subject: [PATCH] 10084 【主干】【港台】【越南】【BT0.1】【BT0.1-1元】100%聚灵丹(仙界秘境)与50%聚灵丹(仙界秘境)效果修改

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_BZZD.py |   40 +++++++++++++++++++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_LineReduce.py         |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py                         |   30 +++++++++++++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLineReduce.py       |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_LinePlus.py           |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py                    |    4 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLinePlus.py         |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                                |    4 +
 8 files changed, 74 insertions(+), 12 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index bc1be34..8e76fa1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -622,7 +622,7 @@
 Def_Skill_Effect_StoreBlood = 809 # 将期间受到的伤害总值,用于最后回血,不影响伤害
 Def_Skill_Effect_AttackReplace = 1009  #攻击计算,野外小怪伤害替换1010 (2018-03-07增加精英怪)
 Def_Skill_Effect_Attack = 1010  #攻击计算
-Def_Skill_Effect_LayerCnt = 1011 # BUFF层级数量 A值层数,B值层数处理方式0递增1递减
+Def_Skill_Effect_LayerCnt = 1011 # BUFF层级数量 A值层数;B值:10位-是否非叠加属性,个位-层数处理方式0递增1递减;C值: 是否攻击减层
 Def_Skill_Effect_MasterBuff = 1012 # 主从技能(同步buff持续时间)
 Def_Skill_Effect_SummonAttr = 1013 # 召唤兽属性
 Def_Skill_Effect_BoomSeedID = 1014 # 引爆BUFF种子
@@ -775,6 +775,7 @@
 Def_SkillID_LFZ = 47100   # 龙凤镯技能(打怪概率经验加成)
 Def_SkillID_HorsePetRobBossKillCntBuff = 21020   # 骑宠的怨念buff
 Def_SkillID_RealmBuff = 6100   # 境界经验buff
+Def_SkillID_BZZDBuff = 21220   # 百战之地经验buff
 
 Def_SkillID_FamilyWar_CWinBuff = 22101 # 仙盟联赛 - 连胜buff, 由连胜次数决定等级
 Def_SkillID_FamilyWar_JoinBuff = 22131 # 仙盟联赛 - 参与buff, 由人数决定等级
@@ -3766,6 +3767,7 @@
 Def_PDict_BZZD_TotalFightExp = "BZZD_TExp" # 最后一次进入副本挑战获得总经验, 领取多倍奖励时用
 Def_PDict_BZZD_TotalFightExpPoint = "BZZD_TExpPoint" # 最后一次进入副本挑战获得总经验点, 领取多倍奖励时用
 Def_PDict_BZZD_HistoryEnterCnt = "BZZD_HistoryEnterCnt" # 历史进入总次数
+Def_PDict_BZZD_NeedReduceExpBuff = "BZZD_NeedReduceExpBuff" # 是否需要扣除层级经验加成buff
 
 # 公共CD副本扫荡
 Def_PDict_PubCDFBS_Time = "PCDFBS_%s_Time" # 开始扫荡时间, 参数(公共组编号)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_BZZD.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_BZZD.py
index 4a3d852..eb57f2d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_BZZD.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_BZZD.py
@@ -38,6 +38,7 @@
 import BuffSkill
 import EventShell
 import PyGameData
+import SkillCommon
 
 
 #---副本配置对应key值---
@@ -65,6 +66,10 @@
 FBPlayerDict_TotalExp = 'FBPlayerDict_TotalExp'   # 获得的总经验
 FBPlayerDict_TotalExpPoint = 'FBPlayerDict_TotalExpPoint'   # 获得的总经验点
 FBPlayerDict_EncourageLV = 'FBPlayerDict_EncourageLV'   # 鼓舞等级
+
+def OnFBPlayerOnLogin(curPlayer):
+    ReduceExpBuffOnLogin(curPlayer)
+    return
 
 ## 是否能够通过活动查询进入
 def OnEnterFBEvent(curPlayer, mapID, lineID, tick):
@@ -116,6 +121,7 @@
         EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_BZZD, 0, ChConfig.CME_Log_Start, logType)
         historyEnterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BZZD_HistoryEnterCnt)
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BZZD_HistoryEnterCnt, min(historyEnterCnt + 1, 999))
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BZZD_NeedReduceExpBuff, 1) # 进入的时候标记需要扣除
         __GiveFirstEnterPrize(curPlayer, historyEnterCnt + 1)
         
         # 初始化所需击杀NPC
@@ -228,6 +234,9 @@
 
 ## 玩家主动离开副本
 def DoPlayerLeaveFB(curPlayer, tick):
+    if GameWorld.GetGameFB().GetFBStep() <= FB_Step_Fighting:
+        GameWorld.DebugLog("经验副本进行中,玩家主动退出,直接扣除经验层级buff!", curPlayer.GetPlayerID())
+        DoReduceExpBuff(curPlayer)
     return
 
 ## 玩家升级
@@ -452,6 +461,8 @@
             continue
         playerID = curPlayer.GetPlayerID()
         
+        DoReduceExpBuff(curPlayer)
+        
         # 记录最高总经验
         exp = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExp)
         expPoint = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExpPoint)
@@ -513,7 +524,15 @@
     playerID = curPlayer.GetPlayerID()
     
     enterLV = curPlayer.GetLV()
-    GameWorld.DebugLog("仙界秘境扫荡: mapID=%s,lineID=%s,sweepCnt=%s" % (mapID, lineID, sweepCnt), playerID)
+    expRateEx = 0
+    expRateLayerBuff = SkillCommon.FindBuffByID(curPlayer, ChConfig.Def_SkillID_BZZDBuff)[0]
+    if expRateLayerBuff:
+        hasEffect = SkillCommon.GetSkillEffectByEffectID(expRateLayerBuff.GetSkill(), ChConfig.TYPE_Calc_AttrFightExpRate)
+        if hasEffect:
+            expRateEx = hasEffect.GetEffectValue(0)   # 能叠加的最大上限
+        DoReduceExpBuff(curPlayer, expRateLayerBuff)
+        
+    GameWorld.DebugLog("仙界秘境扫荡: mapID=%s,lineID=%s,sweepCnt=%s,expRateEx=%s" % (mapID, lineID, sweepCnt, expRateEx), playerID)
     
     totalExp = 0
     fairylandNPCList = IpyGameDataPY.GetFuncEvalCfg('FairylandNPC', 1)
@@ -527,7 +546,7 @@
         addExp = eval(IpyGameDataPY.GetFuncCompileCfg("XjmjMonsterExp", 1))
         addExpT = addExp * npcCount
         playerControl = PlayerControl.PlayerControl(curPlayer)
-        finalAddExp = playerControl.AddExp(addExpT, ShareDefine.Def_ViewExpType_KillNPC)
+        finalAddExp = playerControl.AddExp(addExpT, ShareDefine.Def_ViewExpType_KillNPC, expRateEx=expRateEx)
         totalExp += finalAddExp
         GameWorld.DebugLog("    reExp=%s,npcID=%s,baseExp=%s,expMulti=%s,addExp=%s,npcCount=%s,addExpT=%s,finalAddExp=%s,totalExp=%s"
                             % (reExp, npcID, baseExp, expMulti, addExp, npcCount, addExpT, finalAddExp, totalExp), playerID)
@@ -569,6 +588,23 @@
     __SendBZZDOverInfo(curPlayer, overDict)
     return
 
+def DoReduceExpBuff(curPlayer, buff=None):
+    BuffSkill.ReduceBuffLayer(curPlayer, buff, ChConfig.Def_SkillID_BZZDBuff, 1)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BZZD_NeedReduceExpBuff, 0)
+    return
+
+def ReduceExpBuffOnLogin(curPlayer):
+    if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BZZD_NeedReduceExpBuff):
+        return
+    
+    mapID = GameWorld.GetMap().GetMapID()
+    if mapID == ChConfig.Def_FBMapID_BZZD and GameWorld.GetGameFB().GetFBStep() <= FB_Step_Fighting:
+        GameWorld.DebugLog("经验副本进行中,还不需要扣除经验层级buff!", curPlayer.GetPlayerID())
+        return
+    
+    DoReduceExpBuff(curPlayer)
+    return
+
 ## 副本行为
 def DoFBAction(curPlayer, actionType, actionInfo, tick):
     if actionType == 0:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index f45de84..bde8f77 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -4151,10 +4151,10 @@
         elif expViewType in [ShareDefine.Def_ViewExpType_GameEvent, ShareDefine.Def_ViewExpType_Sit]:
             exp_rate = curPlayer.GetGameEventExpRate()
             exp_rate += GetFamilySitExpPer(curPlayer)
-            exp_rate += expRateEx
         else:
             exp_rate = max(GameWorld.GetGameWorld().GetExpRate(), ChConfig.Def_MaxRateValue)
-            
+                        
+        exp_rate += expRateEx
         #输入的经验有可能为long型
         addExp = int(addExp * exp_rate / float(ChConfig.Def_MaxRateValue))
         
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 6e637b2..639f63e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
@@ -89,11 +89,11 @@
 
 # buff替换逻辑,十位数
 def GetBuffReplaceType(curSkill):
-    return curSkill.GetCanRepeatTime()/10
+    return curSkill.GetCanRepeatTime()/10%10
 
 # buff根据释放者不同判断是否共存buff,百位数 Def_Buff_NoCoexist 
 def GetBuffCoexistType(curSkill):
-    return curSkill.GetCanRepeatTime()/10%10
+    return curSkill.GetCanRepeatTime()/100
 
 def GetBuffMaxLayer(curSkill):
     layerMaxCnt = 0
@@ -102,6 +102,16 @@
         layerMaxCnt = hasEffect.GetEffectValue(0)   # 能叠加的最大上限
 
     return layerMaxCnt
+
+def IsLayerPlusAttr(curBuff):
+    ## 是否叠加属性层级buff,可叠加时,属性=单层属性*层级,默认叠加
+    hasEffect = SkillCommon.GetSkillEffectByEffectID(curBuff.GetSkill(), ChConfig.Def_Skill_Effect_LayerCnt)
+    if not hasEffect:
+        return False
+    if hasEffect.GetEffectValue(1)/10 == 1:
+        # 配置不叠加,直接返回False
+        return False
+    return True
 
 # 改变BUFF持续时间
 def ChangeLastTime(attacker, curSkill):
@@ -175,7 +185,7 @@
     hasEffect = SkillCommon.GetSkillEffectByEffectID(curSkill, ChConfig.Def_Skill_Effect_LayerCnt)
     if hasEffect:
         layerMaxCnt = hasEffect.GetEffectValue(0)   # 能叠加的最大上限
-        layerCalc = hasEffect.GetEffectValue(1)     # 增加层级还是减少层级 Def_BuffLayer_Add
+        layerCalc = hasEffect.GetEffectValue(1)%10     # 增加层级还是减少层级 Def_BuffLayer_Add
 
     
     #1 检查是否有相同的BUFF,如果有相同的就刷新时间
@@ -949,6 +959,20 @@
             PYSync_RefreshBuff(gameObj, buff, buffType)
     return
 
+def ReduceBuffLayer(gameObj, buff, skillTypeID, delLayerCnt=1):
+    ## 减少buff的Value值
+    #GameWorld.DebugLog("ReduceBuffLayer: skillTypeID=%s,delLayerCnt=%s %s" % (skillTypeID, delLayerCnt, buff))
+    if not buff and not skillTypeID:
+        return
+    
+    if not buff:
+        buff = SkillCommon.FindBuffByID(gameObj, skillTypeID)[0]
+        
+    if not buff or buff.GetLayer() <= 0:
+        return
+    
+    SetBuffLayer(gameObj, buff, max(0, buff.GetLayer() - delLayerCnt), skillTypeID=skillTypeID, isSync=True)
+    return
 
 ## 属性buff效果id对应计算模块字典{效果id:(计算模块名后缀, [属性类型])}
 #  带属性的buff 默认以属性类型为效果ID
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_LinePlus.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_LinePlus.py
index 5dc43a9..6cf043d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_LinePlus.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_LinePlus.py
@@ -32,7 +32,7 @@
         return
     
     effect = curEffect.GetEffectValue(0)
-    if curBuff and curBuff.GetLayer():
+    if curBuff and curBuff.GetLayer() and BuffSkill.IsLayerPlusAttr(curBuff):
         # 层级叠加效果
         effect = effect*curBuff.GetLayer()
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_LineReduce.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_LineReduce.py
index 7d7d8fd..1cb7bc5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_LineReduce.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_LineReduce.py
@@ -33,7 +33,7 @@
         return
     
     effect = curEffect.GetEffectValue(0)
-    if curBuff and curBuff.GetLayer():
+    if curBuff and curBuff.GetLayer() and BuffSkill.IsLayerPlusAttr(curBuff):
         # 层级叠加效果
         effect = effect*curBuff.GetLayer()
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLinePlus.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLinePlus.py
index 80a19f1..38b120e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLinePlus.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLinePlus.py
@@ -32,7 +32,7 @@
         return
     
     effect = curEffect.GetEffectValue(0)
-    if curBuff and curBuff.GetLayer():
+    if curBuff and curBuff.GetLayer() and BuffSkill.IsLayerPlusAttr(curBuff):
         # 层级叠加效果
         effect = effect*curBuff.GetLayer()
         
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLineReduce.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLineReduce.py
index 5f4112e..9e4eb79 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLineReduce.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLineReduce.py
@@ -33,7 +33,7 @@
         return
     
     effect = curEffect.GetEffectValue(0)
-    if curBuff and curBuff.GetLayer():
+    if curBuff and curBuff.GetLayer() and BuffSkill.IsLayerPlusAttr(curBuff):
         # 层级叠加效果
         effect = effect*curBuff.GetLayer()
 

--
Gitblit v1.8.0