1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2024-11-08 08:47:17 +01: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

@ -2,7 +2,7 @@
Project: Vice City Multiplayer 0.4 Server / Plugin Kit Project: Vice City Multiplayer 0.4 Server / Plugin Kit
File: plugin.h File: plugin.h
Copyright 2011-2016 Ago Allikmaa (maxorator) Copyright 2011-2019 Ago Allikmaa (maxorator)
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -31,7 +31,7 @@ typedef struct {
} ServerSettings; } ServerSettings;
#define PLUGIN_API_MAJOR 2 #define PLUGIN_API_MAJOR 2
#define PLUGIN_API_MINOR 0 #define PLUGIN_API_MINOR 1
typedef struct { typedef struct {
uint32_t structSize; uint32_t structSize;
@ -60,6 +60,8 @@ typedef enum {
vcmpEntityPoolObject = 2, vcmpEntityPoolObject = 2,
vcmpEntityPoolPickup = 3, vcmpEntityPoolPickup = 3,
vcmpEntityPoolRadio = 4, vcmpEntityPoolRadio = 4,
vcmpEntityPoolPlayer = 5,
vcmpEntityReserved1 = 6,
vcmpEntityPoolBlip = 7, vcmpEntityPoolBlip = 7,
vcmpEntityPoolCheckPoint = 8, vcmpEntityPoolCheckPoint = 8,
forceSizeVcmpEntityPool = INT32_MAX forceSizeVcmpEntityPool = INT32_MAX
@ -156,6 +158,7 @@ typedef enum {
vcmpServerOptionWallGlitch = 19, vcmpServerOptionWallGlitch = 19,
vcmpServerOptionDisableBackfaceCulling = 20, vcmpServerOptionDisableBackfaceCulling = 20,
vcmpServerOptionDisableHeliBladeDamage = 21, vcmpServerOptionDisableHeliBladeDamage = 21,
vcmpServerOptionDisableCrouch = 22,
forceSizeVcmpServerOption = INT32_MAX forceSizeVcmpServerOption = INT32_MAX
} vcmpServerOption; } vcmpServerOption;
@ -169,7 +172,8 @@ typedef enum {
vcmpPlayerOptionCanAttack = 6, vcmpPlayerOptionCanAttack = 6,
vcmpPlayerOptionHasMarker = 7, vcmpPlayerOptionHasMarker = 7,
vcmpPlayerOptionChatTagsEnabled = 8, vcmpPlayerOptionChatTagsEnabled = 8,
vcmpPlayerOptionDrunkEffects = 9, vcmpPlayerOptionDrunkEffectsDeprecated = 9,
vcmpPlayerOptionBleeding = 10,
forceSizeVcmpPlayerOption = INT32_MAX forceSizeVcmpPlayerOption = INT32_MAX
} vcmpPlayerOption; } vcmpPlayerOption;
@ -181,6 +185,8 @@ typedef enum {
vcmpVehicleOptionGhost = 4, vcmpVehicleOptionGhost = 4,
vcmpVehicleOptionSiren = 5, vcmpVehicleOptionSiren = 5,
vcmpVehicleOptionSingleUse = 6, vcmpVehicleOptionSingleUse = 6,
vcmpVehicleOptionEngineDisabled = 7,
vcmpVehicleOptionBootOpen = 8,
forceSizeVcmpVehicleOption = INT32_MAX forceSizeVcmpVehicleOption = INT32_MAX
} vcmpVehicleOption; } vcmpVehicleOption;
@ -889,7 +895,8 @@ typedef struct {
/* GetLastError: vcmpErrorNoSuchEntity */ /* GetLastError: vcmpErrorNoSuchEntity */
uint8_t (*IsObjectTouchedReportEnabled) (int32_t objectId); uint8_t (*IsObjectTouchedReportEnabled) (int32_t objectId);
// TODO: MOVE LATER /* 04rel005 SDK functions */
/* ---------------------------------------------------------- */
vcmpError (*GetPlayerModuleList) (int32_t playerId); vcmpError (*GetPlayerModuleList) (int32_t playerId);
/* vcmpErrorNoSuchEntity, vcmpErrorArgumentOutOfBounds */ /* vcmpErrorNoSuchEntity, vcmpErrorArgumentOutOfBounds */
@ -903,9 +910,35 @@ typedef struct {
uint16_t (*GetFallTimer) (void); uint16_t (*GetFallTimer) (void);
/* vcmpErrorNoSuchEntity */ /* vcmpErrorNoSuchEntity */
vcmpError(*SetVehicleLightsData) (int32_t vehicleId, uint32_t lightsData); vcmpError (*SetVehicleLightsData) (int32_t vehicleId, uint32_t lightsData);
/* GetLastError: vcmpErrorNoSuchEntity */ /* GetLastError: vcmpErrorNoSuchEntity */
uint32_t(*GetVehicleLightsData) (int32_t vehicleId); uint32_t (*GetVehicleLightsData) (int32_t vehicleId);
/* 04rel007 SDK functions */
/* ---------------------------------------------------------- */
/* vcmpErrorNoSuchEntity */
vcmpError (*KillPlayer) (int32_t playerId);
/* vcmpErrorNoSuchEntity */
vcmpError (*SetVehicle3DArrowForPlayer) (int32_t nVehicleId, int32_t nTargetPlayerId, uint8_t bEnabled);
/* GetLastError: vcmpErrorNoSuchEntity */
uint8_t (*GetVehicle3DArrowForPlayer) (int32_t nVehicleId, int32_t nTargetPlayerId);
/* vcmpErrorNoSuchEntity */
vcmpError (*SetPlayer3DArrowForPlayer) (int32_t nPlayerId, int32_t nTargetPlayerId, uint8_t bEnabled);
/* GetLastError: vcmpErrorNoSuchEntity */
uint8_t (*GetPlayer3DArrowForPlayer) (int32_t nPlayerId, int32_t nTargetPlayerId);
/* vcmpErrorNoSuchEntity */
vcmpError (*SetPlayerDrunkHandling) (int32_t nPlayerId, uint32_t dwDrunkLevel);
/* GetLastError: vcmpErrorNoSuchEntity */
uint32_t (*GetPlayerDrunkHandling) (int32_t nPlayerId);
/* vcmpErrorNoSuchEntity */
vcmpError (*SetPlayerDrunkVisuals) (int32_t nPlayerId, uint8_t byteDrunkLevel);
/* GetLastError: vcmpErrorNoSuchEntity */
uint8_t (*GetPlayerDrunkVisuals) (int32_t nPlayerId);
/* vcmpErrorNoSuchEntity, vcmpErrorRequestDenied */
vcmpError (*InterpolateCameraLookAt) (int32_t playerId, float lookX, float lookY, float lookZ, uint32_t dwInterpTimeMS);
} PluginFuncs; } PluginFuncs;
@ -969,7 +1002,12 @@ typedef struct {
void (*OnEntityPoolChange) (vcmpEntityPool entityType, int32_t entityId, uint8_t isDeleted); void (*OnEntityPoolChange) (vcmpEntityPool entityType, int32_t entityId, uint8_t isDeleted);
void (*OnServerPerformanceReport) (size_t entryCount, const char** descriptions, uint64_t* times); void (*OnServerPerformanceReport) (size_t entryCount, const char** descriptions, uint64_t* times);
// TODO: MOVE LATER /* 04rel005 SDK functions */
void(*OnPlayerModuleList) (int32_t playerId, const char* list); /* ---------------------------------------------------------- */
void (*OnPlayerModuleList) (int32_t playerId, const char* list);
} PluginCallbacks; /* 04rel007 SDK functions */
/* ---------------------------------------------------------- */
void (*OnEntityStreamingChange) (int32_t playerId, int32_t entityId, vcmpEntityPool entityType, uint8_t isDeleted);
} PluginCallbacks;

