1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2025-09-10 00:57:11 +02:00

Implement new API changes.

Initial implementation of entity streaming events, 3D arrows, drunk effects., camera interpolation, entity options and whatnot. Not yet tested!
This commit is contained in:
Sandu Liviu Catalin
2019-06-02 00:39:06 +03:00
parent 0b0ec9c40c
commit 7fdcf7efc0
11 changed files with 452 additions and 12 deletions

View File

@@ -1277,6 +1277,118 @@ void Core::EmitPlayerUpdate(Int32 player_id, vcmpPlayerUpdate update_type)
(*mOnPlayerUpdate.first)(inst.mObj, static_cast< Int32 >(update_type));
}
// ------------------------------------------------------------------------------------------------
void Core::EmitCheckpointStream(int32_t player_id, int32_t entity_id, bool is_deleted)
{
CheckpointInst & _checkpoint = m_Checkpoints.at(entity_id);
PlayerInst & _client = m_Players.at(player_id);
(*_checkpoint.mOnStream.first)(_client.mObj, is_deleted);
(*_client.mOnEntityStream.first)(_checkpoint.mObj, static_cast< Int32 >(vcmpEntityPoolCheckPoint), is_deleted);
(*mOnCheckpointStream.first)(_client.mObj, _checkpoint.mObj, is_deleted);
(*mOnEntityStream.first)(_client.mObj, _checkpoint.mObj, static_cast< Int32 >(vcmpEntityPoolCheckPoint), is_deleted);
}
// ------------------------------------------------------------------------------------------------
void Core::EmitObjectStream(int32_t player_id, int32_t entity_id, bool is_deleted)
{
ObjectInst & _object = m_Objects.at(entity_id);
PlayerInst & _client = m_Players.at(player_id);
(*_object.mOnStream.first)(_client.mObj, is_deleted);
(*_client.mOnEntityStream.first)(_object.mObj, static_cast< Int32 >(vcmpEntityPoolObject), is_deleted);
(*mOnObjectStream.first)(_client.mObj, _object.mObj, is_deleted);
(*mOnEntityStream.first)(_client.mObj, _object.mObj, static_cast< Int32 >(vcmpEntityPoolObject), is_deleted);
}
// ------------------------------------------------------------------------------------------------
void Core::EmitPickupStream(int32_t player_id, int32_t entity_id, bool is_deleted)
{
PickupInst & _pickup = m_Pickups.at(entity_id);
PlayerInst & _client = m_Players.at(player_id);
(*_pickup.mOnStream.first)(_client.mObj, is_deleted);
(*_client.mOnEntityStream.first)(_pickup.mObj, static_cast< Int32 >(vcmpEntityPoolPickup), is_deleted);
(*mOnPickupStream.first)(_client.mObj, _pickup.mObj, is_deleted);
(*mOnEntityStream.first)(_client.mObj, _pickup.mObj, static_cast< Int32 >(vcmpEntityPoolPickup), is_deleted);
}
// ------------------------------------------------------------------------------------------------
void Core::EmitVehicleStream(int32_t player_id, int32_t entity_id, bool is_deleted)
{
VehicleInst & _vehicle = m_Vehicles.at(entity_id);
PlayerInst & _client = m_Players.at(player_id);
(*_vehicle.mOnStream.first)(_client.mObj, is_deleted);
(*_client.mOnEntityStream.first)(_vehicle.mObj, static_cast< Int32 >(vcmpEntityPoolVehicle), is_deleted);
(*mOnVehicleStream.first)(_client.mObj, _vehicle.mObj, is_deleted);
(*mOnEntityStream.first)(_client.mObj, _vehicle.mObj, static_cast< Int32 >(vcmpEntityPoolVehicle), is_deleted);
}
// ------------------------------------------------------------------------------------------------
void Core::EmitPlayerStream(int32_t player_id, int32_t entity_id, bool is_deleted)
{
PlayerInst & _player = m_Players.at(entity_id);
PlayerInst & _client = m_Players.at(player_id);
(*_player.mOnStream.first)(_client.mObj, is_deleted);
(*_client.mOnEntityStream.first)(_player.mObj, static_cast< Int32 >(vcmpEntityPoolPlayer), is_deleted);
(*mOnPlayerStream.first)(_client.mObj, _player.mObj, is_deleted);
(*mOnEntityStream.first)(_client.mObj, _player.mObj, static_cast< Int32 >(vcmpEntityPoolPlayer), is_deleted);
}
// ------------------------------------------------------------------------------------------------
void Core::EmitEntityStreaming(int32_t player_id, int32_t entity_id, vcmpEntityPool entity_type, bool is_deleted)
{
// Make sure that the specified entity identifier is valid
if (INVALID_ENTITYEX(player_id, SQMOD_PLAYER_POOL))
{
STHROWF("Cannot notify player with invalid identifier about streaming: %d", player_id);
}
// See what type of entity changed
switch (entity_type)
{
case vcmpEntityPoolVehicle: {
// Make sure that the specified entity identifier is valid
if (INVALID_ENTITYEX(entity_id, SQMOD_VEHICLE_POOL))
{
STHROWF("Cannot stream vehicle with invalid identifier: %d", entity_id);
}
// Forward the event to the dedicated handler
EmitVehicleStream(player_id, entity_id, is_deleted);
} break;
case vcmpEntityPoolObject: {
// Make sure that the specified entity identifier is valid
if (INVALID_ENTITYEX(entity_id, SQMOD_OBJECT_POOL))
{
STHROWF("Cannot stream object with invalid identifier: %d", entity_id);
}
// Forward the event to the dedicated handler
EmitObjectStream(player_id, entity_id, is_deleted);
} break;
case vcmpEntityPoolPickup: {
// Make sure that the specified entity identifier is valid
if (INVALID_ENTITYEX(entity_id, SQMOD_PICKUP_POOL))
{
STHROWF("Cannot stream pickup with invalid identifier: %d", entity_id);
}
// Forward the event to the dedicated handler
EmitPickupStream(player_id, entity_id, is_deleted);
} break;
case vcmpEntityPoolPlayer: {
// Make sure that the specified entity identifier is valid
if (INVALID_ENTITYEX(entity_id, SQMOD_PLAYER_POOL))
{
STHROWF("Cannot stream player with invalid identifier: %d", entity_id);
}
// Forward the event to the dedicated handler
EmitPlayerStream(player_id, entity_id, is_deleted);
} break;
case vcmpEntityPoolCheckPoint: {
// Make sure that the specified entity identifier is valid
if (INVALID_ENTITYEX(entity_id, SQMOD_CHECKPOINT_POOL))
{
STHROWF("Cannot stream checkpoint with invalid identifier: %d", entity_id);
}
// Forward the event to the dedicated handler
EmitCheckpointStream(player_id, entity_id, is_deleted);
} break;
default:
LogErr("Unknown change in entity streaming: client %d > type %d > entity %d", player_id, entity_type, entity_id);
}
}
// ------------------------------------------------------------------------------------------------
void Core::EmitVehicleUpdate(Int32 vehicle_id, vcmpVehicleUpdate update_type)
{

View File

@@ -417,6 +417,7 @@ void Core::CheckpointInst::InitEvents()
// Proceed to initializing the events
InitSignalPair(mOnDestroyed, mEvents, "Destroyed");
InitSignalPair(mOnCustom, mEvents, "Custom");
InitSignalPair(mOnStream, mEvents, "Stream");
InitSignalPair(mOnEntered, mEvents, "Entered");
InitSignalPair(mOnExited, mEvents, "Exited");
InitSignalPair(mOnWorld, mEvents, "World");
@@ -428,6 +429,7 @@ void Core::CheckpointInst::DropEvents()
{
ResetSignalPair(mOnDestroyed);
ResetSignalPair(mOnCustom);
ResetSignalPair(mOnStream);
ResetSignalPair(mOnEntered);
ResetSignalPair(mOnExited);
ResetSignalPair(mOnWorld);
@@ -452,6 +454,7 @@ void Core::KeybindInst::InitEvents()
// Proceed to initializing the events
InitSignalPair(mOnDestroyed, mEvents, "Destroyed");
InitSignalPair(mOnCustom, mEvents, "Custom");
InitSignalPair(mOnStream, mEvents, "Stream");
InitSignalPair(mOnKeyPress, mEvents, "KeyPress");
InitSignalPair(mOnKeyRelease, mEvents, "KeyRelease");
}
@@ -483,6 +486,7 @@ void Core::ObjectInst::InitEvents()
// Proceed to initializing the events
InitSignalPair(mOnDestroyed, mEvents, "Destroyed");
InitSignalPair(mOnCustom, mEvents, "Custom");
InitSignalPair(mOnStream, mEvents, "Stream");
InitSignalPair(mOnShot, mEvents, "Shot");
InitSignalPair(mOnTouched, mEvents, "Touched");
InitSignalPair(mOnWorld, mEvents, "World");
@@ -495,6 +499,7 @@ void Core::ObjectInst::DropEvents()
{
ResetSignalPair(mOnDestroyed);
ResetSignalPair(mOnCustom);
ResetSignalPair(mOnStream);
ResetSignalPair(mOnShot);
ResetSignalPair(mOnTouched);
ResetSignalPair(mOnWorld);
@@ -520,6 +525,7 @@ void Core::PickupInst::InitEvents()
// Proceed to initializing the events
InitSignalPair(mOnDestroyed, mEvents, "Destroyed");
InitSignalPair(mOnCustom, mEvents, "Custom");
InitSignalPair(mOnStream, mEvents, "Stream");
InitSignalPair(mOnRespawn, mEvents, "Respawn");
InitSignalPair(mOnClaimed, mEvents, "Claimed");
InitSignalPair(mOnCollected, mEvents, "Collected");
@@ -535,6 +541,7 @@ void Core::PickupInst::DropEvents()
{
ResetSignalPair(mOnDestroyed);
ResetSignalPair(mOnCustom);
ResetSignalPair(mOnStream);
ResetSignalPair(mOnRespawn);
ResetSignalPair(mOnClaimed);
ResetSignalPair(mOnCollected);
@@ -563,6 +570,7 @@ void Core::PlayerInst::InitEvents()
// Proceed to initializing the events
InitSignalPair(mOnDestroyed, mEvents, "Destroyed");
InitSignalPair(mOnCustom, mEvents, "Custom");
InitSignalPair(mOnStream, mEvents, "Stream");
InitSignalPair(mOnRequestClass, mEvents, "RequestClass");
InitSignalPair(mOnRequestSpawn, mEvents, "RequestSpawn");
InitSignalPair(mOnSpawn, mEvents, "Spawn");
@@ -618,6 +626,7 @@ void Core::PlayerInst::InitEvents()
InitSignalPair(mOnCheckpointEntered, mEvents, "CheckpointEntered");
InitSignalPair(mOnCheckpointExited, mEvents, "CheckpointExited");
InitSignalPair(mOnClientScriptData, mEvents, "ClientScriptData");
InitSignalPair(mOnEntityStream, mEvents, "EntityStream");
InitSignalPair(mOnUpdate, mEvents, "Update");
InitSignalPair(mOnHealth, mEvents, "Health");
InitSignalPair(mOnArmour, mEvents, "Armour");
@@ -643,6 +652,7 @@ void Core::PlayerInst::DropEvents()
{
ResetSignalPair(mOnDestroyed);
ResetSignalPair(mOnCustom);
ResetSignalPair(mOnStream);
ResetSignalPair(mOnRequestClass);
ResetSignalPair(mOnRequestSpawn);
ResetSignalPair(mOnSpawn);
@@ -698,6 +708,7 @@ void Core::PlayerInst::DropEvents()
ResetSignalPair(mOnCheckpointEntered);
ResetSignalPair(mOnCheckpointExited);
ResetSignalPair(mOnClientScriptData);
ResetSignalPair(mOnEntityStream);
ResetSignalPair(mOnUpdate);
ResetSignalPair(mOnHealth);
ResetSignalPair(mOnArmour);
@@ -736,6 +747,7 @@ void Core::VehicleInst::InitEvents()
// Proceed to initializing the events
InitSignalPair(mOnDestroyed, mEvents, "Destroyed");
InitSignalPair(mOnCustom, mEvents, "Custom");
InitSignalPair(mOnStream, mEvents, "Stream");
InitSignalPair(mOnEmbarking, mEvents, "Embarking");
InitSignalPair(mOnEmbarked, mEvents, "Embarked");
InitSignalPair(mOnDisembark, mEvents, "Disembark");
@@ -763,6 +775,7 @@ void Core::VehicleInst::DropEvents()
{
ResetSignalPair(mOnDestroyed);
ResetSignalPair(mOnCustom);
ResetSignalPair(mOnStream);
ResetSignalPair(mOnEmbarking);
ResetSignalPair(mOnEmbarked);
ResetSignalPair(mOnDisembark);

View File

@@ -75,6 +75,11 @@ void Core::InitEvents()
InitSignalPair(mOnPickupCustom, m_Events, "PickupCustom");
InitSignalPair(mOnPlayerCustom, m_Events, "PlayerCustom");
InitSignalPair(mOnVehicleCustom, m_Events, "VehicleCustom");
InitSignalPair(mOnCheckpointStream, m_Events, "CheckpointStream");
InitSignalPair(mOnObjectStream, m_Events, "ObjectStream");
InitSignalPair(mOnPickupStream, m_Events, "PickupStream");
InitSignalPair(mOnPlayerStream, m_Events, "PlayerStream");
InitSignalPair(mOnVehicleStream, m_Events, "VehicleStream");
InitSignalPair(mOnServerStartup, m_Events, "ServerStartup");
InitSignalPair(mOnServerShutdown, m_Events, "ServerShutdown");
InitSignalPair(mOnServerFrame, m_Events, "ServerFrame");
@@ -181,6 +186,7 @@ void Core::InitEvents()
InitSignalPair(mOnVehicleHandlingRule, m_Events, "VehicleHandlingRule");
InitSignalPair(mOnVehicleEnterArea, m_Events, "VehicleEnterArea");
InitSignalPair(mOnVehicleLeaveArea, m_Events, "VehicleLeaveArea");
InitSignalPair(mOnEntityStream, m_Events, "EntityStream");
InitSignalPair(mOnServerOption, m_Events, "ServerOption");
InitSignalPair(mOnScriptReload, m_Events, "ScriptReload");
InitSignalPair(mOnScriptLoaded, m_Events, "ScriptLoaded");
@@ -210,6 +216,11 @@ void Core::DropEvents()
ResetSignalPair(mOnPickupCustom);
ResetSignalPair(mOnPlayerCustom);
ResetSignalPair(mOnVehicleCustom);
ResetSignalPair(mOnCheckpointStream);
ResetSignalPair(mOnObjectStream);
ResetSignalPair(mOnPickupStream);
ResetSignalPair(mOnPlayerStream);
ResetSignalPair(mOnVehicleStream);
ResetSignalPair(mOnServerStartup);
ResetSignalPair(mOnServerShutdown);
ResetSignalPair(mOnServerFrame);
@@ -316,6 +327,7 @@ void Core::DropEvents()
ResetSignalPair(mOnVehicleHandlingRule);
ResetSignalPair(mOnVehicleEnterArea);
ResetSignalPair(mOnVehicleLeaveArea);
ResetSignalPair(mOnEntityStream);
ResetSignalPair(mOnServerOption);
ResetSignalPair(mOnScriptReload);
ResetSignalPair(mOnScriptLoaded);