| | |
| | | import ChPyNetSendPack
|
| | | import DataRecordPack
|
| | | import PlayerControl
|
| | | import PlayerFriend
|
| | | import ShareDefine
|
| | | import PyGameData
|
| | | import GameWorld
|
| | |
| | | DR_Team(eventName, teamID, drDict)
|
| | | return
|
| | |
|
| | | def SyncMapServerPlayerNoTeam(curPlayer):
|
| | | ## 同步地图玩家没有队伍,切图时调用
|
| | | teamInfo = ChGameToMapPyPack.tagGMTeamInfo()
|
| | | teamInfo.PlayerID = curPlayer.GetPlayerID()
|
| | | teamInfo.TeamID = 0
|
| | | teamInfo.TeamLV = 0
|
| | | teamInfo.MemInfoList = []
|
| | | teamInfo.MemCnt = len(teamInfo.MemInfoList)
|
| | | NetPackCommon.SendPyPackToMapServer(curPlayer.GetLineNO(), curPlayer.GetRealMapID(), teamInfo)
|
| | | return
|
| | |
|
| | | def SyncMapServerPlayerLeaveTeam(curPlayer, teamID):
|
| | | ## 同步地图玩家离开队伍
|
| | | leavePack = ChGameToMapPyPack.tagGMPlayerLeaveTeam()
|
| | | leavePack.PlayerID = curPlayer.GetPlayerID()
|
| | | leavePack.CopyMapID = curPlayer.GetFBID()
|
| | | leavePack.TeamID = teamID
|
| | | NetPackCommon.SendPyPackToMapServer(curPlayer.GetLineNO(), curPlayer.GetRealMapID(), leavePack)
|
| | | return
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | #// B9 03 修改队伍信息 #tagCGChangeTeamInfo
|
| | |
| | | #GameServer清除玩家队伍ID为空
|
| | | delPlayer.SetTeam(None)
|
| | | #通知MapServerd队伍变更, 在mapserver构建目前队伍
|
| | | delPlayer.MapServer_Sync_Team(0)
|
| | | #delPlayer.MapServer_Sync_Team(0)
|
| | | SyncMapServerPlayerLeaveTeam(delPlayer, curTeam.GetTeamID())
|
| | | #玩家离开副本
|
| | | delPlayer.MapServer_LeaveFB()
|
| | | if IsTeamMatchingPlayer(curTeam.GetTeamID()):
|
| | |
| | | #GameServer玩家队伍为空
|
| | | curPlayer.SetTeam(None)
|
| | | #通知MapServerd队伍变更
|
| | | curPlayer.MapServer_Sync_Team(0)
|
| | | #curPlayer.MapServer_Sync_Team(0)
|
| | | SyncMapServerPlayerLeaveTeam(curPlayer, curTeam.GetTeamID())
|
| | | __DoLogic_PlayerTeamChange(curPlayer)
|
| | |
|
| | | if curMember.GetTeamLV() != IPY_GameServer.tmlLeader:
|
| | |
| | | if curTeam == None:
|
| | | return
|
| | |
|
| | | if curTeam.GetTeamPlayerCount() <= 1:
|
| | | #补救完毕, 队伍中只有一个人, 删除这个队伍
|
| | | GameWorld.Log('玩家(%s)仍然有队伍(%s), 补救完毕, 队伍中只有一个人, 删除这个队伍' % (playerID, curTeamID))
|
| | | DeleteTeam(curTeam, tick)
|
| | | return
|
| | | #允许存在单人队伍,暂屏蔽该逻辑
|
| | | # if curTeam.GetTeamPlayerCount() <= 1:
|
| | | # #补救完毕, 队伍中只有一个人, 删除这个队伍
|
| | | # GameWorld.Log('玩家(%s)仍然有队伍(%s), 补救完毕, 队伍中只有一个人, 删除这个队伍' % (playerID, curTeamID))
|
| | | # DeleteTeam(curTeam, tick)
|
| | | # return
|
| | |
|
| | | GameWorld.Log('玩家(%s)仍然有队伍(%s), 补救' % (playerID, curTeamID))
|
| | | curPlayer.SetTeamID(curTeamID)
|
| | |
| | | curPlayer.SetTeam(None)
|
| | | curPlayer.Sync_LeaveTeam(1)
|
| | | #通知MapServer, 玩家已经队伍了, 刷新玩家的TeamID
|
| | | curPlayer.MapServer_Sync_Team(0)
|
| | | #curPlayer.MapServer_Sync_Team(0)
|
| | | SyncMapServerPlayerLeaveTeam(curPlayer, curTeamID)
|
| | | gameMap = GameWorld.GetMap(curPlayer.GetMapID())
|
| | | if gameMap and gameMap.GetMapFBType() == ChConfig.fbtTeam:
|
| | | curPlayer.MapServer_LeaveFB()
|
| | |
| | |
|
| | | GameWorld.DebugLog("Team.OnPlayerReadMapOK", curPlayer.GetPlayerID())
|
| | |
|
| | | # 登录逻辑已处理,这里不重复处理
|
| | | #===============================================================================================
|
| | | # if curPlayer.GetTeamID() == 0:
|
| | | # return
|
| | | # |
| | | # curTeam = GameWorld.GetTeamManager().FindTeam(curPlayer.GetTeamID())
|
| | | # if curTeam == None:
|
| | | # #通知MapServer, 玩家已经队伍了, 刷新玩家的TeamID
|
| | | # curPlayer.MapServer_Sync_Team(0)
|
| | | # return
|
| | | # |
| | | # SyncMapServerTeamInfo(curTeam)
|
| | | # #curTeamMember = curTeam.GetMemberByID(curPlayer.GetPlayerID())
|
| | | # ##通知MapServerd队伍变更
|
| | | # #curPlayer.MapServer_Sync_Team(curTeamMember.GetTeamLV())
|
| | | #===============================================================================================
|
| | | if curPlayer.GetTeamID() == 0:
|
| | | return
|
| | | |
| | | curTeam = GameWorld.GetTeamManager().FindTeam(curPlayer.GetTeamID())
|
| | | if curTeam == None:
|
| | | #通知MapServer, 玩家已经队伍了, 刷新玩家的TeamID
|
| | | #curPlayer.MapServer_Sync_Team(0)
|
| | | return
|
| | | |
| | | mapID = curPlayer.GetMapID()
|
| | | loginMapID = curPlayer.GetDictByKey(ChConfig.Def_PDict_LoginMapID)
|
| | | if loginMapID and mapID != loginMapID:
|
| | | GameWorld.Log("Team.OnPlayerReadMapOK 地图与登录时地图不一致,重新同步一次!loginMapID=%s,mapID=%s" |
| | | % (loginMapID, mapID), curPlayer.GetPlayerID())
|
| | | Sync_TeamMemberInfo(curTeam)
|
| | | SyncMapServerTeamInfo(curTeam, "ReadMapOK", {"playerID":curPlayer.GetPlayerID()})
|
| | | |
| | | #curTeamMember = curTeam.GetMemberByID(curPlayer.GetPlayerID())
|
| | | ##通知MapServerd队伍变更
|
| | | #curPlayer.MapServer_Sync_Team(curTeamMember.GetTeamLV())
|
| | | return True
|
| | | #---------------------------------------------------------------------
|
| | | ##组队玩家切换地图
|
| | |
| | | # 玩家进入组队副本,则停止匹配
|
| | | if gameMap.GetMapFBType() == ChConfig.fbtTeam:
|
| | | DelPlayerIDFromMatchingList(curPlayer)
|
| | | |
| | | SyncMapServerPlayerNoTeam(curPlayer) # 没有队伍的时候切图也通知地图
|
| | | |
| | | return
|
| | |
|
| | | def PlayerTeamMemberRefresh(curPlayer, refreshType, value, tick):
|
| | |
| | | askMapID, askMapEx, memStateDict = PyGameData.g_prepareTeamDict[teamID][:3]
|
| | | enterInfo = GetTeamFBEnterInfo(leader, curTeam, askMapID, askMapEx)
|
| | |
|
| | | leaderID = leader.GetPlayerID()
|
| | | friendList = []
|
| | | memFamilyIDDict = {}
|
| | | memNameDict = {}
|
| | | #队长与队员的关系
|
| | | for index in xrange(curTeam.GetMemberCount()):
|
| | | memPlayer = curTeam.GetMemberPlayer(index)
|
| | | if not memPlayer or not memPlayer.GetPlayerID():
|
| | | continue
|
| | | memPlayerID = memPlayer.GetPlayerID()
|
| | | if memPlayerID not in memStateDict:
|
| | | continue
|
| | | memFamilyIDDict[memPlayerID] = memPlayer.GetFamilyID() # 存储各队员的家族ID
|
| | | memNameDict[memPlayerID] = memPlayer.GetName()
|
| | | if leaderID != memPlayerID and PlayerFriend.IsFriend(leaderID, memPlayerID):
|
| | | friendList.append([leaderID, memPlayerID])
|
| | | |
| | | #踢出所有在此类副本,但不同线路的玩家
|
| | | for index in xrange(curTeam.GetMemberCount()):
|
| | | memPlayer = curTeam.GetMemberPlayer(index)
|
| | |
| | | resultName = str([askMapID, askMapEx] + enterInfo)
|
| | | memPlayer.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamAsk", resultName, len(resultName))
|
| | | GameWorld.Log("队长成功进入组队副本, 队员开始进入副本: teamID=%s,memPlayerID=%s" % (teamID, memPlayerID), leader.GetPlayerID())
|
| | | |
| | | for preMemPlayerID in memStateDict.keys():
|
| | | if memPlayerID == preMemPlayerID:
|
| | | continue
|
| | | if PlayerFriend.IsFriend(memPlayerID, preMemPlayerID) and [memPlayerID, preMemPlayerID] not in friendList:
|
| | | friendList.append([memPlayerID, preMemPlayerID])
|
| | | |
| | | PyGameData.g_prepareTeamDict.pop(teamID)
|
| | | |
| | | # 同步进入组队副本的队员关系到目标地图
|
| | | relationInfo = str([teamID, friendList, memFamilyIDDict, memNameDict])
|
| | | leader.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamRelation", relationInfo, len(relationInfo))
|
| | | return
|
| | |
|
| | | def __CheckTeamFBPlayerExist(curTeam):
|