hxp
2019-01-07 d8cf06e323dca770512529f741a667278c0c8786
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py
@@ -19,7 +19,10 @@
import PlayerControl
import CrossRealmPlayer
import IPY_GameWorld
import ChPlayer
import ChPyNetSendPack
import NetPackCommon
import IpyGameDataPY
import ChConfig
#------------------------------------------------------------------------------ 
@@ -44,29 +47,66 @@
#  @remarks 函数详细说明.
def DoResult(curPlayer, callFunName, funResult, tick):
    resultInfo = eval(funResult)
    actionType = resultInfo[0]
    mapPosInfo = resultInfo[1:]
    if not curPlayer:
    GameWorld.Log("GY_Query_CrossRealmReg DoResult %s" % funResult, curPlayer.GetPlayerID())
    if not resultInfo:
        return
    playerID = curPlayer.GetPlayerID()
    GameWorld.Log("GY_Query_CrossRealmReg DoResult %s" % funResult, playerID)
    registerType, mapID, dataMapID, copyMapID, posX, posY = resultInfo
    RegisterEnterCrossServer(curPlayer, registerType, mapID, dataMapID, copyMapID, posX, posY)
    return
def RegisterEnterCrossServer(curPlayer, registerType, mapID=0, dataMapID=0, copyMapID=0, posX=0, posY=0):
    playerID = curPlayer.GetPlayerID()
    if GameWorld.IsCrossServer():
        GameWorld.Log("    跨服服务器不允许上传报名数据!", playerID)
        return
    
    if not mapPosInfo:
    playerRegisterType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CrossRegisterType)
    if playerRegisterType in ChConfig.RegisterEnter_CrossServerMapIDList:
        GameWorld.ErrLog("跨服已经在上传数据,不重复提交!playerRegisterType=%s,registerType=%s" % (playerRegisterType, registerType), curPlayer.GetPlayerID())
        return
    if not mapID:
        if registerType in ChConfig.RegisterEnter_CrossServerMapIDList:
            registerTableName = "CrossPenglaiZone"
        else:
            return
        RegisterMapInfo = GetCurServerGroupIDRegisterMapInfo(registerTableName)
        if not RegisterMapInfo:
            GameWorld.ErrLog("找不到该服务器对应跨服分区: registerType=%s,registerTableName=%s" % (registerType, registerTableName))
            return
        mapID, copyMapID, posX, posY = RegisterMapInfo
        dataMapID = mapID
    if not mapID:
        return
    
    #跨服前更新自己所属服务器组ID
    PlayerControl.UpdPlayerServerGroupID(curPlayer)
    
    mapID, dataMapID, copyMapID, posX, posY = mapPosInfo
    if registerType in ChConfig.RegisterEnter_CrossServerMapIDList:
        prepareEnterCrossServer = ChPyNetSendPack.tagMCPrepareEnterCrossServer()
        prepareEnterCrossServer.DataMapID = registerType
        NetPackCommon.SendFakePack(curPlayer, prepareEnterCrossServer)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_CrossRegisterType, registerType)
    #curPlayer.SendMergeRegisterPlayer(mapID, dataMapID, copyMapID, posX, posY)
    curPlayer.SendMergeRegisterPlayerAfterChange(CrossRealmPlayer.GetCrossPlayerName(curPlayer), mapID, dataMapID, copyMapID, posX, posY)
    GameWorld.Log("    发送跨服玩家数据注册: actionType=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s,GetVsRoomId=%s"
                  % (actionType, mapID, dataMapID, copyMapID, posX, posY, curPlayer.GetVsRoomId()), playerID)
    GameWorld.Log("    发送跨服玩家数据注册: registerType=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s,GetVsRoomId=%s"
                  % (registerType, mapID, dataMapID, copyMapID, posX, posY, curPlayer.GetVsRoomId()), playerID)
    return
def GetCurServerGroupIDRegisterMapInfo(tableName):
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    if not hasattr(ipyDataMgr, "Get%sCount" % tableName):
        return
    serverGroupID = GameWorld.GetServerGroupID()
    for i in xrange(getattr(ipyDataMgr, "Get%sCount" % tableName)()):
        ipyData = getattr(ipyDataMgr, "Get%sByIndex" % tableName)(i)
        serverGroupIDList = ipyData.GetServerGroupIDList()
        for serverGroupIDInfo in serverGroupIDList:
            if (isinstance(serverGroupIDInfo, tuple) and serverGroupIDInfo[0] <= serverGroupID <= serverGroupIDInfo[1]) \
                or (isinstance(serverGroupIDInfo, int) and serverGroupIDInfo == serverGroupID):
                return ipyData.GetMapID(), ipyData.GetCopyMapID(), ipyData.GetPosX(), ipyData.GetPosY()
    return
## 跨服赛报名结果(上传数据)
@@ -76,19 +116,28 @@
def GameServer_MergeRegisterResult(index, tick):
    registerResult = IPY_GameWorld.IPY_GMMergeRegisterPlayerResult()
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    registerType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CrossRegisterType)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_CrossRegisterType, 0)
    playerID = curPlayer.GetPlayerID()
    result = registerResult.GetResult()
    GameWorld.Log("GameServer_MergeRegisterResult registerType=%s,result=%s" % (registerType, result), playerID)
    if not result:
        errorMsg = registerResult.GetErrorMsg()
        GameWorld.Log("CrossRealmReg result Error:%s" % errorMsg, playerID)
        NetPackCommon.SendFakePack(curPlayer, ChPyNetSendPack.tagMCEnterCrossServerError())
        return
    if registerType in ChConfig.RegisterEnter_CrossServerMapIDList:
        CrossRealmPlayer.DoEnterCrossRealm(curPlayer)
        PlayerControl.SetCrossRealmState(curPlayer, 1)
        NetPackCommon.SendFakePack(curPlayer, ChPyNetSendPack.tagMCStartEnterCrossServer())
        return
    
    #newAccount = registerResult.GetAccount()
    #newName = registerResult.GetPwd()
    
    msgList = str([])
    msgList = str([registerType])
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossRealmReg", msgList, len(msgList))    
    GameWorld.Log("GameServer_MergeRegisterResult msgList=%s" % msgList, playerID)
    return