Foxtrot64 Posted July 18, 2015 Share Posted July 18, 2015 Hi. I'm working on a mod at the moment and things are looking pretty good. There's a few things I'm trying to get right before I make a release. I spawn a number entities into the world but because my script is getting so large, it's getting difficult to pinpoint errors without going backwards and forwards between the code and the game. Unfortunately, when my script decides to fail, all entities are left in the world and bodies and objects start to pile up. Assuming the script runs gracefully, all entities can be deleted without issue, however if there's an exception I loose the List tracking the entities. I was wondering if anyone knows how I can run an event following an exception or the scripthook being reloaded (pressing Insert). I've noticed in the ScriptHookVDotNet log this sometimes happens: [00:14:19] [ERROR] Caught fatal unhandled exception:System.NullReferenceException: Object reference not set to an instance of an object. at MyMod.Class2.check_for_dead() at MyMod.Class2.onTick(Object sender, EventArgs e) at GTA.Script.MainLoop() I understand Try/Catch/Exceptions in the most basic form, but I was hoping if anyone had a snippet that catches all fatal exceptions like this? I'm also looking for a similar snippet that can run when I reload the script using the Insert key. Link to comment Share on other sites More sharing options...
CamxxCore Posted July 19, 2015 Share Posted July 19, 2015 (edited) Hi. I'm working on a mod at the moment and things are looking pretty good. There's a few things I'm trying to get right before I make a release. I spawn a number entities into the world but because my script is getting so large, it's getting difficult to pinpoint errors without going backwards and forwards between the code and the game. Unfortunately, when my script decides to fail, all entities are left in the world and bodies and objects start to pile up. Assuming the script runs gracefully, all entities can be deleted without issue, however if there's an exception I loose the List tracking the entities. I was wondering if anyone knows how I can run an event following an exception or the scripthook being reloaded (pressing Insert). I've noticed in the ScriptHookVDotNet log this sometimes happens: [00:14:19] [ERROR] Caught fatal unhandled exception:System.NullReferenceException: Object reference not set to an instance of an object. at MyMod.Class2.check_for_dead() at MyMod.Class2.onTick(Object sender, EventArgs e) at GTA.Script.MainLoop() I understand Try/Catch/Exceptions in the most basic form, but I was hoping if anyone had a snippet that catches all fatal exceptions like this? I'm also looking for a similar snippet that can run when I reload the script using the Insert key. You should do your best to work to the bottom of that error before you look at an approach like that. Try/ catch can be an easy fix but its usually not what you want. It might make sense if you were making server connections or something where the outcome can be unpredictable. There is a reason it is throwing an exception so you should look into that first. Alternatively, if all else fails i think you could override the dispose method. Edited July 19, 2015 by CamxxCore Link to comment Share on other sites More sharing options...
CamxxCore Posted July 19, 2015 Share Posted July 19, 2015 http://gtaforums.com/topic/803529-c-detect-mod-being-refreshed-and-remove-blips/ Link to comment Share on other sites More sharing options...
Foxtrot64 Posted July 19, 2015 Author Share Posted July 19, 2015 Overriding the dispose method seems a good idea. I'm not actually looking to just ignore errors, I just spawn a lot of stuff in to an exact location, meaning when the script does die in testing, I can't get rid of the bodies. Here's my exact problem, because my script died twice: Link to comment Share on other sites More sharing options...
Ethenal Posted July 19, 2015 Share Posted July 19, 2015 Overriding the dispose method and freeing up all of your resources would work I imagine... but in the event you haven't thought of this, reloading a save will clear all the entities and blips and such. I used that quite a few times when experiencing the same issue with my scripts. Link to comment Share on other sites More sharing options...
Foxtrot64 Posted July 19, 2015 Author Share Posted July 19, 2015 Overriding the dispose method has actually created more problems then it's solved. I don't think I quite got the code right, but a fatal exception causes the entire game to crash. The dispose works fine if I reload the script. Guess I'll just stick with reloading the game save. Thanks for pointing that out. I thought moving forwards between Director and Story mode would of refreshed everything but reloading the game saves seems to do the trick. Link to comment Share on other sites More sharing options...
frodzet Posted July 19, 2015 Share Posted July 19, 2015 (edited) Not sure if i'm off-topic here, but can't you just have an activation key that will iterate through all Peds in the area and delete them? If you want it to happen everytime you reload the script just associate the deletion with the insert key. Edited July 19, 2015 by frodzet 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