| #!/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: Ò»°ãÊÇdataMapID  | 
|     '''  | 
|     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_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  | 
|       | 
|       | 
|       |