Jump to content

C# - Delete everything on exit/reload ?


Foxtrot64

Recommended Posts

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

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

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. :panic:

 

Here's my exact problem, because my script died twice:

W9gJIg5.jpg

 

:facedesk:

Link to comment
Share on other sites

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

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

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 by frodzet
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
  • 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.