|  |  | 
 |  |  | import GameWorldAverageLv
 | 
 |  |  | import PlayerDBOper
 | 
 |  |  | import PlayerGeTui
 | 
 |  |  | #import MergeBroadcast
 | 
 |  |  | #import GameWorldMixServerCampaign
 | 
 |  |  | #import GameWorldMergeKing
 | 
 |  |  | #import GameWorldMergePK
 | 
 |  |  | #import PlayerManorWar
 | 
 |  |  | import GameWorldBoss
 | 
 |  |  | #import GameWorldActionTeHui
 | 
 |  |  | 
 |  |  | import ReadChConfig
 | 
 |  |  | import EventReport
 | 
 |  |  | #import ReloadModule
 | 
 |  |  | import MergeChildMsg
 | 
 |  |  | #import MergePlayer
 | 
 |  |  | import CrossRealmPK
 | 
 |  |  | import CrossRealmMsg
 | 
 |  |  | import CrossRealmPlayer
 | 
 |  |  | import PlayerFBHelpBattle
 | 
 |  |  | import PlayerFamilyRedPacket
 | 
 |  |  | import IpyGameDataPY
 | 
 |  |  | import PlayerFamilyParty
 | 
 |  |  | 
 |  |  |     #__ClearTreasureDropCount()
 | 
 |  |  |     #记录当前时间
 | 
 |  |  |     GameLogInfo.Set_Server_Hour()
 | 
 |  |  |      | 
 |  |  |     PlayerFamily.FamilyOnHour()
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | ## 触发每日事件(参数 -> 当前时间)
 | 
 |  |  | 
 |  |  |     PlayerGeTui.ClearFMTGeTuiLimit()
 | 
 |  |  |     import PlayerBourse
 | 
 |  |  |     PlayerBourse.OverTimeItemsDeal()
 | 
 |  |  |     # 仙盟联赛
 | 
 |  |  |     GameWorldFamilyWar.DoOnDay()
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | def OnDayEx(tick):
 | 
 |  |  | 
 |  |  |     PlayerFamilyParty.FamilyParty_Process(tick)
 | 
 |  |  |     # 帮主弹劾时钟调用
 | 
 |  |  |     PlayerFamily.OnLeaderImpeachTick(tick)
 | 
 |  |  |      | 
 |  |  |     #跨服广播
 | 
 |  |  |     #MergeBroadcast.OnBroadcastProccee(tick)
 | 
 |  |  |     #跨服玩家
 | 
 |  |  |     CrossRealmPlayer.OnCrossProcess(tick)
 | 
 |  |  |     #跨服PK匹配
 | 
 |  |  |     #GameWorldMergePK.OnPKMatchProcess(tick)
 | 
 |  |  |     #跨服王者争霸
 | 
 |  |  |     #GameWorldMergeKing.OnMergeKingProcess(tick)
 | 
 |  |  |     CrossRealmPK.OnPKMatchProcess(tick)
 | 
 |  |  |     
 | 
 |  |  |     GameWorldBoss.DoCheckWorldBossReborn(tick)
 | 
 |  |  |     GameWorldBoss.ProcessBossGeTui(tick)
 | 
 |  |  | 
 |  |  |     GameWorldActionControl.Dispose_OperationActionState()
 | 
 |  |  |     GameWorldActionControl.Dispose_DailyActionState()
 | 
 |  |  |     GameWorldActionControl.Dispose_FBStateTime()
 | 
 |  |  |      | 
 |  |  |     #跨服PK
 | 
 |  |  |     CrossRealmPK.OnMinuteProcess()
 | 
 |  |  |     #处理重开服务器后, 活动继续开启逻辑根据天数
 | 
 |  |  |     #GameWorldActionControl.Dispose_Action_GoOn_ByDay(tick)
 | 
 |  |  |     #触发世界等级
 | 
 |  |  |     GameWorldAverageLv.OpenWorldAverageLv()
 | 
 |  |  |     #倒计时离队处理
 | 
 |  |  |     PlayerTeam.DoCountdownLeaveTeamLogic(tick)
 | 
 |  |  |      | 
 |  |  |     #副本助战
 | 
 |  |  |     PlayerFBHelpBattle.OnMinuteProcess()
 | 
 |  |  |     #每5分钟触发一次仙盟总战力更新
 | 
 |  |  |     if curMinute % 5 == 0:
 | 
 |  |  |         PlayerFamily.UpdFamilyTotalFightPower()
 | 
 |  |  | 
 |  |  |     DisposeGameWorldGame(tick)
 | 
 |  |  |     #回报数据库当前在线玩家数
 | 
 |  |  |     DisposeGameActivePlayer(tick)
 | 
 |  |  |     #统计跨服服务器在线玩家
 | 
 |  |  |     #MergePlayer.DisposeMergeServerOnlinePlayer()
 | 
 |  |  |     #同步地图服务器时间
 | 
 |  |  |     Dispose_MapServer_Time(tick)
 | 
 |  |  |     #保存玩家数据
 | 
 |  |  | 
 |  |  | #  所有服务器人数要回报一次,  每个map也要回报一次
 | 
 |  |  | #  gameWorld.GetTickByType(0 - n) 取间隔
 | 
 |  |  | def DisposeGameActivePlayer(tick):
 | 
 |  |  | #    gameWorld = GameWorld.GetGameWorld()
 | 
 |  |  | #    lastTick = gameWorld.GetTickByType(ChConfig.TYPE_GetActivePlayerCount)
 | 
 |  |  | #     | 
 |  |  | #    if lastTick == -1:
 | 
 |  |  | #        #GameWorld.Log("未初始化服务器")
 | 
 |  |  | #        return
 | 
 |  |  | #     | 
 |  |  | #    if tick - lastTick < ChConfig.TYPE_Tick_Time[ChConfig.TYPE_GetActivePlayerCount]:
 | 
 |  |  | #        return
 | 
 |  |  | #     | 
 |  |  | #     | 
 |  |  | #    gameWorld.SetTickByType(ChConfig.TYPE_GetActivePlayerCount , tick)
 | 
 |  |  |          | 
 |  |  |     gameWorld = GameWorld.GetGameWorld()     | 
 |  |  |     curMinute = datetime.datetime.today().minute  | 
 |  |  |     #为了每个服的输出时间点统一一个分钟点,便于统计
 | 
 |  |  |     if datetime.datetime.today().minute % 5 != 0:
 | 
 |  |  |     if curMinute % 5 != 0:
 | 
 |  |  |         return
 | 
 |  |  |     noteData = gameWorld.GetDictByKey("OnlineCntM")
 | 
 |  |  |     if noteData == curMinute:
 | 
 |  |  |         # 同一分钟不多发送,此处不建议用CD处理,避免两CD冲突
 | 
 |  |  |         return
 | 
 |  |  |     gameWorld.SetDict("OnlineCntM", curMinute)
 | 
 |  |  |     
 | 
 |  |  |     # 全服在线人数平台明细
 | 
 |  |  |     platformOLDict = {} # 平台在线人数 {平台:人数, ...}
 | 
 |  |  | 
 |  |  |             tjgOnlineCnt += 1
 | 
 |  |  |             continue
 | 
 |  |  |         
 | 
 |  |  |         platform = GameWorld.GetPlayerPlatform(player.GetAccID())
 | 
 |  |  |         platform = GameWorld.GetPlayerPlatform(player)
 | 
 |  |  |         platformOLDict[platform] = platformOLDict.get(platform, 0) + 1 # 累计平台在线人数
 | 
 |  |  |         
 | 
 |  |  | #        mapID = player.GetMapID()
 | 
 |  |  | 
 |  |  | #  @remarks 先请求排行榜信息,然后SetTickTypeCount,设置需要保存的时间种类
 | 
 |  |  | def InitGameWorld(tick):
 | 
 |  |  |     #标记GameWorld初始化完成
 | 
 |  |  |     GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_IsGameWorldInit, 1)
 | 
 |  |  |     GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_IsGameWorldInit, int(time.time()))
 | 
 |  |  |     #初始化游戏时钟
 | 
 |  |  |     GameWorld.GetGameWorld().SetTickTypeCount(ChConfig.TYPE_Tick_Count)
 | 
 |  |  |     #初始话开服时间、星期几
 | 
 |  |  |     initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)
 | 
 |  |  |     openServerWeekday = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OpenServerWeekday)
 | 
 |  |  |     if initOpenServerTime <= 0 or openServerWeekday <= 0:
 | 
 |  |  |         #记录首次开发时间(现实时间戳)
 | 
 |  |  |         PlayerDBGSEvent.SetInitOpenServerTime(initOpenServerTime if initOpenServerTime else int(time.time()))
 | 
 |  |  |          | 
 |  |  |     CrossRealmMsg.OnGameServerInitOK()
 | 
 |  |  |     #初始化家族数量
 | 
 |  |  |     GameWorld.GetFamilyManager().SetFamilyUpperLimitCount(ChConfig.Def_Family_MaxCnt)
 | 
 |  |  |     #排序元宝交易平台
 | 
 |  |  | 
 |  |  |     #事件汇报初始化
 | 
 |  |  |     EventReport.InitDllAppID()
 | 
 |  |  |     
 | 
 |  |  |     initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey( PlayerDBGSEvent.Def_InitOpenServerTime)
 | 
 |  |  |     if initOpenServerTime <= 0:
 | 
 |  |  |         #记录首次开发时间(现实时间戳)
 | 
 |  |  |         PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime , int(time.time()))
 | 
 |  |  |     #ReloadModule.RefreshModuleFileCMTime(True)
 | 
 |  |  |     #合服首次启动加载处理
 | 
 |  |  |     __DoMixServerInit()
 | 
 |  |  | 
 |  |  |     PlayerXMZZ.OnGameServerInitOK()
 | 
 |  |  |     #加载活跃玩家等级信息
 | 
 |  |  |     ChPlayer.LoadPlayerLVData()
 | 
 |  |  |     #加载助战信息
 | 
 |  |  |     PlayerFBHelpBattle.OnServerStart()
 | 
 |  |  |     #跨服PK
 | 
 |  |  |     CrossRealmPK.OnGameServerInitOK()
 | 
 |  |  |     #世界boss被杀次数重置
 | 
 |  |  |     #GameWorldBoss.CheckResetBossKilledCntOnServerInit()
 | 
 |  |  |     #GameWorldActionTeHui.OnGameServerInitOK() # 特惠活动初始化
 | 
 |  |  |     #子服启动成功告知跨服主服
 | 
 |  |  |     #===========================================================================
 | 
 |  |  |     # serverGroupID = GameWorld.GetServerGroupID()
 | 
 |  |  |     # if GameWorld.IsMergeOpen() and not GameWorld.IsMergeServer():
 | 
 |  |  |     #    GameWorld.Log("通知跨服主服务器启动成功, 可接收最新跨服活动状态及数据...")
 | 
 |  |  |     #    dataMsg = {"Platform":GameWorld.GetPlatform(), "ServerID":GameWorld.GetServerSID(), "ServerGroupID":serverGroupID}
 | 
 |  |  |     #    MergeChildMsg.SendMergerChildToCenterStringData(ChConfig.Def_ClientServerInitOK, dataMsg)
 | 
 |  |  |     #     | 
 |  |  |     # GameWorld.Log("服务器启动成功: ServerGroupID=%s" % serverGroupID)
 | 
 |  |  |     #===========================================================================
 | 
 |  |  |     isCrossServer = GameWorld.IsCrossServer()
 | 
 |  |  |     if isCrossServer:
 | 
 |  |  |         isServerClose = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossServerClose)
 | 
 |  |  |         isServerOpen = 0 if isServerClose else 1
 | 
 |  |  |         GameWorld.GetGameWorld().SetDict(ShareDefine.Def_Notify_WorldKey_CrossServerOpen, isServerOpen)
 | 
 |  |  |         GameWorld.Log("跨服服务器启动成功: isServerOpen=%s" % isServerOpen)
 | 
 |  |  |     else:
 | 
 |  |  |         serverGroupID = GameWorld.GetServerGroupID()
 | 
 |  |  |         GameWorld.Log("服务器启动成功: ServerGroupID=%s" % serverGroupID)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | def DoCheckNewServerOpen(tick):
 | 
 |  |  | 
 |  |  |     
 | 
 |  |  |     PyGameData.g_sortBOSSRefreshList = [] # boss刷新信息记录缓存重置, 不重置会导致通知前端的boss信息为空
 | 
 |  |  |     
 | 
 |  |  |     AllMapServerInitOK(tick)
 | 
 |  |  |     PlayerDBGSEvent.SetInitOpenServerTime(setOpenServerTime)
 | 
 |  |  |     
 | 
 |  |  |     PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime, setOpenServerTime)
 | 
 |  |  |     ReadChConfig.ReloadConfig()
 | 
 |  |  |      | 
 |  |  |     AllMapServerInitOK(tick)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | ## 服务器开服时是星期几
 | 
 |  |  | def GetOpenServerWeekday(): return PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OpenServerWeekday)
 | 
 |  |  | 
 | 
 |  |  | ## 所有地图服务器初始化成功后(封包注册)
 | 
 |  |  | #  @param tick 当前时间
 | 
 |  |  | 
 |  |  |     # 通知开服天数
 | 
 |  |  |     openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
 | 
 |  |  |     GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay)
 | 
 |  |  |     openServerWeekday = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OpenServerWeekday)
 | 
 |  |  |     GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_OpenServerWeekday, openServerWeekday)
 | 
 |  |  |     # 合服状态
 | 
 |  |  |     isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer)
 | 
 |  |  |     GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_IsMixServer, isMixServer)
 | 
 |  |  | 
 |  |  |     # 通知战盟相关活动开启状态
 | 
 |  |  |     fadState = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_FamilyActivityDayState)
 | 
 |  |  |     GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FamilyActivityDayState, fadState) 
 | 
 |  |  |     # 通知开启服务器时间
 | 
 |  |  |     initGameWorldTime = GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_IsGameWorldInit)
 | 
 |  |  |     GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_InitGameWorldTime, initGameWorldTime)  | 
 |  |  |     
 | 
 |  |  |     # 通知世界boss奖励信息
 | 
 |  |  |     GameWorldBoss.OnMapServerInitOK()
 | 
 |  |  | 
 |  |  |     # 商店信息
 | 
 |  |  |     #GameWorldShopItem.OnMapServerInitOK()
 | 
 |  |  |     
 | 
 |  |  |     # 跨服服务器状态
 | 
 |  |  |     isCrossServerOpen = GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossServerOpen)
 | 
 |  |  |     GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossServerOpen, isCrossServerOpen)
 | 
 |  |  |      | 
 |  |  |     # 跨服PK
 | 
 |  |  |     #GameWorldMergePK.OnMapServerInitOK()
 | 
 |  |  |     #GameWorldMergeKing.OnMapServerInitOK()
 | 
 |  |  |     CrossRealmPK.OnMapServerInitOK()
 | 
 |  |  |     
 | 
 |  |  |     SendAllMapGlobalDropInfo() # 全局掉落控制
 | 
 |  |  |     
 | 
 |  |  | 
 |  |  |     # 清除指定通用数据
 | 
 |  |  |     universalRecMgr = GameWorld.GetUniversalRecMgr()
 | 
 |  |  |     delRecTypeList = [ShareDefine.Def_UniversalGameRecType_ManorWarInfo,
 | 
 |  |  |                       #ShareDefine.Def_UniversalGameRecType_MergeRegister,
 | 
 |  |  |                       ]
 | 
 |  |  |     GameWorld.DebugLog("    清除指定通用数据 delRecTypeList=%s" % str(delRecTypeList))
 | 
 |  |  |     for delRecType in delRecTypeList:
 | 
 |  |  | 
 |  |  |     # 删除过期的通用数据
 | 
 |  |  |     curTime = int(time.time())
 | 
 |  |  |     GameWorld.Log("执行删除过期的通用数据, curTime=%s" % curTime)
 | 
 |  |  |     delOutofdayRecDataDict = {ShareDefine.Def_UniversalGameRecType_MergeRegister:31 * 24 * 3600,
 | 
 |  |  |     delOutofdayRecDataDict = {
 | 
 |  |  |                               }
 | 
 |  |  |     for otDayRecType, otTime in delOutofdayRecDataDict.items():
 | 
 |  |  |         otRecDataList = universalRecMgr.GetTypeList(otDayRecType)
 | 
 |  |  | 
 |  |  | def BeforeClose(tick):
 | 
 |  |  |     PlayerTeam.OnServerClose(tick)
 | 
 |  |  |     ChPlayer.SavePlayerLVData()
 | 
 |  |  |     PlayerFBHelpBattle.OnServerClose()
 | 
 |  |  |     GameWorld.Log("通知C++关服!")
 | 
 |  |  |     GameWorld.GetGameWorld().OnServerClose()
 | 
 |  |  |     
 |