Added more TSE crash protections and fixed some TSE notifications (#302)

This commit is contained in:
aa15032261 2022-07-02 03:35:36 +08:00 committed by GitHub
parent dba617ae9f
commit 38519a169e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 340 additions and 193 deletions

View File

@ -1,183 +1,196 @@
#pragma once #pragma once
namespace big namespace big
{ {
enum class CustomWeapon enum class CustomWeapon
{ {
NONE, NONE,
CAGE_GUN, CAGE_GUN,
DELETE_GUN, DELETE_GUN,
GRAVITY_GUN, GRAVITY_GUN,
STEAL_VEHICLE_GUN, STEAL_VEHICLE_GUN,
REPAIR_GUN, REPAIR_GUN,
VEHICLE_GUN VEHICLE_GUN
}; };
enum class ContextEntityType : uint8_t enum class ContextEntityType : uint8_t
{ {
NONE = 0, NONE = 0,
PED = 1 << 0, PED = 1 << 0,
PLAYER = 1 << 1, PLAYER = 1 << 1,
VEHICLE = 1 << 2, VEHICLE = 1 << 2,
OBJECT = 1 << 3, OBJECT = 1 << 3,
SHARED = 1 << 4 SHARED = 1 << 4
}; };
enum class eEntityType enum class eEntityType
{ {
UNK_0, UNK_0,
UNK_1, UNK_1,
UNK_2, UNK_2,
UNK_3, UNK_3,
UNK_4, UNK_4,
VEHICLE, VEHICLE,
PED, PED,
}; };
enum class eTransitionState enum class eTransitionState
{ {
TRANSITION_STATE_EMPTY, TRANSITION_STATE_EMPTY,
TRANSITION_STATE_SP_SWOOP_UP, TRANSITION_STATE_SP_SWOOP_UP,
TRANSITION_STATE_MP_SWOOP_UP, TRANSITION_STATE_MP_SWOOP_UP,
TRANSITION_STATE_CREATOR_SWOOP_UP, TRANSITION_STATE_CREATOR_SWOOP_UP,
TRANSITION_STATE_PRE_HUD_CHECKS, TRANSITION_STATE_PRE_HUD_CHECKS,
TRANSITION_STATE_WAIT_HUD_EXIT, TRANSITION_STATE_WAIT_HUD_EXIT,
TRANSITION_STATE_WAIT_FOR_SUMMON, TRANSITION_STATE_WAIT_FOR_SUMMON,
TRANSITION_STATE_SP_SWOOP_DOWN, TRANSITION_STATE_SP_SWOOP_DOWN,
TRANSITION_STATE_MP_SWOOP_DOWN, TRANSITION_STATE_MP_SWOOP_DOWN,
TRANSITION_STATE_CANCEL_JOINING, TRANSITION_STATE_CANCEL_JOINING,
TRANSITION_STATE_RETRY_LOADING, TRANSITION_STATE_RETRY_LOADING,
TRANSITION_STATE_RETRY_LOADING_SLOT_1, TRANSITION_STATE_RETRY_LOADING_SLOT_1,
TRANSITION_STATE_RETRY_LOADING_SLOT_2, TRANSITION_STATE_RETRY_LOADING_SLOT_2,
TRANSITION_STATE_RETRY_LOADING_SLOT_3, TRANSITION_STATE_RETRY_LOADING_SLOT_3,
TRANSITION_STATE_RETRY_LOADING_SLOT_4, TRANSITION_STATE_RETRY_LOADING_SLOT_4,
TRANSITION_STATE_WAIT_ON_INVITE, TRANSITION_STATE_WAIT_ON_INVITE,
TRANSITION_STATE_PREJOINING_FM_SESSION_CHECKS, TRANSITION_STATE_PREJOINING_FM_SESSION_CHECKS,
TRANSITION_STATE_LOOK_FOR_FRESH_JOIN_FM, TRANSITION_STATE_LOOK_FOR_FRESH_JOIN_FM,
TRANSITION_STATE_LOOK_TO_JOIN_ANOTHER_SESSION_FM, TRANSITION_STATE_LOOK_TO_JOIN_ANOTHER_SESSION_FM,
TRANSITION_STATE_CONFIRM_FM_SESSION_JOINING, TRANSITION_STATE_CONFIRM_FM_SESSION_JOINING,
TRANSITION_STATE_WAIT_JOIN_FM_SESSION, TRANSITION_STATE_WAIT_JOIN_FM_SESSION,
TRANSITION_STATE_CREATION_ENTER_SESSION, TRANSITION_STATE_CREATION_ENTER_SESSION,
TRANSITION_STATE_PRE_FM_LAUNCH_SCRIPT, TRANSITION_STATE_PRE_FM_LAUNCH_SCRIPT,
TRANSITION_STATE_FM_TEAMFULL_CHECK, TRANSITION_STATE_FM_TEAMFULL_CHECK,
TRANSITION_STATE_START_FM_LAUNCH_SCRIPT, TRANSITION_STATE_START_FM_LAUNCH_SCRIPT,
TRANSITION_STATE_FM_TRANSITION_CREATE_PLAYER, TRANSITION_STATE_FM_TRANSITION_CREATE_PLAYER,
TRANSITION_STATE_IS_FM_AND_TRANSITION_READY, TRANSITION_STATE_IS_FM_AND_TRANSITION_READY,
TRANSITION_STATE_FM_SWOOP_DOWN, TRANSITION_STATE_FM_SWOOP_DOWN,
TRANSITION_STATE_POST_BINK_VIDEO_WARP, TRANSITION_STATE_POST_BINK_VIDEO_WARP,
TRANSITION_STATE_FM_FINAL_SETUP_PLAYER, TRANSITION_STATE_FM_FINAL_SETUP_PLAYER,
TRANSITION_STATE_MOVE_FM_TO_RUNNING_STATE, TRANSITION_STATE_MOVE_FM_TO_RUNNING_STATE,
TRANSITION_STATE_FM_HOW_TO_TERMINATE, TRANSITION_STATE_FM_HOW_TO_TERMINATE,
TRANSITION_STATE_START_CREATOR_PRE_LAUNCH_SCRIPT_CHECK, TRANSITION_STATE_START_CREATOR_PRE_LAUNCH_SCRIPT_CHECK,
TRANSITION_STATE_START_CREATOR_LAUNCH_SCRIPT, TRANSITION_STATE_START_CREATOR_LAUNCH_SCRIPT,
TRANSITION_STATE_CREATOR_TRANSITION_CREATE_PLAYER, TRANSITION_STATE_CREATOR_TRANSITION_CREATE_PLAYER,
TRANSITION_STATE_IS_CREATOR_AND_TRANSITION_READY, TRANSITION_STATE_IS_CREATOR_AND_TRANSITION_READY,
TRANSITION_STATE_CREATOR_SWOOP_DOWN, TRANSITION_STATE_CREATOR_SWOOP_DOWN,
TRANSITION_STATE_CREATOR_FINAL_SETUP_PLAYER, TRANSITION_STATE_CREATOR_FINAL_SETUP_PLAYER,
TRANSITION_STATE_MOVE_CREATOR_TO_RUNNING_STATE, TRANSITION_STATE_MOVE_CREATOR_TO_RUNNING_STATE,
TRANSITION_STATE_PREJOINING_TESTBED_SESSION_CHECKS, TRANSITION_STATE_PREJOINING_TESTBED_SESSION_CHECKS,
TRANSITION_STATE_LOOK_FOR_FRESH_JOIN_TESTBED, TRANSITION_STATE_LOOK_FOR_FRESH_JOIN_TESTBED,
TRANSITION_STATE_LOOK_FOR_FRESH_HOST_TESTBED, TRANSITION_STATE_LOOK_FOR_FRESH_HOST_TESTBED,
TRANSITION_STATE_LOOK_TO_JOIN_ANOTHER_SESSION_TESTBED, TRANSITION_STATE_LOOK_TO_JOIN_ANOTHER_SESSION_TESTBED,
TRANSITION_STATE_LOOK_TO_HOST_SESSION_TESTBED, TRANSITION_STATE_LOOK_TO_HOST_SESSION_TESTBED,
TRANSITION_STATE_CONFIRM_TESTBED_SESSION_JOINING, TRANSITION_STATE_CONFIRM_TESTBED_SESSION_JOINING,
TRANSITION_STATE_WAIT_JOIN_TESTBED_SESSION, TRANSITION_STATE_WAIT_JOIN_TESTBED_SESSION,
TRANSITION_STATE_START_TESTBED_LAUNCH_SCRIPT, TRANSITION_STATE_START_TESTBED_LAUNCH_SCRIPT,
TRANSITION_STATE_TESTBED_TRANSITION_CREATE_PLAYER, TRANSITION_STATE_TESTBED_TRANSITION_CREATE_PLAYER,
TRANSITION_STATE_IS_TESTBED_AND_TRANSITION_READY, TRANSITION_STATE_IS_TESTBED_AND_TRANSITION_READY,
TRANSITION_STATE_TESTBED_SWOOP_DOWN, TRANSITION_STATE_TESTBED_SWOOP_DOWN,
TRANSITION_STATE_TESTBED_FINAL_SETUP_PLAYER, TRANSITION_STATE_TESTBED_FINAL_SETUP_PLAYER,
TRANSITION_STATE_MOVE_TESTBED_TO_RUNNING_STATE, TRANSITION_STATE_MOVE_TESTBED_TO_RUNNING_STATE,
TRANSITION_STATE_TESTBED_HOW_TO_TERMINATE, TRANSITION_STATE_TESTBED_HOW_TO_TERMINATE,
TRANSITION_STATE_QUIT_CURRENT_SESSION_PROMPT, TRANSITION_STATE_QUIT_CURRENT_SESSION_PROMPT,
TRANSITION_STATE_WAIT_FOR_TRANSITION_SESSION_TO_SETUP, TRANSITION_STATE_WAIT_FOR_TRANSITION_SESSION_TO_SETUP,
TRANSITION_STATE_TERMINATE_SP, TRANSITION_STATE_TERMINATE_SP,
TRANSITION_STATE_WAIT_TERMINATE_SP, TRANSITION_STATE_WAIT_TERMINATE_SP,
TRANSITION_STATE_KICK_TERMINATE_SESSION, TRANSITION_STATE_KICK_TERMINATE_SESSION,
TRANSITION_STATE_TERMINATE_SESSION, TRANSITION_STATE_TERMINATE_SESSION,
TRANSITION_STATE_WAIT_TERMINATE_SESSION, TRANSITION_STATE_WAIT_TERMINATE_SESSION,
TRANSITION_STATE_TERMINATE_SESSION_AND_HOLD, TRANSITION_STATE_TERMINATE_SESSION_AND_HOLD,
TRANSITION_STATE_TERMINATE_SESSION_AND_MOVE_INTO_HOLDING_STATE, TRANSITION_STATE_TERMINATE_SESSION_AND_MOVE_INTO_HOLDING_STATE,
TRANSITION_STATE_TEAM_SWAPPING_CHECKS, TRANSITION_STATE_TEAM_SWAPPING_CHECKS,
TRANSITION_STATE_RETURN_TO_SINGLEPLAYER, TRANSITION_STATE_RETURN_TO_SINGLEPLAYER,
TRANSITION_STATE_WAIT_FOR_SINGLEPLAYER_TO_START, TRANSITION_STATE_WAIT_FOR_SINGLEPLAYER_TO_START,
TRANSITION_STATE_WAITING_FOR_EXTERNAL_TERMINATION_CALL, TRANSITION_STATE_WAITING_FOR_EXTERNAL_TERMINATION_CALL,
TRANSITION_STATE_TERMINATE_MAINTRANSITION, TRANSITION_STATE_TERMINATE_MAINTRANSITION,
TRANSITION_STATE_WAIT_FOR_DIRTY_LOAD_CONFIRM, TRANSITION_STATE_WAIT_FOR_DIRTY_LOAD_CONFIRM,
TRANSITION_STATE_DLC_INTRO_BINK, TRANSITION_STATE_DLC_INTRO_BINK,
TRANSITION_STATE_MAX = INT_MAX TRANSITION_STATE_MAX = INT_MAX
}; };
enum eVehicleFlags enum eVehicleFlags
{ {
TRIGGER_SPAWN_TOGGLE = 1 << 0, TRIGGER_SPAWN_TOGGLE = 1 << 0,
DESTROYED = 1 << 1, DESTROYED = 1 << 1,
HAS_INSURANCE = 1 << 2, HAS_INSURANCE = 1 << 2,
UNK0 = 1 << 3, UNK0 = 1 << 3,
IMPOUNDED = 1 << 6, IMPOUNDED = 1 << 6,
UNK1 = 1 << 10, UNK1 = 1 << 10,
SPAWN_AT_MORS_MUTUAL = 1 << 11, SPAWN_AT_MORS_MUTUAL = 1 << 11,
UNK2 = 1 << 16 UNK2 = 1 << 16
}; };
enum class ePedTask enum class ePedTask
{ {
TASK_NONE, TASK_NONE,
TASK_FOOT = 1 << 4, TASK_FOOT = 1 << 4,
TASK_UNK = 1 << 5, TASK_UNK = 1 << 5,
TASK_DRIVING = 1 << 6 TASK_DRIVING = 1 << 6
}; };
enum class eRemoteEvent enum class eRemoteEvent
{ {
Bounty = 1294995624, Bounty = 1294995624,
CeoBan = -764524031, CeoBan = -764524031,
CeoKick = 248967238, CeoKick = 248967238,
CeoMoney = 1890277845, CeoMoney = 1890277845,
ClearWantedLevel = -91354030, ClearWantedLevel = -91354030,
Crash = -1386010354, Crash = -1386010354,
FakeDeposit = 677240627, FakeDeposit = 677240627,
ForceMission = 2020588206, ForceMission = 2020588206,
GtaBanner = 1572255940, GtaBanner = 1572255940,
MCTeleport = 962740265, MCTeleport = 962740265,
NetworkBail = 1228916411, NetworkBail = 1228916411,
PersonalVehicleDestroyed = 802133775, PersonalVehicleDestroyed = 802133775,
RemoteOffradar = -391633760, RemoteOffradar = -391633760,
RotateCam = 801199324, RotateCam = 801199324,
SendToCutscene = 1068259786, SendToCutscene = 1068259786,
SendToIsland = -621279188, SendToIsland = -621279188,
SendToCayo = 1463943751, SendToCayo = 1463943751,
SoundSpam = 1132878564, SoundSpam = 1132878564,
Spectate = -1113591308, Spectate = -1113591308,
Teleport = 603406648, Teleport = 603406648,
TransactionError = -1704141512, TransactionError = -1704141512,
VehicleKick = 578856274, VehicleKick = 578856274,
Unknown1 = -145306724, Unknown1 = -145306724,
Unknown2 = -581037897, Unknown2 = -581037897,
Unknown3 = 1757755807, Unknown3 = 1757755807,
Unknown4 = 436475575, Unknown4 = 436475575,
Unknown5 = 990606644, Unknown5 = 990606644,
Unknown6 = 69874647 Unknown6 = 69874647,
};
SEC3 = -2113023004,
enum class eSessionType SEC6 = 704979198,
{ SEC7 = -1715193475,
JOIN_PUBLIC, SEC8 = 1258808115,
NEW_PUBLIC, SEC9 = 2112408256,
CLOSED_CREW, SEC10 = 998716537,
CREW, SEC11 = 163598572,
CLOSED_FRIENDS = 6, SEC12 = -1970125962,
FIND_FRIEND = 9, SEC13 = -1056683619,
SOLO, Spaghettios = -393294520,
INVITE_ONLY, ForceMission2 = -1525161016,
JOIN_CREW, SHKick = -786546101
LEAVE_ONLINE = -1 };
};
enum class eSessionType
enum class SpeedoMeter {
{ JOIN_PUBLIC,
DISABLED, NEW_PUBLIC,
KMH, CLOSED_CREW,
MPH CREW,
}; CLOSED_FRIENDS = 6,
} FIND_FRIEND = 9,
SOLO,
INVITE_ONLY,
JOIN_CREW,
LEAVE_ONLINE = -1
};
enum class SpeedoMeter
{
DISABLED,
KMH,
MPH
};
}

View File

@ -6,7 +6,7 @@ namespace big
void format_string(std::string_view player_name, std::string_view protection_type, bool should_log, bool should_notify) void format_string(std::string_view player_name, std::string_view protection_type, bool should_log, bool should_notify)
{ {
if (should_log) if (should_log)
LOG(WARNING) << "BLOCKED_SCRIPT_EVENT"; LOG(WARNING) << "BLOCKED_SCRIPT_EVENT From: " << player_name << " Event Type: " << protection_type;
if (should_notify) if (should_notify)
g_notification_service->push_warning("Script Event Protection", g_notification_service->push_warning("Script Event Protection",
@ -153,12 +153,14 @@ namespace big
return true; return true;
} }
break;
} }
else
{
format_string(player_name, "TSE Freeze", notify.tse_freeze.log, notify.tse_freeze.notify);
format_string(player_name, "TSE Freeze", notify.tse_freeze.log, notify.tse_freeze.notify); return true;
}
return true; break;
case eRemoteEvent::SendToCutscene: case eRemoteEvent::SendToCutscene:
if (g->protections.script_events.send_to_cutscene) if (g->protections.script_events.send_to_cutscene)
{ {
@ -217,36 +219,168 @@ namespace big
break; break;
case eRemoteEvent::Unknown1: case eRemoteEvent::Unknown1:
if (g->protections.script_events.crash && args[2] >= 32) { if (g->protections.script_events.crash && args[2] >= 32) {
format_string(player_name, "Crash - #" + args[0], notify.crash.log, notify.crash.notify); format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true; return true;
} }
break; break;
case eRemoteEvent::Unknown2: case eRemoteEvent::Unknown2:
if (g->protections.script_events.crash && (args[2] >= 62 || args[3] >= 32)) { if (g->protections.script_events.crash && (args[2] >= 62 || args[3] >= 32)) {
format_string(player_name, "Crash - #" + args[0], notify.crash.log, notify.crash.notify); format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true; return true;
} }
break; break;
case eRemoteEvent::Unknown3: case eRemoteEvent::Unknown3:
if (g->protections.script_events.crash && args[2] >= 62) { if (g->protections.script_events.crash && args[2] >= 62) {
format_string(player_name, "Crash - #" + args[0], notify.crash.log, notify.crash.notify); format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true; return true;
} }
break; break;
case eRemoteEvent::Unknown4: case eRemoteEvent::Unknown4:
case eRemoteEvent::Unknown5: case eRemoteEvent::Unknown5:
if (g->protections.script_events.crash && args[2] >= 20) { if (g->protections.script_events.crash && args[2] >= 20) {
format_string(player_name, "Crash - #" + args[0], notify.crash.log, notify.crash.notify); format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true; return true;
} }
break; break;
case eRemoteEvent::Unknown6: case eRemoteEvent::Unknown6:
if (g->protections.script_events.crash) { if (g->protections.script_events.crash) {
format_string(player_name, "Crash - #" + args[0], notify.crash.log, notify.crash.notify); format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true;
}
break;
case eRemoteEvent::SEC3:
if (
g->protections.script_events.crash &&
(
(args[2] <= 115831 || args[2] >= 9999449) ||
(args[3] <= -1 || args[3] >= 1) ||
(args[4] <= -1 || args[4] >= 3) ||
(args[5] <= -1 || args[5] >= 101) ||
(args[6] <= -1 || args[6] >= 3) ||
(args[7] <= -1 || args[7] >= 1)
)
) {
format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true;
}
break;
case eRemoteEvent::SEC6:
if (
g->protections.script_events.crash &&
(
(args[2] <= -1 || args[2] >= 1) ||
(args[3] <= -2 || args[3] >= 0) ||
(args[4] <= 3 || args[4] >= 5) ||
(args[5] <= 172 || args[5] >= 174) ||
(args[6] <= 20 || args[6] >= 510) ||
(args[7] <= 62 || args[7] >= 64) ||
(args[11] <= -1 || args[11] >= 1) ||
(args[12] <= -1 || args[12] >= 1) ||
(args[13] <= -1 || args[13] >= 1)
)
) {
format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true;
}
break;
case eRemoteEvent::SEC7:
if (g->protections.script_events.crash) {
format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true;
}
break;
case eRemoteEvent::SEC8:
if (g->protections.script_events.crash) {
format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true;
}
break;
case eRemoteEvent::SEC9:
if (
g->protections.script_events.crash &&
(
(args[2] <= -1986324736 || args[2] >= 1747413822) ||
(args[2] > -9999999 || args[2] < 77777777) ||
(args[3] <= -1986324736 || args[3] >= 1777712108) ||
(args[3] > -9999999 || args[3] < 77777777) ||
(args[4] <= -1673857408 || args[4] >= 1780088064) ||
(args[4] > -9999999 || args[4] < 77777777) ||
(args[6] <= (0LL - 2588888790LL) || args[6] >= 2100146067)
)
) {
format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true;
}
break;
case eRemoteEvent::SEC10:
if (g->protections.script_events.crash) {
format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true;
}
break;
case eRemoteEvent::SEC11:
if (g->protections.script_events.crash) {
format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true;
}
break;
case eRemoteEvent::SEC12:
if (
g->protections.script_events.crash &&
(
(args[2] <= -1 || args[2] >= 50) ||
(args[3] <= -1 || args[3] >= 50)
)
) {
format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true;
}
break;
case eRemoteEvent::SEC13:
if (g->protections.script_events.crash) {
format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true;
}
break;
case eRemoteEvent::Spaghettios:
if (g->protections.script_events.crash) {
format_string(player_name, "Crash - #" + std::to_string(args[0]), notify.crash.log, notify.crash.notify);
return true;
}
break;
case eRemoteEvent::ForceMission2:
if (g->protections.script_events.force_mission)
{
format_string(player_name, "Force Mission", notify.force_mission.log, notify.force_mission.notify);
return true;
}
break;
case eRemoteEvent::SHKick:
if (g->protections.script_events.network_bail)
{
format_string(player_name, "Network Bail", notify.network_bail.log, notify.network_bail.notify);
return true; return true;
} }
} }
if (g->debug.script_event_logging) if (g->debug.script_event_logging)
{ {
LOG(INFO) << "== Begin of Script Event =="; LOG(INFO) << "== Begin of Script Event ==";