From 40f2e314ff6df3d45e643419c6f155bb665b78dc Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 14 九月 2024 13:34:19 +0800
Subject: [PATCH] 10249 【越南】【砍树】【英文】仙宫(增加获得气运提示;)
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py | 169 ++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 144 insertions(+), 25 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index 6c323bc..2f734ae 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -81,7 +81,6 @@
import ShareDefine
import GameWorldAverageLv
import PlayerDBOper
-import PlayerGeTui
import GameWorldBoss
import PlayerCompensation
import ReadChConfig
@@ -90,12 +89,15 @@
import CrossRealmPK
import CrossRealmMsg
import CrossRealmPlayer
+import CrossBattlefield
import CrossActionControl
import PlayerFBHelpBattle
import PlayerFamilyRedPacket
import PlayerFairyDomain
import IpyGameDataPY
import PlayerFamilyParty
+import PlayerFamilyZhenfa
+import PlayerFamilyEmblem
import GameWorldFamilyWar
import GameWorldArena
import CrossLuckyCloudBuy
@@ -107,6 +109,14 @@
import CrossBoss
import ChPlayer
import PyDataManager
+import GameWorldOpenServerCampaign
+import CrossBillboard
+import CrossChampionship
+import GameWorldMineArea
+import PlayerFuncTeam
+import GameWorship
+import GameWorldAlineInvade
+import os
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -142,6 +152,7 @@
GameWorld.Log("GameServer -> OnDay!")
#排行榜拷贝昨日榜单
PlayerBillboard.CopyBillboardOnDay()
+ CrossBillboard.CopyBillboardOnDay()
#开服活动,放在排行榜拷贝昨日榜更新后处理
PlayerEventCounter.DoLogic_GameServer_OnDay(tick)
# 通知开服天数, 放在地图OnDay之前处理, 不然地图在OnDay时需要用到开服天时会取到昨天的值
@@ -167,9 +178,9 @@
# 通知开服天数
#openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
#GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay)
+ GameWorldOpenServerCampaign.DoOnDay()
#清理过期补偿
PlayerCompensation.ClearUpTimeOutCompensation()
- #PlayerGeTui.ClearFMTGeTuiLimit()
import PlayerBourse
PlayerBourse.OverTimeItemsDeal()
# 仙盟联赛
@@ -178,6 +189,10 @@
PlayerLove.DoOnDay()
# 云购
CrossLuckyCloudBuy.DoOnDay()
+ # 膜拜
+ GameWorship.DoOnDay()
+ # 异兽入侵
+ GameWorldAlineInvade.DoOnDay()
return
def OnDayEx(tick):
@@ -305,8 +320,7 @@
CrossRealmPK.OnPKMatchProcess(tick)
GameWorldBoss.DoCheckWorldBossReborn(tick)
- #GameWorldBoss.ProcessBossGeTui(tick)
- #PlayerGeTui.ProcessNewGuyCallBackGeTui(tick)
+
#组队副本版本
PlayerTeam.DoTeamProcess(tick)
@@ -318,6 +332,9 @@
#情缘
PlayerLove.OnTimeProcess(curTime, tick)
+
+ #福地
+ GameWorldMineArea.OnMineItemTimeProcess(curTime, tick)
#每整分钟处理一次
curDateTime = datetime.datetime.today()
@@ -352,16 +369,23 @@
def GameWorldProcessOnMinute(curMinute, tick):
# 每整分钟触发一次
+ CheckServerHasPlayerLoginAfterInitOK()
#检查服务器正式开服
DoCheckNewServerOpen(tick)
-
+ #回报数据库当前在线玩家数
+ DisposeGameActivePlayer(tick)
#处理游戏世界中的时间事件
DisposeGameWorldEvenByTime(tick)
+ #榜单
+ CrossBillboard.OnMinuteProcess()
GameWorldActionControl.Dispose_OperationActionState()
GameWorldActionControl.Dispose_DailyActionState()
GameWorldActionControl.Dispose_FBStateTime()
#跨服PK
CrossRealmPK.OnMinuteProcess()
+ #跨服排位
+ CrossChampionship.OnMinuteProcess(curMinute)
+ CrossBattlefield.OnMinuteProcess()
#处理重开服务器后, 活动继续开启逻辑根据天数
#GameWorldActionControl.Dispose_Action_GoOn_ByDay(tick)
#触发世界等级
@@ -372,14 +396,42 @@
PlayerFamilyRedPacket.OnRedPacketMinuteProcess()
#拍卖行
AuctionHouse.OnAuctionItemMinuteProcess(tick)
+ #福地
+ GameWorldMineArea.OnProcessOnMinute()
#每5分钟触发一次仙盟总战力更新
if curMinute % 5 == 0:
PlayerFamily.UpdFamilyTotalFightPower()
PlayerFamilyRedPacket.CheckDelRedpacketData()
+ PlayerFamilyEmblem.CheckExpireEmblem()
return
+def CheckServerHasPlayerLoginAfterInitOK():
+ ## 检查服务器启动成功后是否有玩家正常登录
+ initGameWorldTime = GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_IsGameWorldInit)
+ if not initGameWorldTime:
+ return
+
+ if PyGameData.g_noPlayerLoginWarningMailState:
+ return
+
+ curTime = int(time.time())
+ noPlayerLoginWarningTimes = IpyGameDataPY.GetFuncCfg("ServerEvent", 1) * 60 # x分钟没有玩家登录则预警
+ if curTime - initGameWorldTime < noPlayerLoginWarningTimes:
+ return
+
+ GameWorld.SendGameError("NoPlayerLogin")
+ PyGameData.g_noPlayerLoginWarningMailState = 1
+ return
+
def OnReloadConfig():
+
+ if GameWorld.IsCrossServer():
+ # 跨服重读时重推跨服相关数据
+ tick = GameWorld.GetGameWorld().GetTick()
+ CrossRealmMsg.Sync_CrossServerInitDataToClientServer(tick, serverGroupID=0) # 这里设置为0,广播所有子服务器组
+ return
+
return
#---------------------------------------------------------------------
@@ -405,7 +457,7 @@
#处理世界活动
DisposeGameWorldGame(tick)
#回报数据库当前在线玩家数
- DisposeGameActivePlayer(tick)
+ #DisposeGameActivePlayer(tick)
#同步地图服务器时间
Dispose_MapServer_Time(tick)
#保存玩家数据
@@ -605,15 +657,18 @@
#activePlayerCount = GameWorld.GetPlayerManager().GetActivePlayerCount()
#DataRecordPack.DR_OnLinePlayerCount(activePlayerCount, platformOLDict, tjgOnlineCnt)
#===========================================================================
- for platform, playerCnt in platformOLDict.items():
- DataRecordPack.DR_OnLinePlayerCount(playerCnt, platform, tjgOnlineCnt) # 单平台
- EventReport.WriteEvent_concurrency(playerCnt, 0, platform) # 单平台 此处不能传脱机挂玩家总数
-
-
+ isMixture = False #是否混服
+ if isMixture:
+ for platform, playerCnt in platformOLDict.items():
+ DataRecordPack.DR_OnLinePlayerCount(playerCnt, platform, tjgOnlineCnt) # 单平台
+ EventReport.WriteEvent_concurrency(playerCnt, 0, platform) # 单平台 此处不能传脱机挂玩家总数
+ DataRecordPack.DR_OnLinePlayerCount(activePlayerCount, {}, tjgOnlineCnt) # 总在线
+ #EventReport.WriteEvent_concurrency(activePlayerCount, tjgOnlineCnt)
+ else:
+ serverPlatform = GameWorld.GetPlatform()
+ DataRecordPack.DR_OnLinePlayerCount(activePlayerCount, {}, tjgOnlineCnt) # 总在线
+ EventReport.WriteEvent_concurrency(activePlayerCount, tjgOnlineCnt, serverPlatform)
#===========================================================================
-
- DataRecordPack.DR_OnLinePlayerCount(activePlayerCount, {}, tjgOnlineCnt) # 总在线
- #EventReport.WriteEvent_concurrency(activePlayerCount, tjgOnlineCnt)
#刷新当前地图服务器
#===========================================================================
# custom_concurrencyMapList = ReadChConfig.GetEvalChConfig("EventReportMapID")
@@ -1218,7 +1273,7 @@
def InitGameWorld(tick):
#标记GameWorld初始化完成
GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_IsGameWorldInit, int(time.time()))
- PlayerControl.LoadDBPlayer()
+ LoadDBPlayer()
#初始化游戏时钟
GameWorld.GetGameWorld().SetTickTypeCount(ChConfig.TYPE_Tick_Count)
#初始话开服时间、星期几
@@ -1234,8 +1289,10 @@
GameWorld.GetGameWorld().GetDBGoldOrderFormMgr().Sort()
#排序排行榜
PlayerBillboard.SortServerBillboard()
- #排序仙盟
- PlayerFamily.DoFamilySort()
+ #功能队伍
+ PlayerFuncTeam.OnGameServerInitOK()
+ #仙盟
+ PlayerFamily.OnGameServerInitOK()
GameWorldActionControl.Dispose_FBStateTime()
#仙盟联赛
GameWorldFamilyWar.OnGameServerInitOK()
@@ -1257,6 +1314,10 @@
GameWorldArena.OnServerStart()
#跨服PK
CrossRealmPK.OnGameServerInitOK()
+ #跨服排位
+ CrossChampionship.OnServerStart()
+ #跨服战场
+ CrossBattlefield.OnServerStart()
#红包
PlayerFamilyRedPacket.OnServerStart()
#云购
@@ -1286,6 +1347,20 @@
GameWorld.SendGameError("GameWarning", "InitGameWorld later than AllMapServerInitOK")
AllMapServerInitOK(tick)
+ return
+
+def LoadDBPlayer():
+ if GameWorld.IsCrossServer():
+ return
+ PlayerDBOper.FindDBOper(PlayerDBOper.Table_DBPlayer, {}, {"PlayerID":1, "AccID":1, "_id":0}, LoadDBPlayerRet)
+ return
+
+def LoadDBPlayerRet(resultSetList, extendValueList):
+ for resultDict in resultSetList:
+ PyGameData.g_dbPlayerIDMap[resultDict["PlayerID"]] = resultDict["AccID"]
+ GameWorld.Log("启动服务器加载DBPlayer玩家账号ID对应关系! %s, %s" % (len(PyGameData.g_dbPlayerIDMap), PyGameData.g_dbPlayerIDMap))
+
+ PlayerFamily.OnLoadDBPlayerOK()
return
def DoCheckNewServerOpen(tick):
@@ -1360,11 +1435,16 @@
GameWorldArena.OnServerStart()
+ CrossBattlefield.OnServerStart()
+
PlayerDBGSEvent.SetInitOpenServerTime(setOpenServerTime)
ReadChConfig.ReloadConfig()
AllMapServerInitOK(tick)
+
+ GameWorld.GetGameWorld().SaveGameServerData()
+ GameWorld.SendGameError("ClearOpenServerOK")
return
## 服务器开服时是星期几
@@ -1379,6 +1459,7 @@
if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_IsGameWorldInit):
GameWorld.Log("AllMapServerInitOK时GameServer还未启动好!")
return
+ __CheckAllMapInitOK()
#通知所有地图服务器初始化成功, 同步时间
GameWorld.GetGameWorld().Notify_AllMapServerInitOK(GameWorld.GetCurrentDataTimeStr())
@@ -1424,6 +1505,9 @@
lastMixServerWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_LastMixServerWorldLV)
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_LastMixServerWorldLV, lastMixServerWorldLV)
+ # 功能队伍
+ PlayerFuncTeam.OnMapServerInitOK()
+
# 通知战盟相关活动开启状态
fadState = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_FamilyActivityDayState)
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FamilyActivityDayState, fadState)
@@ -1449,6 +1533,8 @@
# 跨服PK
CrossRealmPK.OnMapServerInitOK()
+ #跨服战场
+ CrossBattlefield.OnMapServerInitOK()
# 本服竞技场
GameWorldArena.SendMapServerArenaInfo()
# 幸运云购
@@ -1459,6 +1545,8 @@
SendMapCommMapLinePlayerCount(True) # 同步一次普通地图线路人数信息
#随机假仙盟
PlayerFamily.RandomFakeFamily()
+ #仙盟阵法
+ PlayerFamilyZhenfa.OnMapServerInitOK()
#缥缈仙域
PlayerFairyDomain.OnMapServerInitOK()
#情侣信息
@@ -1466,6 +1554,41 @@
# 记录服务器是否正常开启完毕
getUrl = ReadChConfig.GetPyMongoConfig("EventReport", "OpenStateUrl") + "?Type=MapInit&MapCount=%s"%GameWorld.GetGameWorld().GetGameMapManager().GetCount()
GameWorld.GetGameWorld().EventReport_EventReport("", "", "", "", 0, getUrl)
+ return
+
+def __CheckAllMapInitOK():
+ ## 检查所有地图是否启动成功
+ rootPath = ChConfig.GetServerRootPath()
+ mapIDTxtPath = os.path.join(rootPath, "ZoneServerGroup\map1_8G\MapServer\MapServerData\Map\MapID.txt")
+ if not os.path.isfile(mapIDTxtPath):
+ GameWorld.ErrLog("MapID.txt不存在: %s" % mapIDTxtPath)
+ return
+ fileObj = open(mapIDTxtPath, 'rb')
+ content = fileObj.read()
+ fileObj.close()
+
+ mapInfoDict = {}
+ mapInfoList = content.split('\r\n')
+ for info in mapInfoList:
+ mapInfo = info.split('\t')
+ if len(mapInfo) < 3:
+ continue
+ mapInfoDict[GameWorld.ToIntDef(mapInfo[1])] = mapInfo[2]
+
+ gameMapManager = GameWorld.GetGameWorld().GetGameMapManager()
+ for i in range(0, gameMapManager.GetCount()):
+ curMap = gameMapManager.GetAt(i)
+ mapID = curMap.GetID()
+ state = curMap.GetState()
+ if mapID in mapInfoDict and state == IPY_GameServer.mssRunning:
+ mapInfoDict.pop(mapID)
+
+ if not mapInfoDict:
+ #GameWorld.Log("都启动成功了")
+ return
+ # 汇报没有启动启动成功的地图ID信息
+ errorMapIDList = mapInfoDict.keys()
+ GameWorld.SendGameError("AllMapInitError", "未启动成功地图:%s" % (str(errorMapIDList)))
return
## 服务器合服首次启动数据加载处理
@@ -1494,14 +1617,8 @@
# 删除过期的通用数据
__DelOutofdayRecData(universalRecMgr)
- # 仙盟联赛重置
- GameWorldFamilyWar.DoFamilyWarReset()
- # 重置所有仙盟联赛评级
- familyManager = GameWorld.GetFamilyManager()
- for i in xrange(familyManager.GetCount()):
- family = familyManager.GetAt(i)
- PlayerFamily.SetFamilyWarRank(family, 0)
- PlayerFamily.DoFamilySort()
+ # 仙盟
+ PlayerFamily.OnMixServerInit()
# 设置合服首次启动加载成功
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServerInitOK, 1)
@@ -1962,6 +2079,8 @@
ChPlayer.SavePlayerLVData()
PlayerFBHelpBattle.OnServerClose()
CrossActionControl.OnServerClose()
+ CrossChampionship.OnServerClose()
+ CrossBattlefield.OnServerClose()
PlayerFamilyRedPacket.OnServerClose()
CrossLuckyCloudBuy.OnServerClose()
GameWorldArena.OnServerClose()
--
Gitblit v1.8.0