//通知队伍中的角色的客户端进入副本 public void TeamMateEnterTranscript() { Debug.Log("TeamMateEnterTranscript=="); //发送请求到服务器,队友的客户端也要进入副本 //1.根据队伍中角色,获取角色id.发送给server //2.server根据role id找到peer,找到发送的客户端,从而进行场景加载 //3.需要发给队长所属的客户端吗? 暂时不需要 int masterid = PhotonEngine.Instance.role.ID; ClientTeam team = new ClientTeam(); TeamInviteController.Instance.teamDict.TryGetValue(masterid, out team); if (team != null) { int[] roleids = { team.memberids[0], team.memberids[1], team.memberids[2], team.memberids[3] }; string json = JsonMapper.ToJson(roleids); Dictionary <byte, object> parameters = new Dictionary <byte, object>(); parameters.Add((byte)ParameterCode.MasterRoleID, masterid); parameters.Add((byte)ParameterCode.TeamRoleIds, json); //频道id parameters.Add((byte)ParameterCode.ChannelID, PhotonEngine.Instance.ChannelId); parameters.Add((byte)ParameterCode.SubCode, SubCode.EnterTranscript); //发送请求 PhotonEngine.Instance.SendRequest(OperationCode.Transcript, parameters); } }
public override void Start() { base.Start(); if (!TranscriptTeamController.Instance.isTeam) //单人 { playerid = PhotonEngine.Instance.role.ID; GetRolesInTeamRequest(playerid); } else //组队 { Debug.Log("多人副本"); //根据队伍中的角色id一一查询数据库,实例化角色 masterid = TranscriptTeamController.Instance.globalMasterID; ClientTeam team = null; TranscriptTeamController.Instance.teamDict.TryGetValue(masterid, out team); if (team != null) { roleid_1 = team.memberids[0]; roleid_2 = team.memberids[1]; roleid_3 = team.memberids[2]; roleid_4 = team.memberids[3]; GetRolesInTeamRequest(roleid_1, roleid_2, roleid_3, roleid_4); } } }
//更新队伍显示 void UpdateTeamPanel(ClientTeam team) { Debug.Log("team: " + team.memberids[0] + "," + team.memberids[1] + "," + team.memberids[2]); for (int i = 0; i < team.Size; i++) { if (team.memberids[i] < 0) { HideTeamPanel(i); } } }
/*需要注意:masterid与serverTeam中的masterId可能并不相同, *因为服务器发送的是更新过后的队伍信息(如果是队长退出,则重新选择一名队员作为队长) *而客户端保存的还是原来的队长id,因此不能根据服务器最新的队伍信息来查找客户端的队伍信息 */ void ExitTeamResponse(int masterid, int exitRoleid, Team serverTeam) { GameObject go; Debug.Log("ExitTeamResponse masterid=" + masterid + ",exitRoleId=" + exitRoleid); if (PhotonEngine.Instance.role.ID == exitRoleid) { isTeam = false; GameController.Instance.playerDict.TryGetValue(exitRoleid, out go); go.GetComponent <Player>().isTeam = false; } ClientTeam clientTeam = new ClientTeam(); teamDict.TryGetValue(masterid, out clientTeam); if (null != clientTeam) { //更新客户端队伍信息 clientTeam.teamMemberGoDict.Remove(exitRoleid); for (int i = 0; i < clientTeam.Size; i++) { if (exitRoleid == clientTeam.memberids[i]) { clientTeam.memberids[i] = -1; break; } } teamMemberids = clientTeam.memberids; //如果退出的人是队长,将服务器最新的队伍信息设置到客户端 if (masterid == exitRoleid) { clientTeam.masterId = serverTeam.Masterid; TeamInviteController.Instance.globalMasterID = serverTeam.Masterid; } //移除旧的ClientTeam,添加新的ClientTeam teamDict.Remove(clientTeam.masterId); teamDict.Add(clientTeam.masterId, clientTeam); //如果是退出队伍的是自己,则在客户端隐藏队伍信息 if (PhotonEngine.Instance.role.ID == exitRoleid) { Debug.Log("自己退出队伍=="); HideAllTeamPanel(); } else { UpdateTeamPanel(clientTeam); } } else { Debug.Log("client Team is null"); } }
public void Dead() { bool isGameOver = true; anim.SetTrigger("Die"); //播放死亡动画 isDead = true; this.GetComponent <Rigidbody>().useGravity = false; this.GetComponent <Rigidbody>().collider.enabled = false; if (!TranscriptTeamController.Instance.isTeam) { //通关失败 TranscriptManager.Instance.GameFailedHandle(); } else { //获取队伍中所有队员的信息,如果所有队员死亡则通关失败 ClientTeam ct = new ClientTeam(); TranscriptTeamController.Instance.teamDict.TryGetValue(TranscriptTeamController.Instance.globalMasterID, out ct); if (ct != null) { GameObject go = null; for (int i = 0; i < ct.Size; i++) { PlayerController.Instance.transPlayerDict.TryGetValue(ct.memberids[i], out go); if (go != null && go.GetComponent <PlayerAttack>().hp > 0) { isGameOver = false; } } if (isGameOver) { //Debug.Log("全军覆灭=="); TranscriptManager.Instance.GameFailedHandle(); } } } }
// void AgreeJoinResponse(int roleid, string inviteName, Team team) { int masterid = team.Masterid; globalMasterID = masterid; PhotonEngine.Instance.masterid = masterid; //修改邀请者和被邀请者的isTeam的值 int inviteid = PhotonEngine.Instance.role.ID; GameObject playerGo = null; GameController.Instance.playerDict.TryGetValue(inviteid, out playerGo); if (null != playerGo) { isTeam = true; playerGo.GetComponent <Player>().isTeam = true; } GameController.Instance.playerDict.TryGetValue(roleid, out playerGo); if (null != playerGo) { playerGo.GetComponent <Player>().isTeam = true; } ClientTeam ct = null; teamDict.TryGetValue(masterid, out ct);//第一次组队team为null if (null == ct) { ct = new ClientTeam(); ct.masterId = masterid; //第一次组成队伍要给masterid赋值 ct.memberids[0] = masterid; //第一次组成队伍,队长默认是1P } //先移除旧的再添加新的 teamDict.Remove(masterid); Debug.Log("Masterid=" + masterid); Debug.Log("之前: ct.memberids[i]=" + ct.memberids[0] + "," + ct.memberids[1] + "," + "," + ct.memberids[2] + "," + "," + ct.memberids[3]); for (int i = 0; i < ct.Size; i++) { if (ct.memberids[i] < 0) { ct.memberids[i] = team.memberids[i]; //break; } } //1.把队长信息更新到ClientTeam if (!ct.teamMemberGoDict.TryGetValue(masterid, out playerGo)) { GameObject[] goArr = GameObject.FindGameObjectsWithTag("Player"); foreach (GameObject go in goArr) { if (go.GetComponent <Player>().roleId == masterid) { ct.teamMemberGoDict.Add(masterid, go); break; } } } //2.把新加入的队员更新到ClientTeam中 if (!ct.teamMemberGoDict.TryGetValue(roleid, out playerGo)) { GameObject[] goArr = GameObject.FindGameObjectsWithTag("Player"); foreach (GameObject go in goArr) { if (go.GetComponent <Player>().roleId == roleid) { ct.teamMemberGoDict.Add(roleid, go); break; } } } teamDict.Add(masterid, ct); teamMemberids = ct.memberids; //3.展示队伍所有队员的组队panel for (int i = 0; i < team.TeamSize; i++) { if (team.memberids[i] > 0) { ShowTeamPanelGo(i, team.Masterid, team.memberids[i], team.RoleArr[i].Name); } } }
void AgreeInviteResponse(int roleid, string inviteName, Team team) { int masterid = team.Masterid; globalMasterID = masterid; Debug.Log("AgreeInviteResponse masterid= " + masterid); Debug.Log("memberids=" + team.memberids[0] + "," + team.memberids[1] + "," + team.memberids[2] + "," + team.memberids[3]); PhotonEngine.Instance.masterid = masterid; //修改当前玩家 isTeam 的值 int playerid = PhotonEngine.Instance.role.ID; GameObject playerGo = null; GameController.Instance.playerDict.TryGetValue(inviteid, out playerGo); if (null != playerGo) { isTeam = true; playerGo.GetComponent <Player>().isTeam = true; } ClientTeam ct = null; teamDict.TryGetValue(masterid, out ct);//第一次组队client team为null if (null == ct) { ct = new ClientTeam(); ct.masterId = team.Masterid; } //先移除旧的再添加新的 teamDict.Remove(masterid); //1.将服务器的Team信息 更新到客户端Team中 for (int i = 0; i < team.TeamSize; i++) { if (ct.memberids[i] < 0 && team.memberids[i] > 0) { ct.memberids[i] = team.memberids[i]; //组队优化,将代替上面的memberids Role tmp = new Role(); ct.roleArr[i] = tmp; ct.roleArr[i].ID = team.RoleArr[i].ID; ct.roleArr[i].Name = team.RoleArr[i].Name; if (null != playerGo) { ct.teamMemberGoDict.Remove(ct.roleArr[i].ID);//先移除,避免key已存在 ct.teamMemberGoDict.Add(ct.roleArr[i].ID, playerGo); playerGo.GetComponent <Player>().Name = ct.roleArr[i].Name; } else { Debug.Log("error player- " + ct.roleArr[i].ID + "not found!"); } } } teamDict.Add(masterid, ct); teamMemberids = ct.memberids; //2.展示队伍所有队员的组队panel for (int i = 0; i < team.TeamSize; i++) { if (team.memberids[i] > 0) { //将服务器的 Team 数据保存到客户端 ClientTeam Debug.Log("team.RoleArr[i].Name =" + i + ":" + team.RoleArr[i].Name); ShowTeamPanelGo(i, team.Masterid, team.memberids[i], team.RoleArr[i].Name); } } }