private void CheckerPlayersHP(Message msg)
        {
            GameMgrRouter.FightSystemResponse res = GameMgrRouter.FightSystemRequestCallback(msg);
            if (res.opt.Equals(FightSystemKeys.QUERY_PLAYERS_HP))
            {
                // res.msg 格式为 user_id|HP#user_id|HP
                string [] player_hp = res.msg.Split('#');
                for (int i = 0; i < player_hp.Length; i++)
                {
                    string [] tmp = player_hp[i].Split('|');
                    try
                    {
                        int userID = Convert.ToInt32(tmp[0]);
                        int hp     = Convert.ToInt32(tmp[1]);
                        AttackPlayer(userID, hp);
                    }
                    catch (Exception) { }
                }
            }
            else if (res.opt.Equals(FightSystemKeys.ATTACKED))
            {
                try
                {
                    string[] ss     = res.msg.Split('#');
                    int      userID = Convert.ToInt32(ss[0]);
                    int      kill   = Convert.ToInt32(ss[1]);

                    if (userID == this.userID)
                    {
                        totalKillCount.val = kill;
                    }
                }
                catch (Exception) { }
            }
        }
Пример #2
0
        private void RegisterMatchingEvent()
        {
            btnBeginMatching = GetControl <Button>("btn_play_matching");

            btnBeginMatching.onClick.AddListener(() =>
            {
                object isMatching = MemeryCacheMgr.Instance.Get(DTSKeys.MATCHING);
                if (isMatching is false || isMatching is null)
                {
                    GameMgrRouter.PlayWithOthersRequestCall(userID, 1, matching_time);
                }
            });

            btnCancelMatching = GetControl <Button>("btn_cancel_matching");

            btnCancelMatching.onClick.AddListener(() =>
            {
                if (MemeryCacheMgr.Instance.Get(DTSKeys.MATCHING) is true)
                {
                    btnBeginComputerGame.gameObject.SetActive(true);
                    btnBeginMatching.gameObject.SetActive(true);
                    btnCancelMatching.gameObject.SetActive(false);
                    MemeryCacheMgr.Instance.Set(DTSKeys.MATCHING, false);
                    GameMgrRouter.PlayWithOthersRequestCall(userID, 2, matching_time);
                }
            });

            // 注册开始匹配,服务器同意结果 的回调函数
            NetworkMgr.Instance.AddMsgListener(ServiceID.GAME_MGR_PLAY_WITH_OTHERS_SERVICE, GameMgrPlayerWithOthers);

            // 查询匹配结果回调, 发起匹配后没一秒查询一次
            NetworkMgr.Instance.AddMsgListener(ServiceID.GAME_MGR_QUERY_MATCHING_RESULT_SERVICE, GameMgrQueryMathingResult);
        }
Пример #3
0
        private void GameMgrPlayerWithOthers(Message msg)
        {
            GameMgrRouter.PlayWithOthersResponse response = NetworkMgr.ParseCallback <GameMgrRouter.PlayWithOthersResponse>(msg);
            if (response.ret == 0)
            {
                if (response.mode == 1)  // 开始匹配成功
                {
                    if (MemeryCacheMgr.Instance.Get(DTSKeys.MATCHING) is true)
                    {
                        return;
                    }
                    MemeryCacheMgr.Instance.Set(DTSKeys.MATCHING, true);

                    btnBeginComputerGame.gameObject.SetActive(false);
                    btnBeginMatching.gameObject.SetActive(false);
                    btnCancelMatching.gameObject.SetActive(true);

                    MonoMgr.Instance.StartDelayEventMultiTimes(1000, (int)matching_time, () =>
                    {
                        // 发起 matching_time 次查询,每次间隔 1000 ms
                        if (MemeryCacheMgr.Instance.Get(DTSKeys.MATCHING) is false)
                        {
                            return;
                        }
                        GameMgrRouter.QueryMatchingResultRequestCall(2, userID);
                    });
                }
                else if (response.mode == 2)    // 取消匹配成功
                {
                }
            }
        }
Пример #4
0
        void AoeFreezeCreate(Message msg)
        {
            GameMgrRouter.AoeFreezeResponse res = GameMgrRouter.AoeFreezeRequestCallback(msg);

            if (res.ret != 0)
            {
                return;
            }

            string[] ss  = res.pos.Split(';');
            Vector3  pos = new Vector3();

            try
            {
                pos.x = (float)Convert.ToDouble(ss[0]);
                pos.y = (float)Convert.ToDouble(ss[1]);
                pos.z = (float)Convert.ToDouble(ss[2]);
            }
            catch (Exception ex)
            {
                Debug.Log("aoe freeze parse fail." + ex.ToString());
                return;
            }

            ResourceMgr.Instance.LoadAsync <GameObject>("model/env/Game/ball", (obj) =>
            {
                obj.transform.localScale = Vector3.one * 5;
                obj.transform.position   = pos;
                obj.AddComponent <FreezeController>();
                MonoMgr.Instance.StartDelayEvent(3000, () =>
                {
                    GameObject.Destroy(obj);
                });
            });
        }
