From c2d45420190e02447a79a680199ab4636ce986e2 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 20 五月 2025 15:49:29 +0800
Subject: [PATCH] 16 卡牌服务端(优化备档存取逻辑,GetServerID改为取接口;调整单服StartDB渠口、启动加载数据流程,支持服层级每秒、每分Process)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py |  338 ++++++++++++--------------------------------------------
 1 files changed, 74 insertions(+), 264 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index b438e41..766ae61 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -11,20 +11,7 @@
 # @version 2.6
 #
 # @note: 处理每周, 每日, 每月事件处理
-# @change: "2015-07-10 16:00" xdh QQ每日礼包
-# @change: "2015-08-13 14:00" ljd 新手卡OnDay
-# @change: "2015-09-18 19:30" hxp 跨服boss状态变更
-# @change: "2015-10-25 17:00" hxp 跨服PK状态变更
-# @change: "2015-11-18 18:30" hxp 跨服王者争霸
-# @change: "2016-02-30 17:00" hxp 领主霸业、恶魔试炼
-# @change: "2016-04-29 18:00" hxp 宠物OnDay
-# @change: "2016-07-13 18:00" hxp 在线赠送寻宝免费次数统计OnHour触发
-# @change: "2016-07-26 17:30" hxp 增加获胜战盟盟主ID变更处理
-# @change: "2016-08-05 19:00" hxp 脚本热更支持
-# @change: "2016-08-29 23:30" hxp 洪荒之力
-# @change: "2016-09-19 10:30" hxp key状态变更时全服玩家人数获取方式修改
-# @change: "2016-10-26 11:00" hxp 签到逻辑修改
-# @change: "2017-03-22 21:00" hxp 二维码红包
+#
 #---------------------------------------------------------------------
 #"""Version = 2017-05-12 18:00""" 
 #---------------------------------------------------------------------
@@ -137,64 +124,26 @@
 import PlayerAssist
 import PlayerArena
 import PyGameData
-import PlayerTJG
 import PlayerGuaji
 import PlayerXiangong
 import PlayerFuncTeam
 import PlayerMineArea
+import PlayerBillboard
+import PlayerMail
 
 import datetime
 import time
-#---------------------------------------------------------------------
 
-#===============================================================================
-# //01 01 新一天的响应#tagMOnDay
-# tagMOnDay       *   GettagMOnDay();
-# 
-# class   IPY_MOnDay
-# {
-# public:
-# 
-#    char *      GetTime();
-# };
-#===============================================================================
-## 世界服务器->每日响应(封包参数)01 01
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def GameServer_OnDay(index, tick):
-    GameWorld.GetPsycoFunc(__Func_GameServer_OnDay)(index, tick)
-    CheckMachineTick(tick)
-    return
+## 原GameServer通知的
+def GameServer_OnDay(index, tick): return
+def GameServer_OnHour(index, tick): return
+def GameServer_OnWeek(index, tick): return
+def GameServer_OnMonth(index, tick): return
+def GameServer_OnYear(index, tick): return
 
-## 用于防范运维开机时间超过24天导致报错
-#  @param tick 当前时间
-#  @return None
-def CheckMachineTick(tick):
-    #取一张地图测试,在mapserver做逻辑,方便运维观察
-    if GameWorld.GetMap().GetMapID() != 101:
-        return
-    
-    #超过24.8天就会发生游戏逻辑出错,因为tick变成负数
-    if tick/1000.0/60/60/24 >= 22:
-        raise Exception('Start PC > 22 days!!!')
-    
-    return
-
-## 世界服务器->每日响应(封包参数)01 01
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def __Func_GameServer_OnDay(index, tick):
+def DoLogic_OnDay(tick):
     GameWorld.Log("MapServer -> OnDay!")
     playerManager = GameWorld.GetPlayerManager()
-    #获取每日响应封包
-    pack = IPY_GameWorld.IPY_MOnDay()
-    #同步世界服务器时间
-    SetMapServerTimeFromGameServer(pack.GetTime())
-    
     #处理所有玩家信件的onday事件, 把存在时间+1
     playerManager.ProcessAllPlayerMailOnDay()
     #清空每日日记记录信息
@@ -214,60 +163,22 @@
             continue
         
         PlayerOnDay(curPlayer)
-        # 服务器Onday处理数据,即不能在玩家上线时的Onday触发
-        #PlayerServerDay(curPlayer)
+        PlayerOnDayEx(curPlayer)
     
+    DoLogic_OnDayEx(tick)
+    
+    PlayerBillboard.OnDay()
     return
 
-def __Func_GameServer_OnDayEx(tick):
+def DoLogic_OnDayEx(tick):
     GameWorld.Log("MapServer -> OnDayEx!")
     
+    PlayerMail.OnDayEx()
     PlayerControl.RemoveTimeoutLeaveServerPlayerInfo(tick)
-    
-    playerManager = GameWorld.GetPlayerManager()
-    for i in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(i)
-        
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        
-        PlayerOnDayEx(curPlayer)
     return
 
