|  |  |  | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 触发每日事件(参数 -> 当前时间) | 
|---|
|  |  |  | 
|---|
|  |  |  | 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 = {} # 平台在线人数 {平台:人数, ...} | 
|---|
|  |  |  | 
|---|
|  |  |  | if initOpenServerTime <= 0 or openServerWeekday <= 0: | 
|---|
|  |  |  | #记录首次开发时间(现实时间戳) | 
|---|
|  |  |  | PlayerDBGSEvent.SetInitOpenServerTime(initOpenServerTime if initOpenServerTime else int(time.time())) | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | CrossRealmMsg.OnGameServerInitOK() | 
|---|
|  |  |  | #初始化家族数量 | 
|---|
|  |  |  | GameWorld.GetFamilyManager().SetFamilyUpperLimitCount(ChConfig.Def_Family_MaxCnt) | 
|---|
|  |  |  | #排序元宝交易平台 | 
|---|
|  |  |  | 
|---|
|  |  |  | 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): | 
|---|
|  |  |  | 
|---|
|  |  |  | # 商店信息 | 
|---|
|  |  |  | #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() | 
|---|
|  |  |  |  | 
|---|