From b923772dbfdb2c5a5a7b42190bac092098ec82a1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 23 五月 2022 17:00:32 +0800
Subject: [PATCH] 9415 【BT】【后端】古神战场(修复GM命令增加虚拟玩家数据时可能导致多次结算bug)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py |   70 +++++++++++++++++++++++++++++------
 1 files changed, 58 insertions(+), 12 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index 8860fd5..a73766d 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -90,6 +90,8 @@
 import CrossRealmPK
 import CrossRealmMsg
 import CrossRealmPlayer
+import CrossBattlefield
+import CrossActionControl
 import PlayerFBHelpBattle
 import PlayerFamilyRedPacket
 import PlayerFairyDomain
@@ -97,11 +99,16 @@
 import PlayerFamilyParty
 import GameWorldFamilyWar
 import GameWorldArena
+import CrossLuckyCloudBuy
 import AuctionHouse
 import PlayerXMZZ
+import PlayerLove
 import PlayerTeam
 import PyGameData
+import CrossBoss
 import ChPlayer
+import PyDataManager
+import GameWorldOpenServerCampaign
 #---------------------------------------------------------------------
 
 #---------------------------------------------------------------------
@@ -162,6 +169,7 @@
     # 通知开服天数
     #openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
     #GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay)
+    GameWorldOpenServerCampaign.DoOnDay()
     #清理过期补偿
     PlayerCompensation.ClearUpTimeOutCompensation()
     #PlayerGeTui.ClearFMTGeTuiLimit()
@@ -169,6 +177,10 @@
     PlayerBourse.OverTimeItemsDeal()
     # 仙盟联赛
     GameWorldFamilyWar.DoOnDay()
+    # 情缘
+    PlayerLove.DoOnDay()
+    # 云购
+    CrossLuckyCloudBuy.DoOnDay()
     return
 
 def OnDayEx(tick):
@@ -307,6 +319,9 @@
     #拍卖行
     AuctionHouse.OnAuctionItemTimeProcess(curTime, tick)
     
+    #情缘
+    PlayerLove.OnTimeProcess(curTime, tick)
+    
     #每整分钟处理一次
     curDateTime = datetime.datetime.today()
     curMinute = curDateTime.minute
@@ -350,6 +365,7 @@
     GameWorldActionControl.Dispose_FBStateTime()
     #跨服PK
     CrossRealmPK.OnMinuteProcess()
+    CrossBattlefield.OnMinuteProcess()
     #处理重开服务器后, 活动继续开启逻辑根据天数
     #GameWorldActionControl.Dispose_Action_GoOn_ByDay(tick)
     #触发世界等级
@@ -363,6 +379,11 @@
     #每5分钟触发一次仙盟总战力更新
     if curMinute % 5 == 0:
         PlayerFamily.UpdFamilyTotalFightPower()
+        PlayerFamilyRedPacket.CheckDelRedpacketData()
+        
+    return
+
+def OnReloadConfig():
     return
 
 #---------------------------------------------------------------------
@@ -1201,6 +1222,7 @@
 def InitGameWorld(tick):
     #标记GameWorld初始化完成
     GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_IsGameWorldInit, int(time.time()))
+    PlayerControl.LoadDBPlayer()
     #初始化游戏时钟
     GameWorld.GetGameWorld().SetTickTypeCount(ChConfig.TYPE_Tick_Count)
     #初始话开服时间、星期几
@@ -1239,6 +1261,12 @@
     GameWorldArena.OnServerStart()
     #跨服PK
     CrossRealmPK.OnGameServerInitOK()
+    #跨服战场
+    CrossBattlefield.OnServerStart()
+    #红包
+    PlayerFamilyRedPacket.OnServerStart()
+    #云购
+    CrossLuckyCloudBuy.OnServerStart()
     #世界boss被杀次数重置
     #GameWorldBoss.CheckResetBossKilledCntOnServerInit()
     
@@ -1259,6 +1287,11 @@
     AuctionHouse.OnGameServerInitOK()
     # 注意:跨服相关信息的调用需放在最后,不然可能导致服务器未启动功能或者功能未加载成功导致跨服服务器与子服之间的数据同步可能出现异常的情况
     CrossRealmMsg.OnGameServerInitOK()
+    if PyGameData.g_allMapServerInitOK:
+        GameWorld.Log("InitGameWorld时AllMapServerInitOK已触发则补触发一次!")
+        GameWorld.SendGameError("GameWarning", "InitGameWorld later than AllMapServerInitOK")
+        AllMapServerInitOK(tick)
+        
     return
 
 def DoCheckNewServerOpen(tick):
@@ -1315,7 +1348,8 @@
         universalRecMgr.Delete(recType)
         if recordCount:
             GameWorld.Log("DeleteRecData recType=%s, count=%s" % (recType, recordCount))
-            
+    CrossBoss.g_bossRecDataDict = {} # 需要清除,不然会导致跨服boss通用记录缓存对象错误
+    
     #清 家族
     familyList = []
     familyMgr = GameWorld.GetFamilyManager()
