#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package Player.RemoteQuery.GY_Query_CrossRealmReg  
 | 
#  
 | 
# @todo:¿ç·þ»î¶¯Íæ¼Ò×¢²á  
 | 
# @author hxp  
 | 
# @date 2018-12-21  
 | 
# @version 1.0  
 | 
#  
 | 
# ÏêϸÃèÊö: ¿ç·þ»î¶¯Íæ¼Ò×¢²á  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#"""Version = 2018-12-21 18:00"""  
 | 
#-------------------------------------------------------------------------------  
 | 
  
 | 
import GameWorld  
 | 
import PlayerControl  
 | 
import CrossRealmPlayer  
 | 
import IPY_GameWorld  
 | 
import ChPyNetSendPack  
 | 
import CrossPlayerData  
 | 
import NetPackCommon  
 | 
import ChConfig  
 | 
import FBCommon  
 | 
import FBLogic  
 | 
  
 | 
  
 | 
#------------------------------------------------------------------------------   
 | 
## ¿ç·þÈü±¨Ãûµ÷ÓÃ½Ó¿Ú  
 | 
#  @param query_Type ÇëÇóÀàÐÍ  
 | 
#  @param query_ID ÇëÇóµÄÍæ¼ÒID  
 | 
#  @param packCMDList ·¢°üÃüÁî  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return "True" or "False" or ""  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def DoLogic(query_Type, query_ID, packCMDList, tick):   
 | 
    return  
 | 
  
 | 
  
 | 
#------------------------------------------------------------------------------   
 | 
## Ö´Ðнá¹û  
 | 
#  @param curPlayer ·¢³öÇëÇóµÄÍæ¼Ò  
 | 
#  @param callFunName ¹¦ÄÜÃû³Æ  
 | 
#  @param funResult ²éѯµÄ½á¹û  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def DoResult(curPlayer, callFunName, funResult, tick):  
 | 
    resultInfo = eval(funResult)  
 | 
    GameWorld.Log("GY_Query_CrossRealmReg DoResult %s" % funResult, curPlayer.GetPlayerID())  
 | 
    if not resultInfo:  
 | 
        return  
 | 
    registerMap, mapID, dataMapID, copyMapID, posX, posY, lineID = resultInfo  
 | 
    RegisterEnterCrossServer(curPlayer, registerMap, mapID, dataMapID, copyMapID, posX, posY, lineID)  
 | 
    return  
 | 
  
 | 