View File

@ -194,6 +194,7 @@ protected:
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
SignalPair mOnDestroyed; SignalPair mOnDestroyed;
SignalPair mOnCustom; SignalPair mOnCustom;
SignalPair mOnStream;
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
SignalPair mOnEntered; SignalPair mOnEntered;
@ -264,6 +265,7 @@ protected:
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
SignalPair mOnDestroyed; SignalPair mOnDestroyed;
SignalPair mOnCustom; SignalPair mOnCustom;
SignalPair mOnStream;
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
SignalPair mOnKeyPress; SignalPair mOnKeyPress;
@ -326,6 +328,7 @@ protected:
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
SignalPair mOnDestroyed; SignalPair mOnDestroyed;
SignalPair mOnCustom; SignalPair mOnCustom;
SignalPair mOnStream;
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
SignalPair mOnShot; SignalPair mOnShot;
@ -391,6 +394,7 @@ protected:
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
SignalPair mOnDestroyed; SignalPair mOnDestroyed;
SignalPair mOnCustom; SignalPair mOnCustom;
SignalPair mOnStream;
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
SignalPair mOnRespawn; SignalPair mOnRespawn;
@ -484,6 +488,7 @@ protected:
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
SignalPair mOnDestroyed; SignalPair mOnDestroyed;
SignalPair mOnCustom; SignalPair mOnCustom;
SignalPair mOnStream;
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
SignalPair mOnRequestClass; SignalPair mOnRequestClass;
@ -541,6 +546,7 @@ protected:
SignalPair mOnCheckpointEntered; SignalPair mOnCheckpointEntered;
SignalPair mOnCheckpointExited; SignalPair mOnCheckpointExited;
SignalPair mOnClientScriptData; SignalPair mOnClientScriptData;
SignalPair mOnEntityStream;
SignalPair mOnUpdate; SignalPair mOnUpdate;
SignalPair mOnHealth; SignalPair mOnHealth;
SignalPair mOnArmour; SignalPair mOnArmour;
@ -631,6 +637,7 @@ protected:
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
SignalPair mOnDestroyed; SignalPair mOnDestroyed;
SignalPair mOnCustom; SignalPair mOnCustom;
SignalPair mOnStream;
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
SignalPair mOnEmbarking; SignalPair mOnEmbarking;
@ -1228,6 +1235,16 @@ public:
*/ */
void EmitEntityPool(vcmpEntityPool entity_type, Int32 entity_id, bool is_deleted); void EmitEntityPool(vcmpEntityPool entity_type, Int32 entity_id, bool is_deleted);
/* --------------------------------------------------------------------------------------------
* Entity streaming changes events.
*/
void EmitCheckpointStream(int32_t player_id, int32_t entity_id, bool is_deleted);
void EmitObjectStream(int32_t player_id, int32_t entity_id, bool is_deleted);
void EmitPickupStream(int32_t player_id, int32_t entity_id, bool is_deleted);
void EmitVehicleStream(int32_t player_id, int32_t entity_id, bool is_deleted);
void EmitPlayerStream(int32_t player_id, int32_t entity_id, bool is_deleted);
void EmitEntityStreaming(int32_t player_id, int32_t entity_id, vcmpEntityPool entity_type, bool is_deleted);
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Entity update events. * Entity update events.
*/ */
@ -1273,6 +1290,11 @@ public:
SignalPair mOnPickupCustom; SignalPair mOnPickupCustom;
SignalPair mOnPlayerCustom; SignalPair mOnPlayerCustom;
SignalPair mOnVehicleCustom; SignalPair mOnVehicleCustom;
SignalPair mOnCheckpointStream;
SignalPair mOnObjectStream;
SignalPair mOnPickupStream;
SignalPair mOnPlayerStream;
SignalPair mOnVehicleStream;
SignalPair mOnServerStartup; SignalPair mOnServerStartup;
SignalPair mOnServerShutdown; SignalPair mOnServerShutdown;
SignalPair mOnServerFrame; SignalPair mOnServerFrame;
@ -1346,6 +1368,7 @@ public:
SignalPair mOnCheckpointRadius; SignalPair mOnCheckpointRadius;
SignalPair mOnEntityPool; SignalPair mOnEntityPool;
SignalPair mOnClientScriptData; SignalPair mOnClientScriptData;
SignalPair mOnPlayerStreamChange;
SignalPair mOnPlayerUpdate; SignalPair mOnPlayerUpdate;
SignalPair mOnVehicleUpdate; SignalPair mOnVehicleUpdate;
SignalPair mOnPlayerHealth; SignalPair mOnPlayerHealth;
@ -1379,6 +1402,7 @@ public:
SignalPair mOnVehicleHandlingRule; SignalPair mOnVehicleHandlingRule;
SignalPair mOnVehicleEnterArea; SignalPair mOnVehicleEnterArea;
SignalPair mOnVehicleLeaveArea; SignalPair mOnVehicleLeaveArea;
SignalPair mOnEntityStream;
SignalPair mOnServerOption; SignalPair mOnServerOption;
SignalPair mOnScriptReload; SignalPair mOnScriptReload;
SignalPair mOnScriptLoaded; SignalPair mOnScriptLoaded;

