mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2024-11-08 08:47:17 +01:00
1223 lines
64 KiB
C++
1223 lines
64 KiB
C++
|
// ------------------------------------------------------------------------------------------------
|
||
|
#include "Misc/Official.hpp"
|
||
|
#include "Base/Vector2.hpp"
|
||
|
#include "Core/Utility.hpp"
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
#include "Core/Entity.hpp"
|
||
|
#include "Core.hpp"
|
||
|
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
#include "Entity/Blip.hpp"
|
||
|
#include "Entity/Checkpoint.hpp"
|
||
|
#include "Entity/KeyBind.hpp"
|
||
|
#include "Entity/Object.hpp"
|
||
|
#include "Entity/Pickup.hpp"
|
||
|
#include "Entity/Player.hpp"
|
||
|
#include "Entity/Vehicle.hpp"
|
||
|
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
namespace SqMod {
|
||
|
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
SQMOD_DECL_TYPENAME(RGBTn, _SC("RGB"))
|
||
|
SQMOD_DECL_TYPENAME(EntityRGBTn, _SC("LgEntityRGB"))
|
||
|
SQMOD_DECL_TYPENAME(RGBATn, _SC("RGBA"))
|
||
|
SQMOD_DECL_TYPENAME(ARGBTn, _SC("ARGB"))
|
||
|
SQMOD_DECL_TYPENAME(VectorTn, _SC("Vector"))
|
||
|
SQMOD_DECL_TYPENAME(QuaternionTn, _SC("Quaternion"))
|
||
|
SQMOD_DECL_TYPENAME(EntityVectorTn, _SC("LgEntityVector"))
|
||
|
SQMOD_DECL_TYPENAME(EntityQuaternionTn, _SC("LgEntityQuaternion"))
|
||
|
SQMOD_DECL_TYPENAME(BoundsTn, _SC("Bounds"))
|
||
|
SQMOD_DECL_TYPENAME(WastedSettingsTn, _SC("WastedSettings"))
|
||
|
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
SQMOD_DECL_TYPENAME(CCheckpointTn, _SC("CCheckpoint_INTERNAL"))
|
||
|
SQMOD_DECL_TYPENAME(CObjectTn, _SC("CObject_INTERNAL"))
|
||
|
SQMOD_DECL_TYPENAME(CPickupTn, _SC("CPickup_INTERNAL"))
|
||
|
SQMOD_DECL_TYPENAME(CPlayerTn, _SC("CPlayer_INTERNAL"))
|
||
|
SQMOD_DECL_TYPENAME(CVehicleTn, _SC("CVehicle_INTERNAL"))
|
||
|
|
||
|
/* ------------------------------------------------------------------------------------------------
|
||
|
* Entity type enumeration.
|
||
|
*/
|
||
|
struct LgEntityType
|
||
|
{
|
||
|
enum Type
|
||
|
{
|
||
|
Player = 0,
|
||
|
Vehicle,
|
||
|
Pickup,
|
||
|
Object,
|
||
|
Checkpoint,
|
||
|
Unknown
|
||
|
};
|
||
|
};
|
||
|
|
||
|
/* ------------------------------------------------------------------------------------------------
|
||
|
* Player vector flag enumeration.
|
||
|
*/
|
||
|
struct LgPlayerVectorFlag
|
||
|
{
|
||
|
enum Type
|
||
|
{
|
||
|
Pos = 0,
|
||
|
Speed,
|
||
|
Unknown
|
||
|
};
|
||
|
};
|
||
|
|
||
|
/* ------------------------------------------------------------------------------------------------
|
||
|
* Vehicle vector flag enumeration.
|
||
|
*/
|
||
|
struct LgVehicleVectorFlag
|
||
|
{
|
||
|
enum Type
|
||
|
{
|
||
|
Pos = 0,
|
||
|
SpawnPos,
|
||
|
Angle,
|
||
|
SpawnAngle,
|
||
|
Speed,
|
||
|
RelSpeed,
|
||
|
TurnSpeed,
|
||
|
RelTurnSpeed,
|
||
|
Unknown
|
||
|
};
|
||
|
};
|
||
|
|
||
|
/* ------------------------------------------------------------------------------------------------
|
||
|
* Object vector flag enumeration.
|
||
|
*/
|
||
|
struct LgObjectVectorFlag
|
||
|
{
|
||
|
enum Type
|
||
|
{
|
||
|
Pos = 0,
|
||
|
Rotation,
|
||
|
Unknown
|
||
|
};
|
||
|
};
|
||
|
|
||
|
/* ------------------------------------------------------------------------------------------------
|
||
|
* Vehicle quaternion flag enumeration.
|
||
|
*/
|
||
|
struct LgVehicleQuaternionFlag
|
||
|
{
|
||
|
enum Type
|
||
|
{
|
||
|
Angle = 0,
|
||
|
SpawnAngle,
|
||
|
Unknown
|
||
|
};
|
||
|
};
|
||
|
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
static SQInteger VectorToString(HSQUIRRELVM vm)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
Var< LgVector * > v(SqVM(), 1);
|
||
|
// Validate the instance, just to be sure
|
||
|
if (!v.value)
|
||
|
{
|
||
|
return sq_throwerror(vm, "Invalid Vector instance");
|
||
|
}
|
||
|
// Generate the formatted string
|
||
|
auto s = fmt::format("({}, {}, {})", v.value->x, v.value->y, v.value->z);
|
||
|
// Push it on the stack
|
||
|
sq_pushstring(vm, s.c_str(), static_cast< SQInteger >(s.size()));
|
||
|
// Specify that we have a value to return
|
||
|
return 1;
|
||
|
}
|
||
|
catch (const std::exception & e)
|
||
|
{
|
||
|
return sq_throwerror(vm, e.what());
|
||
|
}
|
||
|
SQ_UNREACHABLE
|
||
|
}
|
||
|
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
static SQInteger QuaternionToString(HSQUIRRELVM vm)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
Var< LgQuaternion * > v(SqVM(), 1);
|
||
|
// Validate the instance, just to be sure
|
||
|
if (!v.value)
|
||
|
{
|
||
|
return sq_throwerror(vm, "Invalid Quaternion instance");
|
||
|
}
|
||
|
// Generate the formatted string
|
||
|
auto s = fmt::format("({}, {}, {}, {})", v.value->x, v.value->y, v.value->z, v.value->w);
|
||
|
// Push it on the stack
|
||
|
sq_pushstring(vm, s.c_str(), static_cast< SQInteger >(s.size()));
|
||
|
// Specify that we have a value to return
|
||
|
return 1;
|
||
|
}
|
||
|
catch (const std::exception & e)
|
||
|
{
|
||
|
return sq_throwerror(vm, e.what());
|
||
|
}
|
||
|
SQ_UNREACHABLE
|
||
|
}
|
||
|
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
void LgEntityVector::Set()
|
||
|
{
|
||
|
switch (mType)
|
||
|
{
|
||
|
case LgEntityType::Player:
|
||
|
switch (mFlag)
|
||
|
{
|
||
|
case LgPlayerVectorFlag::Pos:
|
||
|
_Func->SetPlayerPosition(mID, x, y, z);
|
||
|
break;
|
||
|
case LgPlayerVectorFlag::Speed:
|
||
|
_Func->SetPlayerSpeed(mID, x, y, z);
|
||
|
break;
|
||
|
default: break;
|
||
|
} break;
|
||
|
case LgEntityType::Vehicle:
|
||
|
switch (mFlag)
|
||
|
{
|
||
|
case LgVehicleVectorFlag::Pos:
|
||
|
_Func->SetVehiclePosition(mID, x, y, z, 0);
|
||
|
break;
|
||
|
case LgVehicleVectorFlag::SpawnPos:
|
||
|
_Func->SetVehicleSpawnPosition(mID, x, y, z);
|
||
|
break;
|
||
|
case LgVehicleVectorFlag::Angle:
|
||
|
_Func->SetVehicleRotationEuler(mID, x, y, z);
|
||
|
break;
|
||
|
case LgVehicleVectorFlag::SpawnAngle:
|
||
|
_Func->SetVehicleSpawnRotationEuler(mID, x, y, z);
|
||
|
break;
|
||
|
case LgVehicleVectorFlag::Speed:
|
||
|
_Func->SetVehicleSpeed(mID, x, y, z, false, false);
|
||
|
break;
|
||
|
case LgVehicleVectorFlag::RelSpeed:
|
||
|
_Func->SetVehicleSpeed(mID, x, y, z, false, true);
|
||
|
break;
|
||
|
case LgVehicleVectorFlag::TurnSpeed:
|
||
|
_Func->SetVehicleTurnSpeed(mID, x, y, z, false, false);
|
||
|
break;
|
||
|
case LgVehicleVectorFlag::RelTurnSpeed:
|
||
|
_Func->SetVehicleTurnSpeed(mID, x, y, z, false, true);
|
||
|
break;
|
||
|
default: break;
|
||
|
} break;
|
||
|
case LgEntityType::Pickup:
|
||
|
_Func->SetPickupPosition(mID, x, y, z);
|
||
|
break;
|
||
|
case LgEntityType::Object:
|
||
|
switch (mFlag)
|
||
|
{
|
||
|
case LgObjectVectorFlag::Pos:
|
||
|
_Func->SetObjectPosition(mID, x, y, z);
|
||
|
break;
|
||
|
case LgObjectVectorFlag::Rotation:
|
||
|
_Func->RotateObjectToEuler(mID, x, y, z, 0);
|
||
|
break;
|
||
|
default: break;
|
||
|
} break;
|
||
|
case LgEntityType::Checkpoint:
|
||
|
_Func->SetCheckPointPosition(mID, x, y, z);
|
||
|
break;
|
||
|
default: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
void LgEntityQuaternion::Set()
|
||
|
{
|
||
|
switch (mType)
|
||
|
{
|
||
|
case LgEntityType::Vehicle:
|
||
|
switch (mFlag)
|
||
|
{
|
||
|
case LgVehicleVectorFlag::Angle:
|
||
|
_Func->SetVehicleRotation(mID, x, y, z, w);
|
||
|
break;
|
||
|
case LgVehicleVectorFlag::SpawnAngle:
|
||
|
_Func->SetVehicleSpawnRotation(mID, x, y, z, w);
|
||
|
break;
|
||
|
default: break;
|
||
|
} break;
|
||
|
case LgEntityType::Object:
|
||
|
_Func->RotateObjectTo(mID, x, y, z, w, 0);
|
||
|
break;
|
||
|
default: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
void LgEntityRGB::Set()
|
||
|
{
|
||
|
if (mType == LgEntityType::Player)
|
||
|
{
|
||
|
_Func->SetPlayerColour(mID, GetRGB());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
void Register_Official_Entity(HSQUIRRELVM vm);
|
||
|
|
||
|
// ================================================================================================
|
||
|
void Register_Official(HSQUIRRELVM vm)
|
||
|
{
|
||
|
// See if official support is allowed
|
||
|
if (!Core::Get().IsOfficial())
|
||
|
{
|
||
|
return; // Do nothing
|
||
|
}
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
RootTable(vm).Bind(VectorTn::Str,
|
||
|
DerivedClass< LgVector, Vector3 >(vm, VectorTn::Str)
|
||
|
// Constructors
|
||
|
.Ctor< Vector3::Value, Vector3::Value, Vector3::Value >()
|
||
|
// Member Methods
|
||
|
.Func(_SC("Distance"), &LgVector::GetDistanceTo)
|
||
|
// Global Member Methods
|
||
|
.SquirrelFunc(_SC("_tostring"), &VectorToString)
|
||
|
);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
RootTable(vm).Bind(EntityVectorTn::Str,
|
||
|
DerivedClass< LgEntityVector, LgVector >(vm, EntityVectorTn::Str)
|
||
|
// Constructors
|
||
|
.Ctor< int, int, int, Vector3::Value, Vector3::Value, Vector3::Value >()
|
||
|
// Properties
|
||
|
.Prop(_SC("x"), &LgEntityVector::GetX, &LgEntityVector::SetX)
|
||
|
.Prop(_SC("y"), &LgEntityVector::GetY, &LgEntityVector::SetY)
|
||
|
.Prop(_SC("z"), &LgEntityVector::GetZ, &LgEntityVector::SetZ)
|
||
|
);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
RootTable(vm).Bind(QuaternionTn::Str,
|
||
|
DerivedClass< LgQuaternion, Quaternion >(vm, QuaternionTn::Str)
|
||
|
// Constructors
|
||
|
.Ctor< Quaternion::Value, Quaternion::Value, Quaternion::Value >()
|
||
|
// Global Member Methods
|
||
|
.SquirrelFunc(_SC("_tostring"), &QuaternionToString)
|
||
|
);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
RootTable(vm).Bind(EntityQuaternionTn::Str,
|
||
|
DerivedClass< LgEntityQuaternion, LgQuaternion >(vm, EntityQuaternionTn::Str)
|
||
|
// Constructors
|
||
|
.Ctor< int, int, int, Quaternion::Value, Quaternion::Value, Quaternion::Value, Quaternion::Value >()
|
||
|
// Properties
|
||
|
.Prop(_SC("x"), &LgEntityQuaternion::GetX, &LgEntityQuaternion::SetX)
|
||
|
.Prop(_SC("y"), &LgEntityQuaternion::GetY, &LgEntityQuaternion::SetY)
|
||
|
.Prop(_SC("z"), &LgEntityQuaternion::GetZ, &LgEntityQuaternion::SetZ)
|
||
|
.Prop(_SC("w"), &LgEntityQuaternion::GetW, &LgEntityQuaternion::SetW)
|
||
|
);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
RootTable(vm).Bind(RGBTn::Str,
|
||
|
DerivedClass< LgRGB, Color3 >(vm, RGBTn::Str)
|
||
|
// Constructors
|
||
|
.Ctor< LgRGB::Value, LgRGB::Value, LgRGB::Value >()
|
||
|
);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
RootTable(vm).Bind(RGBATn::Str,
|
||
|
DerivedClass< LgRGBA, Color4 >(vm, RGBATn::Str)
|
||
|
// Constructors
|
||
|
.Ctor< LgRGBA::Value, LgRGBA::Value, LgRGBA::Value >()
|
||
|
);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
RootTable(vm).Bind(ARGBTn::Str,
|
||
|
Class< LgARGB >(vm, ARGBTn::Str)
|
||
|
// Constructors
|
||
|
.Ctor< LgARGB::Value, LgARGB::Value, LgARGB::Value, LgARGB::Value >()
|
||
|
// Member Variables
|
||
|
.Var(_SC("a"), &LgARGB::a)
|
||
|
.Var(_SC("r"), &LgARGB::r)
|
||
|
.Var(_SC("g"), &LgARGB::g)
|
||
|
.Var(_SC("b"), &LgARGB::b)
|
||
|
);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
RootTable(vm).Bind(EntityRGBTn::Str,
|
||
|
DerivedClass< LgEntityRGB, Color3 >(vm, EntityRGBTn::Str)
|
||
|
// Constructors
|
||
|
.Ctor< int, int, int, Color3::Value, Color3::Value, Color3::Value >()
|
||
|
// Properties
|
||
|
.Prop(_SC("r"), &LgEntityRGB::GetR, &LgEntityRGB::SetR)
|
||
|
.Prop(_SC("g"), &LgEntityRGB::GetG, &LgEntityRGB::SetG)
|
||
|
.Prop(_SC("b"), &LgEntityRGB::GetB, &LgEntityRGB::SetB)
|
||
|
);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
RootTable(vm).Bind(BoundsTn::Str,
|
||
|
Class< LgBounds >(vm, BoundsTn::Str)
|
||
|
// Constructors
|
||
|
.Ctor< LgBounds::Value, LgBounds::Value, LgBounds::Value, LgBounds::Value >()
|
||
|
// Member Variables
|
||
|
.Var(_SC("MaxX"), &LgBounds::max_x)
|
||
|
.Var(_SC("MinX"), &LgBounds::min_x)
|
||
|
.Var(_SC("MaxY"), &LgBounds::max_y)
|
||
|
.Var(_SC("MinY"), &LgBounds::min_y)
|
||
|
);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
RootTable(vm).Bind(WastedSettingsTn::Str,
|
||
|
Class< LgWastedSettings >(vm, WastedSettingsTn::Str)
|
||
|
// Constructors
|
||
|
.Ctor< uint32_t, uint32_t, float, float, LgRGB, uint32_t, uint32_t >()
|
||
|
// Member Variables
|
||
|
.Var(_SC("DeathTime"), &LgWastedSettings::mDeathTime)
|
||
|
.Var(_SC("FadeTime"), &LgWastedSettings::mFadeTime)
|
||
|
.Var(_SC("FadeInSpeed"), &LgWastedSettings::mFadeInSpeed)
|
||
|
.Var(_SC("FadeOutSpeed"), &LgWastedSettings::mFadeOutSpeed)
|
||
|
.Var(_SC("FadeColour"), &LgWastedSettings::mFadeColour)
|
||
|
.Var(_SC("CorpseFadeDelay"), &LgWastedSettings::mCorpseFadeDelay)
|
||
|
.Var(_SC("CorpseFadeTime"), &LgWastedSettings::mCorpseFadeTime)
|
||
|
);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
Register_Official_Entity(vm);
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------------------------------------------
|
||
|
* Checkpoint entity proxy.
|
||
|
*/
|
||
|
struct LgCheckpoint
|
||
|
{
|
||
|
int32_t mID;
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Base constructor.
|
||
|
*/
|
||
|
explicit LgCheckpoint(int32_t id)
|
||
|
: mID(id)
|
||
|
{
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve the a valid entity identifier, otherwise throw an exception.
|
||
|
*/
|
||
|
SQMOD_NODISCARD int32_t GetIdentifier() const
|
||
|
{
|
||
|
// Validate the associated identifier
|
||
|
if (INVALID_ENTITY(mID))
|
||
|
{
|
||
|
STHROWF("Invalid checkpoint reference");
|
||
|
}
|
||
|
// Return it
|
||
|
return mID;
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve the native implementation of the associated entity, otherwise throw an exception.
|
||
|
*/
|
||
|
SQMOD_NODISCARD CCheckpoint & Get() const
|
||
|
{
|
||
|
// Retrieve the associated instance
|
||
|
CCheckpoint * p = Core::Get().GetCheckpoint(GetIdentifier()).mInst;
|
||
|
// Validate the associated instance
|
||
|
if (!p)
|
||
|
{
|
||
|
STHROWF("Invalid checkpoint instance");
|
||
|
}
|
||
|
// This is valid so we can return it
|
||
|
return *p;
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve entity instance which is native to the plug-in.
|
||
|
*/
|
||
|
SQMOD_NODISCARD LightObj & GetNative() const
|
||
|
{
|
||
|
return Core::Get().GetCheckpoint(GetIdentifier()).mObj;
|
||
|
}
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
void SetWorld(int world) const { Get().SetWorld(world); }
|
||
|
void SetColor(const LgARGB & c) const { Get().SetColorEx4(c.r, c.g, c.b, c.a); }
|
||
|
void SetPos(const Vector3 & pos) const { Get().SetPosition(pos); }
|
||
|
void SetRadius(float radius) const { Get().SetRadius(radius); }
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
SQMOD_NODISCARD int GetWorld() const { return Get().GetWorld(); }
|
||
|
SQMOD_NODISCARD LgARGB GetColor() const { const Color4 c = Get().GetColor(); return LgARGB(c.a, c.r, c.g, c.b); }
|
||
|
SQMOD_NODISCARD LgEntityVector GetPos() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Checkpoint, 0, Get().GetPosition()); }
|
||
|
SQMOD_NODISCARD float GetRadius() const { return Get().GetRadius(); }
|
||
|
SQMOD_NODISCARD int GetID() const { return mID; }
|
||
|
SQMOD_NODISCARD LgPlayer * GetOwner() const
|
||
|
{ const int id = Get().GetOwnerID(); return VALID_ENTITYEX(id, SQMOD_PLAYER_POOL) ? Core::Get().GetPlayer(id).mLgInst : nullptr; }
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
void Delete() const { _Func->DeleteCheckPoint(GetIdentifier()); }
|
||
|
SQMOD_NODISCARD bool StreamedToPlayer(LgPlayer & player) const;
|
||
|
};
|
||
|
|
||
|
/* ------------------------------------------------------------------------------------------------
|
||
|
* Object entity proxy.
|
||
|
*/
|
||
|
struct LgObject
|
||
|
{
|
||
|
int32_t mID;
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Base constructor.
|
||
|
*/
|
||
|
explicit LgObject(int32_t id)
|
||
|
: mID(id)
|
||
|
{
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve the a valid entity identifier, otherwise throw an exception.
|
||
|
*/
|
||
|
SQMOD_NODISCARD int32_t GetIdentifier() const
|
||
|
{
|
||
|
// Validate the associated identifier
|
||
|
if (INVALID_ENTITY(mID))
|
||
|
{
|
||
|
STHROWF("Invalid object reference");
|
||
|
}
|
||
|
// Return it
|
||
|
return mID;
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve the native implementation of the associated entity, otherwise throw an exception.
|
||
|
*/
|
||
|
SQMOD_NODISCARD CObject & Get() const
|
||
|
{
|
||
|
// Retrieve the associated instance
|
||
|
CObject * p = Core::Get().GetObj(GetIdentifier()).mInst;
|
||
|
// Validate the associated instance
|
||
|
if (!p)
|
||
|
{
|
||
|
STHROWF("Invalid object instance");
|
||
|
}
|
||
|
// This is valid so we can return it
|
||
|
return *p;
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve entity instance which is native to the plug-in.
|
||
|
*/
|
||
|
SQMOD_NODISCARD LightObj & GetNative() const
|
||
|
{
|
||
|
return Core::Get().GetObj(GetIdentifier()).mObj;
|
||
|
}
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
void SetWorld(int world) const { Get().SetWorld(world); }
|
||
|
void SetPos(const Vector3 & pos) const { Get().SetPosition(pos); }
|
||
|
void SetReportingShots(bool toggle) const { Get().SetShotReport(toggle); }
|
||
|
void SetReportingBumps(bool toggle) const { Get().SetTouchedReport(toggle); }
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
SQMOD_NODISCARD int GetModel() const { return Get().GetModel(); }
|
||
|
SQMOD_NODISCARD int GetAlpha() const { return Get().GetAlpha(); }
|
||
|
SQMOD_NODISCARD int GetWorld() const { return Get().GetWorld(); }
|
||
|
SQMOD_NODISCARD LgEntityVector GetPos() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Object, LgObjectVectorFlag::Pos, Get().GetPosition()); }
|
||
|
SQMOD_NODISCARD LgEntityQuaternion GetRotation() const
|
||
|
{ return LgEntityQuaternion(mID, LgEntityType::Object, 0, Get().GetRotation()); }
|
||
|
SQMOD_NODISCARD LgEntityVector GetRotationEuler() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Object, LgObjectVectorFlag::Rotation, Get().GetRotationEuler()); }
|
||
|
SQMOD_NODISCARD int GetID() const { return mID; }
|
||
|
SQMOD_NODISCARD bool GetReportingShots() const { return Get().GetShotReport(); }
|
||
|
SQMOD_NODISCARD bool GetReportingBumps() const { return Get().GetTouchedReport(); }
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
void Delete() const { _Func->DeleteObject(GetIdentifier()); }
|
||
|
void MoveTo(const Vector3 & pos, int time) const { Get().MoveTo(pos, time); }
|
||
|
void MoveBy(const Vector3 & offset, int time) const { Get().MoveBy(offset, time); }
|
||
|
void RotateTo(const Quaternion & rotation, int time) const { Get().RotateTo(rotation, time); }
|
||
|
void RotateBy(const Quaternion & rotOffset, int time) const { Get().RotateBy(rotOffset, time); }
|
||
|
void RotateToEuler(const Vector3 & rotation, int time) const { Get().RotateToEuler(rotation, time); }
|
||
|
void RotateByEuler(const Vector3 & rotOffset, int time) const { Get().RotateByEuler(rotOffset, time); }
|
||
|
void SetAlpha(int alpha, int fadeTime) const { Get().SetAlphaEx(alpha, fadeTime); }
|
||
|
SQMOD_NODISCARD bool StreamedToPlayer(LgPlayer & player) const;
|
||
|
};
|
||
|
|
||
|
/* ------------------------------------------------------------------------------------------------
|
||
|
* Pickup entity proxy.
|
||
|
*/
|
||
|
struct LgPickup
|
||
|
{
|
||
|
int32_t mID;
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Base constructor.
|
||
|
*/
|
||
|
explicit LgPickup(int32_t id)
|
||
|
: mID(id)
|
||
|
{
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve the a valid entity identifier, otherwise throw an exception.
|
||
|
*/
|
||
|
SQMOD_NODISCARD int32_t GetIdentifier() const
|
||
|
{
|
||
|
// Validate the associated identifier
|
||
|
if (INVALID_ENTITY(mID))
|
||
|
{
|
||
|
STHROWF("Invalid pickup reference");
|
||
|
}
|
||
|
// Return it
|
||
|
return mID;
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve the native implementation of the associated entity, otherwise throw an exception.
|
||
|
*/
|
||
|
SQMOD_NODISCARD CPickup & Get() const
|
||
|
{
|
||
|
// Retrieve the associated instance
|
||
|
CPickup * p = Core::Get().GetPickup(GetIdentifier()).mInst;
|
||
|
// Validate the associated instance
|
||
|
if (!p)
|
||
|
{
|
||
|
STHROWF("Invalid pickup instance");
|
||
|
}
|
||
|
// This is valid so we can return it
|
||
|
return *p;
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve entity instance which is native to the plug-in.
|
||
|
*/
|
||
|
SQMOD_NODISCARD LightObj & GetNative() const
|
||
|
{
|
||
|
return Core::Get().GetPickup(GetIdentifier()).mObj;
|
||
|
}
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
void SetWorld(int world) const { Get().SetWorld(world); }
|
||
|
void SetAlpha(int alpha) const { Get().SetAlpha(alpha); }
|
||
|
void SetAuto(bool toggle) const { Get().SetAutomatic(toggle); }
|
||
|
void SetAutoTimer(int timer) const { Get().SetAutoTimer(timer); }
|
||
|
void SetPos(const Vector3 & pos) const { Get().SetPosition(pos); }
|
||
|
void SetSingleUse(bool toggle) const { _Func->SetPickupOption(GetIdentifier(), vcmpPickupOptionSingleUse, toggle); }
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
SQMOD_NODISCARD int GetWorld() const { return Get().GetWorld(); }
|
||
|
SQMOD_NODISCARD int GetAlpha() const { return Get().GetAlpha(); }
|
||
|
SQMOD_NODISCARD bool GetAuto() const { return Get().GetAutomatic(); }
|
||
|
SQMOD_NODISCARD int GetAutoTimer() const { return Get().GetAutoTimer(); }
|
||
|
SQMOD_NODISCARD LgEntityVector GetPos() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Pickup, 0, Get().GetPosition()); }
|
||
|
SQMOD_NODISCARD int GetModel() const { return Get().GetModel(); }
|
||
|
SQMOD_NODISCARD int GetQuantity() const { return Get().GetQuantity(); }
|
||
|
SQMOD_NODISCARD int GetID() const { return mID; }
|
||
|
SQMOD_NODISCARD bool GetSingleUse() const { return _Func->GetPickupOption(GetIdentifier(), vcmpPickupOptionSingleUse) >= 1; }
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
void Delete() const { _Func->DeletePickup(GetIdentifier()); }
|
||
|
void Respawn() const { Get().Refresh(); }
|
||
|
SQMOD_NODISCARD bool StreamedToPlayer(LgPlayer & player) const;
|
||
|
};
|
||
|
|
||
|
/* ------------------------------------------------------------------------------------------------
|
||
|
* Player entity proxy.
|
||
|
*/
|
||
|
struct LgPlayer
|
||
|
{
|
||
|
int32_t mID;
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Base constructor.
|
||
|
*/
|
||
|
explicit LgPlayer(int32_t id)
|
||
|
: mID(id)
|
||
|
{
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve the a valid entity identifier, otherwise throw an exception.
|
||
|
*/
|
||
|
SQMOD_NODISCARD int32_t GetIdentifier() const
|
||
|
{
|
||
|
// Validate the associated identifier
|
||
|
if (INVALID_ENTITY(mID))
|
||
|
{
|
||
|
STHROWF("Invalid player reference");
|
||
|
}
|
||
|
// Return it
|
||
|
return mID;
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve the native implementation of the associated entity, otherwise throw an exception.
|
||
|
*/
|
||
|
SQMOD_NODISCARD CPlayer & Get() const
|
||
|
{
|
||
|
// Retrieve the associated instance
|
||
|
CPlayer * p = Core::Get().GetPlayer(GetIdentifier()).mInst;
|
||
|
// Validate the associated instance
|
||
|
if (!p)
|
||
|
{
|
||
|
STHROWF("Invalid player instance");
|
||
|
}
|
||
|
// This is valid so we can return it
|
||
|
return *p;
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve entity instance which is native to the plug-in.
|
||
|
*/
|
||
|
SQMOD_NODISCARD LightObj & GetNative() const
|
||
|
{
|
||
|
return Core::Get().GetPlayer(GetIdentifier()).mObj;
|
||
|
}
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
SQMOD_NODISCARD const SQChar * ToString() const { return INVALID_ENTITY(mID) ? Get().GetName() : _SC(""); }
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
void SetName(StackStrF & name) const { Get().SetName(name); }
|
||
|
void SetPosition(const Vector3 & pos) const { Get().SetPosition(pos); }
|
||
|
void SetHealth(float health) const { Get().SetHealth(health); }
|
||
|
void SetArmour(float armour) const { Get().SetArmor(armour); }
|
||
|
void SetAdmin(bool toggle) const { Get().SetAdmin(toggle); }
|
||
|
void SetWorld(int world) const { Get().SetWorld(world); }
|
||
|
void SetSecWorld(int world) const { Get().SetSecondaryWorld(world); }
|
||
|
void SetTeam(int team) const { Get().SetTeam(team); }
|
||
|
void SetSkin(int skin) const { Get().SetSkin(skin); }
|
||
|
void SetColour(const LgRGB & colour) const { Get().SetColor(colour); }
|
||
|
void SetMoney(int money) const { Get().SetMoney(money); }
|
||
|
void SetScore(int score) const { Get().SetScore(score); }
|
||
|
void SetImmunity(uint32_t immunity) const { Get().SetImmunity(immunity); }
|
||
|
void SetHeading(float heading) const { Get().SetHeading(heading); }
|
||
|
void SetVehicle(LgVehicle & vehicle) const;
|
||
|
void SetFrozen(bool toggle) const { _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionControllable, !toggle); }
|
||
|
void SetDriveByEnabled(bool toggle) const { _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionDriveBy, toggle); }
|
||
|
void SetWhiteScanLines(bool toggle) const { _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionWhiteScanlines, toggle); }
|
||
|
void SetGreenScanLines(bool toggle) const { _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionGreenScanlines, toggle); }
|
||
|
void SetWidescreen(bool toggle) const { _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionWidescreen, toggle); }
|
||
|
void SetOnRadar(bool toggle) const { _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionHasMarker, toggle); }
|
||
|
void SetCanAttack(bool toggle) const { _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionCanAttack, toggle); }
|
||
|
void SetWeaponSlot(int slot) const { Get().SetWeaponSlot(slot); }
|
||
|
void ShowMarkers(bool toggle) const { _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionShowMarkers, toggle); }
|
||
|
void SetSpectateTarget(LgPlayer & player) const { Get().SetSpectator(player.Get()); }
|
||
|
void SetMarkerVisible(bool toggle) const { _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionHasMarker, toggle); }
|
||
|
void SetCanUseColors(bool toggle) const { _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionChatTagsEnabled, toggle); }
|
||
|
void SetDrunkStatus(bool toggle) const { _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionDrunkEffects, toggle); }
|
||
|
void SetWantedLevel(int level) const { Get().SetWantedLevel(level); }
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
SQMOD_NODISCARD LgEntityVector GetPosition() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Player, LgPlayerVectorFlag::Pos, Get().GetPosition()); }
|
||
|
SQMOD_NODISCARD int GetClass() const { return Get().GetClass(); }
|
||
|
SQMOD_NODISCARD bool GetAdmin() const { return Get().GetAdmin(); }
|
||
|
SQMOD_NODISCARD const SQChar * GetIP() const { return Get().GetIP(); }
|
||
|
SQMOD_NODISCARD bool GetSpawned() const { return Get().IsSpawned(); }
|
||
|
SQMOD_NODISCARD int GetWorld() const { return Get().GetWorld(); }
|
||
|
SQMOD_NODISCARD int GetSecWorld() const { return Get().GetSecondaryWorld(); }
|
||
|
SQMOD_NODISCARD int GetUniqueWorld() const { return Get().GetUniqueWorld(); }
|
||
|
SQMOD_NODISCARD int GetState() const { return Get().GetState(); }
|
||
|
SQMOD_NODISCARD const SQChar * GetName() const { return Get().GetName(); }
|
||
|
SQMOD_NODISCARD int GetTeam() const { return Get().GetTeam(); }
|
||
|
SQMOD_NODISCARD int GetSkin() const { return Get().GetSkin(); }
|
||
|
SQMOD_NODISCARD LgEntityRGB GetColour() const { return LgEntityRGB(mID, LgEntityType::Player, 0, Get().GetColor()); }
|
||
|
SQMOD_NODISCARD int GetMoney() const { return Get().GetMoney(); }
|
||
|
SQMOD_NODISCARD int GetScore() const { return Get().GetScore(); }
|
||
|
SQMOD_NODISCARD int GetPing() const { return Get().GetPing(); }
|
||
|
SQMOD_NODISCARD float GetHealth() const { return Get().GetHealth(); }
|
||
|
SQMOD_NODISCARD float GetArmour() const { return Get().GetArmor(); }
|
||
|
SQMOD_NODISCARD int32_t GetImmunity() const { return Get().GetImmunity(); }
|
||
|
SQMOD_NODISCARD float GetHeading() const { return Get().GetHeading(); }
|
||
|
SQMOD_NODISCARD LgVehicle * GetVehicle() const
|
||
|
{ const int id = _Func->GetPlayerVehicleId(GetIdentifier()); return VALID_ENTITYEX(id, SQMOD_VEHICLE_POOL) ? Core::Get().GetVehicle(id).mLgInst : nullptr; }
|
||
|
SQMOD_NODISCARD bool GetFrozen() const { return _Func->GetPlayerOption(GetIdentifier(), vcmpPlayerOptionControllable) <= 0; }
|
||
|
SQMOD_NODISCARD bool GetDriveByEnabled() const { return _Func->GetPlayerOption(GetIdentifier(), vcmpPlayerOptionDriveBy) >= 1; }
|
||
|
SQMOD_NODISCARD bool GetWhiteScanLines() const { return _Func->GetPlayerOption(GetIdentifier(), vcmpPlayerOptionWhiteScanlines) >= 1; }
|
||
|
SQMOD_NODISCARD bool GetGreenScanLines() const { return _Func->GetPlayerOption(GetIdentifier(), vcmpPlayerOptionGreenScanlines) >= 1; }
|
||
|
SQMOD_NODISCARD bool GetWidescreen() const { return _Func->GetPlayerOption(GetIdentifier(), vcmpPlayerOptionWidescreen) >= 1; }
|
||
|
SQMOD_NODISCARD bool GetOnRadar() const { return _Func->GetPlayerOption(GetIdentifier(), vcmpPlayerOptionHasMarker) >= 1; }
|
||
|
SQMOD_NODISCARD bool GetCanAttack() const { return _Func->GetPlayerOption(GetIdentifier(), vcmpPlayerOptionCanAttack) >= 1; }
|
||
|
SQMOD_NODISCARD int GetVehicleSlot() const { return Get().GetVehicleSlot(); }
|
||
|
SQMOD_NODISCARD int GetVehicleStatus() const { return Get().GetVehicleStatus(); }
|
||
|
SQMOD_NODISCARD int GetWeaponSlot() const { return Get().GetWeaponSlot(); }
|
||
|
SQMOD_NODISCARD int GetWeapon() const { return Get().GetWeapon(); }
|
||
|
SQMOD_NODISCARD int GetWeaponAmmo() const { return Get().GetAmmo(); }
|
||
|
SQMOD_NODISCARD int GetAlpha() const { return Get().GetAlpha(); }
|
||
|
SQMOD_NODISCARD int GetID() const { return mID; }
|
||
|
SQMOD_NODISCARD bool Typing() const { return Get().IsTyping(); }
|
||
|
SQMOD_NODISCARD bool ShowingMarkers() const { return _Func->GetPlayerOption(GetIdentifier(), vcmpPlayerOptionShowMarkers) >= 1; }
|
||
|
SQMOD_NODISCARD bool GetCameraLocked() const { return Get().IsCameraLocked(); }
|
||
|
SQMOD_NODISCARD int GetKey() const { return Get().GetKey(); }
|
||
|
SQMOD_NODISCARD bool GetAwayStatus() const { return Get().IsAway(); }
|
||
|
SQMOD_NODISCARD LgPlayer * GetSpectateTarget() const
|
||
|
{ const int id = _Func->GetPlayerSpectateTarget(GetIdentifier()); return VALID_ENTITYEX(id, SQMOD_PLAYER_POOL) ? Core::Get().GetPlayer(id).mLgInst : nullptr; }
|
||
|
SQMOD_NODISCARD LgEntityVector GetSpeed() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Player, LgPlayerVectorFlag::Speed, Get().GetSpeed()); }
|
||
|
SQMOD_NODISCARD bool GetCanUseColors() const { return _Func->GetPlayerOption(GetIdentifier(), vcmpPlayerOptionChatTagsEnabled) >= 1; }
|
||
|
SQMOD_NODISCARD bool GetMarkerVisible() const { return _Func->GetPlayerOption(GetIdentifier(), vcmpPlayerOptionHasMarker) >= 1; }
|
||
|
SQMOD_NODISCARD bool GetDrunkStatus() const { return _Func->GetPlayerOption(GetIdentifier(), vcmpPlayerOptionDrunkEffects) >= 1; }
|
||
|
SQMOD_NODISCARD double GetFPS() const { return Get().GetFPS(); }
|
||
|
SQMOD_NODISCARD const SQChar * GetUniqueID() const { return Get().GetUID(); }
|
||
|
SQMOD_NODISCARD const SQChar * GetUniqueID2() const { return Get().GetUID2(); }
|
||
|
SQMOD_NODISCARD bool GetPlayerOnFireStatus() const { return Get().IsBurning(); }
|
||
|
SQMOD_NODISCARD bool GetPlayerCrouchStatus() const { return Get().IsCrouched(); }
|
||
|
SQMOD_NODISCARD int GetPlayerAction() const { return Get().GetAction(); }
|
||
|
SQMOD_NODISCARD int GetPlayerGameKeys() const { return Get().GetGameKeys(); }
|
||
|
SQMOD_NODISCARD LgVector GetPlayerAimPos() const { return LgVector(Get().GetAimPosition()); }
|
||
|
SQMOD_NODISCARD LgVector GetPlayerAimDir() const { return LgVector(Get().GetAimDirection()); }
|
||
|
SQMOD_NODISCARD int GetWantedLevel() const { return Get().GetWantedLevel(); }
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
void PlaySound(int sound) const { Get().PlaySound(sound); }
|
||
|
void Kick() const { Get().Kick(); }
|
||
|
void Ban() const { Get().Ban(); }
|
||
|
void Spawn() const { Get().ForceSpawn(); }
|
||
|
void GiveMoney(int money) const { Get().GiveMoney(money); }
|
||
|
void AddSpeed(const Vector3 & speed) const { Get().AddSpeed(speed); }
|
||
|
void SetSpeed(const Vector3 & speed) const { Get().SetSpeed(speed); }
|
||
|
void Eject() const { Get().Disembark(); }
|
||
|
void SetCameraPos(const Vector3 & pos, const Vector3 & look) const { Get().SetCameraPosition(pos, look); }
|
||
|
void Disarm() const { Get().StripWeapons(); }
|
||
|
void CompatAnimation(int anim) const { Get().SetAnimation(anim); }
|
||
|
void Animation(int group, int anim) const { Get().SetAnimationEx(anim, group); }
|
||
|
SQMOD_NODISCARD LgVehicle * StandingOnVehicle() const
|
||
|
{ const int id = _Func->GetPlayerStandingOnVehicle(GetIdentifier()); return VALID_ENTITYEX(id, SQMOD_VEHICLE_POOL) ? Core::Get().GetVehicle(id).mLgInst : nullptr; }
|
||
|
SQMOD_NODISCARD LgObject * StandingOnObject() const
|
||
|
{ const int id = _Func->GetPlayerStandingOnObject(GetIdentifier()); return VALID_ENTITYEX(id, SQMOD_OBJECT_POOL) ? Core::Get().GetObj(id).mLgInst : nullptr; }
|
||
|
void GiveWeapon(int weapon, int ammo) const { Get().GiveWeapon(weapon, ammo); }
|
||
|
void SetWeapon(int weapon, int ammo) const { Get().SetWeaponEx(weapon, ammo); }
|
||
|
void RemoveWeapon(int weapon) const { Get().RemoveWeapon(weapon); }
|
||
|
SQMOD_NODISCARD int GetWeaponAtSlot(int slot) const { return Get().GetWeaponAtSlot(slot); }
|
||
|
SQMOD_NODISCARD int GetAmmoAtSlot(int slot) const { return Get().GetAmmoAtSlot(slot); }
|
||
|
void SetAlpha(int alpha, int fadeTime) const { Get().SetAlphaEx(alpha, fadeTime); }
|
||
|
SQMOD_NODISCARD bool StreamedToPlayer(const LgPlayer & player) const { return Get().IsStreamedFor(player.Get()); }
|
||
|
void SetVehicleSlot(const LgVehicle & vehicle, int slot) const;
|
||
|
void Select() const { Get().ForceSelect(); }
|
||
|
void RestoreCamera() const { Get().RestoreCamera(); }
|
||
|
void RemoveMarker() const { _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionHasMarker, 0); }
|
||
|
void SetMarker(int toggle) const { _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionShowMarkers, toggle); }
|
||
|
void SetDrunkLevel(int visuals, int handling) const {
|
||
|
if (visuals <= 0 && handling <= 0) _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionDrunkEffects, 0);
|
||
|
else _Func->SetPlayerOption(GetIdentifier(), vcmpPlayerOptionDrunkEffects, 1);
|
||
|
}
|
||
|
void RedirectPlayerToServer(StackStrF & ip, unsigned int port, StackStrF & nick, StackStrF & spass, StackStrF & upass) const
|
||
|
{ Get().Redirect(ip, port, nick, spass, upass); }
|
||
|
void RequestModuleList() const { Get().GetModuleList(); }
|
||
|
};
|
||
|
|
||
|
/* ------------------------------------------------------------------------------------------------
|
||
|
* Vehicle entity proxy.
|
||
|
*/
|
||
|
struct LgVehicle
|
||
|
{
|
||
|
int32_t mID;
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Base constructor.
|
||
|
*/
|
||
|
explicit LgVehicle(int32_t id)
|
||
|
: mID(id)
|
||
|
{
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve the a valid entity identifier, otherwise throw an exception.
|
||
|
*/
|
||
|
SQMOD_NODISCARD int32_t GetIdentifier() const
|
||
|
{
|
||
|
// Validate the associated identifier
|
||
|
if (INVALID_ENTITY(mID))
|
||
|
{
|
||
|
STHROWF("Invalid vehicle reference");
|
||
|
}
|
||
|
// Return it
|
||
|
return mID;
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve the native implementation of the associated entity, otherwise throw an exception.
|
||
|
*/
|
||
|
SQMOD_NODISCARD CVehicle & Get() const
|
||
|
{
|
||
|
// Retrieve the associated instance
|
||
|
CVehicle * p = Core::Get().GetVehicle(GetIdentifier()).mInst;
|
||
|
// Validate the associated instance
|
||
|
if (!p)
|
||
|
{
|
||
|
STHROWF("Invalid vehicle instance");
|
||
|
}
|
||
|
// This is valid so we can return it
|
||
|
return *p;
|
||
|
}
|
||
|
/* --------------------------------------------------------------------------------------------
|
||
|
* Retrieve entity instance which is native to the plug-in.
|
||
|
*/
|
||
|
SQMOD_NODISCARD LightObj & GetNative() const
|
||
|
{
|
||
|
return Core::Get().GetVehicle(GetIdentifier()).mObj;
|
||
|
}
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
SQMOD_NODISCARD static int32_t GetDriverID(int32_t id) {
|
||
|
for(int i = 0, n = _Func->GetMaxPlayers(); i < n; ++i) {
|
||
|
if(_Func->IsPlayerConnected(i)) {
|
||
|
if(_Func->GetPlayerVehicleId(i) == id && _Func->GetPlayerInVehicleSlot(i) == 0) return i;
|
||
|
}
|
||
|
}
|
||
|
return -1;
|
||
|
}
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
void SetWorld(int world) const { Get().SetWorld(world); }
|
||
|
void SetImmunity(int immunity) const { Get().SetImmunity(immunity); }
|
||
|
void SetPosition(const Vector3 & pos) const { Get().SetPosition(pos); }
|
||
|
void SetSpawnPos(const Vector3 & pos) const { Get().SetSpawnPosition(pos); }
|
||
|
void SetSpawnAngle(const Quaternion & angle) const { Get().SetSpawnRotation(angle); }
|
||
|
void SetSpawnAngleEuler(const Vector3 & angle) const { Get().SetSpawnRotationEuler(angle); }
|
||
|
void SetIdleRespawnTimer(uint32_t time) const { Get().SetIdleRespawnTimer(time); }
|
||
|
void SetHealth(float health) const { Get().SetHealth(health); }
|
||
|
void SetColour1(int colour1) const { Get().SetPrimaryColor(colour1); }
|
||
|
void SetColour2(int colour2) const { Get().SetSecondaryColor(colour2); }
|
||
|
void SetLocked(bool toggle) const { _Func->SetVehicleOption(GetIdentifier(), vcmpVehicleOptionDoorsLocked, toggle); }
|
||
|
void SetDamage(uint32_t damage) const { Get().SetDamageData(damage); }
|
||
|
void SetLightFlags(uint32_t flags) const { Get().SetLightsData(flags); }
|
||
|
void SetAlarm(bool toggle) const { _Func->SetVehicleOption(GetIdentifier(), vcmpVehicleOptionAlarm, toggle ); }
|
||
|
void SetSiren(bool toggle) const { _Func->SetVehicleOption(GetIdentifier(), vcmpVehicleOptionSiren, toggle); }
|
||
|
void SetLights(bool toggle) const { _Func->SetVehicleOption(GetIdentifier(), vcmpVehicleOptionLights, toggle ); }
|
||
|
void SetRotation(const Quaternion & rotation) const { Get().SetRotation(rotation); }
|
||
|
void SetEulerRotation(const Vector3 & angle) const { Get().SetRotationEuler(angle); }
|
||
|
void SetSpeed(const Vector3 & speed) const { Get().SetSpeed(speed); }
|
||
|
void SetRelativeSpeed(const Vector3 & speed) const { Get().SetRelativeSpeed(speed); }
|
||
|
void SetTurnSpeed(const Vector3 & speed) const { Get().SetTurnSpeed(speed); }
|
||
|
void SetRelativeTurnSpeed(const Vector3 & speed) const { Get().SetRelativeTurnSpeed(speed); }
|
||
|
void SetRadio(int id) const { Get().SetRadio(id); }
|
||
|
void SetRadioLocked(bool toggle) const { _Func->SetVehicleOption(GetIdentifier(), vcmpVehicleOptionRadioLocked, toggle); }
|
||
|
void SetGhost(bool toggle) const { _Func->SetVehicleOption(GetIdentifier(), vcmpVehicleOptionGhost, toggle); }
|
||
|
void SetSingleUse(bool toggle) const { _Func->SetVehicleOption(GetIdentifier(), vcmpVehicleOptionSingleUse, toggle); }
|
||
|
void SetTaxiLight(bool toggle) const {
|
||
|
if (toggle == (GetTaxiLight() != 0)) return;
|
||
|
uint32_t data = _Func->GetVehicleLightsData(GetIdentifier());
|
||
|
if (toggle) data |= (1 << 8);
|
||
|
else data &= ~(1 << 8);
|
||
|
_Func->SetVehicleLightsData(GetIdentifier(), data);
|
||
|
}
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
SQMOD_NODISCARD int GetWorld() const { return Get().GetWorld(); }
|
||
|
SQMOD_NODISCARD int GetModel() const { return Get().GetModel(); }
|
||
|
SQMOD_NODISCARD int GetImmunity() const { return Get().GetImmunity(); }
|
||
|
SQMOD_NODISCARD LgEntityVector GetPosition() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Vehicle, LgVehicleVectorFlag::Pos, Get().GetPosition()); }
|
||
|
SQMOD_NODISCARD LgEntityVector GetSpawnPos() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Vehicle, LgVehicleVectorFlag::SpawnPos, Get().GetSpawnPosition()); }
|
||
|
SQMOD_NODISCARD LgEntityQuaternion GetSpawnAngle() const
|
||
|
{ return LgEntityQuaternion(mID, LgEntityType::Vehicle, LgVehicleQuaternionFlag::SpawnAngle, Get().GetSpawnRotation()); }
|
||
|
SQMOD_NODISCARD LgEntityVector GetSpawnAngleEuler() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Vehicle, LgVehicleVectorFlag::SpawnAngle, Get().GetSpawnRotationEuler()); }
|
||
|
SQMOD_NODISCARD uint32_t GetIdleRespawnTimer() const { return Get().GetIdleRespawnTimer(); }
|
||
|
SQMOD_NODISCARD float GetHealth() const { return Get().GetHealth(); }
|
||
|
SQMOD_NODISCARD int GetColour1() const { return Get().GetPrimaryColor(); }
|
||
|
SQMOD_NODISCARD int GetColour2() const { return Get().GetSecondaryColor(); }
|
||
|
SQMOD_NODISCARD bool GetLocked() const { return _Func->GetVehicleOption(GetIdentifier(), vcmpVehicleOptionDoorsLocked) >= 1; }
|
||
|
SQMOD_NODISCARD uint32_t GetDamage() const { return Get().GetDamageData(); }
|
||
|
SQMOD_NODISCARD uint32_t GetLightFlags() const { return Get().GetLightsData(); }
|
||
|
SQMOD_NODISCARD bool GetAlarm() const { return _Func->GetVehicleOption(GetIdentifier(), vcmpVehicleOptionAlarm) >= 1; }
|
||
|
SQMOD_NODISCARD bool GetSiren() const { return _Func->GetVehicleOption(GetIdentifier(), vcmpVehicleOptionSiren) >= 1; }
|
||
|
SQMOD_NODISCARD bool GetLights() const { return _Func->GetVehicleOption(GetIdentifier(), vcmpVehicleOptionLights) >= 1; }
|
||
|
SQMOD_NODISCARD LgPlayer * GetDriver() const
|
||
|
{ const int id = GetDriverID(GetIdentifier()); return VALID_ENTITYEX(id, SQMOD_PLAYER_POOL) ? Core::Get().GetPlayer(id).mLgInst : nullptr; }
|
||
|
SQMOD_NODISCARD int GetID() const { return mID; }
|
||
|
SQMOD_NODISCARD int GetSyncSource() const { return Get().GetSyncSource(); }
|
||
|
SQMOD_NODISCARD int GetSyncType() const { return Get().GetSyncType(); }
|
||
|
SQMOD_NODISCARD bool GetWrecked() const { return Get().IsWrecked(); }
|
||
|
SQMOD_NODISCARD LgEntityQuaternion GetRotation() const
|
||
|
{ return LgEntityQuaternion(mID, LgEntityType::Vehicle, LgVehicleQuaternionFlag::Angle, Get().GetRotation()); }
|
||
|
SQMOD_NODISCARD LgEntityVector GetEulerRotation() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Vehicle, LgVehicleVectorFlag::Angle, Get().GetRotationEuler()); }
|
||
|
SQMOD_NODISCARD LgEntityVector GetSpeed() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Vehicle, LgVehicleVectorFlag::Speed, Get().GetSpeed()); }
|
||
|
SQMOD_NODISCARD LgEntityVector GetRelativeSpeed() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Vehicle, LgVehicleVectorFlag::RelSpeed, Get().GetRelativeSpeed()); }
|
||
|
SQMOD_NODISCARD LgEntityVector GetTurnSpeed() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Vehicle, LgVehicleVectorFlag::TurnSpeed, Get().GetTurnSpeed()); }
|
||
|
SQMOD_NODISCARD LgEntityVector GetRelativeTurnSpeed() const
|
||
|
{ return LgEntityVector(mID, LgEntityType::Vehicle, LgVehicleVectorFlag::RelTurnSpeed, Get().GetRelativeTurnSpeed()); }
|
||
|
SQMOD_NODISCARD int GetRadio() const { return Get().GetRadio(); }
|
||
|
SQMOD_NODISCARD bool GetRadioLockStatus() const { return _Func->GetVehicleOption(GetIdentifier(), vcmpVehicleOptionRadioLocked) >= 1; }
|
||
|
SQMOD_NODISCARD bool GetGhost() const { return _Func->GetVehicleOption(GetIdentifier(), vcmpVehicleOptionGhost) >= 1; }
|
||
|
SQMOD_NODISCARD LgVector GetTurretRotation() const { const Vector2 v = Get().GetTurretRotation(); return LgVector(v.x, v.y, 0); }
|
||
|
SQMOD_NODISCARD bool GetSingleUse() const { return _Func->GetVehicleOption(GetIdentifier(), vcmpVehicleOptionSingleUse) >= 1; }
|
||
|
SQMOD_NODISCARD bool GetTaxiLight() const { return (_Func->GetVehicleLightsData(GetIdentifier()) & (1 << 8)) != 0; }
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
void Delete() const { _Func->DeleteVehicle(GetIdentifier()); }
|
||
|
void Fix() const { Get().Fix(); }
|
||
|
void Respawn() const { Get().Respawn(); }
|
||
|
void Kill() const { Get().Explode(); }
|
||
|
void SetFlatTyres(bool toggle) const { Get().FlattenTyres(toggle); }
|
||
|
SQMOD_NODISCARD int GetPartStatus(int part) const { return Get().GetPartStatus(part); }
|
||
|
void SetPartStatus(int part, int status) const { Get().SetPartStatus(part, status); }
|
||
|
SQMOD_NODISCARD int GetTyreStatus(int tyre) const { return Get().GetTyreStatus(tyre); }
|
||
|
void SetTyreStatus(int part, int status) const { Get().SetTyreStatus(part, status); }
|
||
|
SQMOD_NODISCARD bool GetStreamedForPlayer(LgPlayer & player) const { return Get().IsStreamedFor(player.Get()); }
|
||
|
SQMOD_NODISCARD LgPlayer * GetOccupant(int slot) const
|
||
|
{ const int id = _Func->GetVehicleOccupant(GetIdentifier(), slot); return VALID_ENTITYEX(id, SQMOD_PLAYER_POOL) ? Core::Get().GetPlayer(id).mLgInst : nullptr; }
|
||
|
void SetHandlingData(int rule, float value) const { Get().SetHandlingRule(rule, value); }
|
||
|
SQMOD_NODISCARD double GetHandlingData(int rule) const { return Get().GetHandlingRule(rule); }
|
||
|
void ResetHandlingData(int rule) const { Get().ResetHandlingRule(rule); }
|
||
|
void ResetAllHandling() const { Get().ResetHandlings(); }
|
||
|
SQMOD_NODISCARD bool IsHandlingSet(int rule) const { return Get().ExistsHandlingRule(rule); }
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
void AddVehicleSpeed(const Vector3 & speed) const { Get().SetSpeed(speed); }
|
||
|
void AddVehicleRelSpeed(const Vector3 & speed) const { Get().SetRelativeSpeed(speed); }
|
||
|
void AddVehicleTurnSpeed(const Vector3 & speed) const { Get().SetTurnSpeed(speed); }
|
||
|
void AddVehicleRelTurnSpeed(const Vector3 & speed) const { Get().SetRelativeTurnSpeed(speed); }
|
||
|
};
|
||
|
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
inline bool LgCheckpoint::StreamedToPlayer(LgPlayer & player) const { return Get().IsStreamedFor(player.Get()); }
|
||
|
inline bool LgObject::StreamedToPlayer(LgPlayer & player) const { return Get().IsStreamedFor(player.Get()); }
|
||
|
inline bool LgPickup::StreamedToPlayer(LgPlayer & player) const { return Get().IsStreamedFor(player.Get()); }
|
||
|
inline void LgPlayer::SetVehicle(LgVehicle & vehicle) const { Get().Embark(vehicle.Get()); }
|
||
|
inline void LgPlayer::SetVehicleSlot(const LgVehicle & vehicle, int slot) const { Get().EmbarkEx(vehicle.Get(), slot, true, false); }
|
||
|
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
void LgCheckpointSetID(LgCheckpoint * inst, int32_t id) { assert(inst); if (inst) inst->mID = id; }
|
||
|
void LgObjectSetID(LgObject * inst, int32_t id) { assert(inst); if (inst) inst->mID = id; }
|
||
|
void LgPickupSetID(LgPickup * inst, int32_t id) { assert(inst); if (inst) inst->mID = id; }
|
||
|
void LgPlayerSetID(LgPlayer * inst, int32_t id) { assert(inst); if (inst) inst->mID = id; }
|
||
|
void LgVehicleSetID(LgVehicle * inst, int32_t id) { assert(inst); if (inst) inst->mID = id; }
|
||
|
|
||
|
// ------------------------------------------------------------------------------------------------
|
||
|
LightObj LgCheckpointObj(HSQUIRRELVM vm, int32_t id) { return LightObj(SqTypeIdentity< LgCheckpoint >{}, vm, id); }
|
||
|
LightObj LgObjectObj(HSQUIRRELVM vm, int32_t id) { return LightObj(SqTypeIdentity< LgObject >{}, vm, id); }
|
||
|
LightObj LgPickupObj(HSQUIRRELVM vm, int32_t id) { return LightObj(SqTypeIdentity< LgPickup >{}, vm, id); }
|
||
|
LightObj LgPlayerObj(HSQUIRRELVM vm, int32_t id) { return LightObj(SqTypeIdentity< LgPlayer >{}, vm, id); }
|
||
|
LightObj LgVehicleObj(HSQUIRRELVM vm, int32_t id) { return LightObj(SqTypeIdentity< LgVehicle >{}, vm, id); }
|
||
|
|
||
|
// ================================================================================================
|
||
|
void Register_Official_Entity(HSQUIRRELVM vm)
|
||
|
{
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
Class< LgCheckpoint, NoConstructor< LgCheckpoint > > checkpoint(vm, "CCheckpoint_INTERNAL");
|
||
|
// Read-write properties
|
||
|
checkpoint
|
||
|
.Prop(_SC("World"), &LgCheckpoint::GetWorld, &LgCheckpoint::SetWorld)
|
||
|
.Prop(_SC("Color"), &LgCheckpoint::GetColor, &LgCheckpoint::SetColor)
|
||
|
.Prop(_SC("Radius"), &LgCheckpoint::GetRadius, &LgCheckpoint::SetRadius)
|
||
|
.Prop(_SC("Pos"), &LgCheckpoint::GetPos, &LgCheckpoint::SetPos)
|
||
|
;
|
||
|
// Read-only properties
|
||
|
checkpoint
|
||
|
.Prop(_SC("Native"), &LgCheckpoint::GetNative)
|
||
|
.Prop(_SC("ID"), &LgCheckpoint::GetID)
|
||
|
.Prop(_SC("Owner"), &LgCheckpoint::GetOwner)
|
||
|
;
|
||
|
// Functions
|
||
|
checkpoint
|
||
|
.SquirrelFunc(_SC("_typename"), &CCheckpointTn::Fn)
|
||
|
.Func(_SC("Remove"), &LgCheckpoint::Delete)
|
||
|
.Func(_SC("StreamedToPlayer"), &LgCheckpoint::StreamedToPlayer)
|
||
|
;
|
||
|
RootTable(vm).Bind(_SC("CCheckpoint"), checkpoint);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
Class< LgObject, NoConstructor< LgObject > > object(vm, "CObject_INTERNAL");
|
||
|
// Read-write properties
|
||
|
object
|
||
|
.Prop(_SC("World"), &LgObject::GetWorld, &LgObject::SetWorld)
|
||
|
.Prop(_SC("Pos"), &LgObject::GetPos, &LgObject::SetPos)
|
||
|
.Prop(_SC("TrackingShots"), &LgObject::GetReportingShots, &LgObject::SetReportingShots)
|
||
|
.Prop(_SC("TrackingBumps"), &LgObject::GetReportingBumps, &LgObject::SetReportingBumps)
|
||
|
;
|
||
|
// Read-only properties
|
||
|
object
|
||
|
.Prop(_SC("Native"), &LgObject::GetNative)
|
||
|
.Prop(_SC("Alpha"), &LgObject::GetAlpha)
|
||
|
.Prop(_SC("Model"), &LgObject::GetModel)
|
||
|
.Prop(_SC("Rotation"), &LgObject::GetRotation)
|
||
|
.Prop(_SC("RotationEuler"), &LgObject::GetRotationEuler)
|
||
|
.Prop(_SC("ID"), &LgObject::GetID)
|
||
|
;
|
||
|
// Functions
|
||
|
object
|
||
|
.SquirrelFunc(_SC("_typename"), &CObjectTn::Fn)
|
||
|
.Func(_SC("Delete"), &LgObject::Delete)
|
||
|
.Func(_SC("MoveTo"), &LgObject::MoveTo)
|
||
|
.Func(_SC("MoveBy"), &LgObject::MoveBy)
|
||
|
.Func(_SC("RotateTo"), &LgObject::RotateTo)
|
||
|
.Func(_SC("RotateBy"), &LgObject::RotateBy)
|
||
|
.Func(_SC("RotateToEuler"), &LgObject::RotateToEuler)
|
||
|
.Func(_SC("RotateByEuler"), &LgObject::RotateByEuler)
|
||
|
.Func(_SC("SetAlpha"), &LgObject::SetAlpha)
|
||
|
.Func(_SC("StreamedToPlayer"), &LgObject::StreamedToPlayer)
|
||
|
;
|
||
|
RootTable(vm).Bind(_SC("CObject"), object);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
Class< LgPickup, NoConstructor< LgPickup > > pickup(vm, "CPickup_INTERNAL");
|
||
|
// Read-write properties
|
||
|
pickup
|
||
|
.Prop(_SC("World"), &LgPickup::GetWorld, &LgPickup::SetWorld)
|
||
|
.Prop(_SC("Alpha"), &LgPickup::GetAlpha, &LgPickup::SetAlpha)
|
||
|
.Prop(_SC("Automatic"), &LgPickup::GetAuto, &LgPickup::SetAuto)
|
||
|
.Prop(_SC("Timer"), &LgPickup::GetAutoTimer, &LgPickup::SetAutoTimer)
|
||
|
.Prop(_SC("RespawnTime"), &LgPickup::GetAutoTimer, &LgPickup::SetAutoTimer)
|
||
|
.Prop(_SC("Pos"), &LgPickup::GetPos, &LgPickup::SetPos)
|
||
|
.Prop(_SC("SingleUse"), &LgPickup::GetSingleUse, &LgPickup::SetSingleUse)
|
||
|
;
|
||
|
// Read-only properties
|
||
|
pickup
|
||
|
.Prop(_SC("Native"), &LgPickup::GetNative)
|
||
|
.Prop(_SC("Model"), &LgPickup::GetModel)
|
||
|
.Prop(_SC("Quantity"), &LgPickup::GetQuantity)
|
||
|
.Prop(_SC("ID"), &LgPickup::GetID)
|
||
|
;
|
||
|
// Functions
|
||
|
pickup
|
||
|
.SquirrelFunc(_SC("_typename"), &CPickupTn::Fn)
|
||
|
.Func(_SC("Remove"), &LgPickup::Delete)
|
||
|
.Func(_SC("Respawn"), &LgPickup::Respawn)
|
||
|
.Func(_SC("StreamedToPlayer"), &LgPickup::StreamedToPlayer)
|
||
|
;
|
||
|
RootTable(vm).Bind(_SC("CPickup"), pickup);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
Class< LgPlayer, NoConstructor< LgPlayer > > player(vm, "CPlayer_INTERNAL");
|
||
|
// Read-write properties
|
||
|
player
|
||
|
.Prop(_SC("Admin"), &LgPlayer::GetAdmin, &LgPlayer::SetAdmin)
|
||
|
.Prop(_SC("Angle"), &LgPlayer::GetHeading, &LgPlayer::SetHeading)
|
||
|
.Prop(_SC("Armor"), &LgPlayer::GetArmour, &LgPlayer::SetArmour)
|
||
|
.Prop(_SC("Armour"), &LgPlayer::GetArmour, &LgPlayer::SetArmour)
|
||
|
.Prop(_SC("CanAttack"), &LgPlayer::GetCanAttack, &LgPlayer::SetCanAttack)
|
||
|
.Prop(_SC("CanDriveby"), &LgPlayer::GetDriveByEnabled, &LgPlayer::SetDriveByEnabled)
|
||
|
.Prop(_SC("Cash"), &LgPlayer::GetMoney, &LgPlayer::SetMoney)
|
||
|
.Prop(_SC("Color"), &LgPlayer::GetColour, &LgPlayer::SetColour)
|
||
|
.Prop(_SC("Colour"), &LgPlayer::GetColour, &LgPlayer::SetColour)
|
||
|
.Prop(_SC("DrivebyAbility"), &LgPlayer::GetDriveByEnabled, &LgPlayer::SetDriveByEnabled)
|
||
|
.Prop(_SC("Frozen"), &LgPlayer::GetFrozen, &LgPlayer::SetFrozen)
|
||
|
.Prop(_SC("GreenScanlines"), &LgPlayer::GetGreenScanLines, &LgPlayer::SetGreenScanLines)
|
||
|
.Prop(_SC("HasChatTags"), &LgPlayer::GetCanUseColors, &LgPlayer::SetCanUseColors)
|
||
|
.Prop(_SC("HasMarker"), &LgPlayer::GetMarkerVisible, &LgPlayer::SetMarkerVisible)
|
||
|
.Prop(_SC("Heading"), &LgPlayer::GetHeading, &LgPlayer::SetHeading)
|
||
|
.Prop(_SC("Health"), &LgPlayer::GetHealth, &LgPlayer::SetHealth)
|
||
|
.Prop(_SC("Immunity"), &LgPlayer::GetImmunity, &LgPlayer::SetImmunity)
|
||
|
.Prop(_SC("IsAdmin"), &LgPlayer::GetAdmin, &LgPlayer::SetAdmin)
|
||
|
.Prop(_SC("IsDrunk"), &LgPlayer::GetDrunkStatus, &LgPlayer::SetDrunkStatus)
|
||
|
.Prop(_SC("IsFrozen"), &LgPlayer::GetFrozen, &LgPlayer::SetFrozen)
|
||
|
.Prop(_SC("IsOnRadar"), &LgPlayer::GetOnRadar, &LgPlayer::SetOnRadar)
|
||
|
.Prop(_SC("IsWeaponSyncBlocked"), &LgPlayer::GetCanAttack, &LgPlayer::SetCanAttack)
|
||
|
.Prop(_SC("Money"), &LgPlayer::GetMoney, &LgPlayer::SetMoney)
|
||
|
.Prop(_SC("Name"), &LgPlayer::GetName, &LgPlayer::SetName)
|
||
|
.Prop(_SC("Pos"), &LgPlayer::GetPosition, &LgPlayer::SetPosition)
|
||
|
.Prop(_SC("Score"), &LgPlayer::GetScore, &LgPlayer::SetScore)
|
||
|
.Prop(_SC("SecWorld"), &LgPlayer::GetSecWorld, &LgPlayer::SetSecWorld)
|
||
|
.Prop(_SC("ShowMarkers"), &LgPlayer::ShowingMarkers, &LgPlayer::ShowMarkers)
|
||
|
.Prop(_SC("Slot"), &LgPlayer::GetWeaponSlot, &LgPlayer::SetWeaponSlot)
|
||
|
.Prop(_SC("Skin"), &LgPlayer::GetSkin, &LgPlayer::SetSkin)
|
||
|
.Prop(_SC("SpectateTarget"), &LgPlayer::GetSpectateTarget, &LgPlayer::SetSpectateTarget)
|
||
|
.Prop(_SC("Speed"), &LgPlayer::GetSpeed, &LgPlayer::SetSpeed )
|
||
|
.Prop(_SC("Team"), &LgPlayer::GetTeam, &LgPlayer::SetTeam)
|
||
|
.Prop(_SC("Vehicle"), &LgPlayer::GetVehicle, &LgPlayer::SetVehicle)
|
||
|
.Prop(_SC("WantedLevel"), &LgPlayer::GetWantedLevel, &LgPlayer::SetWantedLevel)
|
||
|
.Prop(_SC("WhiteScanlines"), &LgPlayer::GetWhiteScanLines, &LgPlayer::SetWhiteScanLines)
|
||
|
.Prop(_SC("Widescreen"), &LgPlayer::GetWidescreen, &LgPlayer::SetWidescreen)
|
||
|
.Prop(_SC("World"), &LgPlayer::GetWorld, &LgPlayer::SetWorld)
|
||
|
;
|
||
|
// Read-only properties
|
||
|
player
|
||
|
.Prop(_SC("Native"), &LgPlayer::GetNative)
|
||
|
.Prop(_SC("Action"), &LgPlayer::GetPlayerAction)
|
||
|
.Prop(_SC("AimDir"), &LgPlayer::GetPlayerAimDir)
|
||
|
.Prop(_SC("AimPos"), &LgPlayer::GetPlayerAimPos)
|
||
|
.Prop(_SC("Alpha"), &LgPlayer::GetAlpha)
|
||
|
.Prop(_SC("Ammo"), &LgPlayer::GetWeaponAmmo)
|
||
|
.Prop(_SC("Away"), &LgPlayer::GetAwayStatus)
|
||
|
.Prop(_SC("CameraLocked"), &LgPlayer::GetCameraLocked)
|
||
|
.Prop(_SC("Class"), &LgPlayer::GetClass)
|
||
|
.Prop(_SC("FPS"), &LgPlayer::GetFPS)
|
||
|
.Prop(_SC("GameKeys"), &LgPlayer::GetPlayerGameKeys)
|
||
|
.Prop(_SC("ID"), &LgPlayer::GetID)
|
||
|
.Prop(_SC("IP"), &LgPlayer::GetIP)
|
||
|
.Prop(_SC("IsCrouching"), &LgPlayer::GetPlayerCrouchStatus)
|
||
|
.Prop(_SC("IsOnFire"), &LgPlayer::GetPlayerOnFireStatus)
|
||
|
.Prop(_SC("IsSpawned"), &LgPlayer::GetSpawned)
|
||
|
.Prop(_SC("Key"), &LgPlayer::GetKey)
|
||
|
.Prop(_SC("Ping"), &LgPlayer::GetPing)
|
||
|
.Prop(_SC("Spawned"), &LgPlayer::GetSpawned)
|
||
|
.Prop(_SC("StandingOnObject"), &LgPlayer::StandingOnObject)
|
||
|
.Prop(_SC("StandingOnVehicle"), &LgPlayer::StandingOnVehicle)
|
||
|
.Prop(_SC("State"), &LgPlayer::GetState)
|
||
|
.Prop(_SC("Typing"), &LgPlayer::Typing)
|
||
|
.Prop(_SC("UniqueWorld"), &LgPlayer::GetUniqueWorld)
|
||
|
.Prop(_SC("UniqueID"), &LgPlayer::GetUniqueID)
|
||
|
.Prop(_SC("UID"), &LgPlayer::GetUniqueID)
|
||
|
.Prop(_SC("UniqueID2"), &LgPlayer::GetUniqueID2)
|
||
|
.Prop(_SC("UID2"), &LgPlayer::GetUniqueID2)
|
||
|
.Prop(_SC("VehicleSlot"), &LgPlayer::GetVehicleSlot)
|
||
|
.Prop(_SC("VehicleStatus"), &LgPlayer::GetVehicleStatus)
|
||
|
.Prop(_SC("Weapon"), &LgPlayer::GetWeapon)
|
||
|
;
|
||
|
// Functions
|
||
|
player
|
||
|
.SquirrelFunc(_SC("_typename"), &CPlayerTn::Fn)
|
||
|
.Func(_SC("_tostring"), &LgPlayer::ToString)
|
||
|
.Func(_SC("AddSpeed"), &LgPlayer::AddSpeed)
|
||
|
.Func(_SC("Ban"), &LgPlayer::Ban)
|
||
|
.Func(_SC("Disarm"), &LgPlayer::Disarm)
|
||
|
.Func(_SC("Eject"), &LgPlayer::Eject)
|
||
|
.Func(_SC("GetAmmoAtSlot"), &LgPlayer::GetAmmoAtSlot)
|
||
|
.Func(_SC("GetWeaponAtSlot"), &LgPlayer::GetWeaponAtSlot)
|
||
|
.Func(_SC("GiveMoney"), &LgPlayer::GiveMoney)
|
||
|
.Func(_SC("GiveWeapon"), &LgPlayer::GiveWeapon)
|
||
|
.Func(_SC("Kick"), &LgPlayer::Kick)
|
||
|
.Func(_SC("PlaySound"), &LgPlayer::PlaySound)
|
||
|
.Func(_SC("Redirect"), &LgPlayer::RedirectPlayerToServer)
|
||
|
.Func(_SC("RemoveWeapon"), &LgPlayer::RemoveWeapon)
|
||
|
.Func(_SC("RemoveMarker"), &LgPlayer::RemoveMarker)
|
||
|
.Func(_SC("RestoreCamera"), &LgPlayer::RestoreCamera)
|
||
|
.Func(_SC("Select"), &LgPlayer::Select)
|
||
|
.Func(_SC("SetAlpha"), &LgPlayer::SetAlpha)
|
||
|
.Overload(_SC("SetAnim"), &LgPlayer::Animation)
|
||
|
.Overload(_SC("SetAnim"), &LgPlayer::CompatAnimation)
|
||
|
.Func(_SC("SetCameraPos"), &LgPlayer::SetCameraPos)
|
||
|
.Func(_SC("SetDrunkLevel"), &LgPlayer::SetDrunkLevel)
|
||
|
.Func(_SC("SetMarker"), &LgPlayer::SetMarker)
|
||
|
.Func(_SC("SetWantedLevel"), &LgPlayer::SetWantedLevel)
|
||
|
.Func(_SC("SetWeapon"), &LgPlayer::SetWeapon)
|
||
|
.Func(_SC("Spawn"), &LgPlayer::Spawn)
|
||
|
.Func(_SC("StreamedToPlayer"), &LgPlayer::StreamedToPlayer)
|
||
|
.Func(_SC("PutInVehicleSlot"), &LgPlayer::SetVehicleSlot)
|
||
|
.Func(_SC("RequestModuleList"), &LgPlayer::RequestModuleList)
|
||
|
;
|
||
|
RootTable(vm).Bind(_SC("CPlayer"), player);
|
||
|
// --------------------------------------------------------------------------------------------
|
||
|
Class< LgVehicle, NoConstructor< LgVehicle > > vehicle(vm, "CVehicle_INTERNAL");
|
||
|
// Read-write properties
|
||
|
vehicle
|
||
|
.Prop(_SC("Immunity"), &LgVehicle::GetImmunity, &LgVehicle::SetImmunity)
|
||
|
.Prop(_SC("Pos"), &LgVehicle::GetPosition, &LgVehicle::SetPosition)
|
||
|
.Prop(_SC("World"), &LgVehicle::GetWorld, &LgVehicle::SetWorld)
|
||
|
.Prop(_SC("SpawnPos"), &LgVehicle::GetSpawnPos, &LgVehicle::SetSpawnPos)
|
||
|
.Prop(_SC("EulerSpawnAngle"), &LgVehicle::GetSpawnAngleEuler, &LgVehicle::SetSpawnAngleEuler)
|
||
|
.Prop(_SC("SpawnAngle"), &LgVehicle::GetSpawnAngle, &LgVehicle::SetSpawnAngle)
|
||
|
.Prop(_SC("RespawnTimer"), &LgVehicle::GetIdleRespawnTimer, &LgVehicle::SetIdleRespawnTimer)
|
||
|
.Prop(_SC("Health"), &LgVehicle::GetHealth, &LgVehicle::SetHealth)
|
||
|
.Prop(_SC("Colour1"), &LgVehicle::GetColour1, &LgVehicle::SetColour1)
|
||
|
.Prop(_SC("Colour2"), &LgVehicle::GetColour2, &LgVehicle::SetColour2)
|
||
|
.Prop(_SC("Locked"), &LgVehicle::GetLocked, &LgVehicle::SetLocked)
|
||
|
.Prop(_SC("LightFlags"), &LgVehicle::GetLightFlags, &LgVehicle::SetLightFlags)
|
||
|
.Prop(_SC("TaxiLight"), &LgVehicle::GetTaxiLight, &LgVehicle::SetTaxiLight)
|
||
|
.Prop(_SC("Damage"), &LgVehicle::GetDamage, &LgVehicle::SetDamage)
|
||
|
.Prop(_SC("Alarm"), &LgVehicle::GetAlarm, &LgVehicle::SetAlarm)
|
||
|
.Prop(_SC("Siren"), &LgVehicle::GetSiren, &LgVehicle::SetSiren)
|
||
|
.Prop(_SC("Lights"), &LgVehicle::GetLights, &LgVehicle::SetLights)
|
||
|
.Prop(_SC("Angle"), &LgVehicle::GetRotation, &LgVehicle::SetRotation)
|
||
|
.Prop(_SC("Rotation"), &LgVehicle::GetRotation, &LgVehicle::SetRotation)
|
||
|
.Prop(_SC("EulerAngle"), &LgVehicle::GetEulerRotation, &LgVehicle::SetEulerRotation)
|
||
|
.Prop(_SC("EulerRotation"), &LgVehicle::GetEulerRotation, &LgVehicle::SetEulerRotation)
|
||
|
.Prop(_SC("Speed"), &LgVehicle::GetSpeed, &LgVehicle::SetSpeed)
|
||
|
.Prop(_SC("RelativeSpeed"), &LgVehicle::GetRelativeSpeed, &LgVehicle::SetRelativeSpeed)
|
||
|
.Prop(_SC("TurnSpeed"), &LgVehicle::GetTurnSpeed, &LgVehicle::SetTurnSpeed)
|
||
|
.Prop(_SC("RelativeTurnSpeed"), &LgVehicle::GetRelativeTurnSpeed, &LgVehicle::SetRelativeTurnSpeed)
|
||
|
.Prop(_SC("Radio"), &LgVehicle::GetRadio, &LgVehicle::SetRadio)
|
||
|
.Prop(_SC("RadioLocked"), &LgVehicle::GetRadioLockStatus, &LgVehicle::SetRadioLocked)
|
||
|
.Prop(_SC("IsGhost"), &LgVehicle::GetGhost, &LgVehicle::SetGhost)
|
||
|
.Prop(_SC("SingleUse"), &LgVehicle::GetSingleUse, &LgVehicle::SetSingleUse)
|
||
|
;
|
||
|
// Read-only properties
|
||
|
vehicle
|
||
|
.Prop(_SC("Native"), &LgVehicle::GetNative)
|
||
|
.Prop(_SC("Model"), &LgVehicle::GetModel)
|
||
|
.Prop(_SC("Driver"), &LgVehicle::GetDriver)
|
||
|
.Prop(_SC("ID"), &LgVehicle::GetID)
|
||
|
.Prop(_SC("SyncSource"), &LgVehicle::GetSyncSource)
|
||
|
.Prop(_SC("SyncType"), &LgVehicle::GetSyncType)
|
||
|
.Prop(_SC("TurretRotation"), &LgVehicle::GetTurretRotation)
|
||
|
.Prop(_SC("Wrecked"), &LgVehicle::GetWrecked)
|
||
|
;
|
||
|
// Functions
|
||
|
vehicle
|
||
|
.SquirrelFunc(_SC("_typename"), &CVehicleTn::Fn)
|
||
|
.Func( _SC("Delete"), &LgVehicle::Delete)
|
||
|
.Func( _SC("Remove"), &LgVehicle::Delete)
|
||
|
.Func( _SC("Respawn"), &LgVehicle::Respawn)
|
||
|
.Func( _SC("Kill"), &LgVehicle::Kill)
|
||
|
.Func( _SC("KillEngine"), &LgVehicle::Kill)
|
||
|
.Func( _SC("Fix"), &LgVehicle::Fix)
|
||
|
.Func( _SC("GetPart"), &LgVehicle::GetPartStatus)
|
||
|
.Func( _SC("SetPart"), &LgVehicle::SetPartStatus)
|
||
|
.Func( _SC("GetTyre"), &LgVehicle::GetTyreStatus)
|
||
|
.Func( _SC("SetTyre"), &LgVehicle::SetTyreStatus)
|
||
|
.Func( _SC("GetTire"), &LgVehicle::GetTyreStatus)
|
||
|
.Func( _SC("SetTire"), &LgVehicle::SetTyreStatus)
|
||
|
.Func( _SC("SetFlatTyres"), &LgVehicle::SetFlatTyres)
|
||
|
.Func( _SC("StreamedForPlayer"), &LgVehicle::GetStreamedForPlayer)
|
||
|
.Func( _SC("GetOccupant"), &LgVehicle::GetOccupant)
|
||
|
.Func( _SC("SetHandlingData"), &LgVehicle::SetHandlingData)
|
||
|
.Func( _SC("GetHandlingData"), &LgVehicle::GetHandlingData)
|
||
|
.Func( _SC("ResetHandlingData"), &LgVehicle::ResetHandlingData)
|
||
|
.Func( _SC("ResetAllHandling"), &LgVehicle::ResetAllHandling)
|
||
|
.Func( _SC("IsHandlingSet"), &LgVehicle::IsHandlingSet)
|
||
|
.Func( _SC("AddSpeed"), &LgVehicle::AddVehicleSpeed)
|
||
|
.Func( _SC("AddRelSpeed"), &LgVehicle::AddVehicleRelSpeed)
|
||
|
.Func( _SC("AddTurnSpeed"), &LgVehicle::AddVehicleTurnSpeed)
|
||
|
.Func( _SC("AddRelTurnSpeed"), &LgVehicle::AddVehicleRelTurnSpeed)
|
||
|
;
|
||
|
RootTable(vm).Bind(_SC("CVehicle"), vehicle);
|
||
|
}
|
||
|
|
||
|
} // Namespace:: SqMod
|