mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2025-06-16 07:07:13 +02:00
Implement pickup option change event and expose the functions to use it.
Fix bitflags declaration for circular locks (huge mistake here).
This commit is contained in:
@ -13,7 +13,7 @@ namespace SqMod {
|
||||
enum CheckpointCircularLocks
|
||||
{
|
||||
CHECKPOINTCL_EMIT_CHECKPOINT_WORLD = (1 << 0),
|
||||
CHECKPOINTCL_EMIT_CHECKPOINT_RADIUS = (2 << 0)
|
||||
CHECKPOINTCL_EMIT_CHECKPOINT_RADIUS = (1 << 1)
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
|
@ -132,6 +132,60 @@ bool CPickup::IsStreamedFor(CPlayer & player) const
|
||||
return _Func->IsPickupStreamedForPlayer(m_ID, player.GetID());
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
bool CPickup::GetOption(Int32 option_id) const
|
||||
{
|
||||
// Attempt to obtain the current value of the specified option
|
||||
const bool value = _Func->GetPickupOption(m_ID, static_cast< vcmpPickupOption >(option_id));
|
||||
// Check for errors
|
||||
if (_Func->GetLastError() == vcmpErrorArgumentOutOfBounds)
|
||||
{
|
||||
STHROWF("Invalid option identifier: %d", option_id);
|
||||
}
|
||||
// Return the requested value
|
||||
return value;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void CPickup::SetOption(Int32 option_id, bool toggle)
|
||||
{
|
||||
// Attempt to obtain the current value of the specified option
|
||||
const bool value = _Func->GetPickupOption(m_ID, static_cast< vcmpPickupOption >(option_id));
|
||||
// Attempt to modify the current value of the specified option
|
||||
if (_Func->SetPickupOption(m_ID, static_cast< vcmpPickupOption >(option_id),
|
||||
toggle) == vcmpErrorArgumentOutOfBounds)
|
||||
{
|
||||
STHROWF("Invalid option identifier: %d", option_id);
|
||||
}
|
||||
else if (!(m_CircularLocks & PICKUPCL_EMIT_PICKUP_OPTION))
|
||||
{
|
||||
// Prevent this event from triggering while executed
|
||||
BitGuardU32 bg(m_CircularLocks, PICKUPCL_EMIT_PICKUP_OPTION);
|
||||
// Now forward the event call
|
||||
Core::Get().EmitPickupOption(m_ID, option_id, value, 0, NullLightObj());
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void CPickup::SetOptionEx(Int32 option_id, bool toggle, Int32 header, LightObj & payload)
|
||||
{
|
||||
// Attempt to obtain the current value of the specified option
|
||||
const bool value = _Func->GetPickupOption(m_ID, static_cast< vcmpPickupOption >(option_id));
|
||||
// Attempt to modify the current value of the specified option
|
||||
if (_Func->SetPickupOption(m_ID, static_cast< vcmpPickupOption >(option_id),
|
||||
toggle) == vcmpErrorArgumentOutOfBounds)
|
||||
{
|
||||
STHROWF("Invalid option identifier: %d", option_id);
|
||||
}
|
||||
else if (!(m_CircularLocks & PICKUPCL_EMIT_PICKUP_OPTION))
|
||||
{
|
||||
// Prevent this event from triggering while executed
|
||||
BitGuardU32 bg(m_CircularLocks, PICKUPCL_EMIT_PICKUP_OPTION);
|
||||
// Now forward the event call
|
||||
Core::Get().EmitPickupOption(m_ID, option_id, value, header, payload);
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
Int32 CPickup::GetWorld() const
|
||||
{
|
||||
@ -469,6 +523,9 @@ void Register_CPickup(HSQUIRRELVM vm)
|
||||
.Prop(_SC("PosZ"), &CPickup::GetPositionZ, &CPickup::SetPositionZ)
|
||||
// Member Methods
|
||||
.Func(_SC("StreamedFor"), &CPickup::IsStreamedFor)
|
||||
.Func(_SC("GetOption"), &CPickup::GetOption)
|
||||
.Func(_SC("SetOption"), &CPickup::SetOption)
|
||||
.Func(_SC("SetOptionEx"), &CPickup::SetOptionEx)
|
||||
.Func(_SC("Refresh"), &CPickup::Refresh)
|
||||
.Func(_SC("SetPos"), &CPickup::SetPositionEx)
|
||||
.Func(_SC("SetPosition"), &CPickup::SetPositionEx)
|
||||
|
@ -12,10 +12,11 @@ namespace SqMod {
|
||||
*/
|
||||
enum PickupCircularLocks
|
||||
{
|
||||
PICKUPCL_EMIT_PICKUP_WORLD = (1 << 0),
|
||||
PICKUPCL_EMIT_PICKUP_ALPHA = (2 << 0),
|
||||
PICKUPCL_EMIT_PICKUP_AUTOMATIC = (3 << 0),
|
||||
PICKUPCL_EMIT_PICKUP_AUTOTIMER = (4 << 0)
|
||||
PICKUPCL_EMIT_PICKUP_OPTION = (1 << 0),
|
||||
PICKUPCL_EMIT_PICKUP_WORLD = (1 << 1),
|
||||
PICKUPCL_EMIT_PICKUP_ALPHA = (1 << 2),
|
||||
PICKUPCL_EMIT_PICKUP_AUTOMATIC = (1 << 3),
|
||||
PICKUPCL_EMIT_PICKUP_AUTOTIMER = (1 << 4)
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
@ -188,6 +189,21 @@ public:
|
||||
*/
|
||||
bool IsStreamedFor(CPlayer & player) const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retrieve the current option value of the managed pickup entity.
|
||||
*/
|
||||
bool GetOption(Int32 option_id) const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Modify the current option value of the managed pickup entity.
|
||||
*/
|
||||
void SetOption(Int32 option_id, bool toggle);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Modify the current option value of the managed pickup entity.
|
||||
*/
|
||||
void SetOptionEx(Int32 option_id, bool toggle, Int32 header, LightObj & payload);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retrieve the world in which the managed pickup entity exists.
|
||||
*/
|
||||
|
@ -14,15 +14,15 @@ namespace SqMod {
|
||||
enum PlayerCircularLocks
|
||||
{
|
||||
PLAYERCL_EMIT_PLAYER_OPTION = (1 << 0),
|
||||
PLAYERCL_EMIT_PLAYER_ADMIN = (2 << 0),
|
||||
PLAYERCL_EMIT_PLAYER_WORLD = (3 << 0),
|
||||
PLAYERCL_EMIT_PLAYER_TEAM = (4 << 0),
|
||||
PLAYERCL_EMIT_PLAYER_SKIN = (5 << 0),
|
||||
PLAYERCL_EMIT_PLAYER_MONEY = (6 << 0),
|
||||
PLAYERCL_EMIT_PLAYER_SCORE = (7 << 0),
|
||||
PLAYERCL_EMIT_PLAYER_WANTED_LEVEL = (8 << 0),
|
||||
PLAYERCL_EMIT_PLAYER_IMMUNITY = (9 << 0),
|
||||
PLAYERCL_EMIT_PLAYER_ALPHA = (10 << 0)
|
||||
PLAYERCL_EMIT_PLAYER_ADMIN = (1 << 1),
|
||||
PLAYERCL_EMIT_PLAYER_WORLD = (1 << 2),
|
||||
PLAYERCL_EMIT_PLAYER_TEAM = (1 << 3),
|
||||
PLAYERCL_EMIT_PLAYER_SKIN = (1 << 4),
|
||||
PLAYERCL_EMIT_PLAYER_MONEY = (1 << 5),
|
||||
PLAYERCL_EMIT_PLAYER_SCORE = (1 << 6),
|
||||
PLAYERCL_EMIT_PLAYER_WANTED_LEVEL = (1 << 7),
|
||||
PLAYERCL_EMIT_PLAYER_IMMUNITY = (1 << 8),
|
||||
PLAYERCL_EMIT_PLAYER_ALPHA = (1 << 9)
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
|
@ -13,13 +13,13 @@ namespace SqMod {
|
||||
enum VehicleCircularLocks
|
||||
{
|
||||
VEHICLECL_EMIT_VEHICLE_OPTION = (1 << 0),
|
||||
VEHICLECL_EMIT_VEHICLE_WORLD = (2 << 0),
|
||||
VEHICLECL_EMIT_VEHICLE_IMMUNITY = (3 << 0),
|
||||
VEHICLECL_EMIT_VEHICLE_PARTSTATUS = (4 << 0),
|
||||
VEHICLECL_EMIT_VEHICLE_TYRESTATUS = (5 << 0),
|
||||
VEHICLECL_EMIT_VEHICLE_DAMAGEDATA = (6 << 0),
|
||||
VEHICLECL_EMIT_VEHICLE_RADIO = (7 << 0),
|
||||
VEHICLECL_EMIT_VEHICLE_HANDLINGRULE = (8 << 0)
|
||||
VEHICLECL_EMIT_VEHICLE_WORLD = (1 << 1),
|
||||
VEHICLECL_EMIT_VEHICLE_IMMUNITY = (1 << 2),
|
||||
VEHICLECL_EMIT_VEHICLE_PARTSTATUS = (1 << 3),
|
||||
VEHICLECL_EMIT_VEHICLE_TYRESTATUS = (1 << 4),
|
||||
VEHICLECL_EMIT_VEHICLE_DAMAGEDATA = (1 << 5),
|
||||
VEHICLECL_EMIT_VEHICLE_RADIO = (1 << 6),
|
||||
VEHICLECL_EMIT_VEHICLE_HANDLINGRULE = (1 << 7)
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user