mirror of
https://github.com/Mr-X-GTA/YimMenu.git
synced 2025-06-16 22:37:22 +08:00
Update script list (#79)
This commit is contained in:
parent
22c184d6b6
commit
31e12261b1
@ -21,6 +21,9 @@ namespace big
|
|||||||
{
|
{
|
||||||
void bypass_battleye()
|
void bypass_battleye()
|
||||||
{
|
{
|
||||||
|
if (g.spoofing.spoof_game_data_hash)
|
||||||
|
return;
|
||||||
|
|
||||||
constexpr std::array<std::uint32_t, 16> valid_hashes = {4022154788, 988, 3512952254, 472, 0, 0, 3308328917, 0, 0, 1731098795, 2256610353, 18616, 1540917665, 307143837, 1629784955, 2012170620};
|
constexpr std::array<std::uint32_t, 16> valid_hashes = {4022154788, 988, 3512952254, 472, 0, 0, 3308328917, 0, 0, 1731098795, 2256610353, 18616, 1540917665, 307143837, 1629784955, 2012170620};
|
||||||
|
|
||||||
if (auto hashes = *g_pointers->m_gta.m_game_data_hash)
|
if (auto hashes = *g_pointers->m_gta.m_game_data_hash)
|
||||||
|
@ -27,11 +27,55 @@ namespace big
|
|||||||
msg.write<KickReason>(KickReason::BATTLEYE_KICK, 5);
|
msg.write<KickReason>(KickReason::BATTLEYE_KICK, 5);
|
||||||
msg.write<int>(0, 32);
|
msg.write<int>(0, 32);
|
||||||
msg.write<bool>(false, 1);
|
msg.write<bool>(false, 1);
|
||||||
|
|
||||||
auto msg_id = player->get_session_player()->m_msg_id;
|
auto msg_id = player->get_session_player()->m_msg_id;
|
||||||
msg.send(msg_id);
|
msg.send(msg_id);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class battleye_ban : player_command
|
||||||
|
{
|
||||||
|
using player_command::player_command;
|
||||||
|
|
||||||
|
virtual CommandAccessLevel get_access_level() override
|
||||||
|
{
|
||||||
|
return CommandAccessLevel::TOXIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void execute(player_ptr player, const command_arguments& _args, const std::shared_ptr<command_context> ctx) override
|
||||||
|
{
|
||||||
|
packet msg{};
|
||||||
|
|
||||||
|
msg.write_message(rage::eNetMessage::MsgKickPlayer);
|
||||||
|
msg.write<KickReason>(KickReason::BATTLEYE_BAN, 5);
|
||||||
|
msg.write<int>(0, 32);
|
||||||
|
msg.write<bool>(false, 1);
|
||||||
|
auto msg_id = player->get_session_player()->m_msg_id;
|
||||||
|
msg.send(msg_id);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class battleye_update_kick : player_command
|
||||||
|
{
|
||||||
|
using player_command::player_command;
|
||||||
|
|
||||||
|
virtual CommandAccessLevel get_access_level() override
|
||||||
|
{
|
||||||
|
return CommandAccessLevel::TOXIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void execute(player_ptr player, const command_arguments& _args, const std::shared_ptr<command_context> ctx) override
|
||||||
|
{
|
||||||
|
unsigned char data[] = {0x00, 0x50, 0x31, 0x4A, 0xC0, 0x1A, 0x13, 0xFF, 0xFF, 0xFF};
|
||||||
|
player->tampered_with_be = true;
|
||||||
|
for (int i = 0; i < 20; i++)
|
||||||
|
{
|
||||||
|
data[0] = i;
|
||||||
|
g_battleye_service.send_message_to_client(player->get_net_game_player()->get_host_token(), &data, sizeof(data));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
battleye_kick g_battleye_kick("battlekick", "BATTLEYE_KICK", "BATTLEYE_KICK_DESC", 0);
|
battleye_kick g_battleye_kick("battlekick", "BATTLEYE_KICK", "BATTLEYE_KICK_DESC", 0);
|
||||||
|
battleye_ban g_battleye_ban("battleban", "BATTLEYE_FAKE_BAN", "BATTLEYE_FAKE_BAN_DESC", 0);
|
||||||
|
battleye_update_kick g_battleye_update_kick("battleupdate", "BATTLEYE_UPDATE_KICK", "BATTLEYE_UPDATE_KICK_DESC", 0);
|
||||||
}
|
}
|
@ -200,6 +200,17 @@ namespace big
|
|||||||
"fm_content_daily_bounty"_J,
|
"fm_content_daily_bounty"_J,
|
||||||
"fm_content_dispatch_work"_J,
|
"fm_content_dispatch_work"_J,
|
||||||
"fm_content_pizza_delivery"_J,
|
"fm_content_pizza_delivery"_J,
|
||||||
|
"fm_content_hacker_cargo_finale"_J,
|
||||||
|
"fm_content_hacker_zancudo_fin"_J,
|
||||||
|
"fm_content_hacker_house_finale"_J,
|
||||||
|
"fm_content_hacker_whistle_fin"_J,
|
||||||
|
"fm_content_hacker_cargo_prep"_J,
|
||||||
|
"fm_content_hacker_zancudo_prep"_J,
|
||||||
|
"fm_content_hacker_house_prep"_J,
|
||||||
|
"fm_content_hacker_whistle_prep"_J,
|
||||||
|
"fm_content_arms_trafficking"_J,
|
||||||
|
"AM_MP_HOTWIRE"_J,
|
||||||
|
"fm_content_community_outreach"_J,
|
||||||
"AM_BOAT_TAXI"_J,
|
"AM_BOAT_TAXI"_J,
|
||||||
"AM_HELI_TAXI"_J,
|
"AM_HELI_TAXI"_J,
|
||||||
"fm_hold_up_tut"_J,
|
"fm_hold_up_tut"_J,
|
||||||
@ -228,7 +239,7 @@ namespace big
|
|||||||
"fm_Bj_race_controler"_J,
|
"fm_Bj_race_controler"_J,
|
||||||
"fm_deathmatch_controler"_J,
|
"fm_deathmatch_controler"_J,
|
||||||
"fm_hideout_controler"_J,
|
"fm_hideout_controler"_J,
|
||||||
"fm_mission_controller_2020"_J,
|
"FM_Mission_controller"_J,
|
||||||
"FM_Race_Controler"_J,
|
"FM_Race_Controler"_J,
|
||||||
"FM_Horde_Controler"_J,
|
"FM_Horde_Controler"_J,
|
||||||
"dont_cross_the_line"_J,
|
"dont_cross_the_line"_J,
|
||||||
@ -360,10 +371,13 @@ namespace big
|
|||||||
"am_mp_creator_trailer",
|
"am_mp_creator_trailer",
|
||||||
"am_mp_defunct_base",
|
"am_mp_defunct_base",
|
||||||
"am_mp_drone",
|
"am_mp_drone",
|
||||||
|
"am_mp_field_hangar",
|
||||||
"am_mp_fixer_hq",
|
"am_mp_fixer_hq",
|
||||||
"am_mp_garage_control",
|
"am_mp_garage_control",
|
||||||
|
"am_mp_hacker_den",
|
||||||
"am_mp_hacker_truck",
|
"am_mp_hacker_truck",
|
||||||
"am_mp_hangar",
|
"am_mp_hangar",
|
||||||
|
"am_mp_hotwire",
|
||||||
"am_mp_ie_warehouse",
|
"am_mp_ie_warehouse",
|
||||||
"am_mp_island",
|
"am_mp_island",
|
||||||
"am_mp_juggalo_hideout",
|
"am_mp_juggalo_hideout",
|
||||||
@ -375,6 +389,7 @@ namespace big
|
|||||||
"am_mp_property_ext",
|
"am_mp_property_ext",
|
||||||
"am_mp_property_int",
|
"am_mp_property_int",
|
||||||
"am_mp_rc_vehicle",
|
"am_mp_rc_vehicle",
|
||||||
|
"am_mp_rpa_menu",
|
||||||
"am_mp_salvage_yard",
|
"am_mp_salvage_yard",
|
||||||
"am_mp_shooting_range",
|
"am_mp_shooting_range",
|
||||||
"am_mp_simeon_showroom",
|
"am_mp_simeon_showroom",
|
||||||
@ -401,6 +416,7 @@ namespace big
|
|||||||
"am_prostitute",
|
"am_prostitute",
|
||||||
"am_rollercoaster",
|
"am_rollercoaster",
|
||||||
"am_rontrevor_cut",
|
"am_rontrevor_cut",
|
||||||
|
"am_simosa",
|
||||||
"am_taxi",
|
"am_taxi",
|
||||||
"am_vehicle_spawn",
|
"am_vehicle_spawn",
|
||||||
"animal_controller",
|
"animal_controller",
|
||||||
@ -420,6 +436,7 @@ namespace big
|
|||||||
"appemail",
|
"appemail",
|
||||||
"appextraction",
|
"appextraction",
|
||||||
"appfixersecurity",
|
"appfixersecurity",
|
||||||
|
"apphackerden",
|
||||||
"apphackertruck",
|
"apphackertruck",
|
||||||
"apphs_sleep",
|
"apphs_sleep",
|
||||||
"appimportexport",
|
"appimportexport",
|
||||||
@ -533,6 +550,7 @@ namespace big
|
|||||||
"chinese1",
|
"chinese1",
|
||||||
"chinese2",
|
"chinese2",
|
||||||
"chop",
|
"chop",
|
||||||
|
"circuitblockhack",
|
||||||
"clothes_shop_mp",
|
"clothes_shop_mp",
|
||||||
"clothes_shop_sp",
|
"clothes_shop_sp",
|
||||||
"code_controller",
|
"code_controller",
|
||||||
@ -639,6 +657,7 @@ namespace big
|
|||||||
"fbi4_prep4",
|
"fbi4_prep4",
|
||||||
"fbi4_prep5",
|
"fbi4_prep5",
|
||||||
"fbi5a",
|
"fbi5a",
|
||||||
|
"field_hangar_seating",
|
||||||
"finalea",
|
"finalea",
|
||||||
"finaleb",
|
"finaleb",
|
||||||
"finalec1",
|
"finalec1",
|
||||||
@ -677,6 +696,7 @@ namespace big
|
|||||||
"fm_content_acid_lab_source",
|
"fm_content_acid_lab_source",
|
||||||
"fm_content_ammunation",
|
"fm_content_ammunation",
|
||||||
"fm_content_armoured_truck",
|
"fm_content_armoured_truck",
|
||||||
|
"fm_content_arms_trafficking",
|
||||||
"fm_content_auto_shop_delivery",
|
"fm_content_auto_shop_delivery",
|
||||||
"fm_content_bank_shootout",
|
"fm_content_bank_shootout",
|
||||||
"fm_content_bar_resupply",
|
"fm_content_bar_resupply",
|
||||||
@ -691,16 +711,26 @@ namespace big
|
|||||||
"fm_content_club_management",
|
"fm_content_club_management",
|
||||||
"fm_content_club_odd_jobs",
|
"fm_content_club_odd_jobs",
|
||||||
"fm_content_club_source",
|
"fm_content_club_source",
|
||||||
|
"fm_content_community_outreach",
|
||||||
"fm_content_convoy",
|
"fm_content_convoy",
|
||||||
"fm_content_crime_scene",
|
"fm_content_crime_scene",
|
||||||
"fm_content_daily_bounty",
|
"fm_content_daily_bounty",
|
||||||
"fm_content_dispatch_work",
|
"fm_content_dispatch_work",
|
||||||
|
"fm_content_drone",
|
||||||
"fm_content_drug_lab_work",
|
"fm_content_drug_lab_work",
|
||||||
"fm_content_drug_vehicle",
|
"fm_content_drug_vehicle",
|
||||||
"fm_content_export_cargo",
|
"fm_content_export_cargo",
|
||||||
"fm_content_ghosthunt",
|
"fm_content_ghosthunt",
|
||||||
"fm_content_golden_gun",
|
"fm_content_golden_gun",
|
||||||
"fm_content_gunrunning",
|
"fm_content_gunrunning",
|
||||||
|
"fm_content_hacker_cargo_finale",
|
||||||
|
"fm_content_hacker_cargo_prep",
|
||||||
|
"fm_content_hacker_house_finale",
|
||||||
|
"fm_content_hacker_house_prep",
|
||||||
|
"fm_content_hacker_whistle_fin",
|
||||||
|
"fm_content_hacker_whistle_prep",
|
||||||
|
"fm_content_hacker_zancudo_fin",
|
||||||
|
"fm_content_hacker_zancudo_prep",
|
||||||
"fm_content_hsw_setup",
|
"fm_content_hsw_setup",
|
||||||
"fm_content_hsw_time_trial",
|
"fm_content_hsw_time_trial",
|
||||||
"fm_content_island_dj",
|
"fm_content_island_dj",
|
||||||
@ -882,6 +912,9 @@ namespace big
|
|||||||
"gunclub_shop",
|
"gunclub_shop",
|
||||||
"gunfighttest",
|
"gunfighttest",
|
||||||
"gunslinger_arcade",
|
"gunslinger_arcade",
|
||||||
|
"hacker_den_carmod",
|
||||||
|
"hacker_den_ext_seating",
|
||||||
|
"hacker_den_seating",
|
||||||
"hacker_truck_carmod",
|
"hacker_truck_carmod",
|
||||||
"hairdo_shop_mp",
|
"hairdo_shop_mp",
|
||||||
"hairdo_shop_sp",
|
"hairdo_shop_sp",
|
||||||
@ -1027,7 +1060,6 @@ namespace big
|
|||||||
"net_freemode_debug_2023",
|
"net_freemode_debug_2023",
|
||||||
"net_freemode_debug_stat_2023",
|
"net_freemode_debug_stat_2023",
|
||||||
"net_jacking_soaktest",
|
"net_jacking_soaktest",
|
||||||
"net_rank_tunable_loader",
|
|
||||||
"net_session_soaktest",
|
"net_session_soaktest",
|
||||||
"net_test_drive",
|
"net_test_drive",
|
||||||
"net_tunable_check",
|
"net_tunable_check",
|
||||||
@ -1136,7 +1168,6 @@ namespace big
|
|||||||
"profiler_registration",
|
"profiler_registration",
|
||||||
"prologue1",
|
"prologue1",
|
||||||
"prop_drop",
|
"prop_drop",
|
||||||
"public_mission_creator",
|
|
||||||
"puzzle",
|
"puzzle",
|
||||||
"racetest",
|
"racetest",
|
||||||
"rampage1",
|
"rampage1",
|
||||||
@ -1326,6 +1357,7 @@ namespace big
|
|||||||
"wardrobe_sp",
|
"wardrobe_sp",
|
||||||
"weapon_audio_widget",
|
"weapon_audio_widget",
|
||||||
"wizard_arcade",
|
"wizard_arcade",
|
||||||
|
"word_hack",
|
||||||
"wp_partyboombox",
|
"wp_partyboombox",
|
||||||
"xml_menus",
|
"xml_menus",
|
||||||
"yoga",
|
"yoga",
|
||||||
|
@ -408,6 +408,9 @@ namespace big
|
|||||||
PVOID m_network_can_access_multiplayer;
|
PVOID m_network_can_access_multiplayer;
|
||||||
|
|
||||||
PVOID m_be_network_bail_patch;
|
PVOID m_be_network_bail_patch;
|
||||||
|
|
||||||
|
PVOID m_add_skeleton_extension;
|
||||||
|
int* m_skeleton_extension_count;
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
static_assert(sizeof(gta_pointers) % 8 == 0, "Pointers are not properly aligned");
|
static_assert(sizeof(gta_pointers) % 8 == 0, "Pointers are not properly aligned");
|
||||||
|
@ -157,6 +157,8 @@ namespace big
|
|||||||
|
|
||||||
detour_hook_helper::add<hooks::network_can_access_multiplayer>("NCAM", g_pointers->m_gta.m_network_can_access_multiplayer);
|
detour_hook_helper::add<hooks::network_can_access_multiplayer>("NCAM", g_pointers->m_gta.m_network_can_access_multiplayer);
|
||||||
|
|
||||||
|
detour_hook_helper::add<hooks::add_skeleton_extension>("ASE", g_pointers->m_gta.m_add_skeleton_extension);
|
||||||
|
|
||||||
g_hooking = this;
|
g_hooking = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,6 +212,8 @@ namespace big
|
|||||||
static void* create_pool_item(GenericPool* pool);
|
static void* create_pool_item(GenericPool* pool);
|
||||||
|
|
||||||
static uint32_t network_can_access_multiplayer(uint32_t a1, uint64_t* a2);
|
static uint32_t network_can_access_multiplayer(uint32_t a1, uint64_t* a2);
|
||||||
|
|
||||||
|
static void* add_skeleton_extension(rage::fwEntity* entity);
|
||||||
};
|
};
|
||||||
|
|
||||||
class minhook_keepalive
|
class minhook_keepalive
|
||||||
|
15
src/hooks/protections/add_skeleton_extension.cpp
Normal file
15
src/hooks/protections/add_skeleton_extension.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include "hooking/hooking.hpp"
|
||||||
|
#include "pointers.hpp"
|
||||||
|
|
||||||
|
namespace big
|
||||||
|
{
|
||||||
|
void* hooks::add_skeleton_extension(rage::fwEntity* entity)
|
||||||
|
{
|
||||||
|
if (*g_pointers->m_gta.m_skeleton_extension_count >= 32) [[unlikely]]
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_hooking->get_original<hooks::add_skeleton_extension>()(entity);
|
||||||
|
}
|
||||||
|
}
|
@ -267,7 +267,7 @@ namespace big
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void scan_explosion_event(CNetGamePlayer* player, rage::datBitBuffer* buffer)
|
bool scan_explosion_event(CNetGamePlayer* player, rage::datBitBuffer* buffer)
|
||||||
{
|
{
|
||||||
uint16_t f186;
|
uint16_t f186;
|
||||||
uint16_t targetEntity;
|
uint16_t targetEntity;
|
||||||
@ -302,6 +302,8 @@ namespace big
|
|||||||
|
|
||||||
uint32_t f164;
|
uint32_t f164;
|
||||||
|
|
||||||
|
uint32_t interiorIndex;
|
||||||
|
|
||||||
float posX224;
|
float posX224;
|
||||||
float posY224;
|
float posY224;
|
||||||
float posZ224;
|
float posZ224;
|
||||||
@ -345,6 +347,8 @@ namespace big
|
|||||||
f191 = buffer->Read<uint8_t>(1);
|
f191 = buffer->Read<uint8_t>(1);
|
||||||
f164 = buffer->Read<uint32_t>(32);
|
f164 = buffer->Read<uint32_t>(32);
|
||||||
|
|
||||||
|
interiorIndex = buffer->Read<uint32_t>(32);
|
||||||
|
|
||||||
if (f242)
|
if (f242)
|
||||||
{
|
{
|
||||||
posX224 = buffer->ReadSignedFloat(31, 27648.0f);
|
posX224 = buffer->ReadSignedFloat(31, 27648.0f);
|
||||||
@ -358,10 +362,14 @@ namespace big
|
|||||||
posZ224 = 0;
|
posZ224 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto f168 = buffer->Read<uint32_t>(32);// >= 1868: f_168
|
|
||||||
|
|
||||||
|
|
||||||
f240 = buffer->Read<uint8_t>(1);
|
f240 = buffer->Read<uint8_t>(1);
|
||||||
|
|
||||||
|
if (addOwnedExplosion)
|
||||||
|
{
|
||||||
|
buffer->Read<uint32_t>(32);
|
||||||
|
buffer->Read<uint32_t>(32);
|
||||||
|
}
|
||||||
|
|
||||||
if (f240)
|
if (f240)
|
||||||
{
|
{
|
||||||
f218 = buffer->Read<uint16_t>(16);
|
f218 = buffer->Read<uint16_t>(16);
|
||||||
@ -374,6 +382,12 @@ namespace big
|
|||||||
|
|
||||||
buffer->Seek(0);
|
buffer->Seek(0);
|
||||||
|
|
||||||
|
if (*(int16_t*)&interiorIndex < -1)
|
||||||
|
{
|
||||||
|
notify::crash_blocked(player, "invalid interior");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
auto object = g_pointers->m_gta.m_get_net_object(*g_pointers->m_gta.m_network_object_mgr, ownerNetId, true);
|
auto object = g_pointers->m_gta.m_get_net_object(*g_pointers->m_gta.m_network_object_mgr, ownerNetId, true);
|
||||||
auto entity = object ? object->GetGameObject() : nullptr;
|
auto entity = object ? object->GetGameObject() : nullptr;
|
||||||
|
|
||||||
@ -391,7 +405,7 @@ namespace big
|
|||||||
reinterpret_cast<CPed*>(entity)->m_player_info->m_net_player_data.m_name)));
|
reinterpret_cast<CPed*>(entity)->m_player_info->m_net_player_data.m_name)));
|
||||||
session::add_infraction(g_player_service->get_by_id(player->m_player_id), Infraction::BLAME_EXPLOSION_DETECTED);
|
session::add_infraction(g_player_service->get_by_id(player->m_player_id), Infraction::BLAME_EXPLOSION_DETECTED);
|
||||||
LOGF(stream::net_events, WARNING, "{} sent an EXPLOSION_EVENT with addOwnedExplosion enabled and with the wrong owner", player->get_name());
|
LOGF(stream::net_events, WARNING, "{} sent an EXPLOSION_EVENT with addOwnedExplosion enabled and with the wrong owner", player->get_name());
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g.session.explosion_karma && g_local_player
|
if (g.session.explosion_karma && g_local_player
|
||||||
@ -403,6 +417,7 @@ namespace big
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
// clang-format on
|
// clang-format on
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -440,7 +440,7 @@ namespace big
|
|||||||
}
|
}
|
||||||
case eRemoteEvent::StartScriptBegin:
|
case eRemoteEvent::StartScriptBegin:
|
||||||
{
|
{
|
||||||
auto script_id = args[3];
|
int script_id = args[3];
|
||||||
|
|
||||||
if (!protection::should_allow_script_launch(script_id))
|
if (!protection::should_allow_script_launch(script_id))
|
||||||
{
|
{
|
||||||
|
@ -1914,6 +1914,17 @@ namespace big
|
|||||||
{
|
{
|
||||||
g_pointers->m_gta.m_be_network_bail_patch = ptr.add(17).rip().add(1).rip().as<PVOID>();
|
g_pointers->m_gta.m_be_network_bail_patch = ptr.add(17).rip().add(1).rip().as<PVOID>();
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
// Add Skeleton Extension
|
||||||
|
{
|
||||||
|
"ASE",
|
||||||
|
"E8 ? ? ? ? 48 89 44 24 ? 48 85 C0 0F 84 ? ? ? ? 0F 28 05",
|
||||||
|
[](memory::handle ptr)
|
||||||
|
{
|
||||||
|
ptr = ptr.rip();
|
||||||
|
g_pointers->m_gta.m_add_skeleton_extension = ptr.as<PVOID>();
|
||||||
|
g_pointers->m_gta.m_skeleton_extension_count = ptr.add(0x2C).rip().as<int*>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
>(); // don't leave a trailing comma at the end
|
>(); // don't leave a trailing comma at the end
|
||||||
|
|
||||||
|
@ -429,6 +429,9 @@ namespace big
|
|||||||
const auto name = item.child("Name").text().as_string();
|
const auto name = item.child("Name").text().as_string();
|
||||||
const auto hash = rage::joaat(name);
|
const auto hash = rage::joaat(name);
|
||||||
|
|
||||||
|
if (hash == "WEAPON_STRICKLER"_J) // Gen9 exclusive
|
||||||
|
continue;
|
||||||
|
|
||||||
if (hash == "WEAPON_BIRD_CRAP"_J)
|
if (hash == "WEAPON_BIRD_CRAP"_J)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ namespace big::scripts
|
|||||||
{
|
{
|
||||||
if (((CGameScriptHandlerNetComponent*)launcher->m_net_component)->is_player_a_participant(plyr->get_net_game_player()))
|
if (((CGameScriptHandlerNetComponent*)launcher->m_net_component)->is_player_a_participant(plyr->get_net_game_player()))
|
||||||
{
|
{
|
||||||
if (*script_local(launcher->m_stack, 238).at(plyr->id(), 3).at(2).as<int*>() == state)
|
if (*script_local(launcher->m_stack, 240).at(plyr->id(), 3).at(2).as<int*>() == state)
|
||||||
{
|
{
|
||||||
set = true;
|
set = true;
|
||||||
break;
|
break;
|
||||||
@ -187,7 +187,7 @@ namespace big::scripts
|
|||||||
// 6) Actually get the script to start
|
// 6) Actually get the script to start
|
||||||
misc::set_bit(scr_globals::launcher_global.at(1).as<int*>(), 1); // run immediately
|
misc::set_bit(scr_globals::launcher_global.at(1).as<int*>(), 1); // run immediately
|
||||||
*scr_globals::launcher_global.at(2).as<int*>() = 6; // will change to 7 shortly but that's fine as players are guaranteed not to be in the waiting stage
|
*scr_globals::launcher_global.at(2).as<int*>() = 6; // will change to 7 shortly but that's fine as players are guaranteed not to be in the waiting stage
|
||||||
*script_local(launcher->m_stack, 238).at(self::id, 3).at(2).as<int*>() = 6;
|
*script_local(launcher->m_stack, 240).at(self::id, 3).at(2).as<int*>() = 6;
|
||||||
*scr_globals::launcher_global.at(3).at(1).as<int*>() = script_id;
|
*scr_globals::launcher_global.at(3).at(1).as<int*>() = script_id;
|
||||||
|
|
||||||
launcher->m_context.m_state = rage::eThreadState::running;
|
launcher->m_context.m_state = rage::eThreadState::running;
|
||||||
|
@ -15,6 +15,10 @@ namespace big
|
|||||||
components::player_command_button<"breakup">(g_player_service->get_selected());
|
components::player_command_button<"breakup">(g_player_service->get_selected());
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
components::player_command_button<"battlekick">(g_player_service->get_selected());
|
components::player_command_button<"battlekick">(g_player_service->get_selected());
|
||||||
|
ImGui::SameLine();
|
||||||
|
components::player_command_button<"battleban">(g_player_service->get_selected());
|
||||||
|
ImGui::SameLine();
|
||||||
|
components::player_command_button<"battleupdate">(g_player_service->get_selected());
|
||||||
ImGui::EndDisabled();
|
ImGui::EndDisabled();
|
||||||
|
|
||||||
components::player_command_button<"smartkick">(g_player_service->get_selected());
|
components::player_command_button<"smartkick">(g_player_service->get_selected());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user