|  |  |  | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | 
|---|
|  |  |  | import PlayerXMZZ | 
|---|
|  |  |  | import PlayerTeam | 
|---|
|  |  |  | import PyGameData | 
|---|
|  |  |  | import ChPlayer | 
|---|
|  |  |  | #--------------------------------------------------------------------- | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #--------------------------------------------------------------------- | 
|---|
|  |  |  | 
|---|
|  |  |  | #__ClearTreasureDropCount() | 
|---|
|  |  |  | #记录当前时间 | 
|---|
|  |  |  | GameLogInfo.Set_Server_Hour() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | PlayerFamily.FamilyOnHour() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 触发每日事件(参数 -> 当前时间) | 
|---|
|  |  |  | 
|---|
|  |  |  | # GameDataRecord.OnDayResetRecord() | 
|---|
|  |  |  | # 仙盟红包 | 
|---|
|  |  |  | PlayerFamilyRedPacket.DoOnDay() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 玩家等级记录更新 | 
|---|
|  |  |  | ChPlayer.UpdataPlayerLVInfo() | 
|---|
|  |  |  | # 通知开服天数 | 
|---|
|  |  |  | #openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) | 
|---|
|  |  |  | #GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay) | 
|---|
|  |  |  | #清理过期补偿 | 
|---|
|  |  |  | PlayerCompensation.ClearUpTimeOutCompensation() | 
|---|
|  |  |  | 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 SendAllMapGlobalDropInfo(): | 
|---|
|  |  |  | # 同步所有地图所有全服掉落控制信息 | 
|---|
|  |  |  | globalDropCDDict = IpyGameDataPY.GetFuncEvalCfg("GlobalDropCD") # {物品ID:分钟, ...} | 
|---|
|  |  |  | globalDropCDDict = IpyGameDataPY.GetFuncEvalCfg("GlobalDropCD", 1) # {物品ID:分钟, ...} | 
|---|
|  |  |  | globalKilledCountDropDict = IpyGameDataPY.GetFuncEvalCfg("GlobalDropCD", 2) # 全服击杀次数必掉 | 
|---|
|  |  |  | globalDropRateDict = IpyGameDataPY.GetFuncEvalCfg("NPCGlobalDropRate") # {物品ID:[[npcID列表], "概率公式"], ...} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for itemID in globalDropCDDict.keys(): | 
|---|
|  |  |  | 
|---|
|  |  |  | killedCnt = PlayerDBGSEvent.GetDBGSTrig_ByKey(key) | 
|---|
|  |  |  | GameWorld.SendMapServerMsgEx(key, killedCnt) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for npcID in globalKilledCountDropDict.keys(): | 
|---|
|  |  |  | key = ShareDefine.Def_Notify_WorldKey_NPCKilledCount % npcID | 
|---|
|  |  |  | killedCnt = PlayerDBGSEvent.GetDBGSTrig_ByKey(key) | 
|---|
|  |  |  | GameWorld.SendMapServerMsgEx(key, killedCnt) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def UpdGlobalDropCD(msgList): | 
|---|
|  |  |  | 
|---|
|  |  |  | ## 更新全局击杀次数换算掉落概率的物品所累计的击杀次数 | 
|---|
|  |  |  | itemID, updKilledCnt = msgList | 
|---|
|  |  |  | key = ShareDefine.Def_Notify_WorldKey_DropNPCKilledCnt % itemID | 
|---|
|  |  |  | PlayerDBGSEvent.SetDBGSTrig_ByKey(key, updKilledCnt) | 
|---|
|  |  |  | GameWorld.SendMapServerMsgEx(key, updKilledCnt) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def UpdGlobalKillCount(msgList): | 
|---|
|  |  |  | ## 更新全局击杀次数 | 
|---|
|  |  |  | npcID, updKilledCnt = msgList | 
|---|
|  |  |  | key = ShareDefine.Def_Notify_WorldKey_NPCKilledCount % npcID | 
|---|
|  |  |  | PlayerDBGSEvent.SetDBGSTrig_ByKey(key, updKilledCnt) | 
|---|
|  |  |  | GameWorld.SendMapServerMsgEx(key, updKilledCnt) | 
|---|
|  |  |  | return | 
|---|
|  |  |  | 
|---|
|  |  |  | #  @return None | 
|---|
|  |  |  | def BeforeClose(tick): | 
|---|
|  |  |  | PlayerTeam.OnServerClose(tick) | 
|---|
|  |  |  | ChPlayer.SavePlayerLVData() | 
|---|
|  |  |  | PlayerFBHelpBattle.OnServerClose() | 
|---|
|  |  |  | GameWorld.Log("通知C++关服!") | 
|---|
|  |  |  | GameWorld.GetGameWorld().OnServerClose() | 
|---|
|  |  |  |  | 
|---|