Jump to content
    1. Welcome to GTAForums!

    1. GTANet.com

    1. GTA Online

      1. Los Santos Drug Wars
      2. Updates
      3. Find Lobbies & Players
      4. Guides & Strategies
      5. Vehicles
      6. Content Creator
      7. Help & Support
    2. Red Dead Online

      1. Blood Money
      2. Frontier Pursuits
      3. Find Lobbies & Outlaws
      4. Help & Support
    3. Crews

    1. Grand Theft Auto Series

      1. Bugs*
      2. St. Andrews Cathedral
    2. GTA VI

    3. GTA V

      1. Guides & Strategies
      2. Help & Support
    4. GTA IV

      1. The Lost and Damned
      2. The Ballad of Gay Tony
      3. Guides & Strategies
      4. Help & Support
    5. GTA San Andreas

      1. Classic GTA SA
      2. Guides & Strategies
      3. Help & Support
    6. GTA Vice City

      1. Classic GTA VC
      2. Guides & Strategies
      3. Help & Support
    7. GTA III

      1. Classic GTA III
      2. Guides & Strategies
      3. Help & Support
    8. Portable Games

      1. GTA Chinatown Wars
      2. GTA Vice City Stories
      3. GTA Liberty City Stories
    9. Top-Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    1. Red Dead Redemption 2

      1. PC
      2. Help & Support
    2. Red Dead Redemption

    1. GTA Mods

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Red Dead Mods

      1. Documentation
    3. Mod Showroom

      1. Scripts & Plugins
      2. Maps
      3. Total Conversions
      4. Vehicles
      5. Textures
      6. Characters
      7. Tools
      8. Other
      9. Workshop
    4. Featured Mods

      1. Design Your Own Mission
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Rockstar Games

    2. Rockstar Collectors

    1. Off-Topic

      1. General Chat
      2. Gaming
      3. Technology
      4. Movies & TV
      5. Music
      6. Sports
      7. Vehicles
    2. Expression

      1. Graphics / Visual Arts
      2. GFX Requests & Tutorials
      3. Writers' Discussion
      4. Debates & Discussion
    1. Announcements

    2. Support

    3. Suggestions

Happy Holidays from the GTANet team!

Multiple timers


Aldebaraan
 Share

Recommended Posts

 

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 by Aldebaraan
Link to comment
Share on other sites

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 by LeeC22
Link to comment
Share on other sites

@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 by Aldebaraan
Link to comment
Share on other sites

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 by LeeC22
Link to comment
Share on other sites

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • 1 User Currently Viewing
    0 members, 0 Anonymous, 1 Guest

×
×
  • Create New...

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.