From 885772e34137afba56a4ca8583b62a6f20c2c137 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期六, 11 五月 2019 20:06:21 +0800 Subject: [PATCH] 860312 防范时间掉血 人数为0问题 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 50 insertions(+), 3 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py index 6c1429b..747aea3 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py @@ -40,9 +40,11 @@ import ChConfig import PlayerControl import FamilyRobBoss +import NPCCustomRefresh import EventShell import FBLogic import FBCommon +import ShareDefine import EventReport import ItemCommon import PyGameData @@ -74,6 +76,8 @@ #调用副本开启触发器 FBLogic.OnOpenFB(tick) + + GameServer_DynamicLineMapStateChange(gameWorld, IPY_GameWorld.fbosOpen) return ## 副本关闭 @@ -92,8 +96,10 @@ gameFBMgr = gameWorld.GetGameFB() gameFBMgr.SetPlayerLogoffTick(0) gameFBMgr.SetIsSafeClose(0) - - GameWorld.Log("FB Close! lineID = %s, openState = %s"%(gameWorld.GetLineID(), gameWorld.GetOpenState())) + + lineID = gameWorld.GetLineID() + copyMapID = gameWorld.GetCopyMapID() + GameWorld.Log("FB Close! lineID = %s, openState = %s"%(lineID, gameWorld.GetOpenState())) gameWorld.SetOpenState(IPY_GameWorld.fbosClosed) gameMap = gameWorld.GetMap() @@ -116,6 +122,9 @@ #副本关闭时统一清怪 FBCommon.ClearFBNPC() + if lineID in PyGameData.g_fbRobotJobDict: + PyGameData.g_fbRobotJobDict.pop(lineID) + mapID = FBCommon.GetRecordMapID(gameMap.GetMapID()) #清理物品 unPickItemDict = {} @@ -146,9 +155,15 @@ #发送未拾取的物品给玩家 if mapID in ChConfig.Def_SendUnPickItemMailMapIDList and unPickItemDict: + isCrossServer = GameWorld.IsCrossServer() + playerServerGroupIDDict = PyGameData.g_crossPlayerServerGroupIDInfo.get(copyMapID, {}) for ownerID, mailItemList in unPickItemDict.items(): GameWorld.Log("发送未拾取的物品给玩家: %s" % mailItemList, ownerID) - PlayerControl.SendMailByKey("ItemNoPickUp", [ownerID], mailItemList, [gameWorld.GetMapID()]) + if isCrossServer: + serverGroupID = playerServerGroupIDDict.get(ownerID, 0) + PlayerControl.SendCrossMail(serverGroupID, "ItemNoPickUp", [ownerID], mailItemList, [gameWorld.GetMapID()]) + else: + PlayerControl.SendMailByKey("ItemNoPickUp", [ownerID], mailItemList, [gameWorld.GetMapID()]) playerManager = gameWorld.GetMapCopyPlayerManager() @@ -162,6 +177,26 @@ #根据是否收缩型FB处理 FreeOrClearFBByAutoSize(gameWorld) + GameServer_DynamicLineMapStateChange(gameWorld, IPY_GameWorld.fbosClosed) + + gameWorld.SetPropertyID(0) + PyGameData.g_crossPlayerServerGroupIDInfo.pop(copyMapID, None) + return + +def GameServer_DynamicLineMapStateChange(gameWorld, state): + if gameWorld.GetMapID() not in ChConfig.Def_CrossDynamicLineMap: + return + + realMapID, copyMapID = gameWorld.GetRealMapID(), gameWorld.GetCopyMapID() + if state == IPY_GameWorld.fbosWaitForClose: + crossFuncLineDataCache = FBLogic.OnGetCrossFuncLineDataCache() + msgInfo = [realMapID, copyMapID, state, crossFuncLineDataCache] + else: + msgInfo = [realMapID, copyMapID, state] + + msgInfo = str(msgInfo) + GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "DynamicLineMapStateChange", msgInfo, len(msgInfo)) + GameWorld.Log("DynamicLineMapStateChange realMapID=%s, copyMapID=%s, PropertyID=%s, state=%s" % (realMapID, copyMapID, gameWorld.GetPropertyID(), state)) return ##根据表中的收缩类型释放或者清空副本状态 @@ -243,6 +278,7 @@ ##踢人 __KickAllPlayerAndCloseFB(gameWorld, tick) + GameServer_DynamicLineMapStateChange(gameWorld, IPY_GameWorld.fbosClosed) return ## 副本踢出玩家逻辑 @@ -516,6 +552,9 @@ #仙盟归属boss定时处理 FamilyRobBoss.OnFamilyOwnerBossProcess(tick) + + #地图自定义随机刷怪 + NPCCustomRefresh.ProcessMapRandomRefreshNPC(gameWorld, tick) return ## 通知RouteServer 消息 @@ -580,6 +619,11 @@ if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull: msgInfo = str([gameWorld.GetMapID(), gameWorld.GetLineID(), gameWorld.GetRealMapID(), gameWorld.GetCopyMapID()]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "CommMapServerInitOK", msgInfo, len(msgInfo)) + + if gameWorld.GetMapID() in ChConfig.Def_CrossDynamicLineMap and gameWorld.GetCopyMapID() == gameWorld.GetGameWorldCount() - 1: + msgInfo = str([gameWorld.GetRealMapID(), gameWorld.GetGameWorldCount()]) + GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "DynamicLineMapInitOK", msgInfo, len(msgInfo)) + return @@ -589,6 +633,9 @@ # @remarks 函数详细说明. def CloseFB(tick): GameWorld.GetGameWorld().SetCloseFBTick(tick) + + gameWorld = GameWorld.GetGameWorld() + GameServer_DynamicLineMapStateChange(gameWorld, IPY_GameWorld.fbosWaitForClose) return ## 玩家离开地图时,尝试关闭副本 -- Gitblit v1.8.0