// Get vehicle in area private Vehicle GetVehicleInArea() { Vector3 PlayerPos = LocalPlayer.Character.Position; Vehicle vehicle; foreach (SawVehicle veh in SawVehicles) { var truck = API.GetClosestVehicle(LocalPlayer.Character.Position.X, LocalPlayer.Character.Position.Y, LocalPlayer.Character.Position.Z, 5f, (uint)API.GetHashKey(veh.Model), 70); if (truck != 0) { vehicle = new Vehicle(truck); return(vehicle); } } return(null); }
// Handles cutting | saw storage and grab | saw pickup and drop private async Task OnTick() { await Task.FromResult(0); if (ScriptReady) { if (CurrentSaw == null) { Vehicle truck = GetVehicleInArea(); // Grabbing saw from vehicle if (truck != null) { var CheckedVehicle = CheckCastedVehicle(truck); if (CheckedVehicle != null) { World.DrawMarker(MarkerType.HorizontalCircleSkinny, truck.GetOffsetPosition(CheckedVehicle.MarkerPos), new Vector3(0f, 0f, 0f), new Vector3(0f, 0f, 0f), new Vector3(1f, 1f, 1f), System.Drawing.Color.FromArgb(255, 0, 0), false, false, true, null, null, false); if (World.GetDistance(LocalPlayer.Character.Position, truck.GetOffsetPosition(CheckedVehicle.MarkerPos)) <= 1.2f) { Screen.DisplayHelpTextThisFrame($"~INPUT_PICKUP~ Retrieve Saw"); if (Game.IsControlJustPressed(1, Control.Pickup)) { await RetrieveSaw(); } } } } // Pickup Saw From Ground var LocalPedPos = LocalPlayer.Character.Position; var closestSaw = API.GetClosestObjectOfType(LocalPedPos.X, LocalPedPos.Y, LocalPedPos.Z, 5f, (uint)API.GetHashKey(SawModel), false, true, true); var closestSawPos = API.GetEntityCoords(closestSaw, false); var closestSawDistance = World.GetDistance(LocalPedPos, API.GetEntityCoords(closestSaw, false)); if (closestSaw != 0 && !LocalPlayer.Character.IsInVehicle() && API.GetEntityAttachedTo(closestSaw) == 0) { World.DrawMarker(MarkerType.HorizontalCircleSkinny, closestSawPos, new Vector3(0f, 0f, 0f), new Vector3(0f, 0f, 0f), new Vector3(1f, 1f, 1f), System.Drawing.Color.FromArgb(255, 0, 0), false, false, true, null, null, false); if (closestSawDistance <= 1.2f) { Screen.DisplayHelpTextThisFrame($"~INPUT_PICKUP~ Pickup Saw"); if (Game.IsControlJustPressed(1, Control.Pickup)) { await PickupSaw(closestSaw); } } } } else { Game.DisableControlThisFrame(1, Control.Attack); Game.DisableControlThisFrame(1, Control.Attack2); Game.DisableControlThisFrame(1, Control.Jump); Game.DisableControlThisFrame(1, Control.Aim); Game.DisableControlThisFrame(1, Control.Enter); if (LocalPlayer.Character.Weapons.Current.Hash != WeaponHash.Unarmed) { API.SetCurrentPedWeapon(LocalPlayer.Character.Handle, (uint)WeaponHash.Unarmed, true); } Vehicle truck = GetVehicleInArea(); Vehicle vehicle = GetVehicleFromCast(); // Storing saw to vehicle if (truck != null) { var CheckedVehicle = CheckCastedVehicle(truck); if (CheckedVehicle != null) { World.DrawMarker(MarkerType.HorizontalCircleSkinny, truck.GetOffsetPosition(CheckedVehicle.MarkerPos), new Vector3(0f, 0f, 0f), new Vector3(0f, 0f, 0f), new Vector3(1f, 1f, 1f), System.Drawing.Color.FromArgb(255, 0, 0), false, false, true, null, null, false); if (World.GetDistance(LocalPlayer.Character.Position, truck.GetOffsetPosition(CheckedVehicle.MarkerPos)) <= 1.2f) { Screen.DisplayHelpTextThisFrame($"~INPUT_PICKUP~ Store Saw"); if (Game.IsControlJustPressed(1, Control.Pickup)) { StoreSaw(); } } } } else { // Dropping Saw if (Game.IsControlJustPressed(1, Control.Detonate)) { await DropSaw(); } } // Cutting Logic if (KeyHolding && GetClosestDoorBone(vehicleBeingCut) != (VehicleDoorIndex)(-1) && !vehicleBeingCut.Doors[GetClosestDoorBone(vehicleBeingCut)].IsBroken) { if (Game.IsDisabledControlPressed(1, Control.Attack)) { if (Game.GameTime > KeyHoldStartTime) { KeyHolding = false; KeyHoldStartTime = 0; TriggerServerEvent("ExtractionSaw:StopSawCutSync", CurrentSawNetHandle); VehicleDoorIndex doorIndex = GetClosestDoorBone(vehicle); CutDoor(vehicleBeingCut, doorIndex); } BarTimerBar bar = new BarTimerBar("Cutting Door"); bar.Percentage = 1f - (float)(((KeyHoldStartTime - Game.GameTime) / 1000) * 0.1m) - 0.1f; bar.Draw(0); } else { KeyHoldStartTime = 0; KeyHolding = false; TriggerServerEvent("ExtractionSaw:StopSawCutSync", CurrentSawNetHandle); } } else { if (Game.IsDisabledControlPressed(1, Control.Attack) && GetClosestDoorBone(vehicle) != (VehicleDoorIndex)(-1)) { KeyHoldStartTime = Game.GameTime + (CutTimer * 1000); vehicleBeingCut = vehicle; KeyHolding = true; } } // Saw Particle Syncing if (KeyHolding) { LoopParticles(); } } } }
private void TestStartScenario() { Function.Call(Hash._TASK_START_SCENARIO_IN_PLACE, API.PlayerPedId(), API.GetHashKey("WORLD_HUMAN_SMOKE"), -1, true, false, false, false); }