ItsClonkAndre Posted January 19, 2021 Share Posted January 19, 2021 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 comment Share on other sites More sharing options...
Teki Posted January 23, 2021 Share Posted January 23, 2021 (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, 2021 by Teki precision ItsClonkAndre 1 Link to comment Share on other sites More sharing options...
ItsClonkAndre Posted January 28, 2021 Author Share Posted January 28, 2021 Thank you very much! That definitely helped me out! Teki 1 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