Пример #5
0
 private void GetRobotControllerCallback(Message message)
 {
     GameMgrRouter.RegisterRobotResponse res = GameMgrRouter.RegisterRobotRequestCallback(message);
     if (res.ret == 0)
     {
         playersController.AddRobot(res.robot_id);
     }
 }
 private void QueryRobotBornPointCallback(Message msg)
 {
     GameMgrRouter.QueryBornPointResponse res = GameMgrRouter.QueryBornPointRequestCallback(msg);
     if (res.ret == 0)
     {
         LoadRobot(res.user_id, res.born);
     }
 }
Пример #7
0
 void RandomWeapon()
 {
     // TODO 这里初始化武器有一点bug 所以延时了下。待修复。。。
     MonoMgr.Instance.StartDelayEvent(1000, () =>
     {
         GameMgrRouter.SolveWeaponsRequestCall(soldier.GetUserID(), UnityEngine.Random.Range(0, 3));
     });
 }
        void Update()
        {
            if (checkPlayers.CheckAndRun())
            {
                GameMgrRouter.FightSystemRequestCall(FightSystemKeys.QUERY_PLAYERS_HP, roomID, "");
            }

            totalPlayerCount.val = characters.Count;
        }
Пример #9
0
        private void RegisterPlayWithRobotEvent()
        {
            btnBeginComputerGame = GetControl <Button>("btn_play_computer");
            NetworkMgr.Instance.AddMsgListener(ServiceID.GAME_MGR_PLAY_ALONE_SERVICE, GameMgrPlayerAloneCallback);

            btnBeginComputerGame.onClick.AddListener(() =>
            {
                GameMgrRouter.PlayAloneRequestCall(userID);
            });
        }
Пример #10
0
        void OnTriggerEnter(Collider other)
        {
            if (!other.name.Equals("PlayerA"))
            {
                Vector3 pos = gameObject.transform.position;

                int roomID = (int)MemeryCacheMgr.Instance.Get(DTSKeys.ROOM_ID);
                GameMgrRouter.AoeFreezeRequestCall(roomID, string.Format("{0:F};{1:F};{2:F}", pos.x, pos.y, pos.z));
                GameObject.Destroy(gameObject);
            }
        }
Пример #11
0
 void OnTriggerEnter(Collider collider)
 {
     if (collider.name == "PlayerA")
     {
         try
         {
             int userID = (int)MemeryCacheMgr.Instance.Get(DTSKeys.USER_ID);
             GameMgrRouter.AddHpRequestCall(30, userID);
         }
         catch (Exception) { }
         GameObject.Destroy(gameObject);
     }
 }
Пример #12
0
        public void GetNewWeaponCallback(Message msg)
        {
            GameMgrRouter.NewWeaponResponse res = GameMgrRouter.NewWeaponRequestCallback(msg);
            if (res.ret != 0)
            {
                return;
            }
            if (!characters.ContainsKey(res.user_id))
            {
                return;
            }
            Soldier soldier = characters[res.user_id] as Soldier;

            soldier.SetWeapon(WeaponBase.ReflectionCreator(WeaponBoxBase.weaponTypeDict[WeaponBoxBase.IntToWeaponType[res.w_type]]), res.w_pos);
        }
Пример #13
0
 public void PlayerAttacked(object obj)
 {
     try
     {
         if (obj is RoleHurtEvent roleEvent && characters.ContainsKey(roleEvent.hittedUserID))
         {
             // [1] 直接扣血
             // characters[roleEvent.userID].Hit(roleEvent.hurtHP);
             // [2] 服务端决定扣血 回调 CheckerPlayersHP
             //Debug.Log(roleEvent.attackUserID + " attack " + roleEvent.hittedUserID + " hp " + roleEvent.hurtHP);
             GameMgrRouter.FightSystemRequestCall(FightSystemKeys.ATTACKED, roomID, string.Format("{0},{1},{2}",
                                                                                                  roleEvent.attackUserID, roleEvent.hittedUserID, roleEvent.hurtHP));
         }
     }
     catch (Exception) { }
 }
Пример #14
0
        public void ChangedWeaponCallback(Message msg)
        {
            GameMgrRouter.SolveWeaponsResponse res = GameMgrRouter.SolveWeaponsRequestCallback(msg);
            if (res.ret != 0)
            {
                return;
            }
            if (!characters.ContainsKey(res.user_id))
            {
                return;
            }
            Soldier soldier = characters[res.user_id] as Soldier;

            soldier.bag.ChangeNowUsedWeapon(res.wid);
            soldier.FreshWeapon(res.wid);
        }
Пример #15
0
        private void GameMgrQueryMathingResult(Message msg)
        {
            if (MemeryCacheMgr.Instance.Get(DTSKeys.MATCHING) is false)
            {
                return;
            }

            GameMgrRouter.QueryMatchingResultResponse response = GameMgrRouter.QueryMatchingResultRequestCallback(msg);
            if (response.ret == 0 && response.room_id > 0)
            {
                MemeryCacheMgr.Instance.Set(DTSKeys.MATCHING, false);
                BeginGameAndChangeScene(response.room_id);
            }
            else
            {
                Debug.Log("query matching result. not ready. msg = " + response.err_msg);
            }
        }
