From 01a0e539b786ae0f1c46646874502367f5410aca Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 04 二月 2026 18:18:51 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(优化游戏服及跨服启动、通讯逻辑;服务器类型增加跨服中心、跨服事件、时间管理;跨服玩家在线状态、基础信息、玩家资源增减管理、发送跨服个人邮件等;跨服公会初版,修复公会成员审核、成员战力刷新等bug,增加公会名次同步;跨服公会暂未测试;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py |  189 ++++++++++++++++++++++++++++++++---------------
 1 files changed, 128 insertions(+), 61 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 9a38213..1da98ec 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -90,16 +90,36 @@
 import PlayerHero
 import PlayerTree
 import PlayerLLMJ
+import DBDataMgr
 
 import datetime
 import time
 
-## 原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
+def DoLogic_CrossCenterOnDay(centerEventValue):
+    '''收到跨服中心同步的onday事件,注意这里本服的触发跨服中心onday事件
+    事件由跨服中心统一管理,跨服中心onday后,会广播同步给所有服务器,包含其他跨服服务器及游戏服
+    由于是由跨服中心统一调度的,所以其他服务器可以各自处理各自跨服功能本服的跨服onday逻辑
+    【注】常规处理可以无视功能所在跨服与游戏服的onday触发先后顺序,各自处理各自的逻辑即可
+    如功能所在跨服管理功能的公共跨服数据onday,游戏服管理玩家自身的onday
+    如果个别功能需要先处理公共数据再处理玩家自身数据的,则由功能自己管理,公共数据处理完毕后再同步给对应的游戏服
+    '''
+    GameWorld.Log("CrossCenterOnDay -> centerEventValue=%s" % centerEventValue)      
+    
+    PlayerFamily.FamilyCrossCenterOnDay()
+    
+    # 其他跨服功能
+    
+    # 游戏服额外处理玩家
+    if GameWorld.IsMainServer():
+        playerManager = GameWorld.GetPlayerManager()
+        for i in xrange(playerManager.OnlineCount()):
+            curPlayer = playerManager.OnlineAt(i)
+            if not GameWorld.IsNormalPlayer(curPlayer):
+                continue
+            PlayerOnCrossCenterEvent(curPlayer, centerEventValue)
+            
+    PlayerBillboard.OnDay(centerEventValue)
+    return
 
 def DoLogic_OnDay(tick):
     GameWorld.Log("MapServer -> OnDay!")
@@ -123,14 +143,20 @@
         PlayerOnDay(curPlayer)
         
     PlayerMail.OnDayEx()
-    PlayerControl.RemoveTimeoutLeaveServerPlayerInfo(tick)
     PlayerBillboard.OnDay()
     PlayerViewCache.OnDay()
+    return
+
+def DoLogic_CrossCenterOnHour(centerEventValue):
+    GameWorld.Log("CrossCenterOnHour -> centerEventValue=%s" % centerEventValue)      
+    
+    PlayerFamily.FamilyCrossCenterOnHour()
     return
 
 def DoLogic_OnHour(tick):
     GameWorld.Log("MapServer -> OnHour!")
     
+    PlayerFamily.FamilyOnHour()
     #副本OnHour事件
     FBLogic.OnHour(time, tick)
     
@@ -220,6 +246,45 @@
     return
 
 #--------------------------------------------------------
+def PlayerOnCrossCenterEvent(curPlayer, centerEventValue=0):
+    ## 跨服中心过天
+    if not centerEventValue:
+        centerEventValue = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_CrossCenterEvent)
+    playerEventValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OnCrossEvent)
+    if not playerEventValue:
+        playerEventValue = centerEventValue
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnCrossEvent, centerEventValue)
+        
+    if playerEventValue == centerEventValue:
+        return
+    
+    centerEventTime = GameWorld.ChangeStrToDatetime("%s:%02d:%02d" % centerEventValue, ChConfig.TYPE_Time_Format_YmdHMS)
+    playerEventTime = GameWorld.ChangeStrToDatetime("%s:%02d:%02d" % playerEventValue, ChConfig.TYPE_Time_Format_YmdHMS)
+    
+    center_Day = centerEventTime.day
+    center_Month = centerEventTime.month
+    center_Year = centerEventTime.year
+    
+    player_Day = playerEventTime.day
+    player_Month = playerEventTime.month
+    player_Year = playerEventTime.year
+    
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnCrossEvent, centerEventValue)
+    
+    if (center_Day != player_Day or center_Month != player_Month or center_Year != player_Year):
+        PlayerCrossCenterOnDay(curPlayer, centerEventValue)
+        
+    return
+
+def PlayerCrossCenterOnDay(curPlayer, centerEventValue):
+    playerID = curPlayer.GetPlayerID()
+    GameWorld.Log("PlayerCrossCenterOnDay! centerEventValue=%s" % (centerEventValue), playerID)
+    
+    PlayerFamily.PlayerCrossCenterOnDay(curPlayer)
+    
+    GameWorld.Log("PlayerOnDayCross OK!", playerID)
+    return
+
 def PlayerOnDay(curPlayer):
     #记录玩家字典值,待初始化后执行
     if not curPlayer.GetGameServerInitOK():
