ItsClonkAndre 23 Posted January 19 Share Posted January 19 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
Teki 31 Posted January 23 Share Posted January 23 (edited) 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 January 23 by Teki precision 1 Link to post Share on other sites
ItsClonkAndre 23 Posted January 28 Author Share Posted January 28 Thank you very much! That definitely helped me out! 👍 1 Link to post Share on other sites