/// <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(); } }
/// <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; }); }
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; }
/// <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()); } }
/// <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); }