Jump to content
    1. Welcome to GTAForums!

    1. GTANet.com

    1. GTA Online

      1. Los Santos Drug Wars
      2. Updates
      3. Find Lobbies & Players
      4. Guides & Strategies
      5. Vehicles
      6. Content Creator
      7. Help & Support
    2. Red Dead Online

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

    1. Grand Theft Auto Series

      1. Bugs*
      2. St. Andrews Cathedral
    2. GTA VI

    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. Classic GTA SA
      2. Guides & Strategies
      3. Help & Support
    6. GTA Vice City

      1. Classic GTA VC
      2. Guides & Strategies
      3. Help & Support
    7. GTA III

      1. Classic GTA III
      2. Guides & Strategies
      3. 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. Red Dead Redemption 2

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

    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
    1. Announcements

    2. Forum Support

    3. Suggestions

[C++]Calling natives on script exit crashes game


ikt
 Share

Recommended Posts

I've got a really simple script to disable the music during a wanted level or during flight, but it crashes the game when trying to clean itself up. Reloading the script while the game is running doesn't cause any trouble and does restore the music, and on exit it doesn't crash if scripts have been unloaded prior to this.

 

main.cpp

#include "script.h"BOOL APIENTRY DllMain(HMODULE hInstance, DWORD reason, LPVOID lpReserved) {    switch (reason) {        case DLL_PROCESS_ATTACH: {            scriptRegister(hInstance, ScriptMain);            break;        }        case DLL_PROCESS_DETACH: {            ScriptExit();            scriptUnregister(hInstance);            break;        }    }    return TRUE;}

script.h

#pragma once#include "../../ScriptHookV_SDK/inc/natives.h"#include "../../ScriptHookV_SDK/inc/main.h"#include "../../ScriptHookV_SDK/inc/types.h"void ScriptMain();void ScriptExit();

script.cpp

#include "script.h"void ScriptMain() {    AUDIO::SET_AUDIO_FLAG("WantedMusicDisabled", true);    AUDIO::SET_AUDIO_FLAG("DisableFlightMusic", true);}void ScriptExit() {    AUDIO::SET_AUDIO_FLAG("WantedMusicDisabled", false);    AUDIO::SET_AUDIO_FLAG("DisableFlightMusic", false);}

No idea how to fix it aside from not undoing my changes, but that just feels weird.

Edited by ikt
Link to comment
Share on other sites

Maybe a stupid question... but why you're using "ScriptExit()"?

bool bDisableMusic = 0;void main(){	while (true)	{		if (key(77)) // <M>		{			if (bDisableMusic == 0)			{				SET_AUDIO_FLAG(("WantedMusicDisabled", 1);				SET_AUDIO_FLAG("DisableFlightMusic", 1);				print("~r~Music disabled");				bDisableMusic = 1;			}			else			{				SET_AUDIO_FLAG(("WantedMusicDisabled", 0);				SET_AUDIO_FLAG("DisableFlightMusic", 0);				print("~g~Music enabled");				bDisableMusic = 0;			}		}				WAIT(0);	}	}void ScriptMain(){	main();}

IMO its still the best method.

 

 

EDIT: Did you tried this? (not tested!)

scriptUnregister(ScriptExit);
Edited by Skorpro
Link to comment
Share on other sites

  • 2 weeks later...

Maybe a stupid question... but why you're using "ScriptExit()"?

bool bDisableMusic = 0;void main(){	while (true)	{		if (key(77)) // <M>		{			if (bDisableMusic == 0)			{				SET_AUDIO_FLAG(("WantedMusicDisabled", 1);				SET_AUDIO_FLAG("DisableFlightMusic", 1);				print("~r~Music disabled");				bDisableMusic = 1;			}			else			{				SET_AUDIO_FLAG(("WantedMusicDisabled", 0);				SET_AUDIO_FLAG("DisableFlightMusic", 0);				print("~g~Music enabled");				bDisableMusic = 0;			}		}				WAIT(0);	}	}void ScriptMain(){	main();}
IMO its still the best method.

 

 

EDIT: Did you tried this? (not tested!)

 

scriptUnregister(ScriptExit);

 

It's not supposed to be user-interactive and should shut down cleanly. Also no, scriptUnregister only takes the module handle. Eh, I'll leave it as-is.

Link to comment
Share on other sites

Unfortunately there's no way around this, you must invoke your natives within the registered function. Just invoke them in whatever function triggers the unloading.

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
 Share

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