xdh
2019-06-05 4fe82776f183c8b42a48cccf24e09ca324a55078
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py
@@ -24,6 +24,7 @@
#导入
import FBLogic
import GameLogic_SealDemon
import GameLogic_ZhuXianBoss
import IPY_GameWorld
import PlayerControl
import GameWorld
@@ -57,7 +58,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开始
@@ -65,25 +66,37 @@
        resultLineID = -1  # 结果lineID
        
        gameWorldManager = GameWorld.GetGameWorld()
        maxPlayerCount = FBLogic.GetFBLineMaxPlayerCount(tagMapID)
        maxPlayerCount = FBLogic.GetFBLineMaxPlayerCount(tagMapID, tagMapLineID)
        
        GameWorld.Log("    DoLogic()  tagMapID=%s,maxPlayerCount=%s" % (tagMapID, maxPlayerCount))
        for index in range(gameWorldManager.GetGameWorldCount()):
        GameWorld.Log("    DoLogic()  tagMapID=%s,tagMapLineID=%s,maxPlayerCount=%s" % (tagMapID, tagMapLineID,maxPlayerCount))
        firstEmptyGameWorld = None
        sameLineGameWorldList = []
        for index in xrange(gameWorldManager.GetGameWorldCount()):
            gameWorld = IPY_GameWorld.IPY_GameWorld(index)
            playerManager = gameWorld.GetMapCopyPlayerManagerByFbIndex(index)
            propertyID = gameWorld.GetPropertyID()
            GameWorld.Log("    DoLogic()  check gameworld index=%s,propertyID=%s,playerCount=%s" \
                          % (index, propertyID, playerManager.GetPlayerCount()))
            curPlayerCnt = playerManager.GetPlayerCount()
#            GameWorld.Log("    DoLogic()  check gameworld index=%s,propertyID=%s,playerCount=%s" \
#                          % (index, propertyID, curPlayerCnt))
            if propertyID == 0 and not firstEmptyGameWorld:
                firstEmptyGameWorld = gameWorld
            # 如果不是同一线路属性的,则跳过
            # 如果当前人数超过额定人数,则跳过
            if propertyID == 0 or (propertyID == tagMapPropertyID \
                                   and playerManager.GetPlayerCount() < maxPlayerCount):
                gameWorld.SetPropertyID(tagMapPropertyID)
                if propertyID == 0:
                    gameWorld.SetFBFirstOpen(1) # 开启副本
                resultLineID = gameWorld.GetLineID()
                GameWorld.Log("    DoLogic()  check ok!resultLineID=%s" % (resultLineID))
                break
            if propertyID == tagMapPropertyID and curPlayerCnt < maxPlayerCount:
                sameLineGameWorldList.append([gameWorld, curPlayerCnt])
        findGameWorld = None
        if sameLineGameWorldList:
            sameLineGameWorldList.sort(key=lambda asd:asd[1])
            findGameWorld = sameLineGameWorldList[0][0]
        elif firstEmptyGameWorld:
            findGameWorld = firstEmptyGameWorld
        if findGameWorld:
            if findGameWorld.GetPropertyID() == 0:
                findGameWorld.SetFBFirstOpen(1) # 开启副本
            findGameWorld.SetPropertyID(tagMapPropertyID)
            resultLineID = findGameWorld.GetLineID()
            GameWorld.Log("    DoLogic()  check ok!resultLineID=%s" % (resultLineID))
            
#===================================================================================================
#    # 战盟家园
@@ -132,15 +145,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()
        maxPlayerCount = FBLogic.GetFBLineMaxPlayerCount(tagMapID)
        GameWorld.Log("    DoLogic()  tagMapID=%s,maxPlayerCount=%s" % (tagMapID, maxPlayerCount))
        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)
@@ -153,13 +165,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) < 15:
                        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) # 开启副本
@@ -170,7 +201,7 @@
        #resultLineID = tagMapLineID
        resultLineID = 0
        
    return ['%s' % packCMDList, '%d' % resultLineID]
    return ['%s' % packCMDList, '%d' % resultLineID, notifyMark]
#---------------------------------------------------------------------
@@ -186,22 +217,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: