From c7a87f71a9041bea98c636422eb893f13f0a9843 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 07 五月 2024 16:27:24 +0800
Subject: [PATCH] 1111 修复物品类型65给自动给货币取物品数量bug;

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py |   66 ++++++++++++++++++++++++++++++++-
 1 files changed, 64 insertions(+), 2 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py
index dc0b47e..3c0ca30 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py
@@ -29,6 +29,8 @@
 import GameWorld
 import PlayerDBOper
 import IPY_GameServer
+import PlayerDBGSEvent
+import CrossChampionship
 import IpyGameDataPY
 import CrossRealmMsg
 import ShareDefine
@@ -54,8 +56,17 @@
     return
 
 def CrossNotifyCode(serverGroupID, playerID, msgMark, msgParamList=[]):
+    NotifyCodeCross(serverGroupID, playerID, msgMark, msgParamList)
+    return
+
+def NotifyCodeCross(serverGroupID, playerID, msgMark, msgParamList=[]):
     crossNotifyList = [{"Type":ShareDefine.CrossNotify_Player, "Params":[playerID, msgMark, msgParamList]}]
     CrossNotify([serverGroupID], crossNotifyList)
+    return
+
+def WorldNotifyCross(serverGroupIDList, country, msgMark, msgParamList=[]):
+    crossNotifyList = [GetCrossWorldNotifyInfo(country, msgMark, msgParamList)]
+    CrossNotify(serverGroupIDList, crossNotifyList)
     return
 
 def GetCrossWorldNotifyInfo(country, msgMark, msgParamList=[]):
@@ -95,6 +106,13 @@
         
         if notifyType == ShareDefine.CrossNotify_World:
             country, msgMark, msgParamList = params
+            openServerDayLimit = IpyGameDataPY.GetFuncCfg("CrossRealmCfg", 1)
+            if msgMark.startswith("CrossBattlefield"):
+                openServerDayLimit = IpyGameDataPY.GetFuncCfg("CrossRealmCfg", 2)
+            openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1
+            if openServerDay < openServerDayLimit:
+                GameWorld.DebugLog("开服天不足,不处理该跨服广播! openServerDay=%s < %s" % (openServerDay, openServerDayLimit))
+                continue
             WorldNotify(country, msgMark, msgParamList)
         elif notifyType == ShareDefine.CrossNotify_CrossAct:
             country, msgMark, msgParamList = params
@@ -240,8 +258,8 @@
 def GetFBFuncLineID(curPlayer): return curPlayer.GetExAttr3()
 
 ##VIP到期时间
-def GetVIPExpireTime(curPlayer): return curPlayer.GetExAttr9()
-def SetVIPExpireTime(curPlayer, expireTime): return curPlayer.SetExAttr9(expireTime)
+def GetVIPExpireTime(curPlayer): return 0
+def SetVIPExpireTime(curPlayer, expireTime): return
 def GetValidVIPLV(curPlayer):
     # @return: 返回当前有效的VIP等级
 #    vipTime = GetVIPExpireTime(curPlayer)
@@ -388,3 +406,47 @@
     
     return ipyData.GetLimitLV()
 
+# 因为MapServer玩家属性变更通知GameServer与功能开启通知触发时机有先后顺序,可能导致判断功能开启不准确,所以暂时记录该信息,临时用
+g_playerOpenFuncInfo = {} # 玩家触发功能开启功能ID信息,{playerID:[funcID, ...], ...}
+## 功能是否可用,该函数并不能确保百分百正确,只能大致判断,仅判断部分条件,如包含未判断的条件则不能确保百分百正确
+def GetFuncCanUse(curPlayer, funcID):
+    playerID = curPlayer.GetPlayerID()
+    if playerID in g_playerOpenFuncInfo:
+        if funcID in g_playerOpenFuncInfo[playerID]:
+            return True
+        
+    ipyData = IpyGameDataPY.GetIpyGameData("FuncOpenLV", funcID)
+    if not ipyData:
+        return False
+    
+    if ipyData.GetLimitLV() and ipyData.GetLimitLV() > curPlayer.GetLV():
+        return False
+    
+    if ipyData.GetLimiRealmLV() and ipyData.GetLimiRealmLV() > curPlayer.GetOfficialRank():
+        return False
+    
+    if ipyData.GetLimitVIPLV() and ipyData.GetLimitVIPLV() > curPlayer.GetVIPLv():
+        return False
+    
+    return True
+
+def DoFuncOpenLogic(curPlayer, funcIDList):
+    global g_playerOpenFuncInfo
+    if GameWorld.IsCrossServer():
+        return
+    playerID = curPlayer.GetPlayerID()
+    FuncOpenLogicDict = {
+                         ShareDefine.GameFuncID_Championship:lambda curObj:CrossChampionship.DoChampionshipOpen(curObj),
+                         }
+    for funcID in funcIDList:
+        if funcID in FuncOpenLogicDict:
+            if playerID not in g_playerOpenFuncInfo:
+                g_playerOpenFuncInfo[playerID] = []
+            openFuncIDList = g_playerOpenFuncInfo[playerID]
+            if funcID not in openFuncIDList:
+                openFuncIDList.append(funcID)
+            GameWorld.DebugLog("触发功能开启逻辑! funcID=%s" % funcID, playerID)
+            FuncOpenLogicDict[funcID](curPlayer)
+    return
+
+

--
Gitblit v1.8.0