Пример #16
0
        private void LoadOtherPlayer(int otherUserID)
        {
            if (otherUserID < 0)
            {
                GameMgrRouter.QueryBornPointRequestCall(otherUserID, roomID);   // call back QueryRobotBornPointCallback
                return;
            }

            // 加载其他玩家控制的角色,命名为 PlayerA#用户ID
            ResourceMgr.Instance.LoadAsync <GameObject>("model/PlayerA", (obj) =>
            {
                if (obj == null)
                {
                    Debug.Log("Player load fail");
                    return;
                }

                Debug.Log("other_user_id" + otherUserID);

                obj.name = "PlayerA#" + Convert.ToString(otherUserID);
                obj.transform.position = new Vector3(0, 20, 0);

                WeaponBase weapon = new WeaponAK47();

                Soldier soldier = new Soldier(obj,
                                              new AnimatorHandler(obj.transform.GetComponent <Animator>() as Animator),
                                              SoldierStateBase.soldierStateWalk,
                                              CharacterType.OTHER_PLAYER,
                                              otherUserID,
                                              roomID);

                OtherPlayerController soldierController = obj.AddComponent <OtherPlayerController>();
                soldierController.soldier = soldier;

                AddCharactor(otherUserID, soldier);
            });
        }
Пример #17
0
        void Update()
        {
            soldier.SetSpeeds(speeds);  // 调手感用,编辑器调试时能让速度直接改变
            action.Init();

            if (OperationMode.Instance.IsLock())
            {
                if (reportTransform.CheckAndRun())
                {
                    UserSynchronizationRouter.ReportTransform(soldier.GetUserID(), soldier.GetTransform());
                }
                return;
            }

            if (soldier.IsFreeze())
            {
                EventMgr.Instance.EventTrigger(EventName.MAIN_PLAYER_ACTION, action);
                if (reportTransform.CheckAndRun())
                {
                    UserSynchronizationRouter.ReportTransform(soldier.GetUserID(), soldier.GetTransform());
                }
                return;
            }

            WeaponChangeAction();

            if (Input.GetMouseButton(0))
            {
                action.Add(EPlayerAction.SHOOT);
            }
            if (Input.GetMouseButton(1))
            {
                action.Add(EPlayerAction.SHOOT_BURST);
            }

            if (Input.GetKeyDown(KeyCode.Alpha3))
            {
                action.Add(EPlayerAction.SHOOT_LINE);
            }

            if (Input.GetKey(KeyCode.R))
            {
                action.Add(EPlayerAction.RELOAD);
            }

            if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
            {
                action.Add(EPlayerAction.BEGIN_RUN);
            }
            else
            {
                action.Add(EPlayerAction.END_RUN);
            }

            if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))
            {
                action.Add(EPlayerAction.BEGIN_CROUCH);
            }
            else
            {
                action.Add(EPlayerAction.END_CROUCH);
            }

            if (Input.GetKey(KeyCode.Space))
            {
                action.Add(EPlayerAction.DUMP);
            }

            float h      = Input.GetAxis("Horizontal");
            float v      = Input.GetAxis("Vertical");
            float mouseX = Input.GetAxis("Mouse X");
            float mouseY = Input.GetAxis("Mouse Y");

            action.SetMove(h, v);
            action.SetMouse(mouseX, mouseY);

            // 在武器箱面前,按了E,换武器
            if (MemeryCacheMgr.Instance.Get(UICacheKeys.BULLET_BOX_WARN_MESSAGE) != null && Input.GetKeyDown(KeyCode.E))
            {
                if (MemeryCacheMgr.Instance.Get(UICacheKeys.WEAPON_BOX) is WeaponBoxBase weaponBox)
                {
                    soldier.SetWeapon(weaponBox.CreatorWeapon(), weaponBox.GetWeaponBagPos());
                    GameMgrRouter.NewWeaponRequestCall((int)weaponBox.GetWeaponTypeID(), soldier.GetUserID(), (int)weaponBox.GetWeaponBagPos());
                    weaponBox.Destory();
                }
            }

            // 触发直接影响角色行为。不等服务端校验完,体验好一点。
            EventMgr.Instance.EventTrigger(EventName.MAIN_PLAYER_ACTION, action);

            if (reportTransform.CheckAndRun())
            {
                UserSynchronizationRouter.ReportTransform(soldier.GetUserID(), soldier.GetTransform());
            }

            if (reportActions.CheckAndRun())
            {
                ReportActions();
            }
        }
Пример #18
0
        private void GetRobotController(object obj)
        {
            int robotKey = (int)obj;

            GameMgrRouter.RegisterRobotRequestCall(userID, roomID, robotKey);
        }
Пример #19
0
 public void ChangeWeaponCall(WeaponBagPos pos)
 {
     GameMgrRouter.SolveWeaponsRequestCall(soldier.GetUserID(), (int)pos);
 }