mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2024-11-08 08:47:17 +01:00
Initialize the server callback that notify about player and vehicle updates.
This commit is contained in:
parent
a23d934482
commit
bcdb9707f0
107
source/Core.cpp
107
source/Core.cpp
@ -801,6 +801,12 @@ Object & Core::AllocVehicle(Int32 id, bool owned, Int32 header, Object & payload
|
|||||||
{
|
{
|
||||||
inst.mFlags ^= ENF_OWNED;
|
inst.mFlags ^= ENF_OWNED;
|
||||||
}
|
}
|
||||||
|
// Retrieve the associated tracking instance
|
||||||
|
VehicleTrack & track = m_VehicleTrack[id];
|
||||||
|
// Initialize the position
|
||||||
|
_Func->GetVehiclePos(id, &track.mPosition.x, &track.mPosition.y, &track.mPosition.z);
|
||||||
|
// Initialize the remaining components
|
||||||
|
track.mHealth = _Func->GetVehicleHealth(id);
|
||||||
// Let the script callbacks know about this entity
|
// Let the script callbacks know about this entity
|
||||||
EmitVehicleCreated(id, header, payload);
|
EmitVehicleCreated(id, header, payload);
|
||||||
// Return the script object
|
// Return the script object
|
||||||
@ -1419,6 +1425,14 @@ void Core::ConnectPlayer(Int32 id, Int32 header, Object & payload)
|
|||||||
}
|
}
|
||||||
// Assign the specified entity identifier
|
// Assign the specified entity identifier
|
||||||
inst.mID = id;
|
inst.mID = id;
|
||||||
|
// Retrieve the associated tracking instance
|
||||||
|
PlayerTrack & track = m_PlayerTrack[id];
|
||||||
|
// Initialize the position
|
||||||
|
_Func->GetPlayerPos(id, &track.mPosition.x, &track.mPosition.y, &track.mPosition.z);
|
||||||
|
// Initialize the remaining components
|
||||||
|
track.mHealth = _Func->GetPlayerHealth(id);
|
||||||
|
track.mArmour = _Func->GetPlayerArmour(id);
|
||||||
|
track.mWeapon = _Func->GetPlayerWeapon(id);
|
||||||
// Let the script callbacks know about this entity
|
// Let the script callbacks know about this entity
|
||||||
EmitPlayerCreated(id, header, payload);
|
EmitPlayerCreated(id, header, payload);
|
||||||
}
|
}
|
||||||
@ -2197,16 +2211,95 @@ void Core::EmitScriptUnload()
|
|||||||
Emit(mOnScriptUnload);
|
Emit(mOnScriptUnload);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::EmitPlayerUpdate(Int32 /*player*/, Int32 /*type*/)
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
void Core::EmitPlayerUpdate(Int32 player, Int32 /*type*/)
|
||||||
{
|
{
|
||||||
|
// Make sure that the specified entity identifier is valid
|
||||||
|
if (INVALID_ENTITYEX(player, SQMOD_PLAYER_POOL))
|
||||||
|
{
|
||||||
|
STHROWF("Cannot update player with invalid identifier: %d", player);
|
||||||
|
}
|
||||||
|
// We allocate a dummy vector upfront to retrieve the position
|
||||||
|
Vector3 pos;
|
||||||
|
// Retrieve the associated tracking instance
|
||||||
|
PlayerTrack & inst = m_PlayerTrack[player];
|
||||||
|
// Obtain the current position of this instance
|
||||||
|
_Func->GetPlayerPos(player, &pos.x, &pos.y, &pos.z);
|
||||||
|
// Did the position change since the last tracked value?
|
||||||
|
if (pos != inst.mPosition)
|
||||||
|
{
|
||||||
|
// Trigger the event specific to this change
|
||||||
|
EmitPlayerMove(player, inst.mPosition, pos);
|
||||||
|
// Update the tracked value
|
||||||
|
inst.mPosition = pos;
|
||||||
|
}
|
||||||
|
// Obtain the current health of this instance
|
||||||
|
Float32 health = _Func->GetPlayerHealth(player);
|
||||||
|
// Did the health change since the last tracked value?
|
||||||
|
if (!EpsEq(health, inst.mHealth))
|
||||||
|
{
|
||||||
|
// Trigger the event specific to this change
|
||||||
|
EmitPlayerHealth(player, inst.mHealth, health);
|
||||||
|
// Update the tracked value
|
||||||
|
inst.mHealth = health;
|
||||||
|
}
|
||||||
|
// Obtain the current armor of this instance
|
||||||
|
Float32 armour = _Func->GetPlayerArmour(player);
|
||||||
|
// Did the armor change since the last tracked value?
|
||||||
|
if (!EpsEq(armour, inst.mArmour))
|
||||||
|
{
|
||||||
|
// Trigger the event specific to this change
|
||||||
|
EmitPlayerArmour(player, inst.mArmour, armour);
|
||||||
|
// Update the tracked value
|
||||||
|
inst.mArmour = armour;
|
||||||
|
}
|
||||||
|
// Obtain the current weapon of this instance
|
||||||
|
SQInteger wep = _Func->GetPlayerWeapon(player);
|
||||||
|
// Did the weapon change since the last tracked value?
|
||||||
|
if (wep != inst.mWeapon)
|
||||||
|
{
|
||||||
|
// Trigger the event specific to this change
|
||||||
|
EmitPlayerWeapon(player, inst.mWeapon, wep);
|
||||||
|
// Update the tracked value
|
||||||
|
inst.mWeapon = wep;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::EmitVehicleUpdate(Int32 /*vehicle*/, Int32 /*type*/)
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
void Core::EmitVehicleUpdate(Int32 vehicle, Int32 /*type*/)
|
||||||
{
|
{
|
||||||
|
// Make sure that the specified entity identifier is valid
|
||||||
|
if (INVALID_ENTITYEX(vehicle, SQMOD_VEHICLE_POOL))
|
||||||
|
{
|
||||||
|
STHROWF("Cannot update vehicle with invalid identifier: %d", vehicle);
|
||||||
|
}
|
||||||
|
// We allocate a dummy vector upfront to retrieve the position
|
||||||
|
Vector3 pos;
|
||||||
|
// Retrieve the associated tracking instance
|
||||||
|
VehicleTrack & inst = m_VehicleTrack[vehicle];
|
||||||
|
// Obtain the current position of this instance
|
||||||
|
_Func->GetVehiclePos(vehicle, &pos.x, &pos.y, &pos.z);
|
||||||
|
// Did the position change since the last tracked value?
|
||||||
|
if (pos != inst.mPosition)
|
||||||
|
{
|
||||||
|
// Trigger the event specific to this change
|
||||||
|
EmitVehicleMove(vehicle, inst.mPosition, pos);
|
||||||
|
// Update the tracked value
|
||||||
|
inst.mPosition = pos;
|
||||||
|
}
|
||||||
|
// Obtain the current health of this instance
|
||||||
|
Float32 health = _Func->GetVehicleHealth(vehicle);
|
||||||
|
// Did the health change since the last tracked value?
|
||||||
|
if (!EpsEq(health, inst.mHealth))
|
||||||
|
{
|
||||||
|
// Trigger the event specific to this change
|
||||||
|
EmitVehicleHealth(vehicle, inst.mHealth, health);
|
||||||
|
// Update the tracked value
|
||||||
|
inst.mHealth = health;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
void Core::EmitEntityPool(Int32 type, Int32 id, bool deleted)
|
void Core::EmitEntityPool(Int32 type, Int32 id, bool deleted)
|
||||||
{
|
{
|
||||||
// See what type of change happened in the entity pool
|
// See what type of change happened in the entity pool
|
||||||
@ -2285,9 +2378,9 @@ void Core::EmitEntityPool(Int32 type, Int32 id, bool deleted)
|
|||||||
STHROWF("Cannot allocate blip that already exists: %d", id);
|
STHROWF("Cannot allocate blip that already exists: %d", id);
|
||||||
}
|
}
|
||||||
// Information about the blip entity
|
// Information about the blip entity
|
||||||
SQInt32 world, scale, sprid;
|
Int32 world, scale, sprid;
|
||||||
SQUint32 color;
|
Uint32 color;
|
||||||
SQFloat x, y, z;
|
Float32 x, y, z;
|
||||||
// Get the blip information from the server
|
// Get the blip information from the server
|
||||||
_Func->GetCoordBlipInfo(id, &world, &x, &y, &z, &scale, &color, &sprid);
|
_Func->GetCoordBlipInfo(id, &world, &x, &y, &z, &scale, &color, &sprid);
|
||||||
// Assign the obtain information
|
// Assign the obtain information
|
||||||
|
Loading…
Reference in New Issue
Block a user