From bc433db8262081f0400bcb9c2c3476000662daf3 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 10 七月 2024 14:24:53 +0800 Subject: [PATCH] 10205 【越南】【主干】【港台】【砍树】自选礼包(支持一次性放入超65535个数叠加物品;邮件同步支持一次性领取超65535个数叠加物品) --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 105 insertions(+), 15 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py index c765dab..1cb6eee 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 @@ -97,6 +96,7 @@ import PlayerFairyDomain import IpyGameDataPY import PlayerFamilyParty +import PlayerFamilyZhenfa import GameWorldFamilyWar import GameWorldArena import CrossLuckyCloudBuy @@ -110,6 +110,11 @@ import PyDataManager import GameWorldOpenServerCampaign import CrossBillboard +import CrossChampionship +import GameWorldMineArea +import GameWorship +import GameWorldAlineInvade +import os #--------------------------------------------------------------------- #--------------------------------------------------------------------- @@ -174,7 +179,6 @@ GameWorldOpenServerCampaign.DoOnDay() #清理过期补偿 PlayerCompensation.ClearUpTimeOutCompensation() - #PlayerGeTui.ClearFMTGeTuiLimit() import PlayerBourse PlayerBourse.OverTimeItemsDeal() # 仙盟联赛 @@ -183,6 +187,10 @@ PlayerLove.DoOnDay() # 云购 CrossLuckyCloudBuy.DoOnDay() + # 膜拜 + GameWorship.DoOnDay() + # 异兽入侵 + GameWorldAlineInvade.DoOnDay() return def OnDayEx(tick): @@ -310,8 +318,7 @@ CrossRealmPK.OnPKMatchProcess(tick) GameWorldBoss.DoCheckWorldBossReborn(tick) - #GameWorldBoss.ProcessBossGeTui(tick) - #PlayerGeTui.ProcessNewGuyCallBackGeTui(tick) + #组队副本版本 PlayerTeam.DoTeamProcess(tick) @@ -323,6 +330,9 @@ #情缘 PlayerLove.OnTimeProcess(curTime, tick) + + #福地 + GameWorldMineArea.OnMineItemTimeProcess(curTime, tick) #每整分钟处理一次 curDateTime = datetime.datetime.today() @@ -357,6 +367,7 @@ def GameWorldProcessOnMinute(curMinute, tick): # 每整分钟触发一次 + CheckServerHasPlayerLoginAfterInitOK() #检查服务器正式开服 DoCheckNewServerOpen(tick) #回报数据库当前在线玩家数 @@ -368,6 +379,8 @@ GameWorldActionControl.Dispose_FBStateTime() #跨服PK CrossRealmPK.OnMinuteProcess() + #跨服排位 + CrossChampionship.OnMinuteProcess(curMinute) CrossBattlefield.OnMinuteProcess() #处理重开服务器后, 活动继续开启逻辑根据天数 #GameWorldActionControl.Dispose_Action_GoOn_ByDay(tick) @@ -379,6 +392,8 @@ PlayerFamilyRedPacket.OnRedPacketMinuteProcess() #拍卖行 AuctionHouse.OnAuctionItemMinuteProcess(tick) + #福地 + GameWorldMineArea.OnProcessOnMinute() #每5分钟触发一次仙盟总战力更新 if curMinute % 5 == 0: PlayerFamily.UpdFamilyTotalFightPower() @@ -386,7 +401,32 @@ 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 #--------------------------------------------------------------------- @@ -1228,7 +1268,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) #初始话开服时间、星期几 @@ -1244,8 +1284,8 @@ GameWorld.GetGameWorld().GetDBGoldOrderFormMgr().Sort() #排序排行榜 PlayerBillboard.SortServerBillboard() - #排序仙盟 - PlayerFamily.DoFamilySort() + #仙盟 + PlayerFamily.OnGameServerInitOK() GameWorldActionControl.Dispose_FBStateTime() #仙盟联赛 GameWorldFamilyWar.OnGameServerInitOK() @@ -1267,6 +1307,8 @@ GameWorldArena.OnServerStart() #跨服PK CrossRealmPK.OnGameServerInitOK() + #跨服排位 + CrossChampionship.OnServerStart() #跨服战场 CrossBattlefield.OnServerStart() #红包 @@ -1298,6 +1340,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): @@ -1380,6 +1436,7 @@ AllMapServerInitOK(tick) + GameWorld.GetGameWorld().SaveGameServerData() GameWorld.SendGameError("ClearOpenServerOK") return @@ -1395,6 +1452,7 @@ if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_IsGameWorldInit): GameWorld.Log("AllMapServerInitOK时GameServer还未启动好!") return + __CheckAllMapInitOK() #通知所有地图服务器初始化成功, 同步时间 GameWorld.GetGameWorld().Notify_AllMapServerInitOK(GameWorld.GetCurrentDataTimeStr()) @@ -1477,6 +1535,8 @@ SendMapCommMapLinePlayerCount(True) # 同步一次普通地图线路人数信息 #随机假仙盟 PlayerFamily.RandomFakeFamily() + #仙盟阵法 + PlayerFamilyZhenfa.OnMapServerInitOK() #缥缈仙域 PlayerFairyDomain.OnMapServerInitOK() #情侣信息 @@ -1484,6 +1544,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 ## 服务器合服首次启动数据加载处理 @@ -1512,14 +1607,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) @@ -1980,6 +2069,7 @@ ChPlayer.SavePlayerLVData() PlayerFBHelpBattle.OnServerClose() CrossActionControl.OnServerClose() + CrossChampionship.OnServerClose() CrossBattlefield.OnServerClose() PlayerFamilyRedPacket.OnServerClose() CrossLuckyCloudBuy.OnServerClose() -- Gitblit v1.8.0