@@ -238,7 +303,6 @@
     ChPlayer.Sync_OpenServerDay(curPlayer)
     
     __DoPlayerOnDay(curPlayer, ShareDefine.Def_OnEventType)
-    __DoPlayerOnDay(curPlayer, ShareDefine.Def_OnEventTypeEx)
     
     GameWorld.Log("PlayerOnDay OK!", playerID)
     return
@@ -249,59 +313,60 @@
         return
     
     # 常规过天
-    if onEventType == ShareDefine.Def_OnEventType:
-        GameFuncComm.DoFuncOpenLogic(curPlayer)
-        #清空每日事件奖励
-        curPlayer.SetDayProcessGameEventCount(0)
-        
-        #OnDay时清除每日签到的信息
-        PlayerSignDay.SignDayOnDay(curPlayer)
-        # 累计登陆礼包登陆次数刷新
-        PlayerLoginDayAward.NotePlayerLoginDayCnt(curPlayer)
-        
-        #------------------------------------------------------------------------------ 
-        
-        PlayerCoin.OnDay(curPlayer)
-        PlayerTree.PlayerOnDay(curPlayer)
-        #投资
-        PlayerGoldInvest.OnDay(curPlayer)
-        #战令
-        PlayerZhanling.OnDay(curPlayer)
-        #寻宝
-        PlayerTreasure.OnDay(curPlayer)
-        PlayerGoldGift.OnDay(curPlayer)
-        #转盘
-        PlayerActTurntable.PlayerOnDay(curPlayer)
-        #情缘
-        PlayerLove.DoPlayerOnDay(curPlayer)
-        #仙宫
-        PlayerXiangong.PlayerOnDay(curPlayer)
-        PlayerControl.PayCoinOnDay(curPlayer)
-        ChPlayer.PlayerOnDay(curPlayer)
-        PlayerActivity.OnDay(curPlayer)
-        PlayerLLMJ.PlayerOnDay(curPlayer)
-        FunctionNPCCommon.ShopItemOnDay(curPlayer)
-        
+    #if onEventType == ShareDefine.Def_OnEventType:
+    GameFuncComm.DoFuncOpenLogic(curPlayer)
+    #清空每日事件奖励
+    curPlayer.SetDayProcessGameEventCount(0)
+    
+    #OnDay时清除每日签到的信息
+    PlayerSignDay.SignDayOnDay(curPlayer)
+    # 累计登陆礼包登陆次数刷新
+    PlayerLoginDayAward.NotePlayerLoginDayCnt(curPlayer)
+    
+    #------------------------------------------------------------------------------ 
+    
+    PlayerCoin.OnDay(curPlayer)
+    PlayerTree.PlayerOnDay(curPlayer)
+    #投资
+    PlayerGoldInvest.OnDay(curPlayer)
+    #战令
+    PlayerZhanling.OnDay(curPlayer)
+    #寻宝
+    PlayerTreasure.OnDay(curPlayer)
+    PlayerGoldGift.OnDay(curPlayer)
+    #转盘
+    PlayerActTurntable.PlayerOnDay(curPlayer)
+    #情缘
+    PlayerLove.DoPlayerOnDay(curPlayer)
+    #仙宫
+    PlayerXiangong.PlayerOnDay(curPlayer)
+    PlayerControl.PlayerOnDay(curPlayer)
+    ChPlayer.PlayerOnDay(curPlayer)
+    PlayerActivity.OnDay(curPlayer)
+    PlayerLLMJ.PlayerOnDay(curPlayer)
+    FunctionNPCCommon.ShopItemOnDay(curPlayer)
+    OpenServerActivity.PlayerOnDay(curPlayer)
+    
     # 特殊时间点X点过天