-#---------------------------------------------------------------------
-#===============================================================================
-# #//////////////////////////////////////////////////////////////
-# #//01 06 新一个小时的响应#tagMOnHour
-# #tagMOnHour       *   GettagMOnHour();
-# #
-# #class   IPY_MOnHour
-# #{
-# #public:
-# #
-# #    char *      GetTime();
-# #};
-#===============================================================================
-## 01 06 新一个小时的响应
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def GameServer_OnHour(index, tick):
-    GameWorld.GetPsycoFunc(__Func_GameServer_OnHour)(index, tick)
-    return
-
-## 01 06 新一个小时的响应
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def __Func_GameServer_OnHour(index, tick):
+def DoLogic_OnHour(tick):
     GameWorld.Log("MapServer -> OnHour!")
-    #获取每小时响应封包
-    pack = IPY_GameWorld.IPY_MOnHour()
-    time = pack.GetTime()
-    #同步世界服务器时间
-    SetMapServerTimeFromGameServer(time)
     
     #副本OnHour事件
     FBLogic.OnHour(time, tick)
@@ -284,39 +195,9 @@
         PlayerOnHour(curPlayer)
         
     return
-#---------------------------------------------------------------------
-#===============================================================================
-# //01 02 新一个星期的响应#tagMOnWeek
-# tagMOnWeek       *   GettagMOnWeek();
-# 
-# class   IPY_MOnWeek
-# {
-# public:
-# 
-#    char *      GetTime();
-# };
-#===============================================================================
 
-## 世界服务器->每周响应(封包参数) 01 02 新一个星期的响应
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def GameServer_OnWeek(index, tick):
-    GameWorld.GetPsycoFunc(__Func_GameServer_OnWeek)(index, tick)
-    return
-
-## 世界服务器->每周响应(封包参数) 01 02 新一个星期的响应
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def __Func_GameServer_OnWeek(index, tick):
+def DoLogic_OnWeek(tick):
     GameWorld.Log("MapServer -> OnWeek!")
-    #获得每周响应封包
-    pack = IPY_GameWorld.IPY_MOnWeek()
-    #同步世界服务器时间
-    SetMapServerTimeFromGameServer(pack.GetTime())
     
     playerManager = GameWorld.GetPlayerManager()
     for i in xrange(playerManager.GetPlayerCount()):
@@ -326,58 +207,14 @@
             continue
         
         PlayerOnWeek(curPlayer)
+        PlayerOnWeekEx(curPlayer)
         
     #副本OnWeek事件响应
     FBLogic.OnWeek(tick)
     return
 
-def __Func_GameServer_OnWeekEx(tick):
-    GameWorld.Log("MapServer -> OnWeekEx!")
-    
-    playerManager = GameWorld.GetPlayerManager()
-    for i in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(i)
-        
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        
-        PlayerOnWeekEx(curPlayer)
-        
-    return
-
-#---------------------------------------------------------------------
-#===============================================================================
-# //01 03 新一个月的响应#tagMOnMonth
-# tagMOnMonth       *   GettagMOnMonth();
-# 
-# class   IPY_MOnMonth
-# {
-# public:
-# 
-#    char *      GetTime();
-# };
-#===============================================================================
-
-## 世界服务器->每月响应(封包参数)01 03 新一个月的响应
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def GameServer_OnMonth(index, tick):
-    GameWorld.GetPsycoFunc(__Func_GameServer_OnMonth)(index, tick)
-    return
-
-## 世界服务器->每月响应(封包参数)01 03 新一个月的响应
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def __Func_GameServer_OnMonth(index, tick):
+def DoLogic_OnMonth(tick):
     GameWorld.Log("MapServer -> OnMonth!")
-    #获得每月响应封包
-    pack = IPY_GameWorld.IPY_MOnMonth()
-    #同步世界服务器时间
-    SetMapServerTimeFromGameServer(pack.GetTime())
     
     playerManager = GameWorld.GetPlayerManager()
     for i in xrange(playerManager.GetPlayerCount()):
@@ -387,56 +224,12 @@
             continue
         
         PlayerOnMonth(curPlayer)
-    
-    return
-
-def __Func_GameServer_OnMonthEx(tick):
-    GameWorld.Log("MapServer -> OnMonthEx!")
-    
-    playerManager = GameWorld.GetPlayerManager()
-    for i in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(i)
-        
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        
         PlayerOnMonthEx(curPlayer)
         
     return
 
-#---------------------------------------------------------------------
-#===============================================================================
-# //01 04 新一年的响应#tagMOnYear
-# tagMOnYear       *   GettagMOnYear();
-# 
-# class   IPY_MOnYear
-# {
-# public:
-# 
-#    char *      GetTime();
-# };
-#===============================================================================
-
-## 世界服务器->每年响应(封包参数)01 04 新一年的响应
-#  @param index 玩家索引
-#  @param tick 当前时间 
-#  @return None
-#  @remarks 函数详细说明.
-def GameServer_OnYear(index, tick):
-    GameWorld.GetPsycoFunc(__Func_GameServer_OnYear)(index, tick)
-    return
-
-## 世界服务器->每年响应(封包参数)01 04 新一年的响应
-#  @param index 玩家索引
-#  @param tick 当前时间 
-#  @return None
-#  @remarks 函数详细说明.
-def __Func_GameServer_OnYear(index, tick):
+def DoLogic_OnYear(tick):
     GameWorld.Log("MapServer -> OnYear")
