|  |  |  | 
|---|
|  |  |  | import ChPyNetSendPack | 
|---|
|  |  |  | import DataRecordPack | 
|---|
|  |  |  | import PlayerControl | 
|---|
|  |  |  | import PlayerFriend | 
|---|
|  |  |  | import ShareDefine | 
|---|
|  |  |  | import PyGameData | 
|---|
|  |  |  | import GameWorld | 
|---|
|  |  |  | 
|---|
|  |  |  | invitePack.NameLen = len(invitePack.Name) | 
|---|
|  |  |  | invitePack.LV = curPlayer.GetLV() | 
|---|
|  |  |  | invitePack.Job = curPlayer.GetJob() | 
|---|
|  |  |  | invitePack.JobLevel = PlayerControl.GetJobRank(curPlayer) | 
|---|
|  |  |  | invitePack.RealmLV = curPlayer.GetOfficialRank() | 
|---|
|  |  |  | invitePack.TagMapID = tagMapID | 
|---|
|  |  |  | invitePack.TagMapEx = tagMapEx | 
|---|
|  |  |  | 
|---|
|  |  |  | requestPack.NameLen = len(requestPack.Name) | 
|---|
|  |  |  | requestPack.LV = curPlayer.GetLV() | 
|---|
|  |  |  | requestPack.Job = curPlayer.GetJob() | 
|---|
|  |  |  | requestPack.JobLevel = PlayerControl.GetJobRank(curPlayer) | 
|---|
|  |  |  | requestPack.RealmLV = curPlayer.GetOfficialRank() | 
|---|
|  |  |  | NetPackCommon.SendFakePack(tagPlayer, requestPack) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | nearbyPlayer.NameLen = len(nearbyPlayer.Name) | 
|---|
|  |  |  | nearbyPlayer.LV = player.GetLV() | 
|---|
|  |  |  | nearbyPlayer.Job = player.GetJob() | 
|---|
|  |  |  | nearbyPlayer.JobLevel = PlayerControl.GetJobRank(player) | 
|---|
|  |  |  | nearbyPlayer.RealmLV = player.GetOfficialRank() | 
|---|
|  |  |  | nearbyPlayerInfo.PlayerList.append(nearbyPlayer) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | sceneTeam.NameLen = len(sceneTeam.PlayerName) | 
|---|
|  |  |  | sceneTeam.LV = leader.GetLV() | 
|---|
|  |  |  | sceneTeam.Job = leader.GetJob() | 
|---|
|  |  |  | sceneTeam.JobLevel = PlayerControl.GetJobRank(leader) | 
|---|
|  |  |  | sceneTeam.RealmLV = leader.GetOfficialRank() | 
|---|
|  |  |  | sceneTeam.MemberCount = team.GetTeamPlayerCount() | 
|---|
|  |  |  | sceneTeam.TagMapID = team.GetTagMapID() | 
|---|
|  |  |  | 
|---|
|  |  |  | #如果队伍正在匹配中,则通知状态 | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | #--------------------------------------------------------------------- | 
|---|
|  |  |  | ##组队玩家切换地图 | 
|---|
|  |  |  | 
|---|
|  |  |  | tagMapTeam.NameLen = len(tagMapTeam.PlayerName) | 
|---|
|  |  |  | tagMapTeam.LV = leader.GetLV() | 
|---|
|  |  |  | tagMapTeam.Job = leader.GetJob() | 
|---|
|  |  |  | tagMapTeam.JobLevel = PlayerControl.GetJobRank(leader) | 
|---|
|  |  |  | tagMapTeam.RealmLV = leader.GetOfficialRank() | 
|---|
|  |  |  | tagMapTeam.MemberCount = team.GetTeamPlayerCount() | 
|---|
|  |  |  | tagMapTeam.ReqMinLV = team.GetReqMinLV() | 
|---|
|  |  |  | 
|---|
|  |  |  | ["TeamEnterCDMe", "TeamEnterCDAll"], "SingleEnterCD"], | 
|---|
|  |  |  | ShareDefine.EntFBAskRet_LVLimit:[["TeamMatchingLVMe", "TeamMatchingLVAll"], | 
|---|
|  |  |  | ["TeamEnterLVMe", "TeamEnterLVAll"], "FbLV"], | 
|---|
|  |  |  | ShareDefine.EntFBAskRet_JobRankLimit:[["TeamMatchingJobMe", "TeamMatchingJobAll"], | 
|---|
|  |  |  | ["TeamEnterJobMe", "TeamEnterJobAll"], "SingleEnterJob"], | 
|---|
|  |  |  | ShareDefine.EntFBAskRet_NoTicket:[["TeamMatchingTicketMe", "TeamMatchingTicketAll"], | 
|---|
|  |  |  | ["TeamEnterTicketMe", "TeamEnterTicketAll"], "GeRen_chenxin_157069"], | 
|---|
|  |  |  | ShareDefine.EntFBAskRet_Dead:[["TeamMatchingDeadMe", "TeamMatchingDeadAll"], | 
|---|
|  |  |  | 
|---|
|  |  |  | ["TeamEnterDefaultMe", "TeamEnterDefaultAll"], "SingleEnterDefaul"], | 
|---|
|  |  |  | ShareDefine.EntFBAskRet_Sit:[["TeamMatchingSITMe", "TeamMatchingSITAll"], | 
|---|
|  |  |  | ["TeamEnterSITMe", "TeamEnterSITAll"], "Carry_lhs_697674"], | 
|---|
|  |  |  | ShareDefine.EntFBAskRet_CrossPKMatching:[["CrossMatching9", "CrossMatching10"], | 
|---|
|  |  |  | ["CrossMatching11", "CrossMatching12"], "CrossMatching8"], | 
|---|
|  |  |  | ShareDefine.EntFBAskRet_InCrossMap:[["CrossMap6", "CrossMap7"], | 
|---|
|  |  |  | ["CrossMap8", "CrossMap9"], "CrossMap5"], | 
|---|
|  |  |  | ShareDefine.EntFBAskRet_Other:[["TeamMatchingDefaultMe", "TeamMatchingDefaultAll"], | 
|---|
|  |  |  | ["TeamEnterDefaultMe", "TeamEnterDefaultAll"], "SingleEnterDefaul"], | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | 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): | 
|---|