mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2024-11-08 00:37:15 +01:00
Don't destroy entity instances from the server at server shutdown.
This commit is contained in:
parent
0599b57087
commit
3fab6d931f
@ -100,12 +100,12 @@ public:
|
|||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
* Default constructor.
|
* Default constructor.
|
||||||
*/
|
*/
|
||||||
ContainerCleaner(T & container, EntityType type)
|
ContainerCleaner(T & container, EntityType type, bool shutdown)
|
||||||
: m_Type(type)
|
: m_Type(type)
|
||||||
{
|
{
|
||||||
for (auto & ent : container)
|
for (auto & ent : container)
|
||||||
{
|
{
|
||||||
ent.Destroy();
|
ent.Destroy(shutdown);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,7 +150,7 @@ Core::~Core()
|
|||||||
{
|
{
|
||||||
if (m_VM)
|
if (m_VM)
|
||||||
{
|
{
|
||||||
Terminate();
|
Terminate(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -436,7 +436,7 @@ bool Core::Execute()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void Core::Terminate()
|
void Core::Terminate(bool shutdown)
|
||||||
{
|
{
|
||||||
if (m_VM)
|
if (m_VM)
|
||||||
{
|
{
|
||||||
@ -446,13 +446,13 @@ void Core::Terminate()
|
|||||||
}
|
}
|
||||||
LogDbg("Clearing the entity containers");
|
LogDbg("Clearing the entity containers");
|
||||||
// Release all entity resources by clearing the containers
|
// Release all entity resources by clearing the containers
|
||||||
const ContainerCleaner< Players > cc_players(m_Players, ENT_PLAYER);
|
const ContainerCleaner< Players > cc_players(m_Players, ENT_PLAYER, shutdown);
|
||||||
const ContainerCleaner< Vehicles > cc_vehicles(m_Vehicles, ENT_VEHICLE);
|
const ContainerCleaner< Vehicles > cc_vehicles(m_Vehicles, ENT_VEHICLE, shutdown);
|
||||||
const ContainerCleaner< Objects > cc_objects(m_Objects, ENT_OBJECT);
|
const ContainerCleaner< Objects > cc_objects(m_Objects, ENT_OBJECT, shutdown);
|
||||||
const ContainerCleaner< Pickups > cc_pickups(m_Pickups, ENT_PICKUP);
|
const ContainerCleaner< Pickups > cc_pickups(m_Pickups, ENT_PICKUP, shutdown);
|
||||||
const ContainerCleaner< Checkpoints > cc_checkpoints(m_Checkpoints, ENT_CHECKPOINT);
|
const ContainerCleaner< Checkpoints > cc_checkpoints(m_Checkpoints, ENT_CHECKPOINT, shutdown);
|
||||||
const ContainerCleaner< Blips > cc_blips(m_Blips, ENT_BLIP);
|
const ContainerCleaner< Blips > cc_blips(m_Blips, ENT_BLIP, shutdown);
|
||||||
const ContainerCleaner< Keybinds > cc_keybinds(m_Keybinds, ENT_KEYBIND);
|
const ContainerCleaner< Keybinds > cc_keybinds(m_Keybinds, ENT_KEYBIND, shutdown);
|
||||||
LogDbg("Terminating routines an commands");
|
LogDbg("Terminating routines an commands");
|
||||||
// Release all resources from routines
|
// Release all resources from routines
|
||||||
TerminateRoutines();
|
TerminateRoutines();
|
||||||
@ -509,7 +509,7 @@ bool Core::Reload()
|
|||||||
return false; // Request denied!
|
return false; // Request denied!
|
||||||
}
|
}
|
||||||
// Terminate the current VM and release resources
|
// Terminate the current VM and release resources
|
||||||
Terminate();
|
Terminate(false);
|
||||||
// Reset the reload header after termination
|
// Reset the reload header after termination
|
||||||
m_ReloadHeader = -1;
|
m_ReloadHeader = -1;
|
||||||
// Attempt to initialize the central core and load resources
|
// Attempt to initialize the central core and load resources
|
||||||
@ -724,7 +724,7 @@ void Core::BindEvent(Int32 id, Object & env, Function & func)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void Core::BlipInst::Destroy()
|
void Core::BlipInst::Destroy(bool shutdown)
|
||||||
{
|
{
|
||||||
// Should we notify that this entity is being cleaned up?
|
// Should we notify that this entity is being cleaned up?
|
||||||
if (VALID_ENTITY(mID))
|
if (VALID_ENTITY(mID))
|
||||||
@ -739,8 +739,8 @@ void Core::BlipInst::Destroy()
|
|||||||
// Release user data to avoid dangling or circular references
|
// Release user data to avoid dangling or circular references
|
||||||
mInst->m_Data.Release();
|
mInst->m_Data.Release();
|
||||||
}
|
}
|
||||||
// Are we supposed to clean up this entity?
|
// Are we supposed to clean up this entity? (only at reload)
|
||||||
if (VALID_ENTITY(mID) && (mFlags & ENF_OWNED))
|
if (!shutdown && VALID_ENTITY(mID) && (mFlags & ENF_OWNED))
|
||||||
{
|
{
|
||||||
// Block the entity pool changes notification from triggering the destroy event
|
// Block the entity pool changes notification from triggering the destroy event
|
||||||
const BitGuardU16 bg(mFlags, static_cast< Uint16 >(ENF_LOCKED));
|
const BitGuardU16 bg(mFlags, static_cast< Uint16 >(ENF_LOCKED));
|
||||||
@ -754,7 +754,7 @@ void Core::BlipInst::Destroy()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void Core::CheckpointInst::Destroy()
|
void Core::CheckpointInst::Destroy(bool shutdown)
|
||||||
{
|
{
|
||||||
// Should we notify that this entity is being cleaned up?
|
// Should we notify that this entity is being cleaned up?
|
||||||
if (VALID_ENTITY(mID))
|
if (VALID_ENTITY(mID))
|
||||||
@ -769,8 +769,8 @@ void Core::CheckpointInst::Destroy()
|
|||||||
// Release user data to avoid dangling or circular references
|
// Release user data to avoid dangling or circular references
|
||||||
mInst->m_Data.Release();
|
mInst->m_Data.Release();
|
||||||
}
|
}
|
||||||
// Are we supposed to clean up this entity?
|
// Are we supposed to clean up this entity? (only at reload)
|
||||||
if (VALID_ENTITY(mID) && (mFlags & ENF_OWNED))
|
if (!shutdown && VALID_ENTITY(mID) && (mFlags & ENF_OWNED))
|
||||||
{
|
{
|
||||||
// Block the entity pool changes notification from triggering the destroy event
|
// Block the entity pool changes notification from triggering the destroy event
|
||||||
const BitGuardU16 bg(mFlags, static_cast< Uint16 >(ENF_LOCKED));
|
const BitGuardU16 bg(mFlags, static_cast< Uint16 >(ENF_LOCKED));
|
||||||
@ -784,7 +784,7 @@ void Core::CheckpointInst::Destroy()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void Core::KeybindInst::Destroy()
|
void Core::KeybindInst::Destroy(bool shutdown)
|
||||||
{
|
{
|
||||||
// Should we notify that this entity is being cleaned up?
|
// Should we notify that this entity is being cleaned up?
|
||||||
if (VALID_ENTITY(mID))
|
if (VALID_ENTITY(mID))
|
||||||
@ -799,8 +799,8 @@ void Core::KeybindInst::Destroy()
|
|||||||
// Release user data to avoid dangling or circular references
|
// Release user data to avoid dangling or circular references
|
||||||
mInst->m_Data.Release();
|
mInst->m_Data.Release();
|
||||||
}
|
}
|
||||||
// Are we supposed to clean up this entity?
|
// Are we supposed to clean up this entity? (only at reload)
|
||||||
if (VALID_ENTITY(mID) && (mFlags & ENF_OWNED))
|
if (!shutdown && VALID_ENTITY(mID) && (mFlags & ENF_OWNED))
|
||||||
{
|
{
|
||||||
// Block the entity pool changes notification from triggering the destroy event
|
// Block the entity pool changes notification from triggering the destroy event
|
||||||
const BitGuardU16 bg(mFlags, static_cast< Uint16 >(ENF_LOCKED));
|
const BitGuardU16 bg(mFlags, static_cast< Uint16 >(ENF_LOCKED));
|
||||||
@ -814,7 +814,7 @@ void Core::KeybindInst::Destroy()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void Core::ObjectInst::Destroy()
|
void Core::ObjectInst::Destroy(bool shutdown)
|
||||||
{
|
{
|
||||||
// Should we notify that this entity is being cleaned up?
|
// Should we notify that this entity is being cleaned up?
|
||||||
if (VALID_ENTITY(mID))
|
if (VALID_ENTITY(mID))
|
||||||
@ -829,8 +829,8 @@ void Core::ObjectInst::Destroy()
|
|||||||
// Release user data to avoid dangling or circular references
|
// Release user data to avoid dangling or circular references
|
||||||
mInst->m_Data.Release();
|
mInst->m_Data.Release();
|
||||||
}
|
}
|
||||||
// Are we supposed to clean up this entity?
|
// Are we supposed to clean up this entity? (only at reload)
|
||||||
if (VALID_ENTITY(mID) && (mFlags & ENF_OWNED))
|
if (!shutdown && VALID_ENTITY(mID) && (mFlags & ENF_OWNED))
|
||||||
{
|
{
|
||||||
// Block the entity pool changes notification from triggering the destroy event
|
// Block the entity pool changes notification from triggering the destroy event
|
||||||
const BitGuardU16 bg(mFlags, static_cast< Uint16 >(ENF_LOCKED));
|
const BitGuardU16 bg(mFlags, static_cast< Uint16 >(ENF_LOCKED));
|
||||||
@ -844,7 +844,7 @@ void Core::ObjectInst::Destroy()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void Core::PickupInst::Destroy()
|
void Core::PickupInst::Destroy(bool shutdown)
|
||||||
{
|
{
|
||||||
// Should we notify that this entity is being cleaned up?
|
// Should we notify that this entity is being cleaned up?
|
||||||
if (VALID_ENTITY(mID))
|
if (VALID_ENTITY(mID))
|
||||||
@ -859,8 +859,8 @@ void Core::PickupInst::Destroy()
|
|||||||
// Release user data to avoid dangling or circular references
|
// Release user data to avoid dangling or circular references
|
||||||
mInst->m_Data.Release();
|
mInst->m_Data.Release();
|
||||||
}
|
}
|
||||||
// Are we supposed to clean up this entity?
|
// Are we supposed to clean up this entity? (only at reload)
|
||||||
if (VALID_ENTITY(mID) && (mFlags & ENF_OWNED))
|
if (!shutdown && VALID_ENTITY(mID) && (mFlags & ENF_OWNED))
|
||||||
{
|
{
|
||||||
// Block the entity pool changes notification from triggering the destroy event
|
// Block the entity pool changes notification from triggering the destroy event
|
||||||
const BitGuardU16 bg(mFlags, static_cast< Uint16 >(ENF_LOCKED));
|
const BitGuardU16 bg(mFlags, static_cast< Uint16 >(ENF_LOCKED));
|
||||||
@ -874,7 +874,7 @@ void Core::PickupInst::Destroy()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void Core::PlayerInst::Destroy()
|
void Core::PlayerInst::Destroy(bool /*shutdown*/)
|
||||||
{
|
{
|
||||||
// Should we notify that this entity is being cleaned up?
|
// Should we notify that this entity is being cleaned up?
|
||||||
if (VALID_ENTITY(mID))
|
if (VALID_ENTITY(mID))
|
||||||
@ -898,7 +898,7 @@ void Core::PlayerInst::Destroy()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void Core::VehicleInst::Destroy()
|
void Core::VehicleInst::Destroy(bool shutdown)
|
||||||
{
|
{
|
||||||
// Should we notify that this entity is being cleaned up?
|
// Should we notify that this entity is being cleaned up?
|
||||||
if (VALID_ENTITY(mID))
|
if (VALID_ENTITY(mID))
|
||||||
@ -913,8 +913,8 @@ void Core::VehicleInst::Destroy()
|
|||||||
// Release user data to avoid dangling or circular references
|
// Release user data to avoid dangling or circular references
|
||||||
mInst->m_Data.Release();
|
mInst->m_Data.Release();
|
||||||
}
|
}
|
||||||
// Are we supposed to clean up this entity?
|
// Are we supposed to clean up this entity? (only at reload)
|
||||||
if (VALID_ENTITY(mID) && (mFlags & ENF_OWNED))
|
if (!shutdown && VALID_ENTITY(mID) && (mFlags & ENF_OWNED))
|
||||||
{
|
{
|
||||||
// Block the entity pool changes notification from triggering the destroy event
|
// Block the entity pool changes notification from triggering the destroy event
|
||||||
const BitGuardU16 bg(mFlags, static_cast< Uint16 >(ENF_LOCKED));
|
const BitGuardU16 bg(mFlags, static_cast< Uint16 >(ENF_LOCKED));
|
||||||
|
@ -101,7 +101,7 @@ protected:
|
|||||||
/* ----------------------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------------------
|
||||||
* Destroy the entity instance from the server, if necessary.
|
* Destroy the entity instance from the server, if necessary.
|
||||||
*/
|
*/
|
||||||
void Destroy();
|
void Destroy(bool shutdown = false);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
Int32 mID; // The unique number that identifies this entity on the server.
|
Int32 mID; // The unique number that identifies this entity on the server.
|
||||||
@ -152,7 +152,7 @@ protected:
|
|||||||
/* ----------------------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------------------
|
||||||
* Destroy the entity instance from the server, if necessary.
|
* Destroy the entity instance from the server, if necessary.
|
||||||
*/
|
*/
|
||||||
void Destroy();
|
void Destroy(bool shutdown = false);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
Int32 mID; // The unique number that identifies this entity on the server.
|
Int32 mID; // The unique number that identifies this entity on the server.
|
||||||
@ -196,7 +196,7 @@ protected:
|
|||||||
/* ----------------------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------------------
|
||||||
* Destroy the entity instance from the server, if necessary.
|
* Destroy the entity instance from the server, if necessary.
|
||||||
*/
|
*/
|
||||||
void Destroy();
|
void Destroy(bool shutdown = false);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
Int32 mID; // The unique number that identifies this entity on the server.
|
Int32 mID; // The unique number that identifies this entity on the server.
|
||||||
@ -246,7 +246,7 @@ protected:
|
|||||||
/* ----------------------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------------------
|
||||||
* Destroy the entity instance from the server, if necessary.
|
* Destroy the entity instance from the server, if necessary.
|
||||||
*/
|
*/
|
||||||
void Destroy();
|
void Destroy(bool shutdown = false);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
Int32 mID; // The unique number that identifies this entity on the server.
|
Int32 mID; // The unique number that identifies this entity on the server.
|
||||||
@ -290,7 +290,7 @@ protected:
|
|||||||
/* ----------------------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------------------
|
||||||
* Destroy the entity instance from the server, if necessary.
|
* Destroy the entity instance from the server, if necessary.
|
||||||
*/
|
*/
|
||||||
void Destroy();
|
void Destroy(bool shutdown = false);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
Int32 mID; // The unique number that identifies this entity on the server.
|
Int32 mID; // The unique number that identifies this entity on the server.
|
||||||
@ -335,7 +335,7 @@ protected:
|
|||||||
/* ----------------------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------------------
|
||||||
* Destroy the entity instance from the server, if necessary.
|
* Destroy the entity instance from the server, if necessary.
|
||||||
*/
|
*/
|
||||||
void Destroy();
|
void Destroy(bool shutdown = false);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
Int32 mID; // The unique number that identifies this entity on the server.
|
Int32 mID; // The unique number that identifies this entity on the server.
|
||||||
@ -455,7 +455,7 @@ protected:
|
|||||||
/* ----------------------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------------------
|
||||||
* Destroy the entity instance from the server, if necessary.
|
* Destroy the entity instance from the server, if necessary.
|
||||||
*/
|
*/
|
||||||
void Destroy();
|
void Destroy(bool shutdown = false);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
Int32 mID; // The unique number that identifies this entity on the server.
|
Int32 mID; // The unique number that identifies this entity on the server.
|
||||||
@ -564,7 +564,7 @@ public:
|
|||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
* Terminate the plug-in core.
|
* Terminate the plug-in core.
|
||||||
*/
|
*/
|
||||||
void Terminate();
|
void Terminate(bool shutdown = false);
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
* Reload the plug-in core.
|
* Reload the plug-in core.
|
||||||
|
@ -132,7 +132,7 @@ static void OnServerShutdown(void)
|
|||||||
// Tell the script that the server is shutting down
|
// Tell the script that the server is shutting down
|
||||||
Core::Get().EmitServerShutdown();
|
Core::Get().EmitServerShutdown();
|
||||||
// Deallocate and release everything obtained at startup
|
// Deallocate and release everything obtained at startup
|
||||||
Core::Get().Terminate();
|
Core::Get().Terminate(true);
|
||||||
}
|
}
|
||||||
SQMOD_CATCH_EVENT_EXCEPTION(OnServerShutdown)
|
SQMOD_CATCH_EVENT_EXCEPTION(OnServerShutdown)
|
||||||
// See if a reload was requested (quite useless here but why not)
|
// See if a reload was requested (quite useless here but why not)
|
||||||
@ -936,7 +936,7 @@ SQMOD_API_EXPORT unsigned int VcmpPluginInit(PluginFuncs * funcs, PluginCallback
|
|||||||
{
|
{
|
||||||
LogFtl("Unable to initialize the plug-in central core");
|
LogFtl("Unable to initialize the plug-in central core");
|
||||||
// Attempt to terminate
|
// Attempt to terminate
|
||||||
Core::Get().Terminate();
|
Core::Get().Terminate(false);
|
||||||
// Stop here!
|
// Stop here!
|
||||||
return SQMOD_FAILURE;
|
return SQMOD_FAILURE;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user