@@ -1329,6 +1363,10 @@
     GameWorldFamilyWar.DoFamilyWarReset()
     
     PyGameData.g_sortBOSSRefreshList = [] # boss刷新信息记录缓存重置, 不重置会导致通知前端的boss信息为空
+    
+    GameWorldArena.OnServerStart()
+    
+    CrossBattlefield.OnServerStart()
     
     PlayerDBGSEvent.SetInitOpenServerTime(setOpenServerTime)
     
@@ -1345,6 +1383,10 @@
 #  @return None
 #  @remarks 当一个mapServer开启时,
 def AllMapServerInitOK(tick):
+    PyGameData.g_allMapServerInitOK = True
+    if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_IsGameWorldInit):
+        GameWorld.Log("AllMapServerInitOK时GameServer还未启动好!")
+        return
     #通知所有地图服务器初始化成功, 同步时间
     GameWorld.GetGameWorld().Notify_AllMapServerInitOK(GameWorld.GetCurrentDataTimeStr())
     
@@ -1408,14 +1450,19 @@
     GameWorldFamilyWar.OnMapServerInitOK()
     
     # 跨服服务器状态
+    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossServerTime, PyGameData.g_crossServerTimeInfo)
     isCrossServerOpen = GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossServerOpen)
     GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossServerOpen, isCrossServerOpen)
     GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossZoneName, PyGameData.g_crossZoneName)
     
     # 跨服PK
     CrossRealmPK.OnMapServerInitOK()
+    #跨服战场
+    CrossBattlefield.OnMapServerInitOK()
     # 本服竞技场
     GameWorldArena.SendMapServerArenaInfo()
+    # 幸运云购
+    CrossLuckyCloudBuy.OnMapServerInitOK()
     
     SendAllMapGlobalDropInfo() # 全局掉落控制
     
@@ -1424,6 +1471,8 @@
     PlayerFamily.RandomFakeFamily()
     #缥缈仙域
     PlayerFairyDomain.OnMapServerInitOK()
+    #情侣信息
+    PyDataManager.GetDBPyCoupleManager().SendMapServerCoupleInfo()
     # 记录服务器是否正常开启完毕
     getUrl = ReadChConfig.GetPyMongoConfig("EventReport", "OpenStateUrl") + "?Type=MapInit&MapCount=%s"%GameWorld.GetGameWorld().GetGameMapManager().GetCount()
     GameWorld.GetGameWorld().EventReport_EventReport("", "", "", "", 0, getUrl)
@@ -1839,20 +1888,12 @@
     if mapServerPack.GetState() not in [0,1,2,3] and curMap.GetState() != mapServerPack.GetState():
         # 记录服务器是否正常开启完毕, 避免重复发送
         GameWorld.DebugLog("MapServer_RunningStateRefresh--_%s"%([mapServerPack.GetState(), curMap.GetState(), mapServerPack.GetMapID(), curMap.GetID()]))
-        SendGameError("MapError")
+        GameWorld.SendGameError("MapError")
         
     curMap.SetState(mapServerPack.GetState())
     curMap.SetRefreshTick(tick)
     
     return
-
-
-def SendGameError(state):
-    getUrl = ReadChConfig.GetPyMongoConfig("EventReport", "OpenStateUrl")
-    groupID = ReadChConfig.GetPyMongoConfig("platform", "GroupID")
-    userDBName = ReadChConfig.GetPyMongoConfig("connect", "USER_DB_NAME")
-    getUrl = getUrl + "?Type=%s&groupID=%s&userDBName=%s"%(state, groupID, userDBName)
-    GameWorld.GetGameWorld().EventReport_EventReport("", "", "", "", 0, getUrl)
     
 ## 刷新地图服务器状态, 如果1分钟没有状态回报, 刷新为消失状态
 #  @param tick 当前时间
@@ -1880,7 +1921,7 @@
         curMap.SetState(IPY_GameServer.mssNone)
         if not isSendMapClose:
             # 避免多地图发送过多邮件, 如关服的时候
-            SendGameError("MapDisconnect")   # 状态报告
+            GameWorld.SendGameError("MapDisconnect")   # 状态报告
             isSendMapClose = True
 
     return
@@ -1930,7 +1971,12 @@
     PlayerTeam.OnServerClose(tick)
     ChPlayer.SavePlayerLVData()
     PlayerFBHelpBattle.OnServerClose()
+    CrossActionControl.OnServerClose()
+    CrossBattlefield.OnServerClose()
+    PlayerFamilyRedPacket.OnServerClose()
+    CrossLuckyCloudBuy.OnServerClose()
     GameWorldArena.OnServerClose()
+    PlayerLove.OnServerClose()
     GameWorld.Log("通知C++关服!")
     GameWorld.GetGameWorld().OnServerClose()
     
@@ -1938,6 +1984,6 @@
 def ChangeGameServerState(state):
     # 只接收大于等于mssPyError
     GameWorld.DebugLog("ChangeGameServerState:%s"%state)
-    SendGameError("GameServerError")
+    GameWorld.SendGameError("GameServerError")
     
     
\ No newline at end of file

--
Gitblit v1.8.0