| | |
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameWorld
|
| | | import PlayerControl
|
| | | import CrossRealmPlayer
|
| | | import IPY_GameWorld
|
| | | import ChPlayer
|
| | | import ChPyNetSendPack
|
| | | import CrossPlayerData
|
| | | import NetPackCommon
|
| | | import ChConfig
|
| | | import FBCommon
|
| | | import FBLogic
|
| | |
|
| | |
|
| | | #------------------------------------------------------------------------------
|
| | |
| | | # @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)
|
| | | registerMap, mapID, dataMapID, copyMapID, posX, posY, lineID = resultInfo
|
| | | RegisterEnterCrossServer(curPlayer, registerMap, mapID, dataMapID, copyMapID, posX, posY, lineID)
|
| | | return
|
| | |
|
| | | if GameWorld.IsMergeServer():
|
| | | 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
|
| | |
|
| | | if not mapPosInfo:
|
| | | 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
|
| | | ChPlayer.UpdatePlayerServerGroupID(curPlayer)
|
| | | PlayerControl.UpdPlayerServerGroupID(curPlayer)
|
| | | serverGroupID = PlayerControl.GetPlayerServerGroupID(curPlayer)
|
| | | zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(registerMap, serverGroupID)
|
| | | if not zoneIpyData:
|
| | | return
|
| | | zoneID = zoneIpyData.GetZoneID()
|
| | |
|
| | | mapID, dataMapID, copyMapID, posX, posY = mapPosInfo
|
| | | 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(" 发送跨服玩家数据注册: actionType=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s,GetVsRoomId=%s" |
| | | % (actionType, mapID, dataMapID, copyMapID, posX, posY, curPlayer.GetVsRoomId()), playerID)
|
| | | return
|
| | | 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 玩家索引
|
| | |
| | | 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([]) |
| | | msgList = str([registerMap]) |
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossRealmReg", msgList, len(msgList))
|
| | | GameWorld.Log("GameServer_MergeRegisterResult msgList=%s" % msgList, playerID)
|
| | | return
|
| | |
|
| | |
|