From f8e30b43a4228e1231debfd6f2758218a2675654 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 16 九月 2019 18:44:30 +0800
Subject: [PATCH] 8260 【主干】【400】跨服匹配优化
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py | 72 +++++++++++++++++++++++++++--------
1 files changed, 55 insertions(+), 17 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py
index 8a9cca4..b59703e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py
@@ -24,11 +24,14 @@
#导入
import FBLogic
import GameLogic_SealDemon
+import GameLogic_ZhuXianBoss
import IPY_GameWorld
import PlayerControl
import GameWorld
import FBCommon
import ChConfig
+import IpyGameDataPY
+import random
#---------------------------------------------------------------------
#全局变量
#---------------------------------------------------------------------
@@ -57,7 +60,7 @@
tagMapID = packCMDList[0] # 目标地图id
tagMapLineID = packCMDList[1] # 目标地图线路属性,从0开始
resultLineID = -1 # 结果lineID
-
+ notifyMark = 'GeRen_chenxin_500807' #不能进的提示
if tagMapID in ChConfig.Def_MapID_LineIDToPropertyID:
GameWorld.Log(" DoLogic() tagMapID in ChConfig.Def_MapID_LineIDToPropertyID")
tagMapPropertyID = tagMapLineID + 1 # 因为PropertyID默认是0,所以使用时从1开始
@@ -68,8 +71,11 @@
maxPlayerCount = FBLogic.GetFBLineMaxPlayerCount(tagMapID, tagMapLineID)
GameWorld.Log(" DoLogic() tagMapID=%s,tagMapLineID=%s,maxPlayerCount=%s" % (tagMapID, tagMapLineID,maxPlayerCount))
+ if not maxPlayerCount:
+ pass
firstEmptyGameWorld = None
- sameLineGameWorldList = []
+ sameLineGameWorldList = [] #人数未满的线路列表
+ fullLineGameWorldList = [] #人数已满的线路列表
for index in xrange(gameWorldManager.GetGameWorldCount()):
gameWorld = IPY_GameWorld.IPY_GameWorld(index)
playerManager = gameWorld.GetMapCopyPlayerManagerByFbIndex(index)
@@ -81,14 +87,29 @@
firstEmptyGameWorld = gameWorld
# 如果不是同一线路属性的,则跳过
# 如果当前人数超过额定人数,则跳过
- if propertyID == tagMapPropertyID and curPlayerCnt < maxPlayerCount:
- sameLineGameWorldList.append([gameWorld, curPlayerCnt])
+ if propertyID == tagMapPropertyID:
+ if curPlayerCnt < maxPlayerCount:
+ sameLineGameWorldList.append([gameWorld, curPlayerCnt])
+ else:
+ fullLineGameWorldList.append([gameWorld, curPlayerCnt])
findGameWorld = None
if sameLineGameWorldList:
- sameLineGameWorldList.sort(key=lambda asd:asd[1])
- findGameWorld = sameLineGameWorldList[0][0]
+ #若是进入过副本则随机一个,否则选人数最少的一个
+ enterCnt = packCMDList[2]
+ if enterCnt:
+ #GameWorld.DebugLog('DoLogic() sameLineGameWorldList=%s'%len(sameLineGameWorldList))
+ findGameWorld = random.choice(sameLineGameWorldList)[0]
+ else:
+ sameLineGameWorldList.sort(key=lambda asd:asd[1])
+ findGameWorld = sameLineGameWorldList[0][0]
+
elif firstEmptyGameWorld:
findGameWorld = firstEmptyGameWorld
+ elif fullLineGameWorldList:
+ #线路都满人了则取个人数相对较少的
+ fullLineGameWorldList.sort(key=lambda asd:asd[1])
+ findGameWorld = fullLineGameWorldList[0][0]
+
if findGameWorld:
if findGameWorld.GetPropertyID() == 0:
findGameWorld.SetFBFirstOpen(1) # 开启副本
@@ -144,13 +165,14 @@
# GameWorld.DebugLog(" 创建新战盟家园: tagFamilyID=%s,tagFamilyHomeLV=%s,resultLineID=%s"
# % (tagFamilyID, tagFamilyHomeLV, resultLineID))
#===================================================================================================
- elif tagMapID == ChConfig.Def_FBMapID_SealDemon:
+ elif tagMapID in [ChConfig.Def_FBMapID_HorsePetBoss, ChConfig.Def_FBMapID_SealDemon, ChConfig.Def_FBMapID_ZhuXianBoss, ChConfig.Def_FBMapID_AllFamilyBoss, ChConfig.Def_FBMapID_DemonKing]:
tagMapPropertyID = tagMapLineID + 1 # 因为PropertyID默认是0,所以使用时从1开始
resultLineID = -1 # 结果lineID
gameWorldManager = GameWorld.GetGameWorld()
GameWorld.Log(" DoLogic() tagMapID=%s,tagMapLineID=%s" % (tagMapID, tagMapLineID))
findGameWord = None
+ findPlayerManager = None
for index in range(gameWorldManager.GetGameWorldCount()):
gameWorld = IPY_GameWorld.IPY_GameWorld(index)
playerManager = gameWorld.GetMapCopyPlayerManagerByFbIndex(index)
@@ -163,13 +185,32 @@
# % (index, propertyID, playerManager.GetPlayerCount()))
# 如果不是同一线路属性的,则跳过
if propertyID == tagMapPropertyID:
- if GameLogic_SealDemon.GetBossRemainHPPer(tagMapLineID, tick) < 15:
- findGameWord = None
- break
+ if tagMapID == ChConfig.Def_FBMapID_SealDemon:
+ if GameLogic_SealDemon.GetBossRemainHPPer(index, tagMapLineID, tick) < 15:
+ findGameWord = None
+ findPlayerManager = None
+ notifyMark = "DemonJar_Text4"
+ break
+ elif tagMapID == ChConfig.Def_FBMapID_ZhuXianBoss:
+ if GameLogic_ZhuXianBoss.GetBossRemainHPPer(index, tagMapLineID, tick) < IpyGameDataPY.GetFuncCfg('ZhuXianBossCntCfg', 4):
+ findGameWord = None
+ findPlayerManager = None
+ notifyMark = "DemonJar_Text4"
+ break
+
findGameWord = gameWorld
+ findPlayerManager = playerManager
break
if not findGameWord and propertyID == 0:
findGameWord = gameWorld
+ findPlayerManager = playerManager
+
+ if findPlayerManager and tagMapID == ChConfig.Def_FBMapID_ZhuXianBoss:
+ if packCMDList[3] !=-1 and not GameLogic_ZhuXianBoss.GetHasSameFamilyMerber(packCMDList[3], findPlayerManager):
+ notifyMark = "TryEnterJadeDynastyBossError_6"
+ findGameWord = None
+ GameWorld.DebugLog(" 归属次数为0且没有同盟玩家在副本里!")
+
if findGameWord:
if findGameWord.GetPropertyID() == 0:
findGameWord.SetFBFirstOpen(1) # 开启副本
@@ -180,7 +221,7 @@
#resultLineID = tagMapLineID
resultLineID = 0
- return ['%s' % packCMDList, '%d' % resultLineID]
+ return ['%s' % packCMDList, '%d' % resultLineID, notifyMark]
#---------------------------------------------------------------------
@@ -196,22 +237,19 @@
#还原格式 '[]' -> []
funResult = eval(funResult)
- if not funResult or len(funResult) < 2:
+ if not funResult or len(funResult) < 3:
GameWorld.Log("GY_Query_EnterFB DoResult() return []")
return
tagMapInfo = eval(funResult[0])
backFBID = int(funResult[1]) # 返回的切图线路id(0~N)
-
+ notifyMark = funResult[2]
mapID = tagMapInfo[0] # 请求的切图id
funcLineID = tagMapInfo[1] # 请求的场次线路id(0~6)
GameWorld.Log("GY_Query_EnterFB DoResult() mapID=%s,funcLineID=%s,backFBID=%s" % (mapID, funcLineID, backFBID), curPlayer.GetPlayerID())
if backFBID == -1: # 未找到可进入的分线,则返回,提示人数已满
- if mapID == ChConfig.Def_FBMapID_SealDemon:
- PlayerControl.NotifyCode(curPlayer, "DemonJar_Text4")
- else:
- PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_500807")
+ PlayerControl.NotifyCode(curPlayer, notifyMark)
return
if curPlayer.GetMapID() == mapID:
--
Gitblit v1.8.0