private void OnFightStopReply(byte[] bytes)
        {
            FightStopReply input = FightStopReply.Parser.ParseFrom(bytes);

            if (input.ActorId != ActorId)
            {
                return; // 不是自己,略过
            }
            if (!input.Ret)
            {
                GameRoomManager.Instance.Log($"ActorVisualizer OnFightStopReply Error - {input.ErrMsg}");
                return;
            }

            if (input.FightAgain)
            {
                // 显示自己的血条
                ShowSliderBlood();

                // 显示对方的血条
                var avTarget = GameRoomManager.Instance.GetActorVisualizer(input.TargetId);
                if (!avTarget)
                {
                    return;
                }
                avTarget.ShowSliderBlood();
            }

            // 如果弹药没了, 提示"弹药已经用完", 提示玩家下次无法攻击了
            if (AmmoBase <= 0)
            {
                string            msg   = "弹药已经用完!";
                PanelSprayMessage spray = GameRoomManager.Instance.FightManager.SprayMessage.Spawn(_inner, Vector3.zero);
                if (spray == null)
                {
                    return;
                }
                spray.Play(this, msg, PanelSystemTips.MessageType.Error);
            }

            GameRoomManager.Instance.Log("ActorVisualizer OnFightStopReply OK ...");
        }
        private void OnTryCommandReply(byte[] bytes)
        {
            TryCommandReply input = TryCommandReply.Parser.ParseFrom(bytes);

            if (input.ActorId != ActorId)
            {
                return; // 不是自己,略过
            }
            if (!input.Ret)
            {
                // 每次都创建新的
                PanelSprayMessage spray = GameRoomManager.Instance.FightManager.SprayMessage.Spawn(_inner, Vector3.zero);
                if (spray == null)
                {
                    return;
                }
                spray.Play(this, input.ErrMsg, PanelSystemTips.MessageType.Error);
            }

            // 该指令可以执行,虽然是马后炮
        }
        private void OnFightStartReply(byte[] bytes)
        {
            FightStartReply input = FightStartReply.Parser.ParseFrom(bytes);

            if (input.ActorId != ActorId)
            {
                return; // 不是自己,略过
            }
            if (!input.Ret)
            {
                PanelSprayMessage spray = GameRoomManager.Instance.FightManager.SprayMessage.Spawn(_inner, Vector3.zero);
                if (spray == null)
                {
                    return;
                }
                spray.Play(this, input.ErrMsg, PanelSystemTips.MessageType.Error);
                GameRoomManager.Instance.Log($"ActorVisualizer OnFightStartReply Error - {input.ErrMsg}");
                return;
            }

            // 显示自己的血条
            ShowSliderBlood();
            GameRoomManager.Instance.Log("ActorVisualizer OnFightStartReply OK ...");

            // 显示对方的血条
            var avTarget = GameRoomManager.Instance.GetActorVisualizer(input.TargetId);

            if (!avTarget)
            {
                return;
            }
            if (avTarget.IsDead)
            {
                return;
            }
            avTarget.ShowSliderBlood();
        }