#!/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