-    #获得新年响应封包
-    pack = IPY_GameWorld.IPY_MOnYear()
-    #同步世界服务器时间
-    SetMapServerTimeFromGameServer(pack.GetTime())
     
     playerManager = GameWorld.GetPlayerManager()
     for i in range(0, playerManager.GetPlayerCount()):
@@ -464,15 +257,15 @@
 #  @return None
 #  @remarks 函数详细说明.
 def GameServer_InitOK(index, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    try:
-        #通知BServer自己OK了
-        curPlayer.SendToBServerServerInitOK()
-        ChPlayer.OnAllServerInitOK(curPlayer, tick)
-    except:
-        curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
-        import traceback
-        GameWorld.RaiseException("玩家上线逻辑错误\r\n%s" % traceback.format_exc())
+    # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    # try:
+    #     #通知BServer自己OK了
+    #     curPlayer.SendToBServerServerInitOK()
+    #     ChPlayer.OnAllServerInitOK(curPlayer, tick)
+    # except:
+    #     curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
+    #     import traceback
+    #     GameWorld.RaiseException("玩家上线逻辑错误\r\n%s" % traceback.format_exc())
     return
 
 #--------------------------------------------------------
@@ -605,7 +398,7 @@
         # 世界boss
         BossHurtMng.OnDay(curPlayer)
         # 仙盟过天
-        PlayerFamily.FamilyPlayerOnDay(curPlayer)
+        PlayerFamily.PlayerOnDay(curPlayer)
         # 重置物品每日使用次数
         ChItem.ResetItemUseCntToday(curPlayer)
         # 极品白拿
@@ -635,7 +428,6 @@
         #特殊时间点过天的,一般是游戏功能,此时立即同步一次跨服玩家数据
         CrossPlayerData.SendMergePlayerDataNow(curPlayer)
         
-    #PlayerTJG.TJGOnDay(curPlayer, onEventType)
     # 以下为支持两种重置模式切换配置的
     FBCommon.FBOnDay(curPlayer, onEventType)
     
@@ -660,16 +452,6 @@
     #购买次数礼包
     PlayerActBuyCountGift.OnDay(curPlayer, onEventType)
     return
-
-
-### 服务器Onday处理数据,即不能在玩家上线时的Onday触发
-##  @param curPlayer: 当前玩家实例
-##  @return: 无
-#def PlayerServerDay(curPlayer):
-#    
-#    # 设置玩家是否可以参加家族活动
-#    #PlayerFamily.SetForbidFamilyAction(curPlayer, 0)
-#    return
 
 #---------------------------------------------------------------------
 ## 把当前这一周的在线时间算到上一周去
@@ -1014,6 +796,49 @@
     GameWorld.Log('验证重生点完毕, mapID = %s, cnt = %s'%(mapID, br_Count))
     return
 #---------------------------------------------------------------------
+
+def GMDateTime(curPlayer, eventName):
+    if eventName == 'GMOnHour':
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
+        return
+    
+    if eventName == 'GMOnDay':
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDay, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDayEx, 0)
+        return
+    
+    if eventName == 'GMOnWeek':
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDay, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeek, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDayEx, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeekEx, 0)
+        return
+    
+    if eventName == 'GMOnMonth':
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDay, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeek, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnMonth, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDayEx, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeekEx, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnMonthEx, 0)
+        return
+    
+    if eventName == 'GMOnYear':
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDay, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeek, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnMonth, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnYear, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDayEx, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeekEx, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnMonthEx, 0)
+        return
+    
+    return
+
 ## 更新玩家在线时间(参数 -> 当前玩家)
 #  @param curPlayer 当前玩家
 #  @return None
@@ -1678,21 +1503,6 @@
     elif key == ShareDefine.Def_Notify_WorldKey_CrossDailyActionState % ShareDefine.CrossDailyActionID_YaomoBoss:
         if gameWorldMgr.GetGameWorldDictByKey(key) != value:
             PlayerCrossYaomoBoss.OnYaomoBossStateChange(value, tick)
-            
-    # OnDayEx
-    elif key == ShareDefine.Def_Notify_WorldKey_OnDayEx:
-        if value and gameWorldMgr.GetGameWorldDictByKey(key) != value:
-            __Func_GameServer_OnDayEx(tick)
-            
-    # OnWeekEx
-    elif key == ShareDefine.Def_Notify_WorldKey_OnWeekEx:
-        if value and gameWorldMgr.GetGameWorldDictByKey(key) != value:
-            __Func_GameServer_OnWeekEx(tick)
-            
-    # OnMonthEx
-    elif key == ShareDefine.Def_Notify_WorldKey_OnMonthEx:
-        if value and gameWorldMgr.GetGameWorldDictByKey(key) != value:
-            __Func_GameServer_OnMonthEx(tick)
             
     # 世界等级      
     elif key == ShareDefine.Def_Notify_WorldKey_WorldAverageLv:

--
Gitblit v1.8.0