From 11c9a3b5846401523e4dafc17f2a074a712730da Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 11 三月 2026 18:27:10 +0800
Subject: [PATCH] 526 【挑战】PVP群英榜-后端(本服群英榜;优化机器人表支持按功能加载不同的机器人;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py |   97 ++++++++++++++----------------------------------
 1 files changed, 28 insertions(+), 69 deletions(-)

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 434cc25..b219a6d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -44,6 +44,7 @@
 import IpyGameDataPY
 import PyGameData
 import OpenServerActivity
+import PlayerActLunhuidian
 import PlayerActivity
 import ChNetSendPack
 import PlayerState
@@ -957,7 +958,7 @@
 
 
 def OnPlayerLogin(curPlayer):
-    DoGMForbidenTalkOnLogin(curPlayer)
+    #DoGMForbidenTalkOnLogin(curPlayer)
     curPlayer.SetDict(ChConfig.Def_PDict_DayOnlineCalcTime, int(time.time()))
     return
 
@@ -1112,7 +1113,7 @@
     playerControl.RefreshAllState()
             
     #玩家下线更新排行榜
-    PlayerBillboard.UpdatePlayerBillboardOnLeaveServer(curPlayer) #排行榜已实时更新,故下线不再同步
+    #PlayerBillboard.UpdatePlayerBillboardOnLeaveServer(curPlayer) #排行榜已实时更新,故下线不再同步
     
     #玩家下线通知gameserver记录缓存(放在下线更新排行榜之后,方便Gameserver判断是否需要存入数据库中)
     PlayerViewCache.OnPlayerLogout(curPlayer)
@@ -2675,7 +2676,8 @@
     elif type_Price == IPY_GameWorld.TYPE_Price_Silver_Paper:
         __PayMoneyAfterBySilverPaper(curPlayer, price)
         
-    if type_Price == ShareDefine.TYPE_Price_Xiantao:
+    # 仅算使用技能的
+    if type_Price == ShareDefine.TYPE_Price_Xiantao and costType == "UseSkill":
         # 累加未结算战锤 - 经验
         unXiantaoCntExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UnXiantaoCntExp)
         NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntExp, unXiantaoCntExp + price)
@@ -2700,6 +2702,11 @@
                 
         TurnAttack.GetMainFightMgr(curPlayer).useZhanchui += price
         
+    # 除GM扣除的以外
+    if costType != ChConfig.Def_Cost_GM:
+        #轮回殿
+        PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_PayMoney, type_Price, price)
+    
     unitPrice = price if quantity == 1 else int(math.ceil(price * 1.0 / quantity)) # 单价
     #reason_name = "Unknown" if not costType else costType
     reason_name = costType
@@ -3952,12 +3959,6 @@
     totalExpRate = GetPlayerExpRate(curPlayer)
     fightExpRate = curPlayer.GetFightExpRate() # 系统及功能累加
     
-    actExpRateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_ExpRate, {})# 多倍经验活动加成
-    if actExpRateInfo.get(ShareDefine.ActKey_State):
-        actExpIpyData = IpyGameDataPY.GetIpyGameData("ActExpRate", actExpRateInfo.get(ShareDefine.ActKey_CfgID))
-        if actExpIpyData and curPlayer.GetLV() >= actExpIpyData.GetLVLimit():
-            fightExpRate += actExpIpyData.GetAddExpRate()
-            
     #if curPlayer.GetMapID() not in [ChConfig.Def_FBMapID_FamilyInvade]: #守卫人皇不加组队加成
     #    fightExpRate += curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamExpRate) # 组队
     
@@ -4093,20 +4094,21 @@
     GameWorld.DebugLog("SetPlayerAccState %s" % (accState), curPlayer.GetPlayerID())
     return
 
-def DoGMForbidenTalkOnLogin(curPlayer):
-    ## 离线时被禁言,此时DB的账号状态值为禁言状态,但是GMOper暂时没有禁言操作命令,故上线时检查设置下离线禁言状态
-    ## 目前离线时被禁言的,暂时只处理AccState ExAttr17, GMOper命令暂不处理,所以为永久禁言
-    
-    if curPlayer.GetAccState() & pow(2, ChConfig.Def_PysForbidTalkDevice):
-        GameWorld.Log("上线时角色为被设备禁言状态!", curPlayer.GetPlayerID())
-        __SetGMForbidenTalkValue(curPlayer, 2)
-        __SetGMForbidenTalkValue(curPlayer, 1)
-    elif curPlayer.GetAccState() & pow(2, ChConfig.Def_PysForbidTalk):
-        GameWorld.Log("上线时角色为被禁言状态!", curPlayer.GetPlayerID())
-        __SetGMForbidenTalkValue(curPlayer, 1)
-    else:
-        SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ForbidenTalk, 0)
-    return
+#GM命令支持离线玩家上线后处理,且 PlayerGMOper 也有上线触发逻辑处理,故暂屏蔽
+#def DoGMForbidenTalkOnLogin(curPlayer):
+#    ## 离线时被禁言,此时DB的账号状态值为禁言状态,但是GMOper暂时没有禁言操作命令,故上线时检查设置下离线禁言状态
+#    ## 目前离线时被禁言的,暂时只处理AccState ExAttr17, GMOper命令暂不处理,所以为永久禁言
+#    
+#    if curPlayer.GetAccState() & pow(2, ChConfig.Def_PysForbidTalkDevice):
+#        GameWorld.Log("上线时角色为被设备禁言状态!", curPlayer.GetPlayerID())
+#        __SetGMForbidenTalkValue(curPlayer, 2)
+#        __SetGMForbidenTalkValue(curPlayer, 1)
+#    elif curPlayer.GetAccState() & pow(2, ChConfig.Def_PysForbidTalk):
+#        GameWorld.Log("上线时角色为被禁言状态!", curPlayer.GetPlayerID())
+#        __SetGMForbidenTalkValue(curPlayer, 1)
+#    else:
+#        SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ForbidenTalk, 0)
+#    return
 
 def IsMainLevelPass(curPlayer, lvID):
     ## 判断玩家是否过关某个主线关卡ID
