Aldebaraan Posted December 20, 2020 Share Posted December 20, 2020 (edited) this executes MainLoop every 1 second: public Main() { LoadSettings(); Interval = 1000; Tick += MainLoop; KeyDown += onKeyDown; GTA.UI.Notify(ModName + " " + Version + " Loaded"); } How do i make it execute e.g. ProcessVehicles() every 3 seconds? Also is it possible to create timers inside functions? I saw a guy do that in visual basic else if (!vehicle.Driver.IsInCombat) { Ped nearestPed = World.GetNearbyPeds(Game.Player.Character, 100f)[0]; Vector3 nearestPedPos = nearestPed.Position; Function.Call(Hash.SET_VEHICLE_SHOOT_AT_TARGET, vehicle.Driver, nearestPedPos.X, nearestPedPos.Y, nearestPedPos.Z); } how do i make that execute every 100-500ms inside another timer? Edited December 20, 2020 by Aldebaraan Link to comment Share on other sites More sharing options...
LeeC22 Posted December 20, 2020 Share Posted December 20, 2020 (edited) There are a few ways of doing this. The simplest method, which the game scripts and some other people use is to use Game.GameTime. // Declare as Global Variable int ProcessVehicleTimer = 0; // In your MainLoop if (Game.GameTime >= ProcessVehicleTimer) { // Do ProcessVehicles() here ProcessVehicleTimer = Game.GameTime + 3000; } This will always run the first time because the timer is set to zero, but after that it will run after 3 seconds, or whatever time you add when you reset the timer. You can either do this in your MainLoop or you could add the timer checking inside a function and simply return from the function if the right amount of time hasn't passed. // In your Function if (Game.GameTime >= ProcessVehicleTimer) { ProcessVehicleTimer = Game.GameTime + 3000; } else { // return if the right amount of time hasn't passed return; } There's also a project I created for someone who never came back in this comment https://gtaforums.com/topic/924484-c-using-timers-and-intervals/?do=findComment&comment=1070686035 That was on my old account but the link is still working. That's a multi-timer system that's pretty flexible, feel free to use anything you want out of that. Edited December 20, 2020 by LeeC22 Aldebaraan 1 Link to comment Share on other sites More sharing options...
Aldebaraan Posted December 20, 2020 Author Share Posted December 20, 2020 (edited) @LeeC22Thanks. That worked. But now there's another problem: private void ProcessSpawnedPilots() { foreach (Ped ped in spawnedVehiclePilots) { Ped nearestPed; Vector3 nearestPedPos; if (Game.GameTime >= ProcessPilotsTimer) { //if they are dead or too far from the player if (ped.IsDead || !ped.IsNearEntity(Game.Player.Character, new Vector3(100, 100, 100))) { pedsRemove.Add(ped); deadPeds.Add(ped); if (RemoveDeadPeds) ped.MarkAsNoLongerNeeded(); } else if (!ped.IsInCombat) { nearestPed = World.GetNearbyPeds(ped, 100f)[0]; nearestPedPos = nearestPed.Position; } foreach (Ped ped1 in pedsRemove) { //spawnedTotal.Remove(ped); spawnedVehiclePilots.Remove(ped1); } pedsRemove.Clear(); ProcessVehicleTimer = Game.GameTime + 2500; } if (ped.IsAlive) { Function.Call(Hash.SET_VEHICLE_SHOOT_AT_TARGET, ped, nearestPedPos.X, nearestPedPos.Y, nearestPedPos.Z); } } } I'm trying to make the pilots choose a target every 2.5 seconds and then shoot that same target using SET_VEHICLE_SHOOT_AT_TARGET every 50 milliseconds until the timer is triggered again (main loop runs every 50ms and this code is called from that). Problem is that i get a "Use of possibly unassigned field error" in visual studio. I don't know how can i assign a different target to each pilot without running into that error. Edited December 20, 2020 by Aldebaraan Link to comment Share on other sites More sharing options...
LeeC22 Posted December 20, 2020 Share Posted December 20, 2020 (edited) 28 minutes ago, Aldebaraan said: "Use of possibly unassigned field error" You are going to have to be a bit more specific than that. Where in the code, what field? NVM, I copied the code into a project, it's because you haven't initialised nearestPedPos, change that variable line to this: Vector3 nearestPedPos = Vector3.Zero; You have to initialise local variables before you can use them. Edited December 20, 2020 by LeeC22 Link to comment Share on other sites More sharing options...
Aldebaraan Posted December 20, 2020 Author Share Posted December 20, 2020 10 minutes ago, LeeC22 said: You are going to have to be a bit more specific than that. Where in the code, what field? in the SET_VEHICLE_SHOOT_AT_TARGET line. It gives errors that the xyz coordinates possibly aren't set. Link to comment Share on other sites More sharing options...
LeeC22 Posted December 20, 2020 Share Posted December 20, 2020 Just now, Aldebaraan said: in the SET_VEHICLE_SHOOT_AT_TARGET line. It gives errors that the xyz coordinates possibly aren't set. Just edited my answer with the solution. Link to comment Share on other sites More sharing options...
Aldebaraan Posted December 20, 2020 Author Share Posted December 20, 2020 1 hour ago, LeeC22 said: Just edited my answer with the solution. Thanks! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now