View File

@ -1277,6 +1277,118 @@ void Core::EmitPlayerUpdate(Int32 player_id, vcmpPlayerUpdate update_type)
(*mOnPlayerUpdate.first)(inst.mObj, static_cast< Int32 >(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) void Core::EmitVehicleUpdate(Int32 vehicle_id, vcmpVehicleUpdate update_type)
{ {

View File

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

View File

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

View File

@ -240,6 +240,15 @@ CSStr CPlayer::GetUID2() const
return s_Buffer; return s_Buffer;
} }
// ------------------------------------------------------------------------------------------------
void CPlayer::Kill() const
{
// Validate the managed identifier
Validate();
// Perform the requested operation
_Func->KillPlayer(m_ID);
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
void CPlayer::Kick() const void CPlayer::Kick() const
{ {
@ -1377,6 +1386,59 @@ void CPlayer::Unspectate() const
_Func->SetPlayerSpectateTarget(m_ID, -1); _Func->SetPlayerSpectateTarget(m_ID, -1);
} }
// ------------------------------------------------------------------------------------------------
void CPlayer::SetPlayer3DArrow(CPlayer & target, bool toggle) const
{
// Validate the managed identifier
Validate();
// Spectate the given target
_Func->SetPlayer3DArrowForPlayer(m_ID, target.GetID(), toggle);
}
// ------------------------------------------------------------------------------------------------
bool CPlayer::GetPlayer3DArrow(CPlayer & target) const
{
// Validate the managed identifier
Validate();
// Spectate the given target
return _Func->GetPlayer3DArrowForPlayer(m_ID, target.GetID());
}
// ------------------------------------------------------------------------------------------------
void CPlayer::SetPlayer3DArrowID(SQInteger id, bool toggle) const
{
// Validate the managed identifier
Validate();
// Spectate the given target
_Func->SetPlayer3DArrowForPlayer(m_ID, id, toggle);
}
// ------------------------------------------------------------------------------------------------
bool CPlayer::GetPlayer3DArrowID(SQInteger id) const
{
// Validate the managed identifier
Validate();
// Spectate the given target
return _Func->GetPlayer3DArrowForPlayer(m_ID, id);
}
// ------------------------------------------------------------------------------------------------
bool CPlayer::InterpolateCameraLookAt(const Vector3 & pos, Uint32 ms) const
{
// Validate the managed identifier
Validate();
// Perform the requested operation
return _Func->InterpolateCameraLookAt(m_ID, pos.x, pos.y, pos.z, ms) != vcmpErrorRequestDenied;
}
// ------------------------------------------------------------------------------------------------
bool CPlayer::InterpolateCameraLookAtEx(Float32 x, Float32 y, Float32 z, Uint32 ms) const
{
// Validate the managed identifier
Validate();
// Perform the requested operation
return _Func->InterpolateCameraLookAt(m_ID, x, y, z, ms) != vcmpErrorRequestDenied;
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
void CPlayer::Redirect(StackStrF & ip, Uint32 port, StackStrF & nick, void CPlayer::Redirect(StackStrF & ip, Uint32 port, StackStrF & nick,
StackStrF & server_pass, StackStrF & user_pass) StackStrF & server_pass, StackStrF & user_pass)
@ -1409,6 +1471,42 @@ void CPlayer::PlaySound(Int32 sound_id) const
_Func->PlaySound(_Func->GetPlayerUniqueWorld(m_ID), sound_id, NAN, NAN, NAN); _Func->PlaySound(_Func->GetPlayerUniqueWorld(m_ID), sound_id, NAN, NAN, NAN);
} }
// ------------------------------------------------------------------------------------------------
void CPlayer::SetDrunkHandling(SQInteger level) const
{
// Validate the managed identifier
Validate();
// Perform the requested operation
_Func->SetPlayerDrunkHandling(m_ID, static_cast< Uint32 >(level));
}
// ------------------------------------------------------------------------------------------------
SQInteger CPlayer::GetDrunkHandling() const
{
// Validate the managed identifier
Validate();
// Perform the requested operation
return _Func->GetPlayerDrunkHandling(m_ID);
}
// ------------------------------------------------------------------------------------------------
void CPlayer::SetDrunkVisuals(SQInteger level) const
{
// Validate the managed identifier
Validate();
// Perform the requested operation
_Func->SetPlayerDrunkVisuals(m_ID, static_cast< Uint8 >(level));
}
// ------------------------------------------------------------------------------------------------
SQInteger CPlayer::GetDrunkVisuals() const
{
// Validate the managed identifier
Validate();
// Perform the requested operation
return _Func->GetPlayerDrunkVisuals(m_ID);
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
LightObj & CPlayer::CreateCheckpointEx(Int32 world, bool sphere, Float32 x, Float32 y, Float32 z, LightObj & CPlayer::CreateCheckpointEx(Int32 world, bool sphere, Float32 x, Float32 y, Float32 z,
Uint8 r, Uint8 g, Uint8 b, Uint8 a, Float32 radius) const Uint8 r, Uint8 g, Uint8 b, Uint8 a, Float32 radius) const
@ -2673,6 +2771,8 @@ void Register_CPlayer(HSQUIRRELVM vm)
.Prop(_SC("Away"), &CPlayer::IsAway) .Prop(_SC("Away"), &CPlayer::IsAway)
.Prop(_SC("Spec"), &CPlayer::GetSpectator, &CPlayer::SetSpectator) .Prop(_SC("Spec"), &CPlayer::GetSpectator, &CPlayer::SetSpectator)
.Prop(_SC("SpecID"), &CPlayer::GetSpectatorID, &CPlayer::SetSpectatorID) .Prop(_SC("SpecID"), &CPlayer::GetSpectatorID, &CPlayer::SetSpectatorID)
.Prop(_SC("DrunkHandling"), &CPlayer::GetDrunkHandling, &CPlayer::SetDrunkHandling)
.Prop(_SC("DrunkVisuals"), &CPlayer::GetDrunkVisuals, &CPlayer::SetDrunkVisuals)
.Prop(_SC("CollideAreas"), &CPlayer::GetCollideAreas, &CPlayer::SetCollideAreas) .Prop(_SC("CollideAreas"), &CPlayer::GetCollideAreas, &CPlayer::SetCollideAreas)
.Prop(_SC("Authority"), &CPlayer::GetAuthority, &CPlayer::SetAuthority) .Prop(_SC("Authority"), &CPlayer::GetAuthority, &CPlayer::SetAuthority)
.Prop(_SC("TrackPosition"), &CPlayer::GetTrackPosition, &CPlayer::SetTrackPosition) .Prop(_SC("TrackPosition"), &CPlayer::GetTrackPosition, &CPlayer::SetTrackPosition)
@ -2693,6 +2793,7 @@ void Register_CPlayer(HSQUIRRELVM vm)
.Prop(_SC("Blue"), &CPlayer::GetColorB, &CPlayer::SetColorB) .Prop(_SC("Blue"), &CPlayer::GetColorB, &CPlayer::SetColorB)
// Member Methods // Member Methods
.Func(_SC("StreamedFor"), &CPlayer::IsStreamedFor) .Func(_SC("StreamedFor"), &CPlayer::IsStreamedFor)
.Func(_SC("Kill"), &CPlayer::Kill)
.Func(_SC("Kick"), &CPlayer::Kick) .Func(_SC("Kick"), &CPlayer::Kick)
.Func(_SC("Ban"), &CPlayer::Ban) .Func(_SC("Ban"), &CPlayer::Ban)
.Func(_SC("KickBecause"), &CPlayer::KickBecause) .Func(_SC("KickBecause"), &CPlayer::KickBecause)
@ -2722,6 +2823,12 @@ void Register_CPlayer(HSQUIRRELVM vm)
.Func(_SC("Spectating"), &CPlayer::GetSpectator) .Func(_SC("Spectating"), &CPlayer::GetSpectator)
.Func(_SC("Unspectate"), &CPlayer::Unspectate) .Func(_SC("Unspectate"), &CPlayer::Unspectate)
.Func(_SC("Spectate"), &CPlayer::SetSpectator) .Func(_SC("Spectate"), &CPlayer::SetSpectator)
.Func(_SC("SetPlayer3DArrow"), &CPlayer::SetPlayer3DArrow)
.Func(_SC("GetPlayer3DArrow"), &CPlayer::GetPlayer3DArrow)
.Func(_SC("SetPlayer3DArrowID"), &CPlayer::SetPlayer3DArrowID)
.Func(_SC("GetPlayer3DArrowID"), &CPlayer::GetPlayer3DArrowID)
.Func(_SC("InterpolateCameraLookAt"), &CPlayer::InterpolateCameraLookAt)
.Func(_SC("InterpolateCameraLookAtEx"), &CPlayer::InterpolateCameraLookAtEx)
.Func(_SC("Redirect"), &CPlayer::Redirect) .Func(_SC("Redirect"), &CPlayer::Redirect)
.Func(_SC("GetModuleList"), &CPlayer::GetModuleList) .Func(_SC("GetModuleList"), &CPlayer::GetModuleList)
.Func(_SC("PlaySound"), &CPlayer::PlaySound) .Func(_SC("PlaySound"), &CPlayer::PlaySound)

View File

@ -265,6 +265,11 @@ public:
*/ */
CSStr GetUID2() const; CSStr GetUID2() const;
/* --------------------------------------------------------------------------------------------
* Set player's health to 0 and reset the death reason.
*/
void Kill() const;
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Kick the managed player entity from the server. * Kick the managed player entity from the server.
*/ */
@ -740,6 +745,36 @@ public:
*/ */
void Unspectate() const; void Unspectate() const;
/* --------------------------------------------------------------------------------------------
* Set whether the target player will see an objective arrow over a player.
*/
void SetPlayer3DArrow(CPlayer & target, bool toggle) const;
/* --------------------------------------------------------------------------------------------
* See whether the target player sees an objective arrow over a player.
*/
bool GetPlayer3DArrow(CPlayer & target) const;
/* --------------------------------------------------------------------------------------------
* Set whether the target player will see an objective arrow over a player.
*/
void SetPlayer3DArrowID(SQInteger id, bool toggle) const;
/* --------------------------------------------------------------------------------------------
* See whether the target player sees an objective arrow over a player.
*/
bool GetPlayer3DArrowID(SQInteger id) const;
/* --------------------------------------------------------------------------------------------
* Smoothly pivots the camera angle.
*/
bool InterpolateCameraLookAt(const Vector3 & pos, Uint32 ms) const;
/* --------------------------------------------------------------------------------------------
* Smoothly pivots the camera angle.
*/
bool InterpolateCameraLookAtEx(Float32 x, Float32 y, Float32 z, Uint32 ms) const;
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Redirect the managed player entity to the specified server. * Redirect the managed player entity to the specified server.
*/ */
@ -756,6 +791,26 @@ public:
*/ */
void PlaySound(Int32 sound_id) const; void PlaySound(Int32 sound_id) const;
/* --------------------------------------------------------------------------------------------
* Set how delayed a player's turn handling is when in a vehicle.
*/
void SetDrunkHandling(SQInteger level) const;
/* --------------------------------------------------------------------------------------------
* Retrieve how delayed a player's turn handling is when in a vehicle.
*/
SQInteger GetDrunkHandling() const;
/* --------------------------------------------------------------------------------------------
* Set how intense the drunk blur overlay is for a player.
*/
void SetDrunkVisuals(SQInteger level) const;
/* --------------------------------------------------------------------------------------------
* Retrieve how intense the drunk blur overlay is for a player.
*/
SQInteger GetDrunkVisuals() const;
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Create a checkpoint or sphere for this player. * Create a checkpoint or sphere for this player.
*/ */

View File

@ -1148,6 +1148,42 @@ bool CVehicle::Embark(CPlayer & player, Int32 slot, bool allocate, bool warp) co
!= vcmpErrorRequestDenied); != vcmpErrorRequestDenied);
} }
// ------------------------------------------------------------------------------------------------
void CVehicle::SetPlayer3DArrow(CPlayer & target, bool toggle) const
{
// Validate the managed identifier
Validate();
// Spectate the given target
_Func->SetVehicle3DArrowForPlayer(m_ID, target.GetID(), toggle);
}
// ------------------------------------------------------------------------------------------------
bool CVehicle::GetPlayer3DArrow(CPlayer & target) const
{
// Validate the managed identifier
Validate();
// Spectate the given target
return _Func->GetVehicle3DArrowForPlayer(m_ID, target.GetID());
}
// ------------------------------------------------------------------------------------------------
void CVehicle::SetPlayer3DArrowID(SQInteger id, bool toggle) const
{
// Validate the managed identifier
Validate();
// Spectate the given target
_Func->SetVehicle3DArrowForPlayer(m_ID, id, toggle);
}
// ------------------------------------------------------------------------------------------------
bool CVehicle::GetPlayer3DArrowID(SQInteger id) const
{
// Validate the managed identifier
Validate();
// Spectate the given target
return _Func->GetVehicle3DArrowForPlayer(m_ID, id);
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
bool CVehicle::GetCollideAreas() const bool CVehicle::GetCollideAreas() const
{ {
@ -2038,6 +2074,10 @@ void Register_CVehicle(HSQUIRRELVM vm)
.Func(_SC("SetHandlingRule"), &CVehicle::SetHandlingRule) .Func(_SC("SetHandlingRule"), &CVehicle::SetHandlingRule)
.Func(_SC("ResetHandlingRule"), &CVehicle::ResetHandlingRule) .Func(_SC("ResetHandlingRule"), &CVehicle::ResetHandlingRule)
.Func(_SC("ResetHandlings"), &CVehicle::ResetHandlings) .Func(_SC("ResetHandlings"), &CVehicle::ResetHandlings)
.Func(_SC("SetPlayer3DArrow"), &CVehicle::SetPlayer3DArrow)
.Func(_SC("GetPlayer3DArrow"), &CVehicle::GetPlayer3DArrow)
.Func(_SC("SetPlayer3DArrowID"), &CVehicle::SetPlayer3DArrowID)
.Func(_SC("GetPlayer3DArrowID"), &CVehicle::GetPlayer3DArrowID)
.Func(_SC("AreasCollide"), &CVehicle::SetAreasCollide) .Func(_SC("AreasCollide"), &CVehicle::SetAreasCollide)
// Member Overloads // Member Overloads
.Overload< void (CVehicle::*)(const Vector3 &, bool) const > .Overload< void (CVehicle::*)(const Vector3 &, bool) const >

View File

@ -622,6 +622,26 @@ public:
*/ */
bool Embark(CPlayer & player, Int32 slot, bool allocate, bool warp) const; bool Embark(CPlayer & player, Int32 slot, bool allocate, bool warp) const;
/* --------------------------------------------------------------------------------------------
* Set whether the target player will see an objective arrow over a vehicle.
*/
void SetPlayer3DArrow(CPlayer & target, bool toggle) const;
/* --------------------------------------------------------------------------------------------
* See whether the target player sees an objective arrow over a vehicle.
*/
bool GetPlayer3DArrow(CPlayer & target) const;
/* --------------------------------------------------------------------------------------------
* Set whether the target player will see an objective arrow over a vehicle.
*/
void SetPlayer3DArrowID(SQInteger id, bool toggle) const;
/* --------------------------------------------------------------------------------------------
* See whether the target player sees an objective arrow over a vehicle.
*/
bool GetPlayer3DArrowID(SQInteger id) const;
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* See whether the managed vehicle entity collides with user defined areas. * See whether the managed vehicle entity collides with user defined areas.
*/ */

View File

@ -867,6 +867,19 @@ static void OnEntityPoolChange(vcmpEntityPool entity_type, int32_t entity_id, ui
SQMOD_RELOAD_CHECK(false) SQMOD_RELOAD_CHECK(false)
} }
// ------------------------------------------------------------------------------------------------
static void OnEntityStreamingChange(int32_t player_id, int32_t entity_id, vcmpEntityPool entity_type, uint8_t is_deleted)
{
// Attempt to forward the event
try
{
Core::Get().EmitEntityStreaming(player_id, entity_id, entity_type, is_deleted);
}
SQMOD_CATCH_EVENT_EXCEPTION(OnEntityStreamingChange)
// See if a reload was requested
SQMOD_RELOAD_CHECK(false)
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
static void OnServerPerformanceReport(size_t /*entry_count*/, CCStr * /*descriptions*/, uint64_t * /*times*/) static void OnServerPerformanceReport(size_t /*entry_count*/, CCStr * /*descriptions*/, uint64_t * /*times*/)
{ {
@ -973,6 +986,7 @@ SQMOD_API_EXPORT unsigned int VcmpPluginInit(PluginFuncs * funcs, PluginCallback
_Clbk->OnEntityPoolChange = OnEntityPoolChange; _Clbk->OnEntityPoolChange = OnEntityPoolChange;
_Clbk->OnServerPerformanceReport = OnServerPerformanceReport; _Clbk->OnServerPerformanceReport = OnServerPerformanceReport;
_Clbk->OnPlayerModuleList = OnPlayerModuleList; _Clbk->OnPlayerModuleList = OnPlayerModuleList;
_Clbk->OnEntityStreamingChange = OnEntityStreamingChange;
// Attempt to initialize the plug-in exports // Attempt to initialize the plug-in exports
InitExports(); InitExports();
// Dummy spacing // Dummy spacing

View File

@ -245,6 +245,7 @@ static const EnumElement g_EntityPoolEnum[] = {
{_SC("Object"), vcmpEntityPoolObject}, {_SC("Object"), vcmpEntityPoolObject},
{_SC("Pickup"), vcmpEntityPoolPickup}, {_SC("Pickup"), vcmpEntityPoolPickup},
{_SC("Radio"), vcmpEntityPoolRadio}, {_SC("Radio"), vcmpEntityPoolRadio},
{_SC("Player"), vcmpEntityPoolPlayer},
{_SC("Blip"), vcmpEntityPoolBlip}, {_SC("Blip"), vcmpEntityPoolBlip},
{_SC("Checkpoint"), vcmpEntityPoolCheckPoint}, {_SC("Checkpoint"), vcmpEntityPoolCheckPoint},
{_SC("Max"), vcmpEntityPoolCheckPoint} {_SC("Max"), vcmpEntityPoolCheckPoint}
@ -330,7 +331,8 @@ static const EnumElement g_ServerOptionEnum[] = {
{_SC("WallGlitch"), vcmpServerOptionWallGlitch}, {_SC("WallGlitch"), vcmpServerOptionWallGlitch},
{_SC("DisableBackfaceCulling"), vcmpServerOptionDisableBackfaceCulling}, {_SC("DisableBackfaceCulling"), vcmpServerOptionDisableBackfaceCulling},
{_SC("DisableHeliBladeDamage"), vcmpServerOptionDisableHeliBladeDamage}, {_SC("DisableHeliBladeDamage"), vcmpServerOptionDisableHeliBladeDamage},
{_SC("Max"), vcmpServerOptionDisableHeliBladeDamage} {_SC("DisableCrouch "), vcmpServerOptionDisableCrouch},
{_SC("Max"), vcmpServerOptionDisableCrouch}
}; };
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -345,8 +347,8 @@ static const EnumElement g_PlayerOptionEnum[] = {
{_SC("CanAttack"), vcmpPlayerOptionCanAttack}, {_SC("CanAttack"), vcmpPlayerOptionCanAttack},
{_SC("HasMarker"), vcmpPlayerOptionHasMarker}, {_SC("HasMarker"), vcmpPlayerOptionHasMarker},
{_SC("ChatTagsEnabled"), vcmpPlayerOptionChatTagsEnabled}, {_SC("ChatTagsEnabled"), vcmpPlayerOptionChatTagsEnabled},
{_SC("DrunkEffects"), vcmpPlayerOptionDrunkEffects}, {_SC("DrunkEffects"), vcmpPlayerOptionBleeding},
{_SC("Max"), vcmpPlayerOptionDrunkEffects} {_SC("Max"), vcmpPlayerOptionBleeding}
}; };
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -358,6 +360,9 @@ static const EnumElement g_VehicleOptionEnum[] = {
{_SC("RadioLocked"), vcmpVehicleOptionRadioLocked}, {_SC("RadioLocked"), vcmpVehicleOptionRadioLocked},
{_SC("Ghost"), vcmpVehicleOptionGhost}, {_SC("Ghost"), vcmpVehicleOptionGhost},
{_SC("Siren"), vcmpVehicleOptionSiren}, {_SC("Siren"), vcmpVehicleOptionSiren},
{_SC("SingleUse "), vcmpVehicleOptionSingleUse},
{_SC("EngineDisabled "), vcmpVehicleOptionEngineDisabled},
{_SC("BootOpen "), vcmpVehicleOptionBootOpen},
{_SC("Max"), vcmpVehicleOptionSiren} {_SC("Max"), vcmpVehicleOptionSiren}
}; };