Add more spoofing options and added clang-format (#1020)
* feat(Spoofing): add spoofing * feat(Spoofing): prepare code for player attach * remove(PlayerAttach): isn't going to work due to netsync architecture * fix(GUI): fix scaling * feat(Project): add clang-format file * feat(Classes): update classes * fix(BlackHole): remove unnecessary cleanup * fix(Formatting): fix formatting for initializer lists * feat(clang-format): Set tab width and 1 space before comment Co-authored-by: Yimura <24669514+Yimura@users.noreply.github.com>
This commit is contained in:
@ -1,9 +1,9 @@
|
||||
#include "views/view.hpp"
|
||||
#include "core/scr_globals.hpp"
|
||||
#include "fiber_pool.hpp"
|
||||
#include "gta_util.hpp"
|
||||
#include "core/scr_globals.hpp"
|
||||
#include "script_local.hpp"
|
||||
#include "util/scripts.hpp"
|
||||
#include "views/view.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
@ -27,31 +27,61 @@ namespace big
|
||||
components::sub_title("Event Starter");
|
||||
|
||||
ImGui::BeginGroup();
|
||||
components::button("Hot Target", [] { scripts::start_launcher_script(36); });
|
||||
components::button("Kill List", [] { scripts::start_launcher_script(37); });
|
||||
components::button("Checkpoints", [] { scripts::start_launcher_script(39); });
|
||||
components::button("Challenges", [] { scripts::start_launcher_script(40); });
|
||||
components::button("Penned In", [] { scripts::start_launcher_script(41); });
|
||||
components::button("Hot Target", [] {
|
||||
scripts::start_launcher_script(36);
|
||||
});
|
||||
components::button("Kill List", [] {
|
||||
scripts::start_launcher_script(37);
|
||||
});
|
||||
components::button("Checkpoints", [] {
|
||||
scripts::start_launcher_script(39);
|
||||
});
|
||||
components::button("Challenges", [] {
|
||||
scripts::start_launcher_script(40);
|
||||
});
|
||||
components::button("Penned In", [] {
|
||||
scripts::start_launcher_script(41);
|
||||
});
|
||||
ImGui::EndGroup();
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::BeginGroup();
|
||||
components::button("Hot Property", [] { scripts::start_launcher_script(43); });
|
||||
components::button("King Of The Castle", [] { scripts::start_launcher_script(45); });
|
||||
components::button("Criminal Damage", [] { scripts::start_launcher_script(46); });
|
||||
components::button("Hunt The Beast", [] { scripts::start_launcher_script(47); });
|
||||
components::button("Business Battles", [] { scripts::start_launcher_script(114); });
|
||||
components::button("Hot Property", [] {
|
||||
scripts::start_launcher_script(43);
|
||||
});
|
||||
components::button("King Of The Castle", [] {
|
||||
scripts::start_launcher_script(45);
|
||||
});
|
||||
components::button("Criminal Damage", [] {
|
||||
scripts::start_launcher_script(46);
|
||||
});
|
||||
components::button("Hunt The Beast", [] {
|
||||
scripts::start_launcher_script(47);
|
||||
});
|
||||
components::button("Business Battles", [] {
|
||||
scripts::start_launcher_script(114);
|
||||
});
|
||||
ImGui::EndGroup();
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::BeginGroup();
|
||||
components::button("One-On-One Deathmatch", [] { scripts::start_launcher_script(197); });
|
||||
components::button("Impromptu Race", [] { scripts::start_launcher_script(16); });
|
||||
components::button("Flight School", [] { scripts::start_launcher_script(196); });
|
||||
components::button("Golf", [] { scripts::start_launcher_script(193); });
|
||||
components::button("Tutorial", [] { scripts::start_launcher_script(20); });
|
||||
components::button("One-On-One Deathmatch", [] {
|
||||
scripts::start_launcher_script(197);
|
||||
});
|
||||
components::button("Impromptu Race", [] {
|
||||
scripts::start_launcher_script(16);
|
||||
});
|
||||
components::button("Flight School", [] {
|
||||
scripts::start_launcher_script(196);
|
||||
});
|
||||
components::button("Golf", [] {
|
||||
scripts::start_launcher_script(193);
|
||||
});
|
||||
components::button("Tutorial", [] {
|
||||
scripts::start_launcher_script(20);
|
||||
});
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Only works on joining players");
|
||||
ImGui::EndGroup();
|
||||
@ -59,11 +89,21 @@ namespace big
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::BeginGroup();
|
||||
components::button("Gunslinger", [] { scripts::start_launcher_script(211); });
|
||||
components::button("Space Monkey", [] { scripts::start_launcher_script(216); });
|
||||
components::button("Wizard", [] { scripts::start_launcher_script(212); });
|
||||
components::button("QUB3D", [] { scripts::start_launcher_script(217); });
|
||||
components::button("Camhedz", [] { scripts::start_launcher_script(218); });
|
||||
components::button("Gunslinger", [] {
|
||||
scripts::start_launcher_script(211);
|
||||
});
|
||||
components::button("Space Monkey", [] {
|
||||
scripts::start_launcher_script(216);
|
||||
});
|
||||
components::button("Wizard", [] {
|
||||
scripts::start_launcher_script(212);
|
||||
});
|
||||
components::button("QUB3D", [] {
|
||||
scripts::start_launcher_script(217);
|
||||
});
|
||||
components::button("Camhedz", [] {
|
||||
scripts::start_launcher_script(218);
|
||||
});
|
||||
ImGui::EndGroup();
|
||||
|
||||
ImGui::Separator();
|
||||
@ -77,15 +117,13 @@ namespace big
|
||||
*script_local(script->m_stack, scr_locals::am_criminal_damage::broadcast_idx).at(43).as<int*>() = 0;
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Finish Event##criminal_damage", []
|
||||
{
|
||||
components::button("Finish Event##criminal_damage", [] {
|
||||
if (scripts::force_host(RAGE_JOAAT("am_criminal_damage")))
|
||||
if (auto script = gta_util::find_script_thread(RAGE_JOAAT("am_criminal_damage")))
|
||||
*script_local(script->m_stack, scr_locals::am_criminal_damage::broadcast_idx).at(39).as<int*>() = 0;
|
||||
});
|
||||
|
||||
components::button("Max Score", []
|
||||
{
|
||||
components::button("Max Score", [] {
|
||||
if (auto criminal_damage = gta_util::find_script_thread(RAGE_JOAAT("am_criminal_damage")))
|
||||
*script_local(criminal_damage->m_stack, scr_locals::am_criminal_damage::score_idx).as<int*>() = 999'999'999;
|
||||
});
|
||||
@ -95,24 +133,24 @@ namespace big
|
||||
{
|
||||
components::sub_title("Checkpoints");
|
||||
|
||||
components::button("Start Event##cp_collection", []
|
||||
{
|
||||
components::button("Start Event##cp_collection", [] {
|
||||
if (scripts::force_host(RAGE_JOAAT("am_cp_collection")))
|
||||
if (auto script = gta_util::find_script_thread(RAGE_JOAAT("am_cp_collection")))
|
||||
*script_local(script->m_stack, scr_locals::am_cp_collection::broadcast_idx).at(667).as<int*>() = 0;
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Finish Event##cp_collection", []
|
||||
{
|
||||
components::button("Finish Event##cp_collection", [] {
|
||||
if (scripts::force_host(RAGE_JOAAT("am_cp_collection")))
|
||||
if (auto script = gta_util::find_script_thread(RAGE_JOAAT("am_cp_collection")))
|
||||
*script_local(script->m_stack, scr_locals::am_cp_collection::broadcast_idx).at(661).as<int*>() = 0;
|
||||
});
|
||||
|
||||
components::button("Win Event", []
|
||||
{
|
||||
components::button("Win Event", [] {
|
||||
if (auto checkpoints = gta_util::find_script_thread(RAGE_JOAAT("am_cp_collection")))
|
||||
*script_local(checkpoints->m_stack, scr_locals::am_cp_collection::player_broadcast_idx).at(checkpoints->m_net_component->m_local_participant_index, 5).at(4).as<int*>() = 999'999'999;
|
||||
*script_local(checkpoints->m_stack, scr_locals::am_cp_collection::player_broadcast_idx)
|
||||
.at(checkpoints->m_net_component->m_local_participant_index, 5)
|
||||
.at(4)
|
||||
.as<int*>() = 999'999'999;
|
||||
|
||||
script::get_current()->yield(1s);
|
||||
|
||||
@ -125,15 +163,15 @@ namespace big
|
||||
}
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Scramble Checkpoints", []
|
||||
{
|
||||
components::button("Scramble Checkpoints", [] {
|
||||
std::vector<Vector3> active_player_positions;
|
||||
|
||||
for (auto& plyr : g_player_service->players())
|
||||
{
|
||||
if (plyr.second->is_valid() && NETWORK::NETWORK_IS_PLAYER_A_PARTICIPANT_ON_SCRIPT(plyr.second->id(), "am_cp_collection", -1))
|
||||
{
|
||||
active_player_positions.push_back(ENTITY::GET_ENTITY_COORDS(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(plyr.second->id()), false));
|
||||
active_player_positions.push_back(
|
||||
ENTITY::GET_ENTITY_COORDS(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(plyr.second->id()), false));
|
||||
}
|
||||
}
|
||||
|
||||
@ -143,7 +181,10 @@ namespace big
|
||||
{
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
*script_local(checkpoints->m_stack, scr_locals::am_cp_collection::broadcast_idx).at(10).at(i, 5).as<Vector3*>() = active_player_positions[i % active_player_positions.size()];
|
||||
*script_local(checkpoints->m_stack, scr_locals::am_cp_collection::broadcast_idx)
|
||||
.at(10)
|
||||
.at(i, 5)
|
||||
.as<Vector3*>() = active_player_positions[i % active_player_positions.size()];
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -153,46 +194,93 @@ namespace big
|
||||
if (check_script(RAGE_JOAAT("am_king_of_the_castle")))
|
||||
{
|
||||
components::sub_title("King Of The Castle");
|
||||
components::button("Complete Event##kotc", []
|
||||
{
|
||||
components::button("Complete Event##kotc", [] {
|
||||
if (scripts::force_host(RAGE_JOAAT("am_king_of_the_castle")))
|
||||
if (auto script = gta_util::find_script_thread(RAGE_JOAAT("am_king_of_the_castle")))
|
||||
*script_local(script->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx).at(1).at(1).as<int*>() = 0;
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Expire Event (if possible)##kotc", []
|
||||
{
|
||||
components::button("Expire Event (if possible)##kotc", [] {
|
||||
if (scripts::force_host(RAGE_JOAAT("am_king_of_the_castle")))
|
||||
if (auto script = gta_util::find_script_thread(RAGE_JOAAT("am_king_of_the_castle")))
|
||||
*script_local(script->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx).at(1).at(3).as<int*>() = 0;
|
||||
});
|
||||
|
||||
components::button("Become The King##kotc", []
|
||||
{
|
||||
components::button("Become The King##kotc", [] {
|
||||
if (scripts::force_host(RAGE_JOAAT("am_king_of_the_castle")))
|
||||
{
|
||||
if (auto kotc = gta_util::find_script_thread(RAGE_JOAAT("am_king_of_the_castle")))
|
||||
{
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx).at(6).at(0, 204).at(74).at(0, 4).as<int*>() = 0;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx).at(6).at(0, 204).at(74).at(0, 4).at(1).as<int*>() = self::id;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx).at(6).at(0, 204).at(74).at(0, 4).at(2).as<int*>() = self::id;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx).at(6).at(0, 204).at(74).at(0, 4).at(3).as<float*>() = 999999999.0f;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx)
|
||||
.at(6)
|
||||
.at(0, 204)
|
||||
.at(74)
|
||||
.at(0, 4)
|
||||
.as<int*>() = 0;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx)
|
||||
.at(6)
|
||||
.at(0, 204)
|
||||
.at(74)
|
||||
.at(0, 4)
|
||||
.at(1)
|
||||
.as<int*>() = self::id;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx)
|
||||
.at(6)
|
||||
.at(0, 204)
|
||||
.at(74)
|
||||
.at(0, 4)
|
||||
.at(2)
|
||||
.as<int*>() = self::id;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx)
|
||||
.at(6)
|
||||
.at(0, 204)
|
||||
.at(74)
|
||||
.at(0, 4)
|
||||
.at(3)
|
||||
.as<float*>() = 999999999.0f;
|
||||
}
|
||||
}
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Dethrone Everyone##kotc", []
|
||||
{
|
||||
components::button("Dethrone Everyone##kotc", [] {
|
||||
if (scripts::force_host(RAGE_JOAAT("am_king_of_the_castle")))
|
||||
{
|
||||
if (auto kotc = gta_util::find_script_thread(RAGE_JOAAT("am_king_of_the_castle")))
|
||||
{
|
||||
for (int i = 0; i < *script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx).at(6).at(0, 204).at(74).as<int*>(); i++)
|
||||
for (int i = 0; i < *script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx)
|
||||
.at(6)
|
||||
.at(0, 204)
|
||||
.at(74)
|
||||
.as<int*>();
|
||||
i++)
|
||||
{
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx).at(6).at(0, 204).at(74).at(i, 4).as<int*>() = -1;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx).at(6).at(0, 204).at(74).at(i, 4).at(1).as<int*>() = -1;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx).at(6).at(0, 204).at(74).at(i, 4).at(2).as<int*>() = -1;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx).at(6).at(0, 204).at(74).at(i, 4).at(3).as<float*>() = -1.0f;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx)
|
||||
.at(6)
|
||||
.at(0, 204)
|
||||
.at(74)
|
||||
.at(i, 4)
|
||||
.as<int*>() = -1;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx)
|
||||
.at(6)
|
||||
.at(0, 204)
|
||||
.at(74)
|
||||
.at(i, 4)
|
||||
.at(1)
|
||||
.as<int*>() = -1;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx)
|
||||
.at(6)
|
||||
.at(0, 204)
|
||||
.at(74)
|
||||
.at(i, 4)
|
||||
.at(2)
|
||||
.as<int*>() = -1;
|
||||
*script_local(kotc->m_stack, scr_locals::am_king_of_the_castle::broadcast_idx)
|
||||
.at(6)
|
||||
.at(0, 204)
|
||||
.at(74)
|
||||
.at(i, 4)
|
||||
.at(3)
|
||||
.as<float*>() = -1.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,13 @@
|
||||
#include "views/view.hpp"
|
||||
#include "core/data/block_join_reasons.hpp"
|
||||
#include "core/data/command_access_levels.hpp"
|
||||
#include "core/data/infractions.hpp"
|
||||
#include "fiber_pool.hpp"
|
||||
#include "pointers.hpp"
|
||||
#include "services/players/player_service.hpp"
|
||||
#include "services/player_database/player_database_service.hpp"
|
||||
#include "services/api/api_service.hpp"
|
||||
#include "core/data/block_join_reasons.hpp"
|
||||
#include "core/data/infractions.hpp"
|
||||
#include "core/data/command_access_levels.hpp"
|
||||
#include "services/player_database/player_database_service.hpp"
|
||||
#include "services/players/player_service.hpp"
|
||||
#include "util/session.hpp"
|
||||
#include "views/view.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
@ -21,9 +21,9 @@ namespace big
|
||||
ImGui::SetNextItemWidth(300.f);
|
||||
components::input_text_with_hint("PLAYER"_T, "SEARCH"_T, search, sizeof(search), ImGuiInputTextFlags_None);
|
||||
|
||||
if (ImGui::ListBoxHeader("###players", { 180, static_cast<float>(*g_pointers->m_resolution_y - 400 - 38 * 4) }))
|
||||
if (ImGui::ListBoxHeader("###players", {180, static_cast<float>(*g_pointers->m_resolution_y - 400 - 38 * 4)}))
|
||||
{
|
||||
auto& item_arr = g_player_database_service->get_players();
|
||||
auto& item_arr = g_player_database_service->get_players();
|
||||
if (item_arr.size() > 0)
|
||||
{
|
||||
std::string lower_search = search;
|
||||
@ -41,21 +41,16 @@ namespace big
|
||||
ImGui::PushID(item.first);
|
||||
|
||||
float circle_size = 7.5f;
|
||||
auto cursor_pos = ImGui::GetCursorScreenPos();
|
||||
auto plyr_state = player.online_state;
|
||||
auto cursor_pos = ImGui::GetCursorScreenPos();
|
||||
auto plyr_state = player.online_state;
|
||||
|
||||
//render status circle
|
||||
ImGui::GetWindowDrawList()->AddCircleFilled(
|
||||
ImVec2(
|
||||
cursor_pos.x + 4.f + circle_size,
|
||||
cursor_pos.y + 4.f + circle_size),
|
||||
circle_size,
|
||||
ImColor(
|
||||
plyr_state == PlayerOnlineStatus::ONLINE ? ImVec4(0.f, 1.f, 0.f, 1.f)
|
||||
: plyr_state == PlayerOnlineStatus::OFFLINE ? ImVec4(1.f, 0.f, 0.f, 1.f)
|
||||
: plyr_state == PlayerOnlineStatus::UNKNOWN ? ImVec4(.5f, .5f, .5f, 1.0f)
|
||||
: ImVec4(.5f, .5f, .5f, 1.0f)
|
||||
));
|
||||
ImGui::GetWindowDrawList()->AddCircleFilled(ImVec2(cursor_pos.x + 4.f + circle_size, cursor_pos.y + 4.f + circle_size),
|
||||
circle_size,
|
||||
ImColor(plyr_state == PlayerOnlineStatus::ONLINE ? ImVec4(0.f, 1.f, 0.f, 1.f) :
|
||||
plyr_state == PlayerOnlineStatus::OFFLINE ? ImVec4(1.f, 0.f, 0.f, 1.f) :
|
||||
plyr_state == PlayerOnlineStatus::UNKNOWN ? ImVec4(.5f, .5f, .5f, 1.0f) :
|
||||
ImVec4(.5f, .5f, .5f, 1.0f)));
|
||||
|
||||
//we need some padding
|
||||
ImVec2 cursor = ImGui::GetCursorPos();
|
||||
@ -83,7 +78,7 @@ namespace big
|
||||
if (auto selected = g_player_database_service->get_selected())
|
||||
{
|
||||
ImGui::SameLine();
|
||||
if (ImGui::BeginChild("###selected_player", { 500, static_cast<float>(*g_pointers->m_resolution_y - 388 - 38 * 4) }, false, ImGuiWindowFlags_NoBackground))
|
||||
if (ImGui::BeginChild("###selected_player", {500, static_cast<float>(*g_pointers->m_resolution_y - 388 - 38 * 4)}, false, ImGuiWindowFlags_NoBackground))
|
||||
{
|
||||
if (ImGui::InputText("NAME"_T.data(), name_buf, sizeof(name_buf)))
|
||||
{
|
||||
@ -116,7 +111,8 @@ namespace big
|
||||
ImGui::SetTooltip("ONLY_AS_HOST"_T.data());
|
||||
|
||||
|
||||
if (ImGui::BeginCombo("CHAT_COMMAND_PERMISSIONS"_T.data(), COMMAND_ACCESS_LEVELS[current_player.command_access_level.value_or(g.session.chat_command_default_access_level)]))
|
||||
if (ImGui::BeginCombo("CHAT_COMMAND_PERMISSIONS"_T.data(),
|
||||
COMMAND_ACCESS_LEVELS[current_player.command_access_level.value_or(g.session.chat_command_default_access_level)]))
|
||||
{
|
||||
for (const auto& [type, name] : COMMAND_ACCESS_LEVELS)
|
||||
{
|
||||
@ -144,8 +140,7 @@ namespace big
|
||||
}
|
||||
}
|
||||
|
||||
components::button("JOIN_SESSION"_T, []
|
||||
{
|
||||
components::button("JOIN_SESSION"_T, [] {
|
||||
session::join_by_rockstar_id(current_player.rockstar_id);
|
||||
});
|
||||
|
||||
@ -153,8 +148,7 @@ namespace big
|
||||
components::input_text("INPUT_MSG"_T, message, sizeof(message));
|
||||
if (components::button("SEND_MSG"_T))
|
||||
{
|
||||
g_thread_pool->push([selected]
|
||||
{
|
||||
g_thread_pool->push([selected] {
|
||||
if (g_api_service->send_socialclub_message(selected->rockstar_id, message))
|
||||
{
|
||||
g_notification_service->push("SCAPI"_T.data(), "MSG_SENT_SUCCESS"_T.data());
|
||||
@ -192,8 +186,7 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::button("RELOAD_PLYR_ONLINE_STATES"_T, []
|
||||
{
|
||||
components::button("RELOAD_PLYR_ONLINE_STATES"_T, [] {
|
||||
g_player_database_service->update_player_states();
|
||||
});
|
||||
|
||||
|
@ -1,15 +1,15 @@
|
||||
#include "views/view.hpp"
|
||||
#include "fiber_pool.hpp"
|
||||
#include "util/session.hpp"
|
||||
#include "core/data/apartment_names.hpp"
|
||||
#include "core/data/command_access_levels.hpp"
|
||||
#include "core/data/region_codes.hpp"
|
||||
#include "core/data/warehouse_names.hpp"
|
||||
#include "fiber_pool.hpp"
|
||||
#include "gta_util.hpp"
|
||||
#include "hooking.hpp"
|
||||
#include "util/notify.hpp"
|
||||
#include "util/scripts.hpp"
|
||||
#include "util/session.hpp"
|
||||
#include "util/toxic.hpp"
|
||||
#include "core/data/apartment_names.hpp"
|
||||
#include "core/data/warehouse_names.hpp"
|
||||
#include "core/data/command_access_levels.hpp"
|
||||
#include "hooking.hpp"
|
||||
#include "views/view.hpp"
|
||||
|
||||
#include <network/Network.hpp>
|
||||
#include <script/globals/GPBD_FM_3.hpp>
|
||||
@ -20,8 +20,7 @@ namespace big
|
||||
{
|
||||
static uint64_t rid = 0;
|
||||
ImGui::InputScalar("INPUT_RID"_T.data(), ImGuiDataType_U64, &rid);
|
||||
components::button("JOIN_BY_RID"_T, []
|
||||
{
|
||||
components::button("JOIN_BY_RID"_T, [] {
|
||||
session::join_by_rockstar_id(rid);
|
||||
});
|
||||
|
||||
@ -34,15 +33,13 @@ namespace big
|
||||
|
||||
static char base64[500]{};
|
||||
components::input_text("SESSION_INFO"_T, base64, sizeof(base64));
|
||||
components::button("JOIN_SESSION_INFO"_T, []
|
||||
{
|
||||
components::button("JOIN_SESSION_INFO"_T, [] {
|
||||
rage::rlSessionInfo info;
|
||||
g_pointers->m_decode_session_info(&info, base64, nullptr);
|
||||
session::join_session(info);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("COPY_SESSION_INFO"_T, []
|
||||
{
|
||||
components::button("COPY_SESSION_INFO"_T, [] {
|
||||
char buf[0x100]{};
|
||||
g_pointers->m_encode_session_info(>a_util::get_network()->m_game_session.m_rline_session.m_session_info, buf, 0xA9, nullptr);
|
||||
ImGui::SetClipboardText(buf);
|
||||
@ -53,21 +50,19 @@ namespace big
|
||||
{
|
||||
for (const auto& session_type : sessions)
|
||||
{
|
||||
components::selectable(session_type.name, false, [&session_type]
|
||||
{
|
||||
components::selectable(session_type.name, false, [&session_type] {
|
||||
session::join_type(session_type.id);
|
||||
});
|
||||
}
|
||||
ImGui::EndListBox();
|
||||
}
|
||||
|
||||
|
||||
components::sub_title("REGION_SWITCHER"_T);
|
||||
if (ImGui::ListBoxHeader("###region_switch"))
|
||||
{
|
||||
for (const auto& region_type : regions)
|
||||
{
|
||||
components::selectable(region_type.name, *g_pointers->m_region_code == region_type.id, [®ion_type]
|
||||
{
|
||||
components::selectable(region_type.name, *g_pointers->m_region_code == region_type.id, [®ion_type] {
|
||||
*g_pointers->m_region_code = region_type.id;
|
||||
});
|
||||
}
|
||||
@ -88,7 +83,7 @@ namespace big
|
||||
ImGui::Checkbox("AUTO_KICK_CHAT_SPAMMERS"_T.data(), &g.session.kick_chat_spammers);
|
||||
ImGui::Checkbox("DISABLE_FILTER"_T.data(), &g.session.chat_force_clean);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Your sent chat messages will not be censored to the receivers"); // TODO: add translation
|
||||
ImGui::SetTooltip("Your sent chat messages will not be censored to the receivers");// TODO: add translation
|
||||
ImGui::Checkbox("LOG_CHAT_MSG"_T.data(), &g.session.log_chat_messages);
|
||||
ImGui::Checkbox("LOG_TXT_MSG"_T.data(), &g.session.log_text_messages);
|
||||
static char msg[256];
|
||||
@ -96,11 +91,13 @@ namespace big
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("IS_TEAM"_T.data(), &g.session.is_team);
|
||||
ImGui::SameLine();
|
||||
components::button("SEND"_T, []
|
||||
{
|
||||
if (const auto net_game_player = gta_util::get_network_player_mgr()->m_local_net_player; net_game_player)
|
||||
components::button("SEND"_T, [] {
|
||||
if (const auto net_game_player = gta_util::get_network_player_mgr()->m_local_net_player; net_game_player)
|
||||
{
|
||||
if (g_hooking->get_original<hooks::send_chat_message>()(*g_pointers->m_send_chat_ptr, net_game_player->get_net_data(), msg, g.session.is_team))
|
||||
if (g_hooking->get_original<hooks::send_chat_message>()(*g_pointers->m_send_chat_ptr,
|
||||
net_game_player->get_net_data(),
|
||||
msg,
|
||||
g.session.is_team))
|
||||
notify::draw_chat(msg, net_game_player->get_name(), g.session.is_team);
|
||||
}
|
||||
});
|
||||
@ -144,16 +141,15 @@ namespace big
|
||||
if (ImGui::Checkbox("FORCE_SCRIPT_HOST"_T.data(), &g.session.force_script_host))
|
||||
{
|
||||
if (g.session.force_script_host)
|
||||
g_fiber_pool->queue_job([]
|
||||
{
|
||||
scripts::force_host(RAGE_JOAAT("freemode"));
|
||||
if (auto script = gta_util::find_script_thread(RAGE_JOAAT("freemode")); script && script->m_net_component)
|
||||
script->m_net_component->block_host_migration(true);
|
||||
g_fiber_pool->queue_job([] {
|
||||
scripts::force_host(RAGE_JOAAT("freemode"));
|
||||
if (auto script = gta_util::find_script_thread(RAGE_JOAAT("freemode")); script && script->m_net_component)
|
||||
script->m_net_component->block_host_migration(true);
|
||||
|
||||
scripts::force_host(RAGE_JOAAT("fmmc_launcher"));
|
||||
if (auto script = gta_util::find_script_thread(RAGE_JOAAT("fmmc_launcher")); script && script->m_net_component)
|
||||
script->m_net_component->block_host_migration(true);
|
||||
});
|
||||
scripts::force_host(RAGE_JOAAT("fmmc_launcher"));
|
||||
if (auto script = gta_util::find_script_thread(RAGE_JOAAT("fmmc_launcher")); script && script->m_net_component)
|
||||
script->m_net_component->block_host_migration(true);
|
||||
});
|
||||
}
|
||||
|
||||
components::sub_title("REMOTE_NAME_SPOOFING"_T);
|
||||
@ -206,42 +202,50 @@ namespace big
|
||||
*scr_globals::globalplayer_bd.at(self::id, scr_globals::size::globalplayer_bd).at(213).as<int*>() = global_wanted_level;
|
||||
}
|
||||
|
||||
components::command_button<"killall">({ }, "KILL_ALL"_T);
|
||||
components::command_button<"killall">({}, "KILL_ALL"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"explodeall">({ }, "EXPLODE_ALL"_T);
|
||||
components::command_button<"explodeall">({}, "EXPLODE_ALL"_T);
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::command_button<"beastall">({ });
|
||||
components::command_button<"beastall">({});
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("INCLUDING_YOU"_T.data());
|
||||
|
||||
components::command_button<"giveweapsall">({ });
|
||||
components::command_button<"giveweapsall">({});
|
||||
ImGui::SameLine();
|
||||
components::command_button<"remweapsall">({ });
|
||||
components::command_button<"remweapsall">({});
|
||||
|
||||
components::command_button<"ceokickall">( { });
|
||||
components::command_button<"ceokickall">({});
|
||||
ImGui::SameLine();
|
||||
components::command_button<"vehkickall">({ });
|
||||
components::command_button<"vehkickall">({});
|
||||
|
||||
|
||||
components::command_button<"ragdollall">({ }, "RAGDOLL_PLAYERS"_T);
|
||||
components::command_button<"ragdollall">({}, "RAGDOLL_PLAYERS"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"intkickall">({ }, "KICK_ALL_FROM_INTERIORS"_T);
|
||||
components::command_button<"intkickall">({}, "KICK_ALL_FROM_INTERIORS"_T);
|
||||
|
||||
components::command_button<"missionall">({ });
|
||||
components::command_button<"missionall">({});
|
||||
ImGui::SameLine();
|
||||
components::command_button<"errorall">({ });
|
||||
components::command_button<"errorall">({});
|
||||
|
||||
components::command_button<"ceoraidall">({ });
|
||||
components::command_button<"ceoraidall">({});
|
||||
ImGui::SameLine();
|
||||
components::button("Trigger MC Raid", [] { g_player_service->iterate([](auto& plyr) { toxic::start_activity(plyr.second, eActivityType::BikerDefend); }); });
|
||||
components::button("Trigger MC Raid", [] {
|
||||
g_player_service->iterate([](auto& plyr) {
|
||||
toxic::start_activity(plyr.second, eActivityType::BikerDefend);
|
||||
});
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Trigger Bunker Raid", [] { g_player_service->iterate([](auto& plyr) { toxic::start_activity(plyr.second, eActivityType::GunrunningDefend); }); });
|
||||
components::button("Trigger Bunker Raid", [] {
|
||||
g_player_service->iterate([](auto& plyr) {
|
||||
toxic::start_activity(plyr.second, eActivityType::GunrunningDefend);
|
||||
});
|
||||
});
|
||||
|
||||
components::command_button<"sextall">({ }, "Send Sexts");
|
||||
components::command_button<"sextall">({}, "Send Sexts");
|
||||
ImGui::SameLine();
|
||||
components::command_button<"fakebanall">({ }, "Send Fake Ban Messages");
|
||||
components::command_button<"fakebanall">({}, "Send Fake Ban Messages");
|
||||
|
||||
components::small_text("TELEPORTS"_T);
|
||||
|
||||
@ -265,7 +269,7 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::command_button<"apartmenttpall">({ (uint64_t)g.session.send_to_apartment_idx }, "TP_ALL_TO_APARTMENT"_T);
|
||||
components::command_button<"apartmenttpall">({(uint64_t)g.session.send_to_apartment_idx}, "TP_ALL_TO_APARTMENT"_T);
|
||||
|
||||
if (ImGui::BeginCombo("##warehouse", warehouse_names[g.session.send_to_warehouse_idx]))
|
||||
{
|
||||
@ -287,37 +291,53 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::command_button<"warehousetpall">({ (uint64_t)g.session.send_to_warehouse_idx }, "TP_ALL_TO_WAREHOUSE"_T);
|
||||
components::command_button<"warehousetpall">({(uint64_t)g.session.send_to_warehouse_idx}, "TP_ALL_TO_WAREHOUSE"_T);
|
||||
|
||||
components::button("TP_ALL_TO_DARTS"_T, [] { g_player_service->iterate([](auto& plyr) { toxic::start_activity(plyr.second, eActivityType::Darts); }); });
|
||||
components::button("TP_ALL_TO_DARTS"_T, [] {
|
||||
g_player_service->iterate([](auto& plyr) {
|
||||
toxic::start_activity(plyr.second, eActivityType::Darts);
|
||||
});
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("TP_ALL_TO_FLIGHT_SCHOOL"_T, [] { g_player_service->iterate([](auto& plyr) { toxic::start_activity(plyr.second, eActivityType::PilotSchool); }); });
|
||||
components::button("TP_ALL_TO_FLIGHT_SCHOOL"_T, [] {
|
||||
g_player_service->iterate([](auto& plyr) {
|
||||
toxic::start_activity(plyr.second, eActivityType::PilotSchool);
|
||||
});
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("TP_ALL_TO_MAP_CENTER"_T, [] { g_player_service->iterate([](auto& plyr) { toxic::start_activity(plyr.second, eActivityType::ArmWresling); }); });
|
||||
components::button("TP_ALL_TO_MAP_CENTER"_T, [] {
|
||||
g_player_service->iterate([](auto& plyr) {
|
||||
toxic::start_activity(plyr.second, eActivityType::ArmWresling);
|
||||
});
|
||||
});
|
||||
|
||||
components::button("TP_ALL_TO_SKYDIVE"_T, [] { g_player_service->iterate([](auto& plyr) { toxic::start_activity(plyr.second, eActivityType::Skydive); }); });
|
||||
components::button("TP_ALL_TO_SKYDIVE"_T, [] {
|
||||
g_player_service->iterate([](auto& plyr) {
|
||||
toxic::start_activity(plyr.second, eActivityType::Skydive);
|
||||
});
|
||||
});
|
||||
ImGui::SameLine();
|
||||
|
||||
components::command_button<"interiortpall">({ 81 }, "TP_ALL_TO_MOC"_T);
|
||||
components::command_button<"interiortpall">({81}, "TP_ALL_TO_MOC"_T);
|
||||
|
||||
ImGui::SameLine();
|
||||
components::command_button<"interiortpall">({ 123 }, "TP_ALL_TO_CASINO"_T);
|
||||
components::command_button<"interiortpall">({123}, "TP_ALL_TO_CASINO"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"interiortpall">({ 124 }, "TP_ALL_TO_PENTHOUSE"_T);
|
||||
components::command_button<"interiortpall">({124}, "TP_ALL_TO_PENTHOUSE"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"interiortpall">({ 128 }, "TP_ALL_TO_ARCADE"_T);
|
||||
components::command_button<"interiortpall">({128}, "TP_ALL_TO_ARCADE"_T);
|
||||
|
||||
components::command_button<"interiortpall">({ 146 }, "TP_ALL_TO_MUSIC_LOCKER"_T);
|
||||
components::command_button<"interiortpall">({146}, "TP_ALL_TO_MUSIC_LOCKER"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"interiortpall">({ 148 }, "TP_ALL_TO_RECORD_A_STUDIOS"_T);
|
||||
components::command_button<"interiortpall">({148}, "TP_ALL_TO_RECORD_A_STUDIOS"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"interiortpall">({ 149 }, "TP_ALL_TO_CUSTOM_AUTO_SHOP"_T);
|
||||
components::command_button<"interiortpall">({149}, "TP_ALL_TO_CUSTOM_AUTO_SHOP"_T);
|
||||
|
||||
components::command_button<"interiortpall">({ 155 }, "TP_ALL_TO_AGENCY"_T);
|
||||
components::command_button<"interiortpall">({155}, "TP_ALL_TO_AGENCY"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"interiortpall">({ 160 }, "TP_ALL_TO_FREAKSHOP"_T);
|
||||
components::command_button<"interiortpall">({160}, "TP_ALL_TO_FREAKSHOP"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"interiortpall">({ 161 }, "TP_ALL_TO_MULTI_FLOOR_GARAGE"_T);
|
||||
components::command_button<"interiortpall">({161}, "TP_ALL_TO_MULTI_FLOOR_GARAGE"_T);
|
||||
|
||||
components::command_button<"tutorialall">();
|
||||
ImGui::SameLine();
|
||||
@ -345,17 +365,29 @@ namespace big
|
||||
|
||||
components::small_text("WARP_TIME"_T.data());
|
||||
|
||||
components::button("PLUS_1_MINUTE"_T, [] { toxic::warp_time_forward_all(60 * 1000); });
|
||||
components::button("PLUS_1_MINUTE"_T, [] {
|
||||
toxic::warp_time_forward_all(60 * 1000);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("PLUS_5_MINUTES"_T, [] { toxic::warp_time_forward_all(5 * 60 * 1000); });
|
||||
components::button("PLUS_5_MINUTES"_T, [] {
|
||||
toxic::warp_time_forward_all(5 * 60 * 1000);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("PLUS_48_MINUTES"_T, [] { toxic::warp_time_forward_all(48 * 60 * 1000); });
|
||||
components::button("PLUS_48_MINUTES"_T, [] {
|
||||
toxic::warp_time_forward_all(48 * 60 * 1000);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("PLUS_96_MINUTES"_T, [] { toxic::warp_time_forward_all(96 * 60 * 1000); });
|
||||
components::button("PLUS_96_MINUTES"_T, [] {
|
||||
toxic::warp_time_forward_all(96 * 60 * 1000);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("PLUS_200_MINUTES"_T, [] { toxic::warp_time_forward_all(200 * 60 * 1000); });
|
||||
components::button("PLUS_200_MINUTES"_T, [] {
|
||||
toxic::warp_time_forward_all(200 * 60 * 1000);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("STOP_TIME"_T, [] { toxic::set_time_all(INT_MAX - 3000); });
|
||||
components::button("STOP_TIME"_T, [] {
|
||||
toxic::set_time_all(INT_MAX - 3000);
|
||||
});
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("STOP_TIME_DESC"_T.data());
|
||||
|
||||
|
@ -1,12 +1,13 @@
|
||||
#include "views/view.hpp"
|
||||
#include "core/data/language_codes.hpp"
|
||||
#include "core/data/region_codes.hpp"
|
||||
#include "fiber_pool.hpp"
|
||||
#include "pointers.hpp"
|
||||
#include "script.hpp"
|
||||
#include <network/Network.hpp>
|
||||
#include "util/session.hpp"
|
||||
#include "core/data/region_codes.hpp"
|
||||
#include "core/data/language_codes.hpp"
|
||||
#include "services/matchmaking/matchmaking_service.hpp"
|
||||
#include "util/session.hpp"
|
||||
#include "views/view.hpp"
|
||||
|
||||
#include <network/Network.hpp>
|
||||
|
||||
namespace big
|
||||
{
|
||||
@ -22,7 +23,7 @@ namespace big
|
||||
|
||||
ImGui::SetNextItemWidth(300.f);
|
||||
|
||||
if (ImGui::ListBoxHeader("###sessions", { 300, static_cast<float>(*g_pointers->m_resolution_y - 400 - 38 * 4) }))
|
||||
if (ImGui::ListBoxHeader("###sessions", {300, static_cast<float>(*g_pointers->m_resolution_y - 400 - 38 * 4)}))
|
||||
{
|
||||
if (g_matchmaking_service->get_num_found_sessions())
|
||||
{
|
||||
@ -42,10 +43,11 @@ namespace big
|
||||
if (ImGui::IsItemHovered())
|
||||
{
|
||||
ImGui::SetTooltip(std::format("Num Players: {}\nRegion: {}\nLanguage: {}\nHost: {}",
|
||||
session.attributes.player_count,
|
||||
regions[session.attributes.region].name,
|
||||
languages[session.attributes.language].name,
|
||||
session.info.m_net_player_data.m_gamer_handle.m_rockstar_id).c_str());
|
||||
session.attributes.player_count,
|
||||
regions[session.attributes.region].name,
|
||||
languages[session.attributes.language].name,
|
||||
session.info.m_net_player_data.m_gamer_handle.m_rockstar_id)
|
||||
.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -60,7 +62,7 @@ namespace big
|
||||
if (selected_session_idx != -1)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
if (ImGui::BeginChild("###selected_session", { 300, static_cast<float>(*g_pointers->m_resolution_y - 388 - 38 * 4) }, false, ImGuiWindowFlags_NoBackground))
|
||||
if (ImGui::BeginChild("###selected_session", {300, static_cast<float>(*g_pointers->m_resolution_y - 388 - 38 * 4)}, false, ImGuiWindowFlags_NoBackground))
|
||||
{
|
||||
auto& session = g_matchmaking_service->get_found_sessions()[selected_session_idx];
|
||||
|
||||
@ -72,22 +74,19 @@ namespace big
|
||||
auto& data = session.info.m_net_player_data;
|
||||
ImGui::Text("SESSION_BROWSER_HOST_RID"_T.data(), data.m_gamer_handle.m_rockstar_id);
|
||||
|
||||
components::button("COPY_SESSION_INFO"_T, []
|
||||
{
|
||||
components::button("COPY_SESSION_INFO"_T, [] {
|
||||
ImGui::SetClipboardText(session_info);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("JOIN"_T, [session]
|
||||
{
|
||||
if (SCRIPT::GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(RAGE_JOAAT("maintransition")) != 0 ||
|
||||
STREAMING::IS_PLAYER_SWITCH_IN_PROGRESS())
|
||||
components::button("JOIN"_T, [session] {
|
||||
if (SCRIPT::GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(RAGE_JOAAT("maintransition")) != 0 || STREAMING::IS_PLAYER_SWITCH_IN_PROGRESS())
|
||||
{
|
||||
g_notification_service->push_error("JOIN_SESSION"_T.data(), "PLAYER_SWITCH_IN_PROGRESS"_T.data());
|
||||
return;
|
||||
}
|
||||
|
||||
bool is_session_free_aim = session.attributes.discriminator & (1 << 17);
|
||||
bool is_local_free_aim = PAD::GET_LOCAL_PLAYER_GAMEPAD_AIM_STATE() > 1;
|
||||
bool is_local_free_aim = PAD::GET_LOCAL_PLAYER_GAMEPAD_AIM_STATE() > 1;
|
||||
|
||||
if (is_session_free_aim != is_local_free_aim)
|
||||
PLAYER::SET_PLAYER_TARGETING_MODE(is_session_free_aim ? 3 : 1);
|
||||
@ -120,7 +119,6 @@ namespace big
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ImGui::Checkbox("LANGUAGE"_T.data(), &g.session_browser.language_filter_enabled);
|
||||
@ -171,13 +169,13 @@ namespace big
|
||||
ImGui::TreePop();
|
||||
}
|
||||
|
||||
if (ImGui::Checkbox("REPLACE_GAME_MATCHMAKING"_T.data(), &g.session_browser.replace_game_matchmaking));
|
||||
if (ImGui::Checkbox("REPLACE_GAME_MATCHMAKING"_T.data(), &g.session_browser.replace_game_matchmaking))
|
||||
;
|
||||
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("REPLACE_GAME_MATCHMAKING_DESC"_T.data());
|
||||
|
||||
components::button("REFRESH"_T, []
|
||||
{
|
||||
components::button("REFRESH"_T, [] {
|
||||
selected_session_idx = -1;
|
||||
|
||||
if (!g_matchmaking_service->matchmake())
|
||||
|
@ -1,18 +1,88 @@
|
||||
#include "views/view.hpp"
|
||||
#include "core/data/blip_types.hpp"
|
||||
#include "core/data/language_codes.hpp"
|
||||
#include "core/data/region_codes.hpp"
|
||||
#include "fiber_pool.hpp"
|
||||
#include "util/teleport.hpp"
|
||||
#include "core/data/region_codes.hpp"
|
||||
#include "core/data/language_codes.hpp"
|
||||
#include "views/view.hpp"
|
||||
|
||||
#include <network/ClanData.hpp>
|
||||
|
||||
namespace big
|
||||
{
|
||||
void view::spoofing()
|
||||
{
|
||||
components::small_text("SPOOFING_DESCRIPTION"_T);
|
||||
// requires translation
|
||||
|
||||
ImGui::Checkbox("Hide From Player List", &g.spoofing.hide_from_player_list);
|
||||
|
||||
components::script_patch_checkbox("Spoof Blip Type", &g.spoofing.spoof_blip);
|
||||
if (g.spoofing.spoof_blip)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
if (ImGui::BeginCombo("###blip_type_select", blip_types[g.spoofing.blip_type]))
|
||||
{
|
||||
for (int i = 0; i < blip_types.size(); i++)
|
||||
{
|
||||
if (ImGui::Selectable(blip_types[i], g.spoofing.blip_type == i))
|
||||
{
|
||||
g.spoofing.blip_type = i;
|
||||
}
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Spoof Rank", &g.spoofing.spoof_rank);
|
||||
if (g.spoofing.spoof_rank)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
if (ImGui::InputInt("###rank", &g.spoofing.rank))
|
||||
{
|
||||
*g_pointers->m_force_player_card_refresh = true;
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Spoof K/D Ratio", &g.spoofing.spoof_kd_ratio);
|
||||
if (g.spoofing.spoof_kd_ratio)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
if (ImGui::InputFloat("###kd_ratio", &g.spoofing.kd_ratio))
|
||||
{
|
||||
*g_pointers->m_force_player_card_refresh = true;
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Spoof Badsport State", &g.spoofing.spoof_bad_sport);
|
||||
if (g.spoofing.spoof_bad_sport)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Combo("###badsport_select", &g.spoofing.badsport_type, "Clean Player\0Dirty Player\0Bad Sport"))
|
||||
{
|
||||
*g_pointers->m_force_player_card_refresh = true;
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Spoof Job Points", &g.spoofing.spoof_job_points);
|
||||
if (g.spoofing.spoof_job_points)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
ImGui::InputInt("###jp", &g.spoofing.job_points);
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Spoof Player Model", &g.spoofing.spoof_player_model);
|
||||
if (g.spoofing.spoof_player_model)
|
||||
{
|
||||
static char model[32];
|
||||
strcpy_s(model, sizeof(model), g.spoofing.player_model.c_str());
|
||||
|
||||
ImGui::SameLine();
|
||||
components::input_text("##model_input", model, sizeof(model));
|
||||
|
||||
if (model != g.spoofing.player_model)
|
||||
g.spoofing.player_model = std::string(model);
|
||||
}
|
||||
|
||||
|
||||
components::sub_title("SPOOFING_HIDE_FEATURES"_T);
|
||||
ImGui::Checkbox("SPOOFING_HIDE_GOD_MODE"_T.data(), &g.spoofing.spoof_hide_god);
|
||||
ImGui::Checkbox("SPOOFING_HIDE_SPECTATE"_T.data(), &g.spoofing.spoof_hide_spectate);
|
||||
|
Reference in New Issue
Block a user