def RegisterEnterCrossServer(curPlayer, registerMap, mapID=0, dataMapID=0, copyMapID=0, posX=0, posY=0, lineID=0):  
 | 
    '''  
 | 
    @param registerMap: Ò»°ãÊǹ¦ÄܵØÍ¼ID dataMapID  
 | 
    @param mapID: ÕæÊµ³¡¾°µØÍ¼ID  
 | 
    @param dataMapID: ÕæÊµ³¡¾°µØÍ¼ID¶ÔÓ¦³¡¾°Êý¾ÝµØÍ¼ID  
 | 
    '''  
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    if GameWorld.IsCrossServer():  
 | 
        GameWorld.Log("    ¿ç·þ·þÎñÆ÷²»ÔÊÐíÉÏ´«±¨ÃûÊý¾Ý!", playerID)  
 | 
        return  
 | 
      
 | 
    playerRegisterMap = curPlayer.NomalDictGetProperty(ChConfig.Def_PlayerKey_CrossRegisterMap)  
 | 
    if playerRegisterMap in ChConfig.RegisterEnter_CrossServerMapIDList:  
 | 
        GameWorld.ErrLog("¿ç·þÒѾÔÚÉÏ´«Êý¾Ý£¬²»Öظ´Ìá½»!playerRegisterMap=%s,registerMap=%s" % (playerRegisterMap, registerMap), curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    #¿ç·þǰ¸üÐÂ×Ô¼ºËùÊô·þÎñÆ÷×éID  
 | 
    PlayerControl.UpdPlayerServerGroupID(curPlayer)  
 | 
    serverGroupID = PlayerControl.GetPlayerServerGroupID(curPlayer)  
 | 
    zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(registerMap, serverGroupID)  
 | 
    if not zoneIpyData:  
 | 
        return  
 | 
    zoneID = zoneIpyData.GetZoneID()  
 | 
      
 | 
    if not mapID:  
 | 
        zoneIpyData = CrossRealmPlayer.GetServerCrossZoneMapIpyData(zoneID, registerMap)  
 | 
        if not zoneIpyData:  
 | 
            GameWorld.ErrLog("ÕÒ²»µ½¸Ã·þÎñÆ÷¶ÔÓ¦¿ç·þ·ÖÇø: registerMap=%s" % (registerMap))  
 | 
            return  
 | 
        mapID, dataMapID, copyMapID, posX, posY = zoneIpyData.GetMapID(), zoneIpyData.GetDataMapID(), zoneIpyData.GetCopyMapID(), zoneIpyData.GetPosX(), zoneIpyData.GetPosY()  
 | 
      
 | 
    if not posX or not posY:  
 | 
        fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID)  
 | 
        if fbLineIpyData:  
 | 
            tick = GameWorld.GetGameWorld().GetTick()  
 | 
            ipyEnterPosInfo = FBCommon.GetFBLineEnterPosInfo(mapID, lineID, fbLineIpyData)  
 | 
            retPos = FBLogic.OnGetFBEnterPos(curPlayer, mapID, lineID, ipyEnterPosInfo, tick)  
 | 
            if not retPos:  
 | 
                GameWorld.ErrLog("δÕÒµ½½øÈ븱±¾×ø±ê£¡mapID=%s,lineID=%s" % (mapID, lineID))  
 | 
                return  
 | 
            posX, posY = retPos  
 | 
              
 | 
    if not mapID or not posX or not posY:  
 | 
        return  
 | 
      
 | 
    if not FBLogic.OnRegEnterCrossFB(curPlayer, mapID, lineID):  
 | 
        GameWorld.ErrLog("OnRegEnterCrossFB ½øÈë¿ç·þ¸±±¾×¢²áʧ°Ü£¬½øÈëÌõ¼þ²»×㣡ÎÞ·¨×¢²á! mapID=%s,lineID=%s" % (mapID, lineID), playerID)  
 | 
        return  
 | 
      
 | 
    if registerMap in ChConfig.RegisterEnter_CrossServerMapIDList:  
 | 
        prepareEnterCrossServer = ChPyNetSendPack.tagMCPrepareEnterCrossServer()  
 | 
        prepareEnterCrossServer.DataMapID = registerMap  
 | 
        NetPackCommon.SendFakePack(curPlayer, prepareEnterCrossServer)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PlayerKey_CrossRegisterMap, registerMap) # µÇ¼ÇÖмǼ£¬·µ»ØºóÇå¿Õ  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ReqCrossFBMapID, registerMap) # ´¿Ìæ»»¼Ç¼£¬²»Çå¿Õ  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ReqCrossFBFuncLine, lineID)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ReqCrossFBZoneID, zoneID)  
 | 
    CrossPlayerData.OnPlayerCrossReg(curPlayer)  
 | 
    #curPlayer.SendMergeRegisterPlayer(mapID, dataMapID, copyMapID, posX, posY)  
 | 
    curPlayer.SendMergeRegisterPlayerAfterChange(CrossRealmPlayer.GetCrossPlayerName(curPlayer), mapID, dataMapID, copyMapID, posX, posY)  
 | 
    GameWorld.Log("    ·¢ËÍ¿ç·þÍæ¼ÒÊý¾Ý×¢²á: registerMap=%s,lineID=%s,zoneID=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s,GetVsRoomId=%s"   
 | 
                  % (registerMap, lineID, zoneID, mapID, dataMapID, copyMapID, posX, posY, curPlayer.GetVsRoomId()), playerID)  
 | 
    return True  
 | 
  
 | 
## ¿ç·þÈü±¨Ãû½á¹û£¨ÉÏ´«Êý¾Ý£©  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
def GameServer_MergeRegisterResult(index, tick):  
 | 
    registerResult = IPY_GameWorld.IPY_GMMergeRegisterPlayerResult()  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    registerMap = curPlayer.NomalDictGetProperty(ChConfig.Def_PlayerKey_CrossRegisterMap)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PlayerKey_CrossRegisterMap, 0)  
 | 
    curPlayer.SetDict(ChConfig.Def_PlayerKey_RequestEnterCrossServerTick, 0)  
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    result = registerResult.GetResult()  
 | 
    GameWorld.Log("GameServer_MergeRegisterResult registerMap=%s,result=%s" % (registerMap, result), playerID)  
 | 
    if not result:  
 | 
        errorMsg = registerResult.GetErrorMsg()  
 | 
        GameWorld.Log("CrossRealmReg result Error:%s" % errorMsg, playerID)  
 | 
        NetPackCommon.SendFakePack(curPlayer, ChPyNetSendPack.tagMCEnterCrossServerError())  
 | 
        return  
 | 
      
 | 
    if registerMap in ChConfig.RegisterEnter_CrossServerMapIDList:  
 | 
        CrossRealmPlayer.DoEnterCrossRealm(curPlayer)  
 | 
        PlayerControl.SetCrossMapID(curPlayer, registerMap)  
 | 
        NetPackCommon.SendFakePack(curPlayer, ChPyNetSendPack.tagMCStartEnterCrossServer())  
 | 
        return  
 | 
      
 | 
    #newAccount = registerResult.GetAccount()  
 | 
    #newName = registerResult.GetPwd()  
 | 
      
 | 
    msgList = str([registerMap])   
 | 
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossRealmReg", msgList, len(msgList))      
 | 
    return  
 | 
      
 | 
      
 | 
      
 |