You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
4.2 KiB
199 lines
4.2 KiB
-- This file is part of the SAMP.Lua project.
|
|
-- Licensed under the MIT License.
|
|
-- Copyright (c) 2016, FYP @ BlastHack Team <blast.hk>
|
|
-- https://github.com/THE-FYP/SAMP.Lua
|
|
|
|
local mod =
|
|
{
|
|
MODULEINFO = {
|
|
name = 'samp.synchronization',
|
|
version = 2
|
|
}
|
|
}
|
|
local ffi = require 'ffi'
|
|
|
|
ffi.cdef[[
|
|
#pragma pack(push, 1)
|
|
|
|
typedef struct VectorXYZ {
|
|
float x, y, z;
|
|
} VectorXYZ;
|
|
|
|
typedef struct SampKeys {
|
|
uint8_t primaryFire : 1;
|
|
uint8_t horn_crouch : 1;
|
|
uint8_t secondaryFire_shoot : 1;
|
|
uint8_t accel_zoomOut : 1;
|
|
uint8_t enterExitCar : 1;
|
|
uint8_t decel_jump : 1;
|
|
uint8_t circleRight : 1;
|
|
uint8_t aim : 1;
|
|
uint8_t circleLeft : 1;
|
|
uint8_t landingGear_lookback : 1;
|
|
uint8_t unknown_walkSlow : 1;
|
|
uint8_t specialCtrlUp : 1;
|
|
uint8_t specialCtrlDown : 1;
|
|
uint8_t specialCtrlLeft : 1;
|
|
uint8_t specialCtrlRight : 1;
|
|
uint8_t _unknown : 1;
|
|
} SampKeys;
|
|
|
|
typedef struct PlayerSyncData {
|
|
uint16_t leftRightKeys;
|
|
uint16_t upDownKeys;
|
|
union {
|
|
uint16_t keysData;
|
|
SampKeys keys;
|
|
};
|
|
VectorXYZ position;
|
|
float quaternion[4];
|
|
uint8_t health;
|
|
uint8_t armor;
|
|
uint8_t weapon : 6;
|
|
uint8_t specialKey : 2;
|
|
uint8_t specialAction;
|
|
VectorXYZ moveSpeed;
|
|
VectorXYZ surfingOffsets;
|
|
uint16_t surfingVehicleId;
|
|
union {
|
|
struct {
|
|
uint16_t id;
|
|
uint8_t frameDelta;
|
|
union {
|
|
struct {
|
|
bool loop : 1;
|
|
bool lockX : 1;
|
|
bool lockY : 1;
|
|
bool freeze : 1;
|
|
uint8_t time : 2;
|
|
uint8_t _unused : 1;
|
|
bool regular : 1;
|
|
};
|
|
uint8_t value;
|
|
} flags;
|
|
} animation;
|
|
struct {
|
|
uint16_t animationId;
|
|
uint16_t animationFlags;
|
|
};
|
|
};
|
|
} PlayerSyncData;
|
|
|
|
typedef struct VehicleSyncData {
|
|
uint16_t vehicleId;
|
|
uint16_t leftRightKeys;
|
|
uint16_t upDownKeys;
|
|
union {
|
|
uint16_t keysData;
|
|
SampKeys keys;
|
|
};
|
|
float quaternion[4];
|
|
VectorXYZ position;
|
|
VectorXYZ moveSpeed;
|
|
float vehicleHealth;
|
|
uint8_t playerHealth;
|
|
uint8_t armor;
|
|
uint8_t currentWeapon : 6;
|
|
uint8_t specialKey : 2;
|
|
uint8_t siren;
|
|
uint8_t landingGearState;
|
|
uint16_t trailerId;
|
|
union {
|
|
float bikeLean;
|
|
float trainSpeed;
|
|
uint16_t hydraThrustAngle[2];
|
|
};
|
|
} VehicleSyncData;
|
|
|
|
typedef struct PassengerSyncData {
|
|
uint16_t vehicleId;
|
|
uint8_t seatId : 6;
|
|
bool driveBy : 1;
|
|
bool cuffed : 1;
|
|
uint8_t currentWeapon : 6;
|
|
uint8_t specialKey : 2;
|
|
uint8_t health;
|
|
uint8_t armor;
|
|
uint16_t leftRightKeys;
|
|
uint16_t upDownKeys;
|
|
union {
|
|
uint16_t keysData;
|
|
SampKeys keys;
|
|
};
|
|
VectorXYZ position;
|
|
} PassengerSyncData;
|
|
|
|
typedef struct UnoccupiedSyncData {
|
|
uint16_t vehicleId;
|
|
uint8_t seatId;
|
|
VectorXYZ roll;
|
|
VectorXYZ direction;
|
|
VectorXYZ position;
|
|
VectorXYZ moveSpeed;
|
|
VectorXYZ turnSpeed;
|
|
float vehicleHealth;
|
|
} UnoccupiedSyncData;
|
|
|
|
typedef struct TrailerSyncData {
|
|
uint16_t trailerId;
|
|
VectorXYZ position;
|
|
union {
|
|
struct {
|
|
float quaternion[4];
|
|
VectorXYZ moveSpeed;
|
|
VectorXYZ turnSpeed;
|
|
};
|
|
/* Invalid. Retained for backwards compatibility. */
|
|
struct {
|
|
VectorXYZ roll;
|
|
VectorXYZ direction;
|
|
VectorXYZ speed;
|
|
uint32_t unk;
|
|
};
|
|
};
|
|
} TrailerSyncData;
|
|
|
|
typedef struct SpectatorSyncData {
|
|
uint16_t leftRightKeys;
|
|
uint16_t upDownKeys;
|
|
union {
|
|
uint16_t keysData;
|
|
SampKeys keys;
|
|
};
|
|
VectorXYZ position;
|
|
} SpectatorSyncData;
|
|
|
|
typedef struct BulletSyncData {
|
|
uint8_t targetType;
|
|
uint16_t targetId;
|
|
VectorXYZ origin;
|
|
VectorXYZ target;
|
|
VectorXYZ center;
|
|
uint8_t weaponId;
|
|
} BulletSyncData;
|
|
|
|
typedef struct AimSyncData {
|
|
uint8_t camMode;
|
|
VectorXYZ camFront;
|
|
VectorXYZ camPos;
|
|
float aimZ;
|
|
uint8_t camExtZoom : 6;
|
|
uint8_t weaponState : 2;
|
|
uint8_t aspectRatio;
|
|
} AimSyncData;
|
|
|
|
#pragma pack(pop)
|
|
]]
|
|
|
|
assert(ffi.sizeof('VectorXYZ') == 12)
|
|
assert(ffi.sizeof('SampKeys') == 2)
|
|
assert(ffi.sizeof('PlayerSyncData') == 68)
|
|
assert(ffi.sizeof('VehicleSyncData') == 63)
|
|
assert(ffi.sizeof('PassengerSyncData') == 24)
|
|
assert(ffi.sizeof('UnoccupiedSyncData') == 67)
|
|
assert(ffi.sizeof('TrailerSyncData') == 54)
|
|
assert(ffi.sizeof('SpectatorSyncData') == 18)
|
|
assert(ffi.sizeof('BulletSyncData') == 40)
|
|
assert(ffi.sizeof('AimSyncData') == 31)
|
|
|
|
return mod
|
|
|