feat: handle net game event (#22)

This commit is contained in:
Mr-X-GTA authored and GitHub committed 2025-03-24 20:23:33 +00:00
1 parent c58e70e236
commit b272f7a291
11 files changed
+291 -28

No files matched your search

+92
View File
@@ -0,0 +1,92 @@
#pragma once
enum class NetEventType : uint16_t
{
OBJECT_ID_FREED_EVENT,
OBJECT_ID_REQUEST_EVENT,
ARRAY_DATA_VERIFY_EVENT,
SCRIPT_ARRAY_DATA_VERIFY_EVENT,
REQUEST_CONTROL_EVENT,
GIVE_CONTROL_EVENT,
WEAPON_DAMAGE_EVENT,
REQUEST_PICKUP_EVENT,
REQUEST_MAP_PICKUP_EVENT,
GAME_CLOCK_EVENT,
GAME_WEATHER_EVENT,
RESPAWN_PLAYER_PED_EVENT,
GIVE_WEAPON_EVENT,
REMOVE_WEAPON_EVENT,
REMOVE_ALL_WEAPONS_EVENT,
VEHICLE_COMPONENT_CONTROL_EVENT,
FIRE_EVENT,
EXPLOSION_EVENT,
START_PROJECTILE_EVENT,
UPDATE_PROJECTILE_TARGET_EVENT,
REMOVE_PROJECTILE_ENTITY_EVENT,
BREAK_PROJECTILE_TARGET_LOCK_EVENT,
ALTER_WANTED_LEVEL_EVENT,
CHANGE_RADIO_STATION_EVENT,
RAGDOLL_REQUEST_EVENT,
PLAYER_TAUNT_EVENT,
PLAYER_CARD_STAT_EVENT,
DOOR_BREAK_EVENT,
SCRIPTED_GAME_EVENT,
REMOTE_SCRIPT_INFO_EVENT,
REMOTE_SCRIPT_LEAVE_EVENT,
MARK_AS_NO_LONGER_NEEDED_EVENT,
CONVERT_TO_SCRIPT_ENTITY_EVENT,
SCRIPT_WORLD_STATE_EVENT,
CLEAR_AREA_EVENT,
CLEAR_RECTANGLE_AREA_EVENT,
NETWORK_REQUEST_SYNCED_SCENE_EVENT,
NETWORK_START_SYNCED_SCENE_EVENT,
NETWORK_STOP_SYNCED_SCENE_EVENT,
NETWORK_UPDATE_SYNCED_SCENE_EVENT,
INCIDENT_ENTITY_EVENT,
GIVE_PED_SCRIPTED_TASK_EVENT,
GIVE_PED_SEQUENCE_TASK_EVENT,
NETWORK_CLEAR_PED_TASKS_EVENT,
NETWORK_START_PED_ARREST_EVENT,
NETWORK_START_PED_UNCUFF_EVENT,
NETWORK_SOUND_CAR_HORN_EVENT,
NETWORK_ENTITY_AREA_STATUS_EVENT,
NETWORK_GARAGE_OCCUPIED_STATUS_EVENT,
PED_CONVERSATION_LINE_EVENT,
SCRIPT_ENTITY_STATE_CHANGE_EVENT,
NETWORK_PLAY_SOUND_EVENT,
NETWORK_STOP_SOUND_EVENT,
NETWORK_PLAY_AIRDEFENSE_FIRE_EVENT,
NETWORK_BANK_REQUEST_EVENT,
NETWORK_AUDIO_BARK_EVENT,
REQUEST_DOOR_EVENT,
NETWORK_TRAIN_REPORT_EVENT,
NETWORK_TRAIN_REQUEST_EVENT,
NETWORK_INCREMENT_STAT_EVENT,
MODIFY_VEHICLE_LOCK_WORD_STATE_DATA,
MODIFY_PTFX_WORD_STATE_DATA_SCRIPTED_EVOLVE_EVENT,
REQUEST_PHONE_EXPLOSION_EVENT,
REQUEST_DETACHMENT_EVENT,
KICK_VOTES_EVENT,
GIVE_PICKUP_REWARDS_EVENT,
BLOW_UP_VEHICLE_EVENT,
NETWORK_SPECIAL_FIRE_EQUIPPED_WEAPON,
NETWORK_RESPONDED_TO_THREAT_EVENT,
NETWORK_SHOUT_TARGET_POSITION,
VOICE_DRIVEN_MOUTH_MOVEMENT_FINISHED_EVENT,
PICKUP_DESTROYED_EVENT,
UPDATE_PLAYER_SCARS_EVENT,
NETWORK_CHECK_EXE_SIZE_EVENT,
NETWORK_PTFX_EVENT,
NETWORK_PED_SEEN_DEAD_PED_EVENT,
REMOVE_STICKY_BOMB_EVENT,
NETWORK_CHECK_CODE_CRCS_EVENT,
INFORM_SILENCED_GUNSHOT_EVENT,
PED_PLAY_PAIN_EVENT,
CACHE_PLAYER_HEAD_BLEND_DATA_EVENT,
REMOVE_PED_FROM_PEDGROUP_EVENT,
REPORT_MYSELF_EVENT,
REPORT_CASH_SPAWN_EVENT,
ACTIVATE_VEHICLE_SPECIAL_ABILITY_EVENT,
BLOCK_WEAPON_SELECTION,
NETWORK_CHECK_CATALOG_CRC
};
+1 -4
View File
@@ -1,10 +1,7 @@
#include "ScriptEvent.hpp"
#include "game/gta/Natives.hpp"
void SCRIPT_EVENT::Send()
void SCRIPT_EVENT::SendImpl(int size)
{
auto size = __SizeOfEvent;
__SizeOfEvent = 0;
SCRIPT::_SEND_TU_SCRIPT_EVENT_NEW(1, this, size / sizeof(std::uint64_t), PlayerBits, EventIndex);
__SizeOfEvent = size;
}
+27 -22
View File
@@ -1,18 +1,30 @@
#pragma once
#include "types.hpp"
#define REGISTER_SCRIPT_EVENT(classType, indexType) \
constexpr static auto EVENT_INDEX = ScriptEventIndex::indexType; \
classType() \
{ \
memset(this, 0, sizeof(classType)); EventIndex = static_cast<int>(EVENT_INDEX); \
__SizeOfEvent = sizeof(classType); \
} \
classType(const classType& other) \
{ \
memcpy(this, &other, sizeof(classType)); \
EventIndex = static_cast<int>(EVENT_INDEX); \
__SizeOfEvent = sizeof(classType); \
#define REGISTER_SCRIPT_EVENT(classType, indexType) \
constexpr static auto EVENT_INDEX = ScriptEventIndex::indexType; \
classType() \
{ \
memset(this, 0, sizeof(classType)); \
EventIndex = static_cast<int>(EVENT_INDEX); \
} \
classType(const classType& other) \
{ \
memcpy(this, &other, sizeof(classType)); \
EventIndex = static_cast<int>(EVENT_INDEX); \
} \
static constexpr size_t GetSize() \
{ \
return sizeof(classType); \
} \
inline void Send() \
{ \
SendImpl(GetSize()); \
} \
inline void Send(int player) \
{ \
SetPlayer(player); \
SendImpl(GetSize()); \
}
// I doubt rockstar would cycle this again, but best to keep this, just in case
@@ -71,8 +83,7 @@ struct SCRIPT_EVENT
{
protected:
SCR_HASH EventIndex; // 0x00
Player SenderIndex; // 0x08
int __SizeOfEvent; // 0x0C
PLAYER_INDEX SenderIndex; // 0x08
SCR_INT PlayerBits; // 0x10
public:
@@ -106,14 +117,8 @@ public:
PlayerBits |= (1 << player);
}
// must be called in script context
void Send();
inline void Send(int player)
{
SetPlayer(player);
Send();
}
protected:
void SendImpl(int size);
};
static_assert(sizeof(SCRIPT_EVENT) == 3 * 8);