コード例 #1
0
        /// <summary>
        /// Check finish state.
        /// </summary>
        private void CheckFinishState()
        {
            var missionPeds = MissionPedController.GetAllMissionPeds();

            // 任务目标死亡, 隐藏标记红点, 并标记为可回收资源
            missionPeds
            .Where(ped => ped.IsDead)
            .ToList().ForEach(ped =>
            {
                // 隐藏标记红点
                var blip = ped.AttachedBlip;
                if (blip is null)
                {
                    blip = ped.AttachBlip();
                }
                blip.Color        = BlipColor.Red;
                blip.IsShortRange = true;
                blip.Alpha        = 0;

                ped.IsPersistent = false;
                ped.MarkAsNoLongerNeeded();
            });
            // 所有任务目标死亡, 则视为任务完成
            if (missionPeds.All(ped => ped.IsDead))
            {
                Leave("finish");
                Deactivate();
            }
        }
コード例 #2
0
        /// <summary>
        /// 保持激活状态
        /// </summary>
        private void RetainActivateState()
        {
            var missionPeds = MissionPedController.GetAllMissionPeds();

            #region 显示范围Blip
            if (RadiusBlip is null)
            {
                RadiusBlip = World.CreateBlip(MissionInfo.RangeInfo.Position, MissionInfo.RangeInfo.Radius);
            }
            RadiusBlip.Alpha     = 64;
            RadiusBlip.Color     = BlipColor.Red;
            RadiusBlip.ShowRoute = false;
            #endregion

            // 范围内显示敌人位置
            missionPeds
            .Where(ped => ped.IsAlive)
            .ToList().ForEach(ped =>
            {
                var blip = ped.AttachedBlip;
                if (blip is null)
                {
                    blip = ped.AttachBlip();
                }
                blip.Color        = BlipColor.Red;
                blip.IsShortRange = true;
                blip.Alpha        = 256;
            });
        }
コード例 #3
0
        public void Delete()
        {
            Leave("delete");
            Deactivate();

            MissionPedController.GetAllMissionPeds().ForEach(ped =>
            {
                ped.AttachedBlip?.Delete();
                ped.Delete();
                //ped.HealthFloat = 0;
                //ped.IsPersistent = false;
                //ped.MarkAsNoLongerNeeded();
            });

            RadiusBlip?.Delete();

            _existed = false;
        }
コード例 #4
0
        /// <summary>
        /// 保持加入状态
        /// </summary>
        private void RetainJoinState()
        {
            var missionPeds = MissionPedController.GetAllMissionPeds();

            #region 显示范围Blip
            if (RadiusBlip is null)
            {
                RadiusBlip = World.CreateBlip(MissionInfo.RangeInfo.Position, MissionInfo.RangeInfo.Radius);
            }
            RadiusBlip.Alpha     = 64;
            RadiusBlip.Color     = BlipColor.Red;
            RadiusBlip.ShowRoute = true;
            #endregion

            // 全地图显示敌人位置
            missionPeds
            .Where(ped => ped.IsAlive)
            .ToList().ForEach(ped =>
            {
                var blip = ped.AttachedBlip;
                if (blip is null)
                {
                    blip = ped.AttachBlip();
                }
                blip.Color        = BlipColor.Red;
                blip.IsShortRange = false;
                blip.Alpha        = 256;
            });

            // 如果仍有敌人存活, 则保持通缉状态
            if (missionPeds.Any(ped => ped.IsAlive))
            {
                API.SetPlayerWantedLevel(Game.Player.Handle, 5, false);
                API.SetPlayerWantedLevelNow(Game.Player.Handle, false);
            }

            // 设置当前刷新的警察为同伴
            if (SetCopAllianceTimer.IsMeet())
            {
                World.GetAllPeds()
                .Where(ped => !ped.IsPlayer && ped.IsCop())
                .ToList().ForEach(ped => ped.SetAsAlliance());
            }
        }
コード例 #5
0
        /// <summary>
        /// 时间间隔较为宽松的检测的异步方法
        /// </summary>
        /// <returns></returns>
        public async Task TolerantTick()
        {
            var missionPeds = MissionPedController.GetAllMissionPeds();

            // 已经加入
            if (IsJoined)
            {
                RetainJoinState();
                CheckFinishState();
            }
            else if (IsActivated)
            {
                RetainActivateState();
            }
            else
            {
                RevertBaseState();
            }

            await BaseScript.Delay(1000);
        }