Quantcast
Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
    1. Welcome to GTAForums!

    1. GTANet.com

    1. GTA Online

      1. The Cayo Perico Heist
      2. Find Lobbies & Players
      3. Guides & Strategies
      4. Vehicles
      5. Content Creator
      6. Help & Support
    2. Red Dead Online

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

    1. Red Dead Redemption 2

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

    1. Grand Theft Auto Series

    2. GTA VI

      1. St. Andrews Cathedral
    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. Guides & Strategies
      2. Help & Support
    6. GTA Vice City

      1. Guides & Strategies
      2. Help & Support
    7. GTA III

      1. Guides & Strategies
      2. 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. 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
    3. Gangs

    1. Announcements

    2. Support

    3. Suggestions

Multithreading in .NET Scripts?


ItsClonkAndre

Recommended Posts

ItsClonkAndre

Currently i'm using Script.Wait(time), for example, to place a camera step-by-step in to the air. But in that time, i cant do other things, and the process needs to be done until i can proceed.

Is it possible to create threads in a .NET Script so that GTA IV (or the script) wont freeze?

Link to post
Share on other sites

I can't remember the exact reason but while it is possible to do multi threading with .NET Script it's not recommended. I may say some dumb things but I thinks it's because the game objects can only be accessed through the main thread or something like this.
In the other hand it's possible to run parallel tasks, so you can launch a long non-blocking task while your main script keeps executing.

 

Here is an example to start a fire and stop it 30s later :

			...
				//Somewhere in your logic you need to start a fire for 30s :
				int fireHandler = Function.Call<int>("START_SCRIPT_FIRE", aimPos.X, aimPos.Y, aimPos.Z, 10, 10); // My fire
				int stopTime = Game.GameTime + 30000; // My stop time
				EventHandler handler = null; // My EventHandler initialised
				handler = (sender, e) => Fire_Tick(sender, e, handler, fireHandler, stopTime); // My EventHandler is instanciated (i know my syntax is poor, if you can shorter this 2 lines I'm interested)
				this.Tick += handler; // I hook my EventHandler to the main script Tick event.
			...
              
//This event handler have the same Interval than your main script and will look at GameTime each tick to stop the fire at the appropriate timing.
private void Fire_Tick(object sender, EventArgs e, EventHandler handler, int fireHandler, int stopTime) {
	if (Game.GameTime >= stopTime) { // Simple test if GameTime reached stop time I continue otherwise I do nothing till the next tick
		if (Function.Call<bool>("DOES_SCRIPT_FIRE_EXIST", fireHandler)) // Does my fire still exists ?
			Function.Call("REMOVE_SCRIPT_FIRE", fireHandler); // Remove my fire
		this.Tick -= handler; // De-hook my EventHandler from the main script Tick event.
	}
}

 

Please note if you wait or if you have very long tasks in your main script it will impact your EventHandler and vice-versa.

You can run many of those EventHandler, I use this code with my flamethrower mod to keep track of my scripted fires.

Hope it can be useful to you 😃

Edited by Teki
precision
  • Like 1
Link to post
Share on other sites
ItsClonkAndre

Thank you very much! That definitely helped me out! 👍

  • Like 1
Link to post
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
  • 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.