@@ -4148,8 +4150,7 @@
         PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_MainLevel)
         PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_MainLevel, lvID)
         PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAMainLevel, lvID)
-        if OpenServerActivity.GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_MainLevel) == 1:
-            PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_MainLevel, lvID)
+        OpenServerActivity.UpdOSA_MainLevelBillboard(curPlayer, lvID)
         DataRecordPack.DR_MainLevelPass(curPlayer, lvID)
     return value
 def GetMainLevelPassInfo(curPlayer):
@@ -4321,7 +4322,8 @@
     #if value < beforeFightPower:
     #    DataRecordPack.DR_FightPowerChangeInfo(curPlayer, beforeFightPower)
     GameWorld.DebugLog("总战力: %s, beforeFightPower=%s" % (value, beforeFightPower), curPlayer.GetPlayerID())
-    ChPlayer.OnPlayerBaseInfoChange(curPlayer, IPY_PlayerDefine.CDBPlayerRefresh_FightPower) # 战力
+    if beforeFightPower != value:
+        ChPlayer.OnPlayerBaseInfoChange(curPlayer, IPY_PlayerDefine.CDBPlayerRefresh_FightPower) # 战力
     return
 
 ## 设置模块战斗力,支持超过20E = 模块公式战力 + 技能附加战力 + 其他附加战力
@@ -4530,17 +4532,6 @@
     NetPackCommon.SendFakePack(curPlayer, clientPack)
     return
 
-## 魅力等级
-def GetCharmLV(curPlayer): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CharmLV)
-def SetCharmLV(curPlayer, charmLV):
-    NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CharmLV, charmLV)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_CharmLV, charmLV)
-    return
-
-def GetTotalLingGenPoint(curPlayer):
-    # 总灵根点数(金木水火土+自由点数)
-    return 0
-
 # 灵根 - 金木水火土
 def GetMetal(curPlayer): return 0
 def GetWood(curPlayer): return 0
@@ -4554,9 +4545,6 @@
 def GetReduceSkillCDPer(curPlayer): return 0
 def SetReduceSkillCDPer(curPlayer, reducePer): return
 
-# 血瓶恢复效果
-def GetHPCureEnhance(curPlayer): return 0
-
 # 仙盟职位,使用 GetReceivedSalary,因为FamilyMemberLV没有入库
 def GetFamilyMemberLV(curPlayer): return curPlayer.GetReceivedSalary()
 def SetFamilyMemberLV(curPlayer, fmLV):
@@ -4564,35 +4552,6 @@
     curPlayer.SetReceivedSalary(fmLV)
     curPlayer.SetFamilyMemberLV(fmLV) # 也同步设置该值,防止有些地方直接调用 curPlayer.GetFamilyMemberLV()
     return
-
-#---当前防护值,需存DB----
-def GetProDef(curPlayer): return 0
-def SetProDef(curPlayer, value): return
-
-#---最大防护值----
-def GetMaxProDef(curPlayer): return 0
-def SetMaxProDef(curPlayer, value): return
-
-# 每X秒自动消失一个印记, 毫秒记录
-def GetLostYinjiTime(curPlayer): return 0
-def SetLostYinjiTime(curPlayer, value): return
-
-# 当前印记数
-def GetYinjiCnt(curPlayer): return 0
-def SetYinjiCnt(curPlayer, value): return
-
-# 减少指定技能组CD XX%
-def GetTheFBSkillsCD(curPlayer): return 0
-def SetTheFBSkillsCD(curPlayer, value): return
-# 灼烧固定伤害
-def GetBurnValue(curPlayer): return 0
-def SetBurnValue(curPlayer, value): return
-# 延长灼烧时间百分比
-def GetBurnTimePer(curPlayer): return 0
-def SetBurnTimePer(curPlayer, value): return
-# 减移动速度百分比
-def GetSubSpeedPer(curPlayer): return 0
-def SetSubSpeedPer(curPlayer, value): return
 
 #-------------------------------------------------------------------------------
 

--
Gitblit v1.8.0