-    elif onEventType == ShareDefine.Def_OnEventTypeEx:
-        PlayerHero.PlayerOnDay(curPlayer)
-        # 仙盟过天
-        PlayerFamily.PlayerOnDay(curPlayer)
-        # 重置物品每日使用次数
-        ChItem.ResetItemUseCntToday(curPlayer)
-        # 极品白拿
-        PlayerFreeGoods.OnDay(curPlayer)
-        #采集次数重置
-        NPCCommon.PlayerOnDay(curPlayer)
-        #跨服竞技场
-        PlayerCrossRealmPK.DoPlayerOnDay(curPlayer)
-        #跨服排位
-        PlayerCrossChampionship.DoPlayerOnDay(curPlayer)
-        #竞技场
-        PlayerArena.OnDayEx(curPlayer)
-        #特殊时间点过天的,一般是游戏功能,此时立即同步一次跨服玩家数据
-        CrossPlayerData.SendMergePlayerDataNow(curPlayer)
-        
+    #elif onEventType == ShareDefine.Def_OnEventTypeEx:
+    PlayerHero.PlayerOnDay(curPlayer)
+    # 仙盟过天
+    PlayerFamily.PlayerOnDay(curPlayer)
+    # 重置物品每日使用次数
+    ChItem.ResetItemUseCntToday(curPlayer)
+    # 极品白拿
+    PlayerFreeGoods.OnDay(curPlayer)
+    #采集次数重置
+    NPCCommon.PlayerOnDay(curPlayer)
+    #跨服竞技场
+    PlayerCrossRealmPK.DoPlayerOnDay(curPlayer)
+    #跨服排位
+    PlayerCrossChampionship.DoPlayerOnDay(curPlayer)
+    #竞技场
+    PlayerArena.OnDayEx(curPlayer)
+    #特殊时间点过天的,一般是游戏功能,此时立即同步一次跨服玩家数据
+    CrossPlayerData.SendMergePlayerDataNow(curPlayer)
+    
     # 以下为支持两种重置模式切换配置的
     FBCommon.FBOnDay(curPlayer, onEventType)
     #许愿池
@@ -400,7 +465,6 @@
     elif onEventType == ShareDefine.Def_OnEventTypeEx:
         #竞技场
         PlayerArena.OnWeekEx(curPlayer)
-        PlayerFamily.OnWeekEx(curPlayer)
         
     # 以下为支持两种重置模式切换配置的
     FBCommon.FBOnWeek(curPlayer, onEventType)
@@ -690,6 +754,9 @@
     #OnYear事件
     if __Get_Can_OnYear(curPlayer):
         PlayerOnYear(curPlayer)
+        
+    # 跨服事件检查
+    PlayerOnCrossCenterEvent(curPlayer)
     return
 
 

--
Gitblit v1.8.0