| | |
| | | import IPY_GameServer
|
| | | import ChGameToMapPyPack
|
| | | import ChPyNetSendPack
|
| | | import DataRecordPack
|
| | | import PlayerControl
|
| | | import PlayerFriend
|
| | | import ShareDefine
|
| | | import PyGameData
|
| | | import GameWorld
|
| | |
| | | #设置当前玩家为队长
|
| | | curNewTeamMenber = curNewTeam.GetMemberByID(curPlayerID)
|
| | | if curNewTeamMenber == None:
|
| | | GameWorld.ErrLog("设置当前创建队伍玩家为队长, 找不到玩家!", curPlayerID)
|
| | | GameWorld.ErrLog("设置当前创建队伍玩家为队长, 找不到玩家!teamID=%s" % teamID, curPlayerID)
|
| | | DR_Team("CreateError", teamID, {"Leader":curPlayerID, "tagMapID":tagMapID, "tagMapEx":tagMapEx, "reqMinLV":reqMinLV, "reqMaxLV":reqMaxLV})
|
| | | return
|
| | |
|
| | | __SetTeamLV(curNewTeamMenber, IPY_GameServer.tmlLeader, False)
|
| | | if isSync:
|
| | | Sync_TeamMemberInfo(curNewTeam)
|
| | | SyncMapServerTeamInfo(curNewTeam)
|
| | | SyncMapServerTeamInfo(curNewTeam, "Create", {"Leader":curPlayerID, "tagMapID":tagMapID, "tagMapEx":tagMapEx, "reqMinLV":reqMinLV, "reqMaxLV":reqMaxLV})
|
| | |
|
| | | DelPlayerIDFromMatchingList(curPlayer)
|
| | | return curNewTeam
|
| | |
| | | #邀请组队的时候,双方都有队伍不处理
|
| | | if curPlayerTeam != None and tagPlayerTeam != None:
|
| | | #InviteEnterLost02 <n color="255,255,0">`o很抱歉,目标玩家已在他人队伍中,邀请入队失败!</n> 25 - -
|
| | | PlayerControl.NotifyCode(curPlayer, "InviteEnterLost02")
|
| | | #PlayerControl.NotifyCode(curPlayer, "InviteEnterLost02")
|
| | | InvitePlayerJoinTeamReq(curPlayer, tagPlayer, curPlayerTeam, tick)
|
| | | return
|
| | |
|
| | | if tagPlayerTeam == None:
|
| | |
| | | GameWorld.DebugLog("邀请组队, tagMapID=%s,tagMapEx=%s,tagPlayerID=%s" % (tagMapID, tagMapEx, tagPlayerID), curPlayerID)
|
| | |
|
| | | isTjg = PlayerControl.GetIsTJG(tagPlayer)
|
| | | if isTjg or not IsTeamInvateNeedCheck(tagPlayer):
|
| | | if (isTjg or not IsTeamInvateNeedCheck(tagPlayer)) and not tagPlayer.GetTeamID():
|
| | | GameWorld.DebugLog("被邀请的玩家处于脱机状态或不需要审核的,直接入队! tagPlayerID=%s,isTjg=%s"
|
| | | % (tagPlayerID, isTjg), curPlayerID)
|
| | | DoPlayerJoinTeam(tagPlayer, curPlayer, curPlayerTeam, tick, curPlayer)
|
| | |
| | | return
|
| | |
|
| | | #双方的队伍
|
| | | curPlayerTeam = curPlayer.GetTeam() |
| | | #curPlayerTeam = curPlayer.GetTeam() |
| | | tagPlayerTeam = tagPlayer.GetTeam()
|
| | |
|
| | | if tagPlayerTeam == None:
|
| | |
| | | PlayerControl.NotifyCode(curPlayer, "TeamNoExist")
|
| | | return
|
| | |
|
| | | if curPlayerTeam != None:
|
| | | #InviteEnterLost02 组队失败,双方都有队伍!
|
| | | PlayerControl.NotifyCode(curPlayer, "InviteEnterLost02")
|
| | | return
|
| | | #===============================================================================================
|
| | | # if curPlayerTeam != None:
|
| | | # #InviteEnterLost02 组队失败,双方都有队伍!
|
| | | # PlayerControl.NotifyCode(curPlayer, "InviteEnterLost02")
|
| | | # return
|
| | | #===============================================================================================
|
| | |
|
| | | #组队类型
|
| | | #teamType = sendPack.GetTeamType()
|
| | |
| | |
|
| | | #玩家本身有队伍时
|
| | | if joinPlayer.GetTeam():
|
| | | if notifyPlayer:
|
| | | # AcceptTeamLost 该玩家已有队伍
|
| | | PlayerControl.NotifyCode(notifyPlayer, "AcceptTeamLost")
|
| | | return
|
| | | |
| | | #===========================================================================================
|
| | | # if notifyPlayer:
|
| | | # # AcceptTeamLost 该玩家已有队伍
|
| | | # PlayerControl.NotifyCode(notifyPlayer, "AcceptTeamLost")
|
| | | # return
|
| | | #===========================================================================================
|
| | | #先退队
|
| | | DoPlayerLeaveTeam(joinPlayer, joinPlayer.GetTeam(), tick)
|
| | | |
| | | teamID = tagTeam.GetTeamID()
|
| | | GameWorld.Log("%s(%d)加入队伍 %s(%d), teamID=%s!" % (joinPlayer.GetName(), joinPlayer.GetPlayerID(),
|
| | | teamPlayer.GetName(), teamPlayer.GetPlayerID(), teamID))
|
| | |
| | | #通知MapServerd队伍变更
|
| | | #teamPlayer.MapServer_Sync_Team(__GetPlayerTeamLV(teamPlayer))
|
| | | #joinPlayer.MapServer_Sync_Team(__GetPlayerTeamLV(joinPlayer))
|
| | | SyncMapServerTeamInfo(tagTeam)
|
| | | SyncMapServerTeamInfo(tagTeam, "Join", {"teamPlayer":teamPlayer.GetPlayerID(), "joinPlayer":joinPlayer.GetPlayerID()})
|
| | |
|
| | | #֪ͨ
|
| | | #EnterProcession <%S%>加入了队伍! 改为 GeRen_chenxin_543685
|
| | |
| | | teamMember = curTeam.GetMemberByID(curPlayer.GetPlayerID())
|
| | | return teamMember.GetTeamLV()
|
| | |
|
| | | def SyncMapServerTeamInfo(curTeam):
|
| | | def SyncMapServerTeamInfo(curTeam, eventName="", drDict={}):
|
| | | '''同步队伍信息到 MapServer 给所有在线队员
|
| | | @note: 需要全队同步的情况:创建队伍、队员加入、退出、上线、下线、切换地图、VIP等级变更、VIP到期时间更新
|
| | | '''
|
| | | if not curTeam:
|
| | | DR_Team("%s_Error" % eventName, 0, drDict)
|
| | | return
|
| | | teamID = curTeam.GetTeamID()
|
| | | syncPlayerList = []
|
| | | memInfoList = []
|
| | | memList = []
|
| | | for index in xrange(curTeam.GetMemberCount()):
|
| | | memPlayer = curTeam.GetMemberPlayer(index)
|
| | | memberInfo = curTeam.GetMemberInfo(index)
|
| | | if not memPlayer or not memberInfo:
|
| | | if not memberInfo:
|
| | | memList.append(["not memberInfo"])
|
| | | continue
|
| | | if not memPlayer:
|
| | | memList.append(["not memPlayer"])
|
| | | continue
|
| | | memPlayerID = memPlayer.GetPlayerID()
|
| | | if not memPlayerID:
|
| | | memList.append(["not memPlayerID"])
|
| | | continue
|
| | | memInfo = ChGameToMapPyPack.tagGMTeamMemInfo()
|
| | | memInfo.PlayerID = memPlayerID
|
| | |
| | | memInfo.VIPLV = PlayerControl.GetValidVIPLV(memPlayer)
|
| | | memInfoList.append(memInfo)
|
| | | syncPlayerList.append([memPlayer, memberInfo.GetTeamLV()])
|
| | | memList.append([memPlayerID, memPlayer.GetTeamID(), memberInfo.GetTeamLV(), memPlayer.GetMapID(), memPlayer.GetFBID()])
|
| | |
|
| | | for player, teamLV in syncPlayerList:
|
| | | teamInfo = ChGameToMapPyPack.tagGMTeamInfo()
|
| | |
| | | teamInfo.MemCnt = len(teamInfo.MemInfoList)
|
| | | NetPackCommon.SendPyPackToMapServer(player.GetLineNO(), player.GetRealMapID(), teamInfo)
|
| | |
|
| | | drDict.update({"MemList":memList})
|
| | | 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
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | #通知客户端队伍成员属性变更
|
| | | #curTeam.Sync_TeamState()
|
| | | Sync_TeamMemberInfo(curTeam)
|
| | | SyncMapServerTeamInfo(curTeam)
|
| | | SyncMapServerTeamInfo(curTeam, "ChangeMemTeamLV", {"tagPlayerID":tagPlayerID, "memberLV":memberLV})
|
| | | return
|
| | | #---------------------------------------------------------------------
|
| | | #===============================================================================
|
| | |
| | | #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()):
|
| | |
| | | #广播队伍刷新
|
| | | #curTeam.Sync_TeamState()
|
| | | Sync_TeamMemberInfo(curTeam)
|
| | | SyncMapServerTeamInfo(curTeam)
|
| | | SyncMapServerTeamInfo(curTeam, "Leave", {"delPlayerID":delPlayerID, "msg":msg})
|
| | |
|
| | | #无人在线
|
| | | if curTeam.GetTeamPlayerCount() <= 0:
|
| | |
| | | #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:
|
| | |
| | | playerMgr = GameWorld.GetPlayerManager()
|
| | |
|
| | | scenePlayerIDDict = GetScenePlayerIDDict()
|
| | | scenePlayerIDList = scenePlayerIDDict.get(mapID, [])
|
| | | scenePlayerIDList = copy.deepcopy(scenePlayerIDDict.get(mapID, []))
|
| | | # 场景队伍数超过同步的个数才进行排序,否则直接同步给客户端,由客户端自行排序
|
| | | if len(scenePlayerIDList) > Def_SyncPlayerCount:
|
| | | playerIDSortList = []
|
| | |
| | | player = playerMgr.FindPlayerByID(playerID)
|
| | | if not player:
|
| | | continue
|
| | | if player.GetTeamID():
|
| | | # 有队伍的不推荐
|
| | | if PlayerControl.GetIsTJG(player):
|
| | | continue
|
| | | if not __CheckCanTeamComm(player):
|
| | | continue
|
| | | #if player.GetTeamID():
|
| | | # # 有队伍的不推荐
|
| | | # continue
|
| | | playerLV = player.GetLV()
|
| | | playerIDSortList.append([abs(curPlayerLV - playerLV), -playerLV, playerID])
|
| | | playerIDSortList.sort() # 等级差绝对值升序排, 绝对值相同的等级高的排前面
|
| | |
| | | player = playerMgr.FindPlayerByID(playerID)
|
| | | if not player:
|
| | | continue
|
| | | if player.GetTeamID():
|
| | | # 有队伍的不推荐
|
| | | if PlayerControl.GetIsTJG(player):
|
| | | continue
|
| | | if not __CheckCanTeamComm(player):
|
| | | continue
|
| | | #if player.GetTeamID():
|
| | | # # 有队伍的不推荐
|
| | | # continue
|
| | | count += 1
|
| | | nearbyPlayer = ChPyNetSendPack.tagGCRecommendNearbyPlayer()
|
| | | nearbyPlayer.PlayerID = playerID
|
| | |
| | | DelTeamIDFromTagMapTeamDict(curTeamID)
|
| | | DelTeamIDFromMatchingList(curTeam)
|
| | |
|
| | | SyncMapServerTeamInfo(curTeam)
|
| | | SyncMapServerTeamInfo(curTeam, "LogOff", {"playerID":playerID})
|
| | | return
|
| | |
|
| | | def OnPlayerLoginRefreshTeam(curPlayer, tick):
|
| | |
| | | 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()
|
| | |
| | | #通知队伍成员玩家信息
|
| | | #curTeam.Sync_TeamState()
|
| | | Sync_TeamMemberInfo(curTeam)
|
| | | SyncMapServerTeamInfo(curTeam)
|
| | | SyncMapServerTeamInfo(curTeam, "Login", {"playerID":playerID})
|
| | |
|
| | | if not PlayerControl.GetIsTJG(curPlayer):
|
| | | #通知自己队伍玩家上线
|
| | |
| | | #如果队伍正在匹配中,则通知状态
|
| | | if IsTeamMatchingPlayer(curTeamID):
|
| | | Sync_TeamMatchState(curPlayer, True)
|
| | | OnTeamMemFamilyRefresh(curPlayer, curPlayer.GetFamilyID())
|
| | | return True
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | |
|
| | | 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
|
| | | #---------------------------------------------------------------------
|
| | | ##组队玩家切换地图
|
| | |
| | | curTeam = curPlayer.GetTeam()
|
| | |
|
| | | if curTeam != None:
|
| | | SyncMapServerTeamInfo(curTeam)
|
| | | SyncMapServerTeamInfo(curTeam, "ChangeMap", {"playerID":playerID, "mapID":mapID})
|
| | | #通知客户端更新
|
| | | curPlayer.Sync_TeamMemberChangeMap() # 09 13 队伍成员切换地图#tagTeamMemberChangeMap
|
| | |
|
| | |
| | | # 玩家进入组队副本,则停止匹配
|
| | | if gameMap.GetMapFBType() == ChConfig.fbtTeam:
|
| | | DelPlayerIDFromMatchingList(curPlayer)
|
| | | |
| | | SyncMapServerPlayerNoTeam(curPlayer) # 没有队伍的时候切图也通知地图
|
| | | |
| | | return
|
| | |
|
| | | def PlayerTeamMemberRefresh(curPlayer, refreshType, value, tick):
|
| | |
| | | elif refreshType == IPY_GameServer.CDBPlayerRefresh_OfficialRank:
|
| | | teamMember.SetPlayerRealmLV(value)
|
| | | elif refreshType in [IPY_GameServer.CDBPlayerRefresh_VIPLv, IPY_GameServer.CDBPlayerRefresh_ExAttr9]:
|
| | | SyncMapServerTeamInfo(curTeam)
|
| | | SyncMapServerTeamInfo(curTeam, "Refresh", {"refreshType":refreshType, "value":value})
|
| | | else:
|
| | | return
|
| | |
|
| | |
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | |
|
| | | packTagMapID = clientData.TagMapID
|
| | | # 发2时代表助战匹配
|
| | | if packTagMapID == 2:
|
| | | __DoMatchHelpFightTeam(curPlayer, tick)
|
| | | return
|
| | | |
| | | tagMapEx = clientData.TagMapEx
|
| | | tagMapID = packTagMapID
|
| | | curMapID = curPlayer.GetMapID()
|
| | |
| | | PlayerControl.NotifyCode(curPlayer, "TeamMatchingSucceed")
|
| | | return
|
| | |
|
| | | def __DoMatchHelpFightTeam(curPlayer, tick):
|
| | | ''' 一次性匹配需要助战的队伍,满足队伍条件自动加入匹配队伍
|
| | | 按以下优先级加入:
|
| | | 大境界渡劫 > 所有宗门试炼 > 所有娲皇遗迹 > 混乱妖域
|
| | | 自己有队伍时发送助战喊话不执行此逻辑 |
| | | '''
|
| | | curTeam = curPlayer.GetTeam()
|
| | | if curTeam:
|
| | | return
|
| | | |
| | | matchingTeamDict = PyGameData.g_matchingTeamDict
|
| | | GameWorld.DebugLog("__DoMatchHelpFightTeam matchingTeamDict=%s" % (matchingTeamDict), curPlayer.GetPlayerID())
|
| | | if not matchingTeamDict:
|
| | | return
|
| | | |
| | | playerLV = curPlayer.GetLV()
|
| | | matchMapIDList = [ChConfig.Def_FBMapID_DuJie, ChConfig.Def_FBMapID_MunekadoTrial, ChConfig.Def_FBMapID_QueenRelics, ChConfig.Def_FBMapID_ChaosDemon]
|
| | | |
| | | teamMgr = GameWorld.GetTeamManager()
|
| | | for matchMapID in matchMapIDList:
|
| | | matchTeamInfoList = []
|
| | | for key, teamIDList in matchingTeamDict.items():
|
| | | tagMapID, tagMapEx = key
|
| | | if tagMapID != matchMapID:
|
| | | continue
|
| | | |
| | | for teamID in teamIDList:
|
| | | team = teamMgr.FindTeam(teamID)
|
| | | if not team:
|
| | | continue
|
| | | |
| | | reqMinLV = team.GetReqMinLV()
|
| | | reqMaxLV = team.GetReqMaxLV()
|
| | | |
| | | if not (reqMinLV <= playerLV <= reqMaxLV):
|
| | | continue
|
| | | |
| | | onLineCount = CheckTeamOnLineCount(team)
|
| | | # 优先级: 人数多的 > 线路简单的 > 队伍人数多的 ...
|
| | | matchTeamInfoList.append([onLineCount, 999999 - tagMapEx, team.GetTeamPlayerCount(), teamID, team])
|
| | | |
| | | if not matchTeamInfoList:
|
| | | GameWorld.DebugLog(" 没有满足助战等级条件匹配中的队伍: matchMapID=%s" % (matchMapID))
|
| | | continue
|
| | | |
| | | matchTeamInfoList.sort(reverse=True) # 倒序排
|
| | | GameWorld.DebugLog(" 匹配队伍顺序: matchMapID=%s,%s" % (matchMapID, matchTeamInfoList))
|
| | | |
| | | joinTeamID = 0
|
| | | for teamInfo in matchTeamInfoList:
|
| | | team = teamInfo[-1]
|
| | | if not team:
|
| | | continue
|
| | | |
| | | leader = GetTeamLeader(team)
|
| | | if not leader:
|
| | | continue
|
| | | |
| | | if DoPlayerJoinTeam(curPlayer, leader, team, tick, isAutoMatchJoin=False):
|
| | | joinTeamID = team.GetTeamID()
|
| | | break
|
| | | |
| | | GameWorld.DebugLog(" joinTeamID=%s" % joinTeamID)
|
| | | if joinTeamID:
|
| | | break
|
| | | |
| | | return
|
| | |
|
| | | #// B9 08 取消匹配队伍或玩家 #tagCGCancelMatchTeam
|
| | | #
|
| | |
| | | curPlayer.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamAsk", resultName, len(resultName))
|
| | | # 多人队伍,队伍加入准备队列,通知队员准备
|
| | | else:
|
| | | DelTeamIDFromMatchingList(curTeam) # 进入准备阶段停止匹配
|
| | | GameWorld.DebugLog("队伍验证通过,通知队员准备进入副本: memStateDict=%s" % memStateDict, playerID)
|
| | | PyGameData.g_prepareTeamDict[teamID] = [retAskMapID, retAskMapEx, memStateDict, tick]
|
| | | SyncTeamEnterFBPrepareInfo(curTeam, retAskMapID, retAskMapEx, memStateDict)
|
| | |
| | | ["TeamEnterDefaultMe", "TeamEnterDefaultAll"], "SingleEnterDefaul"],
|
| | | ShareDefine.EntFBAskRet_Sit:[["TeamMatchingSITMe", "TeamMatchingSITAll"],
|
| | | ["TeamEnterSITMe", "TeamEnterSITAll"], "Carry_lhs_697674"],
|
| | | ShareDefine.EntFBAskRet_CrossPKMatching:[["CrossMatching9", "CrossMatching10"], |
| | | ["CrossMatching11", "CrossMatching12"], "CrossMatching8"],
|
| | | ShareDefine.EntFBAskRet_Other:[["TeamMatchingDefaultMe", "TeamMatchingDefaultAll"],
|
| | | ["TeamEnterDefaultMe", "TeamEnterDefaultAll"], "SingleEnterDefaul"],
|
| | | }
|
| | |
| | |
|
| | | if memPlayerID in causePlayerDict:
|
| | | PlayerControl.NotifyCode(memPlayer, notifyList[0], [askMapID])
|
| | | if notifyRet in [ShareDefine.EntFBAskRet_NoEnterCnt, ShareDefine.EntFBAskRet_EnterCD, ShareDefine.EntFBAskRet_NoTicket]:
|
| | | failPack = ChPyNetSendPack.tagGCEnterTeamFBFailReason()
|
| | | failPack.MapID = askMapID
|
| | | failPack.AskType = retAskType
|
| | | failPack.Reason = notifyRet
|
| | | NetPackCommon.SendFakePack(memPlayer, failPack)
|
| | | else:
|
| | | PlayerControl.NotifyCode(memPlayer, notifyList[1], [askMapID, causePlayerName])
|
| | | return
|
| | |
| | | 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(["InitRelation", teamID, friendList, memFamilyIDDict, memNameDict])
|
| | | leader.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamRelation", relationInfo, len(relationInfo))
|
| | | return
|
| | |
|
| | | def OnTeamMemFriendChange(curPlayer, tagPlayerID, isFriend):
|
| | | ## 队员好友关系变更,离线也同步
|
| | | teamID = curPlayer.GetTeamID()
|
| | | if not teamID:
|
| | | GameWorld.DebugLog("好友变更,无队伍不管!")
|
| | | return
|
| | | curMapData = GameWorld.GetMap(curPlayer.GetMapID())
|
| | | if not curMapData or curMapData.GetMapFBType() != ChConfig.fbtTeam:
|
| | | GameWorld.DebugLog("好友变更,不在组队副本不管!")
|
| | | return
|
| | | |
| | | isSameTeam = False
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | curTeam = curPlayer.GetTeam()
|
| | | for index in xrange(curTeam.GetMemberCount()):
|
| | | memberInfo = curTeam.GetMemberInfo(index)
|
| | | if not memberInfo:
|
| | | continue
|
| | | memPlayerID = memberInfo.GetPlayerID()
|
| | | if tagPlayerID == memPlayerID:
|
| | | isSameTeam = True
|
| | | break
|
| | | |
| | | if not isSameTeam:
|
| | | GameWorld.DebugLog("好友关系变更,不是同队伍不管!")
|
| | | return
|
| | | |
| | | relationInfo = str(["FriendChange", teamID, playerID, tagPlayerID, isFriend])
|
| | | curPlayer.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamRelation", relationInfo, len(relationInfo))
|
| | | return
|
| | |
|
| | | def OnTeamMemFamilyRefresh(curPlayer, familyID):
|
| | | ## 队员仙盟变更,仅在线同步,上线同步
|
| | | if not curPlayer:
|
| | | return
|
| | | teamID = curPlayer.GetTeamID()
|
| | | if not teamID:
|
| | | GameWorld.DebugLog("家族变更,无队伍不管!")
|
| | | return
|
| | | curMapData = GameWorld.GetMap(curPlayer.GetMapID())
|
| | | if not curMapData or curMapData.GetMapFBType() != ChConfig.fbtTeam:
|
| | | GameWorld.DebugLog("家族变更,不在组队副本不管!")
|
| | | return
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | familyID = curPlayer.GetFamilyID()
|
| | | relationInfo = str(["FamilyChange", teamID, playerID, familyID])
|
| | | curPlayer.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamRelation", relationInfo, len(relationInfo))
|
| | | return
|
| | |
|
| | | def __CheckTeamFBPlayerExist(curTeam):
|
| | |
| | | if curInviteCnt >= inviteCnt:
|
| | | break
|
| | |
|
| | | return |
| | | return
|
| | |
|
| | | def DR_Team(eventName, teamID, dataDict):
|
| | | drDict = {"EventName":eventName, "TeamID":teamID}
|
| | | drDict.update(dataDict)
|
| | | DataRecordPack.SendEventPack("Team_GameServer", drDict)
|
| | | return
|
| | |
|