xdh
2019-07-05 ff49cc19f9916949c7eb9762c34f0c2c936917b0
7858 【后端】【主干】上古战场玩家分配逻辑(人满后再随机选)
1个文件已修改
19 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py
@@ -71,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)
@@ -84,19 +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:
            #若是进入过副本则随机一个,否则选人数最少的一个
            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) # 开启副本