コード例 #1
0
    //通知队伍中的角色的客户端进入副本
    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);
        }
    }
コード例 #2
0
ファイル: PlayerController.cs プロジェクト: ezjuhnz/RPGGame
    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);
            }
        }
    }
コード例 #3
0
 //更新队伍显示
 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);
         }
     }
 }
コード例 #4
0
    /*需要注意: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");
        }
    }
コード例 #5
0
    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();
                }
            }
        }
    }
コード例 #6
0
    //
    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);
            }
        }
    }
コード例 #7
0
    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);
            }
        }
    }