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