mirror of
https://github.com/Mr-X-GTA/YimMenu.git
synced 2025-07-01 12:02:55 +08:00
feat: Translation Service (#844)
Co-authored-by: mrwoowoo <github@hiqaq.com> Co-authored-by: LiamD-Flop <40887493+LiamD-Flop@users.noreply.github.com>
This commit is contained in:
@ -10,15 +10,15 @@ namespace big
|
||||
if (ImGui::Begin("menu_heading", nullptr, window_flags | ImGuiWindowFlags_NoScrollbar))
|
||||
{
|
||||
ImGui::BeginGroup();
|
||||
ImGui::Text("Welcome");
|
||||
ImGui::Text("HEADING_WELCOME"_T.data());
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.172f, 0.380f, 0.909f, 1.f));
|
||||
ImGui::Text(g_local_player == nullptr || g_local_player->m_player_info == nullptr ? "unknown" : g_local_player->m_player_info->m_net_player_data.m_name);
|
||||
ImGui::Text(g_local_player == nullptr || g_local_player->m_player_info == nullptr ? "UNKNOWN_USERNAME"_T.data() : g_local_player->m_player_info->m_net_player_data.m_name);
|
||||
ImGui::PopStyleColor();
|
||||
ImGui::EndGroup();
|
||||
ImGui::SameLine();
|
||||
ImGui::SetCursorPos({ 300.f - ImGui::CalcTextSize("Unload").x - ImGui::GetStyle().ItemSpacing.x, ImGui::GetStyle().WindowPadding.y / 2 + ImGui::GetStyle().ItemSpacing.y + (ImGui::CalcTextSize("W").y / 2) });
|
||||
ImGui::SetCursorPos({ 300.f - ImGui::CalcTextSize("UNLOAD"_T.data()).x - ImGui::GetStyle().ItemSpacing.x, ImGui::GetStyle().WindowPadding.y / 2 + ImGui::GetStyle().ItemSpacing.y + (ImGui::CalcTextSize("W").y / 2) });
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.69f, 0.29f, 0.29f, 1.00f));
|
||||
if (components::nav_button("Unload"))
|
||||
if (components::nav_button("UNLOAD"_T))
|
||||
{
|
||||
g_fiber_pool->queue_job([]
|
||||
{
|
||||
|
@ -8,7 +8,7 @@ namespace big
|
||||
if (strcmp(g_gui_service->get_selected()->name, "Debug"))
|
||||
return;
|
||||
|
||||
if (ImGui::Begin("Debug"))
|
||||
if (ImGui::Begin("DEBUG_WINDOW"_T.data()))
|
||||
{
|
||||
ImGui::BeginTabBar("debug_tabbar");
|
||||
misc();
|
||||
@ -16,6 +16,7 @@ namespace big
|
||||
globals();
|
||||
locals();
|
||||
script_events();
|
||||
scripts();
|
||||
ImGui::EndTabBar();
|
||||
}
|
||||
ImGui::End();
|
||||
|
@ -7,6 +7,7 @@ namespace big::debug
|
||||
extern void logs();
|
||||
extern void misc();
|
||||
extern void script_events();
|
||||
extern void scripts();
|
||||
|
||||
extern void main();
|
||||
}
|
@ -7,25 +7,25 @@ namespace big
|
||||
{
|
||||
void debug::globals()
|
||||
{
|
||||
if (ImGui::BeginTabItem("Globals"))
|
||||
if (ImGui::BeginTabItem("DEBUG_TAB_GLOBALS"_T.data()))
|
||||
{
|
||||
if (ImGui::Checkbox("Enable Freezing", &g_globals_service->m_running) && g_globals_service->m_running)
|
||||
if (ImGui::Checkbox("DEBUG_GLOBALS_ENABLE_FREEZING"_T.data(), &g_globals_service->m_running) && g_globals_service->m_running)
|
||||
g_thread_pool->push([&]() { g_globals_service->loop(); });
|
||||
|
||||
if (components::button("Load"))
|
||||
if (components::button("LOAD"_T))
|
||||
g_globals_service->load();
|
||||
ImGui::SameLine();
|
||||
if (components::button("Save"))
|
||||
if (components::button("SAVE"_T))
|
||||
g_globals_service->save();
|
||||
|
||||
|
||||
ImGui::SameLine();
|
||||
if (components::button("Add Global"))
|
||||
if (components::button("DEBUG_GLOBALS_ADD"_T))
|
||||
{
|
||||
ImGui::OpenPopup("New Global");
|
||||
ImGui::OpenPopup("DEBUG_GLOBALS_NEW"_T.data());
|
||||
}
|
||||
|
||||
if (ImGui::BeginPopupModal("New Global"))
|
||||
if (ImGui::BeginPopupModal("DEBUG_GLOBALS_NEW"_T.data()))
|
||||
{
|
||||
static int base_address = 0;
|
||||
static bool freeze = false;
|
||||
@ -34,13 +34,13 @@ namespace big
|
||||
static int offset_count = 0;
|
||||
static int previous_offset_count = 0;
|
||||
|
||||
ImGui::Text("Name:");
|
||||
ImGui::Text("DEBUG_GLOBALS_NAME"_T.data());
|
||||
components::input_text_with_hint("##global_name", "Name", name, sizeof(name));
|
||||
ImGui::Text("Base Address:");
|
||||
ImGui::Text("DEBUG_GLOBALS_BASE_ADDRESS"_T.data());
|
||||
ImGui::InputInt("##modal_global_base_addr", &base_address);
|
||||
ImGui::Text("Freeze:");
|
||||
ImGui::Text("DEBUG_GLOBAL_FREEZE"_T.data());
|
||||
ImGui::Checkbox("##modal_global_freeze", &freeze);
|
||||
ImGui::Text("Number of Offsets:");
|
||||
ImGui::Text("DEBUG_GLOBAL_OFFSET_COUNT"_T.data());
|
||||
ImGui::InputInt("##modal_offset_count", &offset_count);
|
||||
|
||||
if (offset_count < 0) offset_count = 0;
|
||||
@ -64,10 +64,10 @@ namespace big
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::Text("Offset: %d", i + 1);
|
||||
ImGui::Text("DEBUG_GLOBAL_OFFSET"_T.data(), i + 1);
|
||||
ImGui::InputInt("##offset", &offsets[i][0]);
|
||||
|
||||
ImGui::Text("Size:");
|
||||
ImGui::Text("DEBUG_GLOBAL_SIZE"_T.data());
|
||||
ImGui::SameLine();
|
||||
ImGui::InputInt("##size", &offsets[i][1]);
|
||||
|
||||
@ -75,7 +75,7 @@ namespace big
|
||||
}
|
||||
ImGui::PopItemWidth();
|
||||
|
||||
if (components::button("Cancel"))
|
||||
if (components::button("CANCEL"_T))
|
||||
{
|
||||
strcpy(name, "");
|
||||
freeze = false;
|
||||
@ -87,7 +87,7 @@ namespace big
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (components::button("Save"))
|
||||
if (components::button("SAVE"_T))
|
||||
{
|
||||
auto new_global = global(name, base_address, freeze, offsets, offset_count);
|
||||
new_global.build_cache();
|
||||
@ -114,12 +114,12 @@ namespace big
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::PushID(global.get_id());
|
||||
ImGui::Checkbox("Freeze", &global.m_freeze);
|
||||
ImGui::Checkbox("DEBUG_GLOBAL_FREEZE_TOGGLE"_T.data(), &global.m_freeze);
|
||||
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Text("Name:");
|
||||
ImGui::Text("Value:");
|
||||
ImGui::Text("DEBUG_GLOBALS_NAME"_T.data());
|
||||
ImGui::Text("DEBUG_GLOBALS_VALUE"_T.data());
|
||||
|
||||
ImGui::EndGroup();
|
||||
|
||||
@ -139,7 +139,7 @@ namespace big
|
||||
|
||||
ImGui::BeginGroup();
|
||||
|
||||
if (components::button("Delete"))
|
||||
if (components::button("DELETE"_T))
|
||||
{
|
||||
for (int i = 0; i < g_globals_service->m_globals.size(); i++)
|
||||
if (auto& it = g_globals_service->m_globals.at(i); it.get_id() == global.get_id())
|
||||
@ -148,7 +148,7 @@ namespace big
|
||||
break;
|
||||
}
|
||||
|
||||
if (components::button("Write"))
|
||||
if (components::button("WRITE"_T))
|
||||
global.write();
|
||||
|
||||
ImGui::PopID();
|
||||
|
@ -4,7 +4,7 @@ namespace big
|
||||
{
|
||||
void debug::locals()
|
||||
{
|
||||
if (ImGui::BeginTabItem("Locals"))
|
||||
if (ImGui::BeginTabItem("DEBUG_TAB_LOCALS"_T.data()))
|
||||
{
|
||||
|
||||
ImGui::EndTabItem();
|
||||
|
@ -13,7 +13,7 @@ namespace big
|
||||
{
|
||||
void debug::misc()
|
||||
{
|
||||
if (ImGui::BeginTabItem("Misc"))
|
||||
if (ImGui::BeginTabItem("DEBUG_TAB_MISC"_T.data()))
|
||||
{
|
||||
if (components::button("Dump entrypoints"))
|
||||
{
|
||||
@ -25,7 +25,7 @@ namespace big
|
||||
NETWORK::NETWORK_BAIL(16, 0, 0);
|
||||
});
|
||||
|
||||
components::button("Remove from Bad Sport", []
|
||||
components::button("DEBUG_REMOVE_FROM_BAD_SPORT"_T, []
|
||||
{
|
||||
STATS::STAT_SET_FLOAT(RAGE_JOAAT("mpply_overall_badsport"), 0.0f, TRUE);
|
||||
STATS::STAT_SET_BOOL(RAGE_JOAAT("mpply_was_i_bad_sport"), FALSE, TRUE);
|
||||
|
@ -6,7 +6,7 @@ namespace big
|
||||
{
|
||||
void debug::script_events()
|
||||
{
|
||||
if (ImGui::BeginTabItem("Script Events"))
|
||||
if (ImGui::BeginTabItem("DEBUG_TAB_SCRIPT_EVENTS"_T.data()))
|
||||
{
|
||||
static int64_t* args;
|
||||
static int event_arg_count = 3;
|
||||
@ -14,7 +14,7 @@ namespace big
|
||||
static int event_player_bits;
|
||||
static bool event_everyone = false;
|
||||
|
||||
ImGui::Text("Script Argument Count:");
|
||||
ImGui::Text("DEBUG_SCRIPT_EVENT_ARG_COUNT"_T.data());
|
||||
ImGui::InputInt("###script_event_arg_count", &event_arg_count);
|
||||
if (event_arg_count > 32)
|
||||
event_arg_count = 32;
|
||||
@ -37,7 +37,7 @@ namespace big
|
||||
for (int i = 0; i < event_arg_count; i++)
|
||||
{
|
||||
ImGui::PushID(i);
|
||||
ImGui::Text("Arg[%d]", i);
|
||||
ImGui::Text("DEBUG_SCRIPT_EVENT_ARG"_T.data(), i);
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::InputScalar("###input_dynamic_arg", ImGuiDataType_S64, &args[i]);
|
||||
@ -47,14 +47,14 @@ namespace big
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::Checkbox("Send to everyone", &event_everyone);
|
||||
ImGui::Checkbox("DEBUG_SCRIPT_EVENT_EVERYONE"_T.data(), &event_everyone);
|
||||
if (!event_everyone)
|
||||
{
|
||||
ImGui::Text("Player ID:");
|
||||
ImGui::Text("DEBUG_SCRIPT_EVENT_PLAYER_ID"_T.data());
|
||||
ImGui::InputInt("###player_bits", &event_player_bits);
|
||||
}
|
||||
|
||||
components::button("Send Event", []
|
||||
components::button("DEBUG_SCRIPT_EVENT_SEND_EVENT"_T, []
|
||||
{
|
||||
args[1] = self::id; // prevent detection from AC
|
||||
g_pointers->m_trigger_script_event(1, args, event_arg_count, event_everyone ? -1 : 1 << event_player_bits);
|
||||
|
26
src/views/debug/view_debug_scripts.cpp
Normal file
26
src/views/debug/view_debug_scripts.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
#include "view_debug.hpp"
|
||||
#include "gui/components/components.hpp"
|
||||
#include "script_mgr.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
void debug::scripts()
|
||||
{
|
||||
if (ImGui::BeginTabItem("DEBUG_TAB_SCRIPTS"_T.data()))
|
||||
{
|
||||
components::sub_title("DEBUG_SCRIPTS_SUB_TITLE"_T);
|
||||
|
||||
for (const auto& script : g_script_mgr.scripts())
|
||||
{
|
||||
if (script->is_toggleable())
|
||||
{
|
||||
if (ImGui::Checkbox(script->name(), script->toggle_ptr()))
|
||||
{
|
||||
g_notification_service->push(std::string(script->name()).append(" script"), script->is_enabled() ? "Resumed" : "Halted");
|
||||
}
|
||||
}
|
||||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
}
|
||||
}
|
@ -6,18 +6,18 @@ namespace big
|
||||
{
|
||||
void debug::logs()
|
||||
{
|
||||
if (ImGui::BeginTabItem("Logs"))
|
||||
if (ImGui::BeginTabItem("DEBUG_TABS_LOGS"_T.data()))
|
||||
{
|
||||
ImGui::Checkbox("Log Metrics", &g.debug.logs.metric_logs);
|
||||
ImGui::Checkbox("Log Packets", &g.debug.logs.packet_logs);
|
||||
ImGui::Checkbox("Native Script Hooks", &g.debug.logs.script_hook_logs);
|
||||
ImGui::Checkbox("DEBUG_LOG_METRICS"_T.data(), &g.debug.logs.metric_logs);
|
||||
ImGui::Checkbox("Log Packets", &g.debug.logs.packet_logs); // TODO: translate
|
||||
ImGui::Checkbox("DEBUG_LOG_NATIVE_SCRIPT_HOOKS"_T.data(), &g.debug.logs.script_hook_logs);
|
||||
|
||||
if (ImGui::TreeNode("Script Event Logging"))
|
||||
if (ImGui::TreeNode("DEBUG_LOG_TREE_SCRIPT_EVENT"_T.data()))
|
||||
{
|
||||
ImGui::Checkbox("Enable Script Event Logging", &g.debug.logs.script_event.logs);
|
||||
ImGui::Checkbox("DEBUG_LOG_SCRIPT_EVENT"_T.data(), &g.debug.logs.script_event.logs);
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::Checkbox("Filter by Player", &g.debug.logs.script_event.filter_player);
|
||||
ImGui::Checkbox("DEBUG_LOG_SCRIPT_EVENT_FILTER_BY_PLAYER"_T.data(), &g.debug.logs.script_event.filter_player);
|
||||
|
||||
if (g.debug.logs.script_event.filter_player)
|
||||
{
|
||||
|
@ -83,17 +83,17 @@ namespace big
|
||||
|
||||
if (ped_damage_bits & (uint32_t)eEntityProofs::GOD)
|
||||
{
|
||||
mode_str = "GOD";
|
||||
mode_str = "ESP_GOD"_T.data();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ped_damage_bits & (uint32_t)eEntityProofs::BULLET)
|
||||
{
|
||||
mode_str += "BULLET ";
|
||||
mode_str += "ESP_BULLET"_T.data();
|
||||
}
|
||||
if (ped_damage_bits & (uint32_t)eEntityProofs::EXPLOSION)
|
||||
{
|
||||
mode_str += "EXPLOSION ";
|
||||
mode_str += "ESP_EXPLOSION"_T.data();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,7 @@ namespace big
|
||||
static char search[64];
|
||||
|
||||
ImGui::SetNextItemWidth(300.f);
|
||||
components::input_text_with_hint("Player", "Search", search, sizeof(search), ImGuiInputTextFlags_None);
|
||||
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) }))
|
||||
{
|
||||
@ -53,7 +53,7 @@ namespace big
|
||||
}
|
||||
else
|
||||
{
|
||||
ImGui::Text("No stored players");
|
||||
ImGui::Text("NO_STORED_PLAYERS"_T.data());
|
||||
}
|
||||
|
||||
ImGui::ListBoxFooter();
|
||||
@ -64,16 +64,16 @@ namespace big
|
||||
ImGui::SameLine();
|
||||
if (ImGui::BeginChild("###selected_player", { 500, static_cast<float>(*g_pointers->m_resolution_y - 388 - 38 * 4) }, false, ImGuiWindowFlags_NoBackground))
|
||||
{
|
||||
if (ImGui::InputText("Name", name_buf, sizeof(name_buf)))
|
||||
if (ImGui::InputText("NAME"_T.data(), name_buf, sizeof(name_buf)))
|
||||
{
|
||||
current_player.name = name_buf;
|
||||
}
|
||||
|
||||
ImGui::InputScalar("Rockstar ID", ImGuiDataType_S64, ¤t_player.rockstar_id);
|
||||
ImGui::Checkbox("Is Modder", ¤t_player.is_modder);
|
||||
ImGui::Checkbox("Block Join", ¤t_player.block_join);
|
||||
ImGui::InputScalar("RID"_T.data(), ImGuiDataType_S64, ¤t_player.rockstar_id);
|
||||
ImGui::Checkbox("IS_MODDER"_T.data(), ¤t_player.is_modder);
|
||||
ImGui::Checkbox("BLOCK_JOIN"_T.data(), ¤t_player.block_join);
|
||||
|
||||
if (ImGui::BeginCombo("Block Join Alert", block_join_reasons[current_player.block_join_reason]))
|
||||
if (ImGui::BeginCombo("BLOCK_JOIN_ALERT"_T.data(), block_join_reasons[current_player.block_join_reason]))
|
||||
{
|
||||
for (const auto& reason : block_join_reasons)
|
||||
{
|
||||
@ -92,10 +92,10 @@ namespace big
|
||||
}
|
||||
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Only works as host");
|
||||
ImGui::SetTooltip("ONLY_AS_HOST"_T.data());
|
||||
|
||||
|
||||
if (ImGui::BeginCombo("Chat Command Permissions", 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)
|
||||
{
|
||||
@ -115,7 +115,7 @@ namespace big
|
||||
|
||||
if (!current_player.infractions.empty())
|
||||
{
|
||||
ImGui::Text("Infractions:");
|
||||
ImGui::Text("INFRACTIONS"_T.data());
|
||||
|
||||
for (auto& infraction : current_player.infractions)
|
||||
{
|
||||
@ -123,32 +123,32 @@ namespace big
|
||||
}
|
||||
}
|
||||
|
||||
components::button("Kick", []
|
||||
components::button("KICK"_T, []
|
||||
{
|
||||
session::kick_by_rockstar_id(current_player.rockstar_id);
|
||||
});
|
||||
|
||||
components::button("Join Session", []
|
||||
components::button("JOIN_SESSION"_T, []
|
||||
{
|
||||
session::join_by_rockstar_id(current_player.rockstar_id);
|
||||
});
|
||||
|
||||
static char message[256];
|
||||
components::input_text("Input Message", message, sizeof(message));
|
||||
if (components::button("Send Message"))
|
||||
components::input_text("INPUT_MSG"_T, message, sizeof(message));
|
||||
if (components::button("SEND_MSG"_T))
|
||||
{
|
||||
g_thread_pool->push([selected]
|
||||
{
|
||||
if (g_api_service->send_socialclub_message(selected->rockstar_id, message))
|
||||
{
|
||||
g_notification_service->push("SCAPI", "Message successfully sent");
|
||||
g_notification_service->push("SCAPI"_T.data(), "MSG_SENT_SUCCESS"_T.data());
|
||||
return;
|
||||
}
|
||||
g_notification_service->push_error("SCAPI", "Message not sent. Are you connected to the internet?");
|
||||
g_notification_service->push_error("SCAPI"_T.data(), "MSG_SENT_FAIL"_T.data());
|
||||
});
|
||||
};
|
||||
|
||||
if (ImGui::Button("Save"))
|
||||
if (ImGui::Button("SAVE"_T.data()))
|
||||
{
|
||||
if (current_player.rockstar_id != selected->rockstar_id)
|
||||
g_player_database_service->update_rockstar_id(selected->rockstar_id, current_player.rockstar_id);
|
||||
@ -159,7 +159,7 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
if (ImGui::Button("Remove"))
|
||||
if (ImGui::Button("REMOVE"_T.data()))
|
||||
{
|
||||
g_player_database_service->remove_rockstar_id(selected->rockstar_id);
|
||||
}
|
||||
@ -167,7 +167,7 @@ namespace big
|
||||
ImGui::EndChild();
|
||||
}
|
||||
|
||||
if (ImGui::Button("Remove All"))
|
||||
if (ImGui::Button("REMOVE_ALL"_T.data()))
|
||||
{
|
||||
g_player_database_service->set_selected(nullptr);
|
||||
g_player_database_service->get_players().clear();
|
||||
@ -175,15 +175,15 @@ namespace big
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
components::sub_title("New Entry");
|
||||
components::sub_title("NEW_ENTRY"_T);
|
||||
|
||||
static char new_name[64];
|
||||
static int64_t new_rockstar_id;
|
||||
|
||||
components::input_text("Name", new_name, sizeof(new_name));
|
||||
ImGui::InputScalar("Rockstar ID", ImGuiDataType_S64, &new_rockstar_id);
|
||||
components::input_text("NAME"_T, new_name, sizeof(new_name));
|
||||
ImGui::InputScalar("RID"_T.data(), ImGuiDataType_S64, &new_rockstar_id);
|
||||
|
||||
if (ImGui::Button("Add"))
|
||||
if (ImGui::Button("ADD"_T.data()))
|
||||
{
|
||||
g_player_database_service->get_players()[new_rockstar_id] = persistent_player(new_name, new_rockstar_id);
|
||||
g_player_database_service->save();
|
||||
|
@ -19,46 +19,46 @@ namespace big
|
||||
void view::session()
|
||||
{
|
||||
static uint64_t rid = 0;
|
||||
ImGui::InputScalar("Input RID", ImGuiDataType_U64, &rid);
|
||||
components::button("Join by RID", []
|
||||
ImGui::InputScalar("INPUT_RID"_T.data(), ImGuiDataType_U64, &rid);
|
||||
components::button("JOIN_BY_RID"_T, []
|
||||
{
|
||||
session::join_by_rockstar_id(rid);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Kick by RID", []
|
||||
components::button("KICK_BY_RID"_T, []
|
||||
{
|
||||
session::kick_by_rockstar_id(rid);
|
||||
});
|
||||
|
||||
static char username[20];
|
||||
components::input_text("Input Username", username, sizeof(username));
|
||||
if (components::button("Join by Username"))
|
||||
components::input_text("INPUT_USERNAME"_T, username, sizeof(username));
|
||||
if (components::button("JOIN_BY_USERNAME"_T))
|
||||
{
|
||||
session::join_by_username(username);
|
||||
};
|
||||
ImGui::SameLine();
|
||||
if (components::button("Kick by Username"))
|
||||
if (components::button("KICK_BY_USERNAME"_T))
|
||||
{
|
||||
session::kick_by_username(username);
|
||||
};
|
||||
|
||||
static char base64[500]{};
|
||||
components::input_text("Session Info", base64, sizeof(base64));
|
||||
components::button("Join Session Info", []
|
||||
components::input_text("SESSION_INFO"_T, base64, sizeof(base64));
|
||||
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 Current Session Info", []
|
||||
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, 0x7D, nullptr);
|
||||
ImGui::SetClipboardText(buf);
|
||||
});
|
||||
|
||||
components::sub_title("Session Switcher");
|
||||
components::sub_title("SESSION_SWITCHER"_T);
|
||||
if (ImGui::ListBoxHeader("###session_switch"))
|
||||
{
|
||||
for (const auto& session_type : sessions)
|
||||
@ -71,7 +71,7 @@ namespace big
|
||||
ImGui::EndListBox();
|
||||
}
|
||||
|
||||
components::sub_title("Region Switcher");
|
||||
components::sub_title("REGION_SWITCHER"_T);
|
||||
if (ImGui::ListBoxHeader("###region_switch"))
|
||||
{
|
||||
for (const auto& region_type : regions)
|
||||
@ -84,30 +84,29 @@ namespace big
|
||||
ImGui::EndListBox();
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Join in SCTV slots", &g.session.join_in_sctv_slots);
|
||||
ImGui::Checkbox("JOIN_IN_SCTV"_T.data(), &g.session.join_in_sctv_slots);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Allows you to join full and solo sessions but can be detected by other modders");
|
||||
ImGui::SetTooltip("JOIN_IN_SCTV_DESC"_T.data());
|
||||
|
||||
components::sub_title("Player Magnet");
|
||||
ImGui::Checkbox("Enabled", &g.session.player_magnet_enabled);
|
||||
components::sub_title("PLAYER_MAGNET"_T);
|
||||
ImGui::Checkbox("ENABLED"_T.data(), &g.session.player_magnet_enabled);
|
||||
if (g.session.player_magnet_enabled)
|
||||
{
|
||||
ImGui::InputInt("Player Count", &g.session.player_magnet_count);
|
||||
ImGui::InputInt("PLAYER_COUNT"_T.data(), &g.session.player_magnet_count);
|
||||
}
|
||||
|
||||
components::sub_title("Chat");
|
||||
ImGui::Checkbox("Auto-kick Chat Spammers", &g.session.kick_chat_spammers);
|
||||
ImGui::Checkbox("Force Clean", &g.session.chat_force_clean);
|
||||
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");
|
||||
ImGui::Checkbox("Log Chat Messages", &g.session.log_chat_messages);
|
||||
ImGui::Checkbox("Log Text Messages", &g.session.log_text_messages);
|
||||
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];
|
||||
components::input_text("##message", msg, sizeof(msg));
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Is Team", &g.session.is_team);
|
||||
ImGui::Checkbox("IS_TEAM"_T.data(), &g.session.is_team);
|
||||
ImGui::SameLine();
|
||||
components::button("Send", []
|
||||
components::button("SEND"_T, []
|
||||
{
|
||||
if (const auto net_game_player = gta_util::get_network_player_mgr()->m_local_net_player; net_game_player)
|
||||
{
|
||||
@ -116,10 +115,10 @@ namespace big
|
||||
}
|
||||
});
|
||||
|
||||
ImGui::Checkbox("Chat Commands", &g.session.chat_commands);
|
||||
ImGui::Checkbox("CHAT_COMMANDS"_T.data(), &g.session.chat_commands);
|
||||
if (g.session.chat_commands)
|
||||
{
|
||||
if (ImGui::BeginCombo("Default Command Permissions", COMMAND_ACCESS_LEVELS[g.session.chat_command_default_access_level]))
|
||||
if (ImGui::BeginCombo("DEFAULT_CMD_PERMISSIONS"_T.data(), COMMAND_ACCESS_LEVELS[g.session.chat_command_default_access_level]))
|
||||
{
|
||||
for (const auto& [type, name] : COMMAND_ACCESS_LEVELS)
|
||||
{
|
||||
@ -138,21 +137,21 @@ namespace big
|
||||
}
|
||||
}
|
||||
|
||||
components::sub_title("Decloak");
|
||||
components::script_patch_checkbox("Reveal OTR Players", &g.session.decloak_players);
|
||||
components::sub_title("DECLOAK"_T);
|
||||
components::script_patch_checkbox("REVEAL_OTR_PLAYERS"_T, &g.session.decloak_players);
|
||||
|
||||
components::sub_title("Force Host");
|
||||
ImGui::Checkbox("Force Session Host", &g.session.force_session_host);
|
||||
components::sub_title("FORCE_HOST"_T);
|
||||
ImGui::Checkbox("FORCE_SESSION_HOST"_T.data(), &g.session.force_session_host);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Join another session to apply changes. The original host of the session must leave or be kicked. This feature is easily detectable by other mod menus, use with caution");
|
||||
ImGui::SetTooltip("FORCE_SESSION_HOST_DESC"_T.data());
|
||||
ImGui::SameLine();
|
||||
if (g.session.force_session_host)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Kick Host During Join", &g.session.kick_host_when_forcing_host);
|
||||
ImGui::Checkbox("KICK_HOST_ON_JOIN"_T.data(), &g.session.kick_host_when_forcing_host);
|
||||
}
|
||||
|
||||
if (ImGui::Checkbox("Force Script Host", &g.session.force_script_host))
|
||||
if (ImGui::Checkbox("FORCE_SCRIPT_HOST"_T.data(), &g.session.force_script_host))
|
||||
{
|
||||
if (g.session.force_script_host)
|
||||
g_fiber_pool->queue_job([]
|
||||
@ -167,16 +166,16 @@ namespace big
|
||||
});
|
||||
}
|
||||
|
||||
components::sub_title("Remote Name Spoofing");
|
||||
ImGui::Checkbox("Spoof Other Players' Names", &g.session.name_spoof_enabled);
|
||||
components::sub_title("REMOTE_NAME_SPOOFING"_T);
|
||||
ImGui::Checkbox("SPOOF_PLAYER_NAMES"_T.data(), &g.session.name_spoof_enabled);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Requires session host. Spoofed names will not visible locally nor to the player that had their name spoofed. Requires players to join after becoming host");
|
||||
ImGui::SetTooltip("SPOOF_PLAYER_NAMES_DESC"_T.data());
|
||||
|
||||
if (g.session.name_spoof_enabled)
|
||||
{
|
||||
ImGui::Checkbox("Advertise YimMenu", &g.session.advertise_menu);
|
||||
ImGui::Checkbox("ADVERTISE_YIMMENU"_T.data(), &g.session.advertise_menu);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Advertise YimMenu by spoofing player names to differently colored variants of 'YimMenu'. You will not be able to customize the name with this option enabled");
|
||||
ImGui::SetTooltip("ADVERTISE_YIMMENU_DESC"_T.data());
|
||||
|
||||
if (!g.session.advertise_menu)
|
||||
{
|
||||
@ -184,7 +183,7 @@ namespace big
|
||||
static char name[name_size];
|
||||
strcpy_s(name, sizeof(name), g.session.spoofed_name.c_str());
|
||||
|
||||
ImGui::Text("Name: ");
|
||||
ImGui::Text("PLAYER_SPOOFED_NAME"_T.data());
|
||||
components::input_text("##username_input", name, sizeof(name));
|
||||
|
||||
if (name != g.session.spoofed_name)
|
||||
@ -192,40 +191,40 @@ namespace big
|
||||
}
|
||||
}
|
||||
|
||||
components::sub_title("All Players");
|
||||
ImGui::Checkbox("Off The Radar", &g.session.off_radar_all);
|
||||
components::sub_title("ALL_PLAYERS"_T);
|
||||
ImGui::Checkbox("OFF_THE_RADAR"_T.data(), &g.session.off_radar_all);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Never Wanted", &g.session.never_wanted_all);
|
||||
ImGui::Checkbox("NEVER_WANTED"_T.data(), &g.session.never_wanted_all);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Semi Godmode", &g.session.semi_godmode_all);
|
||||
ImGui::Checkbox("SEMI_GODMODE"_T.data(), &g.session.semi_godmode_all);
|
||||
|
||||
ImGui::Checkbox("Explosion Karma", &g.session.explosion_karma);
|
||||
ImGui::Checkbox("EXPLOSION_KARMA"_T.data(), &g.session.explosion_karma);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Damage Karma", &g.session.damage_karma);
|
||||
ImGui::Checkbox("DAMAGE_KARMA"_T.data(), &g.session.damage_karma);
|
||||
|
||||
static int global_wanted_level = 0;
|
||||
|
||||
if (ImGui::SliderInt("Wanted Level", &global_wanted_level, 0, 5))
|
||||
if (ImGui::SliderInt("WANTED_LVL"_T.data(), &global_wanted_level, 0, 5))
|
||||
{
|
||||
*scr_globals::globalplayer_bd.at(self::id, scr_globals::size::globalplayer_bd).at(213).as<int*>() = global_wanted_level;
|
||||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Checkbox("Force", &g.session.wanted_level_all))
|
||||
if (ImGui::Checkbox("FORCE"_T.data(), &g.session.wanted_level_all))
|
||||
{
|
||||
*scr_globals::globalplayer_bd.at(self::id, scr_globals::size::globalplayer_bd).at(212).as<Player*>() = __rdtsc() + 32;
|
||||
*scr_globals::globalplayer_bd.at(self::id, scr_globals::size::globalplayer_bd).at(213).as<int*>() = global_wanted_level;
|
||||
}
|
||||
|
||||
components::command_button<"killall">({ }, "Kill Everyone");
|
||||
components::command_button<"killall">({ }, "KILL_ALL"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"explodeall">({ }, "Explode Everyone");
|
||||
components::command_button<"explodeall">({ }, "EXPLODE_ALL"_T);
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::command_button<"beastall">({ });
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Including you");
|
||||
ImGui::SetTooltip("INCLUDING_YOU"_T.data());
|
||||
|
||||
components::command_button<"giveweapsall">({ });
|
||||
ImGui::SameLine();
|
||||
@ -235,9 +234,10 @@ namespace big
|
||||
ImGui::SameLine();
|
||||
components::command_button<"vehkickall">({ });
|
||||
|
||||
components::command_button<"ragdollall">({ }, "Ragdoll Players");
|
||||
|
||||
components::command_button<"ragdollall">({ }, "RAGDOLL_PLAYERS"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"intkickall">({ }, "Kick Everyone From Interiors");
|
||||
components::command_button<"intkickall">({ }, "KICK_ALL_FROM_INTERIORS"_T);
|
||||
|
||||
components::command_button<"missionall">({ });
|
||||
ImGui::SameLine();
|
||||
@ -253,7 +253,7 @@ namespace big
|
||||
ImGui::SameLine();
|
||||
components::command_button<"fakebanall">({ }, "Send Fake Ban Messages");
|
||||
|
||||
components::small_text("Teleports");
|
||||
components::small_text("TELEPORTS"_T);
|
||||
|
||||
if (ImGui::BeginCombo("##apartment", apartment_names[g.session.send_to_apartment_idx]))
|
||||
{
|
||||
@ -275,7 +275,7 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::command_button<"apartmenttpall">({ (uint64_t)g.session.send_to_apartment_idx }, "TP All To Apartment");
|
||||
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]))
|
||||
{
|
||||
@ -297,37 +297,37 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::command_button<"warehousetpall">({ (uint64_t)g.session.send_to_warehouse_idx }, "TP All To Warehouse");
|
||||
components::command_button<"warehousetpall">({ (uint64_t)g.session.send_to_warehouse_idx }, "TP_ALL_TO_WAREHOUSE"_T);
|
||||
|
||||
components::button("TP All To Darts", [] { 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", [] { 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", [] { 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", [] { 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");
|
||||
components::command_button<"interiortpall">({ 81 }, "TP_ALL_TO_MOC"_T);
|
||||
|
||||
ImGui::SameLine();
|
||||
components::command_button<"interiortpall">({ 123 }, "TP All To Casino");
|
||||
components::command_button<"interiortpall">({ 123 }, "TP_ALL_TO_CASINO"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"interiortpall">({ 124 }, "TP All To Penthouse");
|
||||
components::command_button<"interiortpall">({ 124 }, "TP_ALL_TO_PENTHOUSE"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"interiortpall">({ 128 }, "TP All To Arcade");
|
||||
components::command_button<"interiortpall">({ 128 }, "TP_ALL_TO_ARCADE"_T);
|
||||
|
||||
components::command_button<"interiortpall">({ 146 }, "TP All To Music Locker");
|
||||
components::command_button<"interiortpall">({ 146 }, "TP_ALL_TO_MUSIC_LOCKER"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"interiortpall">({ 148 }, "TP All To Record A Studios");
|
||||
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");
|
||||
components::command_button<"interiortpall">({ 149 }, "TP_ALL_TO_CUSTOM_AUTO_SHOP"_T);
|
||||
|
||||
components::command_button<"interiortpall">({ 155 }, "TP All To Agency");
|
||||
components::command_button<"interiortpall">({ 155 }, "TP_ALL_TO_AGENCY"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"interiortpall">({ 160 }, "TP All To Freakshop");
|
||||
components::command_button<"interiortpall">({ 160 }, "TP_ALL_TO_FREAKSHOP"_T);
|
||||
ImGui::SameLine();
|
||||
components::command_button<"interiortpall">({ 161 }, "TP All To Multi Floor Garage");
|
||||
components::command_button<"interiortpall">({ 161 }, "TP_ALL_TO_MULTI_FLOOR_GARAGE"_T);
|
||||
|
||||
components::command_button<"tutorialall">();
|
||||
ImGui::SameLine();
|
||||
@ -347,34 +347,34 @@ namespace big
|
||||
ImGui::SameLine();
|
||||
components::command_button<"camhedzall">();
|
||||
|
||||
ImGui::Checkbox("Disable Pedestrians", &g.session.disable_peds);
|
||||
ImGui::Checkbox("DISABLE_PEDS"_T.data(), &g.session.disable_peds);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Disable Traffic", &g.session.disable_traffic);
|
||||
ImGui::Checkbox("DISABLE_TRAFFIC"_T.data(), &g.session.disable_traffic);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Force Thunder", &g.session.force_thunder);
|
||||
ImGui::Checkbox("FORCE_THUNDER"_T.data(), &g.session.force_thunder);
|
||||
|
||||
components::small_text("Warp Time (requires session host)");
|
||||
components::small_text("WARP_TIME"_T.data());
|
||||
|
||||
components::button("+1 Minute", [] { toxic::warp_time_forward_all(60 * 1000); });
|
||||
components::button("PLUS_1_MINUTE"_T, [] { toxic::warp_time_forward_all(60 * 1000); });
|
||||
ImGui::SameLine();
|
||||
components::button("+5 Minutes", [] { 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("+48 Minutes", [] { 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("+96 Minutes", [] { 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("+200 Minutes", [] { 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", [] { toxic::set_time_all(INT_MAX - 3000); });
|
||||
components::button("STOP_TIME"_T, [] { toxic::set_time_all(INT_MAX - 3000); });
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("This cannot be reversed. Use with caution");
|
||||
ImGui::SetTooltip("STOP_TIME_DESC"_T.data());
|
||||
|
||||
components::sub_title("Script Host Features");
|
||||
ImGui::Checkbox("Disable CEO Money", &g.session.block_ceo_money);
|
||||
components::sub_title("SCRIPT_HOST_FEATURES"_T);
|
||||
ImGui::Checkbox("DISABLE_CEO_MONEY"_T.data(), &g.session.block_ceo_money);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Blocks CEO money drops across the entire session. This can also break other stuff, use with caution");
|
||||
ImGui::SetTooltip("DISABLE_CEO_MONEY_DESC"_T.data());
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Randomize CEO Colors", &g.session.randomize_ceo_colors);
|
||||
ImGui::Checkbox("RANDOMIZE_CEO_COLORS"_T.data(), &g.session.randomize_ceo_colors);
|
||||
ImGui::Checkbox("Block Jobs", &g.session.block_jobs);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Prevents remote players from starting jobs while in your session");
|
||||
|
@ -49,7 +49,7 @@ namespace big
|
||||
}
|
||||
else
|
||||
{
|
||||
ImGui::Text("No sessions");
|
||||
ImGui::Text("NO_SESSIONS"_T.data());
|
||||
}
|
||||
|
||||
ImGui::ListBoxFooter();
|
||||
@ -62,25 +62,25 @@ namespace big
|
||||
{
|
||||
auto& session = g_matchmaking_service->get_found_sessions()[selected_session_idx];
|
||||
|
||||
ImGui::Text("Num Players: %d", session.attributes.player_count);
|
||||
ImGui::Text("Discriminator: 0x%X", session.attributes.discriminator);
|
||||
ImGui::Text("Region: %s", regions[session.attributes.region].name);
|
||||
ImGui::Text("Language: %s", languages[session.attributes.language].name);
|
||||
ImGui::Text("SESSION_BROWSER_NUM_PLAYERS"_T.data(), session.attributes.player_count);
|
||||
ImGui::Text("SESSION_BROWSER_DISCRIMINATOR"_T.data(), session.attributes.discriminator);
|
||||
ImGui::Text("SESSION_BROWSER_REGION"_T.data(), regions[session.attributes.region].name);
|
||||
ImGui::Text("SESSION_BROWSER_LANGUAGE"_T.data(), languages[session.attributes.language].name);
|
||||
|
||||
auto& data = session.info.m_net_player_data;
|
||||
ImGui::Text("Host Rockstar ID: %d", data.m_gamer_handle.m_rockstar_id);
|
||||
ImGui::Text("SESSION_BROWSER_HOST_RID"_T.data(), data.m_gamer_handle.m_rockstar_id);
|
||||
|
||||
components::button("Copy Session Info", []
|
||||
components::button("COPY_SESSION_INFO"_T, []
|
||||
{
|
||||
ImGui::SetClipboardText(session_info);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Join", [session]
|
||||
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", "Player switch in progress, wait a bit.");
|
||||
g_notification_service->push_error("JOIN_SESSION"_T.data(), "PLAYER_SWITCH_IN_PROGRESS"_T.data());
|
||||
return;
|
||||
}
|
||||
|
||||
@ -96,12 +96,12 @@ namespace big
|
||||
ImGui::EndChild();
|
||||
}
|
||||
|
||||
if (ImGui::TreeNode("Filters"))
|
||||
if (ImGui::TreeNode("FILTERS"_T.data()))
|
||||
{
|
||||
ImGui::Checkbox("Region", &g.session_browser.region_filter_enabled);
|
||||
ImGui::Checkbox("REGION"_T.data(), &g.session_browser.region_filter_enabled);
|
||||
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("It is highly recommended to keep this filter enabled");
|
||||
ImGui::SetTooltip("REGION_FILTER_DESC"_T.data());
|
||||
|
||||
if (g.session_browser.region_filter_enabled)
|
||||
{
|
||||
@ -121,10 +121,10 @@ namespace big
|
||||
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Language", &g.session_browser.language_filter_enabled);
|
||||
ImGui::Checkbox("LANGUAGE"_T.data(), &g.session_browser.language_filter_enabled);
|
||||
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Setting a correct region filter for the language will help tremendously");
|
||||
ImGui::SetTooltip("LANGUAGE_FILTER_DESC"_T.data());
|
||||
|
||||
if (g.session_browser.language_filter_enabled)
|
||||
{
|
||||
@ -143,15 +143,15 @@ namespace big
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Players", &g.session_browser.player_count_filter_enabled);
|
||||
ImGui::Checkbox("PLAYERS"_T.data(), &g.session_browser.player_count_filter_enabled);
|
||||
|
||||
if (g.session_browser.player_count_filter_enabled)
|
||||
{
|
||||
ImGui::InputInt("Minimum", &g.session_browser.player_count_filter_minimum);
|
||||
ImGui::InputInt("Maximum", &g.session_browser.player_count_filter_maximum);
|
||||
ImGui::InputInt("MIN"_T.data(), &g.session_browser.player_count_filter_minimum);
|
||||
ImGui::InputInt("MAX"_T.data(), &g.session_browser.player_count_filter_maximum);
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Pool Type", &g.session_browser.pool_filter_enabled);
|
||||
ImGui::Checkbox("POOL_TYPE"_T.data(), &g.session_browser.pool_filter_enabled);
|
||||
if (g.session_browser.pool_filter_enabled)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
@ -161,25 +161,25 @@ namespace big
|
||||
ImGui::TreePop();
|
||||
}
|
||||
|
||||
if (ImGui::TreeNode("Sorting"))
|
||||
if (ImGui::TreeNode("SORTING"_T.data()))
|
||||
{
|
||||
ImGui::Combo("Sort By", &g.session_browser.sort_method, "Off\0Player Count");
|
||||
ImGui::Combo("SORT_BY"_T.data(), &g.session_browser.sort_method, "Off\0Player Count");
|
||||
if (g.session_browser.sort_method != 0)
|
||||
ImGui::Combo("Direction", &g.session_browser.sort_direction, "Ascending\0Descending");
|
||||
ImGui::Combo("DIRECTION"_T.data(), &g.session_browser.sort_direction, "Ascending\0Descending");
|
||||
ImGui::TreePop();
|
||||
}
|
||||
|
||||
if (ImGui::Checkbox("Replace Game Matchmaking", &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("This will replace the default game matchmaking with a custom one that will use the filters and sorting set here");
|
||||
ImGui::SetTooltip("REPLACE_GAME_MATCHMAKING_DESC"_T.data());
|
||||
|
||||
components::button("Refresh", []
|
||||
components::button("REFRESH"_T, []
|
||||
{
|
||||
selected_session_idx = -1;
|
||||
|
||||
if (!g_matchmaking_service->matchmake())
|
||||
g_notification_service->push_error("Matchmaking", "Matchmaking failed");
|
||||
g_notification_service->push_error("MATCHMAKING"_T.data(), "MATCHMAKING_FAIL"_T.data());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -9,22 +9,22 @@ namespace big
|
||||
{
|
||||
void view::spoofing()
|
||||
{
|
||||
components::small_text("To spoof any of the below credentials you need to reconnect with the lobby.\nAll spoofed details will be only visible by other players, your game will still show your actual name, ip, rid...");
|
||||
components::small_text("SPOOFING_DESCRIPTION"_T);
|
||||
|
||||
components::sub_title("Username");
|
||||
components::sub_title("USERNAME"_T);
|
||||
|
||||
ImGui::Checkbox("Spoof Username", &g.spoofing.spoof_username);
|
||||
ImGui::Checkbox("SPOOFING_USERNAME"_T.data(), &g.spoofing.spoof_username);
|
||||
if (g.spoofing.spoof_username)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Spoof Username Locally", &g.spoofing.spoof_local_username);
|
||||
ImGui::Checkbox("SPOOFING_USERNAME_LOCAL"_T.data(), &g.spoofing.spoof_local_username);
|
||||
}
|
||||
|
||||
constexpr size_t name_size = RTL_FIELD_SIZE(rage::rlGamerInfo, m_name);
|
||||
static char name[name_size];
|
||||
strcpy_s(name, sizeof(name), g.spoofing.username.c_str());
|
||||
|
||||
ImGui::Text("Username:");
|
||||
ImGui::Text("USERNAME_COLON"_T.data());
|
||||
components::input_text("##username_input", name, sizeof(name));
|
||||
|
||||
if (name != g.spoofing.username)
|
||||
@ -32,56 +32,56 @@ namespace big
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
components::sub_title("IP Address");
|
||||
components::sub_title("IP_ADDRESS"_T);
|
||||
|
||||
ImGui::Checkbox("Spoof IP", &g.spoofing.spoof_ip);
|
||||
ImGui::Checkbox("SPOOFING_IP"_T.data(), &g.spoofing.spoof_ip);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Disable this feature if you're having trouble joining sessions.");
|
||||
ImGui::SetTooltip("SPOOFING_IP_DESCRIPTION"_T.data());
|
||||
|
||||
ImGui::Text("IP Address:");
|
||||
ImGui::Text("IP_ADDRESS_COLON"_T.data());
|
||||
ImGui::DragInt4("##ip_fields", g.spoofing.ip_address.data(), 0, 255);
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
components::sub_title("Rockstar ID");
|
||||
components::sub_title("ROCKSTAR_ID"_T);
|
||||
|
||||
ImGui::Checkbox("Spoof Rockstar ID", &g.spoofing.spoof_rockstar_id);
|
||||
ImGui::Checkbox("SPOOFING_ROCKSTAR_ID"_T.data(), &g.spoofing.spoof_rockstar_id);
|
||||
|
||||
ImGui::Text("Rockstar ID:");
|
||||
ImGui::Text("ROCKSTAR_ID_COLON"_T.data());
|
||||
ImGui::InputScalar("##rockstar_id_input", ImGuiDataType_U64, &g.spoofing.rockstar_id);
|
||||
|
||||
components::sub_title("Hide Features");
|
||||
ImGui::Checkbox("Hide God Mode", &g.spoofing.spoof_hide_god);
|
||||
ImGui::Checkbox("Hide Spectate", &g.spoofing.spoof_hide_spectate);
|
||||
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);
|
||||
|
||||
components::sub_title("Crew");
|
||||
components::sub_title("CREW"_T);
|
||||
|
||||
ImGui::Checkbox("Spoof Crew", &g.spoofing.spoof_crew_data);
|
||||
ImGui::Checkbox("SPOOFING_CREW"_T.data(), &g.spoofing.spoof_crew_data);
|
||||
|
||||
constexpr size_t crew_tag_size = RTL_FIELD_SIZE(ClanData, m_clan_tag);
|
||||
static char crew_tag[crew_tag_size];
|
||||
strcpy_s(crew_tag, sizeof(crew_tag), g.spoofing.crew_tag.c_str());
|
||||
|
||||
ImGui::Text("Crew Tag:");
|
||||
ImGui::Text("SPOOFING_CREW_TAG"_T.data());
|
||||
components::input_text("##crew_tag_input", crew_tag, sizeof(crew_tag));
|
||||
|
||||
if (crew_tag != g.spoofing.crew_tag)
|
||||
g.spoofing.crew_tag = std::string(crew_tag);
|
||||
|
||||
ImGui::Checkbox("Is Rockstar Crew", &g.spoofing.rockstar_crew);
|
||||
ImGui::Checkbox("SPOOFING_CREW_ROCKSTAR"_T.data(), &g.spoofing.rockstar_crew);
|
||||
|
||||
ImGui::Checkbox("Square Crew Tag", &g.spoofing.square_crew_tag);
|
||||
ImGui::Checkbox("SPOOFING_CREW_SQUARE_TAG"_T.data(), &g.spoofing.square_crew_tag);
|
||||
|
||||
components::sub_title("Extra - Only work when Spoofed RID");
|
||||
components::sub_title("SPOOFING_EXTRA"_T);
|
||||
|
||||
ImGui::Checkbox("Is Cheater", &g.spoofing.spoof_cheater);
|
||||
ImGui::Checkbox("Is Rockstar Dev", &g.spoofing.spoof_rockstar_dev);
|
||||
ImGui::Checkbox("Is Rockstar QA", &g.spoofing.spoof_rockstar_qa);
|
||||
ImGui::Checkbox("SPOOFING_IS_CHEATER"_T.data(), &g.spoofing.spoof_cheater);
|
||||
ImGui::Checkbox("SPOOFING_IS_DEV"_T.data(), &g.spoofing.spoof_rockstar_dev);
|
||||
ImGui::Checkbox("SPOOFING_IS_QA"_T.data(), &g.spoofing.spoof_rockstar_qa);
|
||||
|
||||
components::sub_title("Session Attributes");
|
||||
components::small_text("Only works when session host");
|
||||
components::sub_title("SPOOFING_SESSION_ATTRIBUTES"_T);
|
||||
components::small_text("SPOOFING_ONLY_WORKS_AS_HOST"_T);
|
||||
|
||||
ImGui::Checkbox("Region", &g.spoofing.spoof_session_region_type);
|
||||
ImGui::Checkbox("SPOOFING_ATTRIBUTE_REGION"_T.data(), &g.spoofing.spoof_session_region_type);
|
||||
if (g.spoofing.spoof_session_region_type)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
@ -97,7 +97,7 @@ namespace big
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
}
|
||||
ImGui::Checkbox("Language", &g.spoofing.spoof_session_language);
|
||||
ImGui::Checkbox("SPOOFING_ATTRIBUTE_LANGUAGE"_T.data(), &g.spoofing.spoof_session_language);
|
||||
if (g.spoofing.spoof_session_language)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
@ -115,7 +115,7 @@ namespace big
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Player Count", &g.spoofing.spoof_session_player_count);
|
||||
ImGui::Checkbox("SPOOFING_ATTRIBUTE_PLAYER_COUNT"_T.data(), &g.spoofing.spoof_session_player_count);
|
||||
if (g.spoofing.spoof_session_player_count)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
|
@ -11,18 +11,18 @@ namespace big
|
||||
{
|
||||
void view::player_info()
|
||||
{
|
||||
if (ImGui::TreeNode("Info"))
|
||||
if (ImGui::TreeNode("INFO"_T.data()))
|
||||
{
|
||||
|
||||
ImGui::Text("Player ID: %d", g_player_service->get_selected()->id());
|
||||
ImGui::Text("PLAYER_INFO_ID"_T.data(), g_player_service->get_selected()->id());
|
||||
|
||||
ImGui::Text("Session Host: %s", g_player_service->get_selected()->is_host() ? "Yes" : "No");
|
||||
ImGui::Text("PLAYER_INFO_SESSION_HOST"_T.data(), g_player_service->get_selected()->is_host() ? "YES"_T.data() : "NO"_T.data());
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
if (CPlayerInfo* player_info = g_player_service->get_selected()->get_player_info(); player_info != nullptr)
|
||||
{
|
||||
ImGui::Text("Wanted Level: %d", player_info->m_wanted_level);
|
||||
ImGui::Text("PLAYER_INFO_WANTED_LEVEL"_T.data(), player_info->m_wanted_level);
|
||||
}
|
||||
|
||||
uint32_t ped_damage_bits = 0;
|
||||
@ -42,17 +42,17 @@ namespace big
|
||||
|
||||
if (ped_damage_bits & (uint32_t)eEntityProofs::GOD)
|
||||
{
|
||||
mode_str = "God";
|
||||
mode_str = "PLAYER_INFO_GOD"_T;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ped_damage_bits & (uint32_t)eEntityProofs::BULLET)
|
||||
{
|
||||
mode_str += "Bullet, ";
|
||||
mode_str += "PLAYER_INFO_BULLET"_T;
|
||||
}
|
||||
if (ped_damage_bits & (uint32_t)eEntityProofs::EXPLOSION)
|
||||
{
|
||||
mode_str += "Explosion, ";
|
||||
mode_str += "PLAYER_INFO_EXPLOSION"_T;
|
||||
}
|
||||
if (ped_health > 328 || ped_maxhealth > 328 && !(uint32_t)eEntityProofs::EXPLOSION && !(uint32_t)eEntityProofs::BULLET)
|
||||
{
|
||||
@ -62,10 +62,10 @@ namespace big
|
||||
|
||||
if (mode_str.empty())
|
||||
{
|
||||
mode_str = "No";
|
||||
mode_str = "NO"_T;
|
||||
}
|
||||
|
||||
ImGui::Text("Player God Mode: %s", mode_str.c_str());
|
||||
ImGui::Text("PLAYER_INFO_PROOFS"_T.data(), mode_str.c_str());
|
||||
|
||||
mode_str = "";
|
||||
|
||||
@ -78,44 +78,46 @@ namespace big
|
||||
{
|
||||
if (veh_damage_bits & (uint32_t)eEntityProofs::GOD)
|
||||
{
|
||||
mode_str = "God";
|
||||
mode_str = "PLAYER_INFO_GOD"_T;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (veh_damage_bits & (uint32_t)eEntityProofs::COLLISION)
|
||||
{
|
||||
mode_str += "Collision, ";
|
||||
mode_str += "PLAYER_INFO_COLLISION"_T;
|
||||
}
|
||||
if (veh_damage_bits & (uint32_t)eEntityProofs::EXPLOSION)
|
||||
{
|
||||
mode_str += "Explosion, ";
|
||||
mode_str += "PLAYER_INFO_EXPLOSION"_T;
|
||||
}
|
||||
}
|
||||
|
||||
if (mode_str.empty())
|
||||
{
|
||||
mode_str = "No";
|
||||
mode_str = "NO"_T;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mode_str = "No vehicle detected";
|
||||
mode_str = "PLAYER_INFO_NO_VEHICLE"_T;
|
||||
}
|
||||
|
||||
ImGui::Text("Vehicle God Mode: %s", mode_str.c_str());
|
||||
ImGui::Text("PLAYER_INFO_VEHICLE_PROOFS"_T.data(), mode_str.c_str());
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
if (auto net_player_data = g_player_service->get_selected()->get_net_data(); net_player_data != nullptr)
|
||||
{
|
||||
ImGui::Text("Rockstar ID: %d", net_player_data->m_gamer_handle_2.m_rockstar_id);
|
||||
ImGui::Text("PLAYER_INFO_RID"_T.data(), net_player_data->m_gamer_handle_2.m_rockstar_id);
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
if (ImGui::Button("Copy##rid")) ImGui::SetClipboardText(std::to_string(net_player_data->m_gamer_handle_2.m_rockstar_id).data());
|
||||
ImGui::PushID("##rid");
|
||||
if (ImGui::Button("COPY"_T.data())) ImGui::SetClipboardText(std::to_string(net_player_data->m_gamer_handle_2.m_rockstar_id).data());
|
||||
ImGui::PopID();
|
||||
|
||||
ImGui::Text(
|
||||
"IP Address: %d.%d.%d.%d:%d",
|
||||
"PLAYER_INFO_IP"_T.data(),
|
||||
net_player_data->m_external_ip.m_field1,
|
||||
net_player_data->m_external_ip.m_field2,
|
||||
net_player_data->m_external_ip.m_field3,
|
||||
@ -125,11 +127,13 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
if (ImGui::Button("Copy##ip")) ImGui::SetClipboardText(std::format("{}.{}.{}.{}:{}", net_player_data->m_external_ip.m_field1,
|
||||
ImGui::PushID("##ip");
|
||||
if (ImGui::Button("COPY"_T.data())) ImGui::SetClipboardText(std::format("{}.{}.{}.{}:{}", net_player_data->m_external_ip.m_field1,
|
||||
net_player_data->m_external_ip.m_field2,
|
||||
net_player_data->m_external_ip.m_field3,
|
||||
net_player_data->m_external_ip.m_field4,
|
||||
net_player_data->m_external_port).data());
|
||||
ImGui::PopID();
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
@ -142,27 +146,28 @@ namespace big
|
||||
auto& boss_goon = scr_globals::gpbd_fm_3.as<GPBD_FM_3*>()->Entries[id].BossGoon;
|
||||
|
||||
if (boss_goon.Language >= 0 && boss_goon.Language < 13)
|
||||
ImGui::Text("Language: %s", languages[boss_goon.Language].name);
|
||||
ImGui::Text("PLAYER_INFO_LANGUAGE"_T.data(), languages[boss_goon.Language].name);
|
||||
|
||||
ImGui::Text("PLAYER_INFO_CEO_NAME"_T.data(), boss_goon.GangName);
|
||||
ImGui::Text("PLAYER_INFO_MC_NAME"_T.data(), boss_goon.ClubhouseName);
|
||||
ImGui::Text("PLAYER_INFO_WALLET"_T.data(), stats.WalletBalance);
|
||||
ImGui::Text("PLAYER_INFO_BANK"_T.data(), stats.Money - stats.WalletBalance);
|
||||
ImGui::Text("PLAYER_INFO_TOTAL_MONEY"_T.data(), stats.Money);
|
||||
ImGui::Text("PLAYER_INFO_RANK"_T.data(), stats.Rank, stats.RP);
|
||||
ImGui::Text("Health: %d (MaxHealth: %d)", ped_health, ped_maxhealth); // TODO: translate
|
||||
ImGui::Text("PLAYER_INFO_KD"_T.data(), stats.KdRatio);
|
||||
ImGui::Text("PLAYER_INFO_KILLS"_T.data(), stats.KillsOnPlayers);
|
||||
ImGui::Text("PLAYER_INFO_DEATHS"_T.data(), stats.DeathsByPlayers);
|
||||
ImGui::Text("PLAYER_INFO_PROSTITUTES"_T.data(), stats.ProstitutesFrequented);
|
||||
ImGui::Text("PLAYER_INFO_LAP_DANCES"_T.data(), stats.LapDancesBought);
|
||||
ImGui::Text("PLAYER_INFO_MISSIONS_CREATED"_T.data(), stats.MissionsCreated);
|
||||
ImGui::Text("PLAYER_INFO_METLDOWN_COMPLETE"_T.data(), scr_globals::gpbd_fm_1.as<GPBD_FM*>()->Entries[id].MeltdownComplete ? "YES"_T.data() : "NO"_T.data()); // curious to see if anyone has actually played singleplayer
|
||||
|
||||
ImGui::Text("CEO Name: %s", boss_goon.GangName);
|
||||
ImGui::Text("MC Name: %s", boss_goon.ClubhouseName);
|
||||
ImGui::Text("Money In Wallet: %d", stats.WalletBalance);
|
||||
ImGui::Text("Money In Bank: %d", stats.Money - stats.WalletBalance);
|
||||
ImGui::Text("Total Money: %d", stats.Money);
|
||||
ImGui::Text("Rank: %d (RP %d)", stats.Rank, stats.RP);
|
||||
ImGui::Text("Health: %d (MaxHealth: %d)", ped_health, ped_maxhealth);
|
||||
ImGui::Text("K/D Ratio: %f", stats.KdRatio);
|
||||
ImGui::Text("Kills On Players: %d", stats.KillsOnPlayers);
|
||||
ImGui::Text("Deaths By Players: %d", stats.DeathsByPlayers);
|
||||
ImGui::Text("Prostitutes Frequented: %d", stats.ProstitutesFrequented);
|
||||
ImGui::Text("Lap Dances Bought: %d", stats.LapDancesBought);
|
||||
ImGui::Text("Missions Created: %d", stats.MissionsCreated);
|
||||
ImGui::Text("Meltdown Complete: %s", scr_globals::gpbd_fm_1.as<GPBD_FM*>()->Entries[id].MeltdownComplete ? "Yes" : "No"); // curious to see if anyone has actually played singleplayer
|
||||
|
||||
ImGui::Separator();
|
||||
}
|
||||
|
||||
if (ImGui::BeginCombo("Chat Command Permissions", COMMAND_ACCESS_LEVELS[g_player_service->get_selected()->command_access_level.value_or(g.session.chat_command_default_access_level)]))
|
||||
if (ImGui::BeginCombo("CHAT_COMMAND_PERMISSIONS"_T.data(), COMMAND_ACCESS_LEVELS[g_player_service->get_selected()->command_access_level.value_or(g.session.chat_command_default_access_level)]))
|
||||
{
|
||||
for (const auto& [type, name] : COMMAND_ACCESS_LEVELS)
|
||||
{
|
||||
@ -182,7 +187,7 @@ namespace big
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
|
||||
if (ImGui::Button("Add To Database"))
|
||||
if (ImGui::Button("PLAYER_INFO_ADD_TO_DB"_T.data()))
|
||||
{
|
||||
g_player_database_service->get_or_create_player(g_player_service->get_selected());
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ namespace big
|
||||
{
|
||||
void view::player_kick()
|
||||
{
|
||||
if (ImGui::TreeNode("Kick"))
|
||||
if (ImGui::TreeNode("KICK"_T.data()))
|
||||
{
|
||||
auto const is_session_host = [] { return gta_util::get_network()->m_game_session_ptr->is_host(); };
|
||||
|
||||
|
@ -5,7 +5,7 @@ namespace big
|
||||
{
|
||||
void view::player_misc()
|
||||
{
|
||||
if (ImGui::TreeNode("Misc"))
|
||||
if (ImGui::TreeNode("MISC"_T.data()))
|
||||
{
|
||||
components::player_command_button<"joinceo">(g_player_service->get_selected());
|
||||
components::player_command_button<"enterint">(g_player_service->get_selected());
|
||||
@ -20,9 +20,9 @@ namespace big
|
||||
ImGui::SameLine();
|
||||
components::player_command_button<"giveammo">(g_player_service->get_selected());
|
||||
|
||||
ImGui::Checkbox("Off The Radar", &g_player_service->get_selected()->off_radar);
|
||||
ImGui::Checkbox("Never Wanted", &g_player_service->get_selected()->never_wanted);
|
||||
ImGui::Checkbox("Semi Godmode", &g_player_service->get_selected()->semi_godmode);
|
||||
ImGui::Checkbox("OFF_THE_RADAR"_T.data(), &g_player_service->get_selected()->off_radar);
|
||||
ImGui::Checkbox("NEVER_WANTED"_T.data(), &g_player_service->get_selected()->never_wanted);
|
||||
ImGui::Checkbox("SEMI_GODMODE"_T.data(), &g_player_service->get_selected()->semi_godmode);
|
||||
|
||||
components::button("Gooch Test", []
|
||||
{
|
||||
|
@ -8,7 +8,7 @@ namespace big
|
||||
{
|
||||
void view::player_toxic()
|
||||
{
|
||||
if (ImGui::TreeNode("Toxic"))
|
||||
if (ImGui::TreeNode("TOXIC"_T.data()))
|
||||
{
|
||||
components::player_command_button<"kill">(g_player_service->get_selected(), {});
|
||||
ImGui::SameLine();
|
||||
@ -39,11 +39,11 @@ namespace big
|
||||
components::player_command_button<"fakeban">(g_player_service->get_selected(), {});
|
||||
|
||||
static int wanted_level;
|
||||
ImGui::SliderInt("Wanted Level", &wanted_level, 0, 5);
|
||||
ImGui::SliderInt("WANTED_LVL"_T.data(), &wanted_level, 0, 5);
|
||||
ImGui::SameLine();
|
||||
components::player_command_button<"wanted">(g_player_service->get_selected(), { (uint64_t)wanted_level }, "Set");
|
||||
|
||||
components::small_text("Teleports");
|
||||
components::small_text("TELEPORTS"_T);
|
||||
|
||||
if (ImGui::BeginCombo("##apartment", apartment_names[g.session.send_to_apartment_idx]))
|
||||
{
|
||||
@ -89,13 +89,13 @@ namespace big
|
||||
|
||||
components::player_command_button<"warehousetp">(g_player_service->get_selected(), { (uint64_t)g.session.send_to_warehouse_idx });
|
||||
|
||||
components::button("TP To Darts", [] { toxic::start_activity(g_player_service->get_selected(), eActivityType::Darts); });
|
||||
components::button("TP_TO_DARTS"_T, [] { toxic::start_activity(g_player_service->get_selected(), eActivityType::Darts); });
|
||||
ImGui::SameLine();
|
||||
components::button("TP To Flight School", [] { toxic::start_activity(g_player_service->get_selected(), eActivityType::PilotSchool); });
|
||||
components::button("TP_TO_FLIGHT_SCHOOL"_T, [] { toxic::start_activity(g_player_service->get_selected(), eActivityType::PilotSchool); });
|
||||
ImGui::SameLine();
|
||||
components::button("TP To Map Center", [] { toxic::start_activity(g_player_service->get_selected(), eActivityType::ArmWresling); });
|
||||
components::button("TP_TO_MAP_CENTER"_T, [] { toxic::start_activity(g_player_service->get_selected(), eActivityType::ArmWresling); });
|
||||
|
||||
components::button("TP To Skydive", [] { toxic::start_activity(g_player_service->get_selected(), eActivityType::Skydive); });
|
||||
components::button("TP_TO_SKYDIVE"_T, [] { toxic::start_activity(g_player_service->get_selected(), eActivityType::Skydive); });
|
||||
ImGui::SameLine();
|
||||
components::player_command_button<"cayotp">(g_player_service->get_selected(), { });
|
||||
ImGui::SameLine();
|
||||
@ -142,33 +142,33 @@ namespace big
|
||||
ImGui::SameLine();
|
||||
components::player_command_button<"camhedz">(g_player_service->get_selected(), { });
|
||||
|
||||
components::small_text("Warp Time (requires session host)");
|
||||
components::small_text("WARP_TIME"_T);
|
||||
|
||||
components::button("+1 Minute", [] { toxic::warp_time_forward(g_player_service->get_selected(), 60 * 1000); });
|
||||
components::button("PLUS_1_MINUTE"_T, [] { toxic::warp_time_forward(g_player_service->get_selected(), 60 * 1000); });
|
||||
ImGui::SameLine();
|
||||
components::button("+5 Minutes", [] { toxic::warp_time_forward(g_player_service->get_selected(), 5 * 60 * 1000); });
|
||||
components::button("PLUS_5_MINUTES"_T, [] { toxic::warp_time_forward(g_player_service->get_selected(), 5 * 60 * 1000); });
|
||||
ImGui::SameLine();
|
||||
components::button("+48 Minutes", [] { toxic::warp_time_forward(g_player_service->get_selected(), 48 * 60 * 1000); });
|
||||
components::button("PLUS_48_MINUTES"_T, [] { toxic::warp_time_forward(g_player_service->get_selected(), 48 * 60 * 1000); });
|
||||
ImGui::SameLine();
|
||||
components::button("+96 Minutes", [] { toxic::warp_time_forward(g_player_service->get_selected(), 96 * 60 * 1000); });
|
||||
components::button("PLUS_96_MINUTES"_T, [] { toxic::warp_time_forward(g_player_service->get_selected(), 96 * 60 * 1000); });
|
||||
ImGui::SameLine();
|
||||
components::button("+200 Minutes", [] { toxic::warp_time_forward(g_player_service->get_selected(), 200 * 60 * 1000); });
|
||||
components::button("PLUS_200_MINUTES"_T, [] { toxic::warp_time_forward(g_player_service->get_selected(), 200 * 60 * 1000); });
|
||||
ImGui::SameLine();
|
||||
components::button("Stop Time", [] { toxic::set_time(g_player_service->get_selected(), INT_MAX - 3000); });
|
||||
components::button("STOP_TIME"_T, [] { toxic::set_time(g_player_service->get_selected(), INT_MAX - 3000); });
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("This cannot be reversed. Use with caution");
|
||||
ImGui::SetTooltip("PLAYER_TOXIC_NO_WAY_BACK"_T.data());
|
||||
|
||||
ImGui::Checkbox("Kill Loop", &g_player_service->get_selected()->kill_loop);
|
||||
ImGui::Checkbox("KILL_LOOP"_T.data(), &g_player_service->get_selected()->kill_loop);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Explosion Loop", &g_player_service->get_selected()->explosion_loop);
|
||||
ImGui::Checkbox("EXPLOSION_LOOP"_T.data(), &g_player_service->get_selected()->explosion_loop);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Freeze Loop", &g_player_service->get_selected()->freeze_loop);
|
||||
ImGui::Checkbox("FREEZE_LOOP"_T.data(), &g_player_service->get_selected()->freeze_loop);
|
||||
|
||||
ImGui::Checkbox("Ragdoll Loop", &g_player_service->get_selected()->ragdoll_loop);
|
||||
ImGui::Checkbox("RAGDOLL_LOOP"_T.data(), &g_player_service->get_selected()->ragdoll_loop);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Rotate Cam Loop", &g_player_service->get_selected()->rotate_cam_loop);
|
||||
ImGui::Checkbox("ROT_CAM_LOOP"_T.data(), &g_player_service->get_selected()->rotate_cam_loop);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Also brings the player out of godmode if the event isn't blocked");
|
||||
ImGui::SetTooltip("PLAYER_TOXIC_BRING_PLAYER_OUT_GOD"_T.data());
|
||||
|
||||
ImGui::TreePop();
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ namespace big
|
||||
{
|
||||
void view::player_troll()
|
||||
{
|
||||
if (ImGui::TreeNode("Troll"))
|
||||
if (ImGui::TreeNode("TROLL"_T.data()))
|
||||
{
|
||||
components::player_command_button<"playertp">(g_player_service->get_selected());
|
||||
ImGui::SameLine();
|
||||
@ -18,11 +18,11 @@ namespace big
|
||||
|
||||
static int bounty_value = 0;
|
||||
|
||||
ImGui::SliderInt("Bounty", &bounty_value, 0, 10000);
|
||||
ImGui::SliderInt("BOUNTY"_T.data(), &bounty_value, 0, 10000);
|
||||
ImGui::SameLine();
|
||||
components::command_checkbox<"anonbounty">();
|
||||
ImGui::SameLine();
|
||||
components::button("Set", [] { troll::set_bounty_on_player(g_player_service->get_selected(), bounty_value, g.session.anonymous_bounty);});
|
||||
components::button("SET"_T, [] { troll::set_bounty_on_player(g_player_service->get_selected(), bounty_value, g.session.anonymous_bounty);});
|
||||
|
||||
ImGui::TreePop();
|
||||
}
|
||||
|
@ -2,12 +2,10 @@
|
||||
|
||||
namespace big
|
||||
{
|
||||
void view::view_player() {
|
||||
|
||||
std::string title = std::format("Player Options: {}", g_player_service->get_selected()->get_name());
|
||||
|
||||
ImGui::Text(title.c_str());
|
||||
ImGui::Checkbox("Spectate", &g.player.spectating);
|
||||
void view::view_player()
|
||||
{
|
||||
ImGui::Text("VIEW_PLAYER_PLAYER_OPTIONS"_T.data(), g_player_service->get_selected()->get_name());
|
||||
ImGui::Checkbox("SPECTATE"_T.data(), &g.player.spectating);
|
||||
|
||||
if (g_player_service->get_selected()->is_valid())
|
||||
{
|
||||
|
@ -8,39 +8,39 @@ namespace big
|
||||
void view::mobile() {
|
||||
ImGui::SetWindowSize({ 0.f, (float)*g_pointers->m_resolution_y }, ImGuiCond_Always);
|
||||
|
||||
components::sub_title("Merryweather");
|
||||
components::sub_title("MERRYWEATHER"_T);
|
||||
ImGui::Separator();
|
||||
|
||||
components::button("Request Ammo Drop", [] {
|
||||
components::button("MW_AMMO_DROP"_T, [] {
|
||||
mobile::merry_weather::request_ammo_drop();
|
||||
});
|
||||
|
||||
components::button("Helicopter Pickup", [] {
|
||||
components::button("MW_HELI_PICKUP"_T, [] {
|
||||
mobile::merry_weather::request_helicopter_pickup();
|
||||
});
|
||||
|
||||
components::button("Request Backup Helicopter", [] {
|
||||
components::button("MW_BACKUP_HELI"_T, [] {
|
||||
mobile::merry_weather::request_backup_helicopter();
|
||||
});
|
||||
|
||||
components::button("Request Airstrike", [] {
|
||||
components::button("MW_AIRSTRIKE"_T, [] {
|
||||
mobile::merry_weather::request_airstrike();
|
||||
});
|
||||
|
||||
components::sub_title("Mors Mutual");
|
||||
components::sub_title("MORS_MUTUAL"_T);
|
||||
ImGui::Separator();
|
||||
|
||||
components::button("Mors Mutual Fix All Vehicles", [] {
|
||||
components::button("MORS_FIX_ALL"_T, [] {
|
||||
int amount_fixed = mobile::mors_mutual::fix_all();
|
||||
g_notification_service->push("Mobile",
|
||||
std::format("{} vehicle{} been fixed.", amount_fixed, amount_fixed == 1 ? " has" : "s have")
|
||||
g_notification_service->push("MOBILE"_T.data(),
|
||||
std::vformat("VEHICLE_FIX_AMOUNT"_T, std::make_format_args(amount_fixed, amount_fixed == 1 ? "VEHICLE_FIX_HAS"_T.data() : "VEHICLE_FIX_HAVE"_T.data()))
|
||||
);
|
||||
});
|
||||
|
||||
components::sub_title("CEO Abilities");
|
||||
components::sub_title("CEO_ABILITIES"_T);
|
||||
ImGui::Separator();
|
||||
|
||||
components::button("Bullshark Testosterone", [] {
|
||||
components::button("CEO_BULLSHARK"_T, [] {
|
||||
mobile::ceo_abilities::request_bullshark_testosterone();
|
||||
});
|
||||
|
||||
|
@ -21,7 +21,7 @@ namespace big
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
components::sub_title("General");
|
||||
components::sub_title("GENERAL"_T);
|
||||
|
||||
ImGui::BeginGroup();
|
||||
|
||||
@ -39,7 +39,7 @@ namespace big
|
||||
components::command_checkbox<"noclip">();
|
||||
components::command_checkbox<"noragdoll">();
|
||||
components::command_checkbox<"fastrun">();
|
||||
ImGui::Checkbox("No Idle Kick", &g.tunables.no_idle_kick);
|
||||
ImGui::Checkbox("NO_IDLE_KICK"_T.data(), &g.tunables.no_idle_kick);
|
||||
components::command_checkbox<"walkunder">();
|
||||
if(!g.self.super_jump)
|
||||
components::command_checkbox<"beastjump">();
|
||||
@ -56,15 +56,15 @@ namespace big
|
||||
components::command_checkbox<"nocollision">();
|
||||
components::command_checkbox<"mobileradio">();
|
||||
|
||||
ImGui::Checkbox("Dance Mode", &g.self.dance_mode);
|
||||
ImGui::Checkbox("DANCE_MODE"_T.data(), &g.self.dance_mode);
|
||||
|
||||
ImGui::EndGroup();
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
components::sub_title("Proofs");
|
||||
components::sub_title("PROOFS"_T);
|
||||
|
||||
if (ImGui::Button("Check all"))
|
||||
if (ImGui::Button("CHECK_ALL"_T.data()))
|
||||
{
|
||||
g.self.proof_bullet = true;
|
||||
g.self.proof_fire = true;
|
||||
@ -78,7 +78,7 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
if (ImGui::Button("Uncheck all"))
|
||||
if (ImGui::Button("UNCHECK_ALL"_T.data()))
|
||||
{
|
||||
g.self.proof_bullet = false;
|
||||
g.self.proof_fire = false;
|
||||
@ -92,42 +92,42 @@ namespace big
|
||||
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Checkbox("Bullet", &g.self.proof_bullet);
|
||||
ImGui::Checkbox("Fire", &g.self.proof_fire);
|
||||
ImGui::Checkbox("BULLET"_T.data(), &g.self.proof_bullet);
|
||||
ImGui::Checkbox("FIRE"_T.data(), &g.self.proof_fire);
|
||||
|
||||
ImGui::EndGroup();
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Checkbox("Collision", &g.self.proof_collision);
|
||||
ImGui::Checkbox("Melee", &g.self.proof_melee);
|
||||
ImGui::Checkbox("COLLISION"_T.data(), &g.self.proof_collision);
|
||||
ImGui::Checkbox("MELEE"_T.data(), &g.self.proof_melee);
|
||||
|
||||
ImGui::EndGroup();
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Checkbox("Explosion", &g.self.proof_explosion);
|
||||
ImGui::Checkbox("Steam", &g.self.proof_steam);
|
||||
ImGui::Checkbox("EXPLOSION"_T.data(), &g.self.proof_explosion);
|
||||
ImGui::Checkbox("STEAM"_T.data(), &g.self.proof_steam);
|
||||
|
||||
ImGui::EndGroup();
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Checkbox("Drown", &g.self.proof_drown);
|
||||
ImGui::Checkbox("Water", &g.self.proof_water);
|
||||
ImGui::Checkbox("DROWN"_T.data(), &g.self.proof_drown);
|
||||
ImGui::Checkbox("WATER"_T.data(), &g.self.proof_water);
|
||||
|
||||
ImGui::EndGroup();
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
components::sub_title("Police");
|
||||
components::sub_title("POLICE"_T);
|
||||
|
||||
ImGui::Checkbox("Never Wanted", &g.self.never_wanted);
|
||||
ImGui::Checkbox("NEVER_WANTED"_T.data(), &g.self.never_wanted);
|
||||
|
||||
if (!g.self.never_wanted)
|
||||
{
|
||||
ImGui::Checkbox("Force Wanted Level", &g.self.force_wanted_level);
|
||||
ImGui::Text("Wanted Level");
|
||||
ImGui::Checkbox("FORCE_WANTED_LVL"_T.data(), &g.self.force_wanted_level);
|
||||
ImGui::Text("WANTED_LVL"_T.data());
|
||||
if (
|
||||
ImGui::SliderInt("###wanted_level", &g.self.wanted_level, 0, 5) &&
|
||||
!g.self.force_wanted_level &&
|
||||
@ -139,31 +139,31 @@ namespace big
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
components::sub_title("HUD");
|
||||
components::sub_title("HUD"_T);
|
||||
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Checkbox("Hide Radar", &g.self.hide_radar);
|
||||
ImGui::Checkbox("HIDE_RADAR"_T.data(), &g.self.hide_radar);
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::Checkbox("Hide Ammo", &g.self.hide_ammo);
|
||||
ImGui::Checkbox("HIDE_AMMO"_T.data(), &g.self.hide_ammo);
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::Checkbox("Force show HUD", &g.self.force_show_hud);
|
||||
ImGui::Checkbox("FORCE_SHOW_HUD"_T.data(), &g.self.force_show_hud);
|
||||
|
||||
ImGui::Combo("##hud_comp_combo", &g.self.selected_hud_component, hud_component_names, (int)HudComponents::HUD_WEAPONS);
|
||||
ImGui::SameLine();
|
||||
components::button("Hide", [] {
|
||||
components::button("HIDE"_T, [] {
|
||||
g.self.hud_components_states[g.self.selected_hud_component] = true;
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Show", [] {
|
||||
components::button("SHOW"_T, [] {
|
||||
g.self.hud_components_states[g.self.selected_hud_component] = false;
|
||||
});
|
||||
|
||||
components::button("Hide all", [] {
|
||||
components::button("HIDE_ALL"_T, [] {
|
||||
g.self.hide_radar = true;
|
||||
g.self.hide_ammo = true;
|
||||
for (int i = 0; i < (int)HudComponents::HUD_WEAPONS; i++)
|
||||
@ -172,7 +172,7 @@ namespace big
|
||||
}
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Show all", [] {
|
||||
components::button("SHOW_ALL"_T, [] {
|
||||
g.self.hide_radar = false;
|
||||
g.self.hide_ammo = false;
|
||||
for (int i = 0; i < (int)HudComponents::HUD_WEAPONS; i++)
|
||||
@ -181,9 +181,9 @@ namespace big
|
||||
}
|
||||
});
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Force show HUD element", &g.self.force_show_hud_element);
|
||||
ImGui::Checkbox("FORCE_SHOW_HUD_ELEMENT"_T.data(), &g.self.force_show_hud_element);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("To force show a HUD specific element, click Hide all then click Show on the desired element.");
|
||||
ImGui::SetTooltip("FORCE_SHOW_HUD_ELEMENT_DESC"_T.data());
|
||||
|
||||
ImGui::EndGroup();
|
||||
|
||||
|
@ -9,14 +9,14 @@ namespace big
|
||||
{
|
||||
void view::teleport()
|
||||
{
|
||||
ImGui::Text("Blips:");
|
||||
ImGui::Text("BLIPS"_T.data());
|
||||
|
||||
components::command_button<"waypointtp">({}, "Waypoint");
|
||||
ImGui::SameLine();
|
||||
components::command_button<"objectivetp">({}, "Objective");
|
||||
components::command_checkbox<"autotptowp">();
|
||||
|
||||
ImGui::Text("Vehicles:");
|
||||
ImGui::Text("VEHICLES"_T.data());
|
||||
components::command_button<"lastvehtp">();
|
||||
ImGui::SameLine();
|
||||
components::command_button<"bringpv">();
|
||||
|
@ -11,7 +11,7 @@
|
||||
namespace big
|
||||
{
|
||||
void view::weapons() {
|
||||
components::sub_title("Ammo");
|
||||
components::sub_title("AMMO"_T);
|
||||
|
||||
ImGui::BeginGroup();
|
||||
|
||||
@ -22,7 +22,7 @@ namespace big
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginGroup();
|
||||
|
||||
if (ImGui::Checkbox("Bypass C4 Limit", &g.weapons.bypass_c4_limit))
|
||||
if (ImGui::Checkbox("BYPASS_C4_LIM"_T.data(), &g.weapons.bypass_c4_limit))
|
||||
{
|
||||
if (g.weapons.bypass_c4_limit)
|
||||
g_pointers->m_bypass_max_count_of_active_sticky_bombs->apply();
|
||||
@ -35,12 +35,12 @@ namespace big
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::Checkbox("Enable Special Ammo", &g.weapons.ammo_special.toggle);
|
||||
ImGui::Checkbox("ENABLE_SPECIAL_AMMO"_T.data(), &g.weapons.ammo_special.toggle);
|
||||
|
||||
eAmmoSpecialType selected_ammo = g.weapons.ammo_special.type;
|
||||
eExplosionTag selected_explosion = g.weapons.ammo_special.explosion_tag;
|
||||
|
||||
if (ImGui::BeginCombo("Special Ammo", SPECIAL_AMMOS[(int)selected_ammo].name))
|
||||
if (ImGui::BeginCombo("SPECIAL_AMMO"_T.data(), SPECIAL_AMMOS[(int)selected_ammo].name))
|
||||
{
|
||||
for (const auto& special_ammo : SPECIAL_AMMOS)
|
||||
{
|
||||
@ -58,7 +58,7 @@ namespace big
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
|
||||
if (ImGui::BeginCombo("Bullet Impact", BULLET_IMPACTS[selected_explosion]))
|
||||
if (ImGui::BeginCombo("BULLET_IMPACT"_T.data(), BULLET_IMPACTS[selected_explosion]))
|
||||
{
|
||||
for (const auto& [type, name] : BULLET_IMPACTS)
|
||||
{
|
||||
@ -78,7 +78,7 @@ namespace big
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
components::sub_title("Misc");
|
||||
components::sub_title("MISC"_T);
|
||||
|
||||
components::command_checkbox<"crosshairs">();
|
||||
ImGui::SameLine();
|
||||
@ -86,7 +86,7 @@ namespace big
|
||||
ImGui::SameLine();
|
||||
components::command_checkbox<"nospread">();
|
||||
|
||||
components::button("Get All Weapons", []
|
||||
components::button("GET_ALL_WEAPONS"_T, []
|
||||
{
|
||||
for (const auto& [_, weapon] : g_gta_data_service->weapons())
|
||||
{
|
||||
@ -97,7 +97,7 @@ namespace big
|
||||
WEAPON::GIVE_DELAYED_WEAPON_TO_PED(self::ped, parachute_hash, 0, true);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Remove Current Weapon", []
|
||||
components::button("REMOVE_CUR_WEAPON"_T, []
|
||||
{
|
||||
Hash weaponHash;
|
||||
WEAPON::GET_CURRENT_PED_WEAPON(self::ped, &weaponHash, 1);
|
||||
@ -107,15 +107,15 @@ namespace big
|
||||
}
|
||||
});
|
||||
|
||||
ImGui::SliderFloat("Damage Multiplier", &g.weapons.increased_damage, 1.f, 10.f, "%.1f");
|
||||
ImGui::SliderFloat("DMG_MULTIPLR"_T.data(), &g.weapons.increased_damage, 1.f, 10.f, "%.1f");
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
components::sub_title("Custom Weapons");
|
||||
components::sub_title("CUSTOM_WEAPONS"_T);
|
||||
|
||||
CustomWeapon selected = g.weapons.custom_weapon;
|
||||
|
||||
if (ImGui::BeginCombo("Weapon", custom_weapons[(int)selected].name))
|
||||
if (ImGui::BeginCombo("WEAPON"_T.data(), custom_weapons[(int)selected].name))
|
||||
{
|
||||
for (const custom_weapon& weapon : custom_weapons)
|
||||
{
|
||||
@ -142,7 +142,7 @@ namespace big
|
||||
// this some ugly ass looking code
|
||||
static char vehicle_gun[12];
|
||||
std::memcpy(vehicle_gun, g.weapons.vehicle_gun_model.c_str(), 12);
|
||||
if (ImGui::InputTextWithHint("Shooting Model", "Name of the vehicle model", vehicle_gun, sizeof(vehicle_gun)))
|
||||
if (ImGui::InputTextWithHint("SHOOTING_MODEL"_T.data(), "NAME_VEHICLE_MODEL"_T.data(), vehicle_gun, sizeof(vehicle_gun)))
|
||||
{
|
||||
g.weapons.vehicle_gun_model = vehicle_gun;
|
||||
}
|
||||
|
@ -5,32 +5,32 @@ namespace big
|
||||
{
|
||||
void view::context_menu_settings()
|
||||
{
|
||||
ImGui::Checkbox("Context Menu Enabled", &g.context_menu.enabled);
|
||||
ImGui::Checkbox("SETTINGS_CONTEXT_MENU"_T.data(), &g.context_menu.enabled);
|
||||
|
||||
if (g.context_menu.enabled)
|
||||
{
|
||||
ImGui::Text("Allowed Entity Types:");
|
||||
ImGui::CheckboxFlags("Object", reinterpret_cast<int*>(&g.context_menu.allowed_entity_types), static_cast<int>(ContextEntityType::OBJECT));
|
||||
ImGui::Text("SETTINGS_CONTEXT_MENU_ENTITY_TYPES"_T.data());
|
||||
ImGui::CheckboxFlags("SETTINGS_CONTEXT_MENU_ENTITY_TYPE_OBJECT"_T.data(), reinterpret_cast<int*>(&g.context_menu.allowed_entity_types), static_cast<int>(ContextEntityType::OBJECT));
|
||||
ImGui::SameLine();
|
||||
ImGui::CheckboxFlags("Ped", reinterpret_cast<int*>(&g.context_menu.allowed_entity_types), static_cast<int>(ContextEntityType::PED));
|
||||
ImGui::CheckboxFlags("SETTINGS_CONTEXT_MENU_ENTITY_TYPE_PED"_T.data(), reinterpret_cast<int*>(&g.context_menu.allowed_entity_types), static_cast<int>(ContextEntityType::PED));
|
||||
ImGui::SameLine();
|
||||
ImGui::CheckboxFlags("Player", reinterpret_cast<int*>(&g.context_menu.allowed_entity_types), static_cast<int>(ContextEntityType::PLAYER));
|
||||
ImGui::CheckboxFlags("SETTINGS_CONTEXT_MENU_ENTITY_TYPE_PLAYER"_T.data(), reinterpret_cast<int*>(&g.context_menu.allowed_entity_types), static_cast<int>(ContextEntityType::PLAYER));
|
||||
ImGui::SameLine();
|
||||
ImGui::CheckboxFlags("Vehicle", reinterpret_cast<int*>(&g.context_menu.allowed_entity_types), static_cast<int>(ContextEntityType::VEHICLE));
|
||||
ImGui::CheckboxFlags("SETTINGS_CONTEXT_MENU_ENTITY_TYPE_VEHICLE"_T.data(), reinterpret_cast<int*>(&g.context_menu.allowed_entity_types), static_cast<int>(ContextEntityType::VEHICLE));
|
||||
|
||||
static ImVec4 selected_option_color = ImGui::ColorConvertU32ToFloat4(g.context_menu.selected_option_color);
|
||||
ImGui::Text("Selected Option Color:");
|
||||
ImGui::Text("SETTINGS_CONTEXT_MENU_COLOR"_T.data());
|
||||
if (ImGui::ColorEdit4("###BSelected Option Color##cm_picker", (float*)&selected_option_color, ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_NoSidePreview))
|
||||
{
|
||||
g.context_menu.selected_option_color = ImGui::ColorConvertFloat4ToU32(selected_option_color);
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Bounding Box Enabled", &g.context_menu.bounding_box_enabled);
|
||||
ImGui::Checkbox("SETTINGS_CONTEXT_MENU_BOUNDING_BOX"_T.data(), &g.context_menu.bounding_box_enabled);
|
||||
|
||||
if (g.context_menu.bounding_box_enabled)
|
||||
{
|
||||
static ImVec4 bounding_box_color = ImGui::ColorConvertU32ToFloat4(g.context_menu.bounding_box_color);
|
||||
ImGui::Text("Bounding Box Color:");
|
||||
ImGui::Text("SETTINGS_CONTEXT_MENU_BOUNDING_BOX_COLOR"_T.data());
|
||||
if (ImGui::ColorEdit4("###Bounding Box Color##cm_picker", (float*)&bounding_box_color, ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_NoSidePreview))
|
||||
{
|
||||
g.context_menu.bounding_box_color = ImGui::ColorConvertFloat4ToU32(bounding_box_color);
|
||||
|
@ -4,73 +4,73 @@ namespace big
|
||||
{
|
||||
void view::esp_settings()
|
||||
{
|
||||
ImGui::Checkbox("ESP Enabled", &g.esp.enabled);
|
||||
ImGui::Checkbox("SETTINGS_ESP"_T.data(), &g.esp.enabled);
|
||||
|
||||
if (g.esp.enabled)
|
||||
{
|
||||
ImGui::Checkbox("Hide Self", &g.esp.hide_self);
|
||||
ImGui::Checkbox("SETTINGS_ESP_HIDE_SELF"_T.data(), &g.esp.hide_self);
|
||||
|
||||
ImGui::Text("Global Render Distance (min, max)");
|
||||
ImGui::Text("SETTINGS_ESP_GLOBAL_RENDER_DISTANCE"_T.data());
|
||||
ImGui::SliderFloat2("###Global Render Distance", g.esp.global_render_distance, 0.f, 1500.f);
|
||||
|
||||
ImGui::Checkbox("Tracer", &g.esp.tracer);
|
||||
ImGui::Checkbox("SETTINGS_ESP_TRACER"_T.data(), &g.esp.tracer);
|
||||
if (g.esp.tracer) {
|
||||
ImGui::Text("Tracer Draw Position (x, y)");
|
||||
ImGui::Text("SETTINGS_ESP_TRACER_POSITION"_T.data());
|
||||
ImGui::SliderFloat2("###Draw Position", g.esp.tracer_draw_position, 0.f, 1.f);
|
||||
ImGui::Text("Tracer Render Distance (min, max)");
|
||||
ImGui::Text("SETTINGS_ESP_TRACER_RENDER_DISTANCE"_T.data());
|
||||
ImGui::SliderFloat2("###Tracer Render Distance", g.esp.tracer_render_distance, g.esp.global_render_distance[0], g.esp.global_render_distance[1]);
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Box ESP", &g.esp.box);
|
||||
ImGui::Checkbox("SETTINGS_ESP_BOX"_T.data(), &g.esp.box);
|
||||
if (g.esp.box) {
|
||||
ImGui::Text("Box Render Distance (min, max)");
|
||||
ImGui::Text("SETTINGS_ESP_BOX_RENDER_DISTANCE"_T.data());
|
||||
ImGui::SliderFloat2("###Box Render Distance", g.esp.box_render_distance, g.esp.global_render_distance[0], g.esp.global_render_distance[1]);
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Show Player Name", &g.esp.name);
|
||||
ImGui::Checkbox("Show Player Distance", &g.esp.distance);
|
||||
ImGui::Checkbox("Show Player Godmode", &g.esp.god);
|
||||
ImGui::Checkbox("Show Player Health", &g.esp.health);
|
||||
ImGui::Checkbox("Show Player Armor", &g.esp.armor);
|
||||
ImGui::Checkbox("SETTINGS_ESP_PLAYER_NAME"_T.data(), &g.esp.name);
|
||||
ImGui::Checkbox("SETTINGS_ESP_PLAYER_DISTANCE"_T.data(), &g.esp.distance);
|
||||
ImGui::Checkbox("SETTINGS_ESP_PLAYER_GOD_MODE"_T.data(), &g.esp.god);
|
||||
ImGui::Checkbox("SETTINGS_ESP_PLAYER_HEALTH"_T.data(), &g.esp.health);
|
||||
ImGui::Checkbox("SETTINGS_ESP_PLAYER_ARMOR"_T.data(), &g.esp.armor);
|
||||
|
||||
ImGui::Checkbox("Should ESP Color Change with Distance", &g.esp.change_esp_color_from_dist);
|
||||
ImGui::Checkbox("SETTINGS_ESP_COLOR_W_DISTANCE"_T.data(), &g.esp.change_esp_color_from_dist);
|
||||
if (g.esp.health)
|
||||
ImGui::Checkbox("Should Healthbar Scale with Distance", &g.esp.scale_health_from_dist);
|
||||
ImGui::Checkbox("SETTINGS_ESP_SCALE_HEALTH"_T.data(), &g.esp.scale_health_from_dist);
|
||||
|
||||
if (g.esp.armor)
|
||||
ImGui::Checkbox("Should Armorbar Scale with Distance", &g.esp.scale_armor_from_dist);
|
||||
ImGui::Checkbox("SETTINGS_ESP_SCALE_ARMOR"_T.data(), &g.esp.scale_armor_from_dist);
|
||||
|
||||
static ImVec4 col_enemy = ImGui::ColorConvertU32ToFloat4(g.esp.enemy_color);
|
||||
static ImVec4 col_enemy_near = ImGui::ColorConvertU32ToFloat4(g.esp.enemy_near_color);
|
||||
static ImVec4 col_default = ImGui::ColorConvertU32ToFloat4(g.esp.default_color);
|
||||
static ImVec4 col_friend = ImGui::ColorConvertU32ToFloat4(g.esp.friend_color);
|
||||
|
||||
ImGui::Text("Distance threshold (min, max)");
|
||||
ImGui::Text("SETTINGS_ESP_DISTANCE_THRESHOLD"_T.data());
|
||||
ImGui::SliderFloat2("###Distance threshold", g.esp.distance_threshold, g.esp.global_render_distance[0], g.esp.global_render_distance[1]);
|
||||
|
||||
if (ImGui::TreeNode("ESP Colors (RGBA)"))
|
||||
if (ImGui::TreeNode("SETTINGS_ESP_COLORS"_T.data()))
|
||||
{
|
||||
if (g.esp.change_esp_color_from_dist) {
|
||||
ImGui::Text("Enemy Close Color:");
|
||||
ImGui::Text("SETTINGS_ESP_ENEMY_CLOSE_COLOR"_T.data());
|
||||
if (ImGui::ColorEdit4("###Enemy ESP Color##esp_picker", (float*)&col_enemy, ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_NoSidePreview))
|
||||
{
|
||||
g.esp.enemy_color = ImGui::ColorConvertFloat4ToU32(col_enemy);
|
||||
}
|
||||
|
||||
ImGui::Text("Enemy Near Color:");
|
||||
ImGui::Text("SETTINGS_ESP_ENEMY_NEAR_COLOR"_T.data());
|
||||
if (ImGui::ColorEdit4("###Enemy Near ESP Color##esp_picker", (float*)&col_enemy_near, ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_NoSidePreview))
|
||||
{
|
||||
g.esp.enemy_near_color = ImGui::ColorConvertFloat4ToU32(col_enemy_near);
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Text("Default Color:");
|
||||
ImGui::Text("SETTINGS_ESP_ENEMY_DEFAULT_COLOR"_T.data());
|
||||
if (ImGui::ColorEdit4("###Default ESP Color##esp_picker", (float*)&col_default, ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_NoSidePreview))
|
||||
{
|
||||
g.esp.default_color = ImGui::ColorConvertFloat4ToU32(col_default);
|
||||
}
|
||||
|
||||
ImGui::Text("Friendly Color:");
|
||||
ImGui::Text("SETTINGS_ESP_FRIENDLY_COLOR"_T.data());
|
||||
if (ImGui::ColorEdit4("###Friend ESP Color##friend_picker", (float*)&col_friend, ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_NoSidePreview))
|
||||
{
|
||||
g.esp.friend_color = ImGui::ColorConvertFloat4ToU32(col_friend);
|
||||
|
@ -5,17 +5,17 @@ namespace big
|
||||
{
|
||||
void view::gui_settings()
|
||||
{
|
||||
components::sub_title("UI Scale");
|
||||
components::sub_title("SETTINGS_UI_SCALE"_T);
|
||||
ImGui::SliderFloat("##gui-scale", &g.window.gui_scale, 1.f, 1.5f, "%.2f");
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Apply##gui-scale"))
|
||||
if (ImGui::Button("APPLY"_T.data()))
|
||||
g_renderer->rescale(g.window.gui_scale);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Changing the UI scale may break rendering and require you to unload and inject YimMenu again.");
|
||||
ImGui::SetTooltip("SETTINGS_UI_SCALE_DESCRIPTION"_T.data());
|
||||
|
||||
components::sub_title("Colors");
|
||||
components::sub_title("SETTINGS_UI_COLOR"_T);
|
||||
static ImVec4 col_gui = ImGui::ColorConvertU32ToFloat4(g.window.color);
|
||||
if (ImGui::ColorEdit4("Gui Color##gui_picker", (float*)&col_gui, ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_NoSidePreview))
|
||||
if (ImGui::ColorEdit4("SETTINGS_UI_COLOR_PICKER"_T.data(), (float*)&col_gui, ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_NoSidePreview))
|
||||
{
|
||||
g.window.color = ImGui::ColorConvertFloat4ToU32(col_gui);
|
||||
}
|
||||
|
@ -5,46 +5,46 @@ namespace big
|
||||
void view::protection_settings()
|
||||
{
|
||||
ImGui::BeginGroup();
|
||||
ImGui::Checkbox("Bounty", &g.protections.script_events.bounty);
|
||||
ImGui::Checkbox("CEO Money", &g.protections.script_events.ceo_money);
|
||||
ImGui::Checkbox("Fake Deposit", &g.protections.script_events.fake_deposit);
|
||||
ImGui::Checkbox("Force Mission", &g.protections.script_events.force_mission);
|
||||
ImGui::Checkbox("Force Teleport", &g.protections.script_events.force_teleport);
|
||||
ImGui::Checkbox("GTA Banner", &g.protections.script_events.gta_banner);
|
||||
ImGui::Checkbox("MC Teleport", &g.protections.script_events.mc_teleport);
|
||||
ImGui::Checkbox("BOUNTY"_T.data(), &g.protections.script_events.bounty);
|
||||
ImGui::Checkbox("CEO_MONEY"_T.data(), &g.protections.script_events.ceo_money);
|
||||
ImGui::Checkbox("FAKE_DEPOSIT"_T.data(), &g.protections.script_events.fake_deposit);
|
||||
ImGui::Checkbox("FORCE_MISSION"_T.data(), &g.protections.script_events.force_mission);
|
||||
ImGui::Checkbox("FORCE_TELEPORT"_T.data(), &g.protections.script_events.force_teleport);
|
||||
ImGui::Checkbox("GTA_BANNER"_T.data(), &g.protections.script_events.gta_banner);
|
||||
ImGui::Checkbox("MC_TELEPORT"_T.data(), &g.protections.script_events.mc_teleport);
|
||||
ImGui::EndGroup();
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::BeginGroup();
|
||||
ImGui::Checkbox("Send to Cutscene", &g.protections.script_events.send_to_cutscene);
|
||||
ImGui::Checkbox("Send to Location", &g.protections.script_events.send_to_location);
|
||||
ImGui::Checkbox("Sound Spam", &g.protections.script_events.sound_spam);
|
||||
ImGui::Checkbox("Personal Vehicle Destroyed", &g.protections.script_events.personal_vehicle_destroyed);
|
||||
ImGui::Checkbox("Remote Off Radar", &g.protections.script_events.remote_off_radar);
|
||||
ImGui::Checkbox("Rotate Cam", &g.protections.script_events.rotate_cam);
|
||||
ImGui::Checkbox("Teleport To Warehouse", &g.protections.script_events.teleport_to_warehouse);
|
||||
ImGui::Checkbox("SEND_TO_CUTSCENE"_T.data(), &g.protections.script_events.send_to_cutscene);
|
||||
ImGui::Checkbox("SEND_TO_LOCATION"_T.data(), &g.protections.script_events.send_to_location);
|
||||
ImGui::Checkbox("SOUND_SPAM"_T.data(), &g.protections.script_events.sound_spam);
|
||||
ImGui::Checkbox("PERSONAL_VEHICLE_DESTROYED"_T.data(), &g.protections.script_events.personal_vehicle_destroyed);
|
||||
ImGui::Checkbox("REMOTE_OFF_RADAR"_T.data(), &g.protections.script_events.remote_off_radar);
|
||||
ImGui::Checkbox("ROTATE_CAM"_T.data(), &g.protections.script_events.rotate_cam);
|
||||
ImGui::Checkbox("TELEPORT_TO_WAREHOUSE"_T.data(), &g.protections.script_events.teleport_to_warehouse);
|
||||
ImGui::EndGroup();
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::BeginGroup();
|
||||
ImGui::Checkbox("Start Activity", &g.protections.script_events.start_activity);
|
||||
ImGui::Checkbox("Send SMS", &g.protections.script_events.send_sms);
|
||||
ImGui::Checkbox("Spectate", &g.protections.script_events.spectate);
|
||||
ImGui::Checkbox("Vehicle Kick", &g.protections.script_events.vehicle_kick);
|
||||
ImGui::Checkbox("Wanted Level", &g.protections.script_events.clear_wanted_level);
|
||||
ImGui::Checkbox("Desync Kick", &g.protections.desync_kick);
|
||||
ImGui::Checkbox("START_ACTIVITY"_T.data(), &g.protections.script_events.start_activity);
|
||||
ImGui::Checkbox("SEND_SMS"_T.data(), &g.protections.script_events.send_sms);
|
||||
ImGui::Checkbox("SPECTATE"_T.data(), &g.protections.script_events.spectate);
|
||||
ImGui::Checkbox("VEHICLE_KICK"_T.data(), &g.protections.script_events.vehicle_kick);
|
||||
ImGui::Checkbox("WANTED_LEVEL"_T.data(), &g.protections.script_events.clear_wanted_level);
|
||||
ImGui::Checkbox("DESYNC_KICK"_T.data(), &g.protections.desync_kick);
|
||||
ImGui::EndGroup();
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::BeginGroup();
|
||||
ImGui::Checkbox("RID Join", &g.protections.rid_join);
|
||||
ImGui::Checkbox("BLOCK_RID_JOINING"_T.data(), &g.protections.rid_join);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("This will block anyone trying to join, kick or crash you with your Rockstar ID, including your friends");
|
||||
ImGui::Checkbox("Lessen Breakup Kicks As Host", &g.protections.lessen_breakups);
|
||||
ImGui::SetTooltip("BLOCK_RID_JOINING_DESCRIPTION"_T.data());
|
||||
ImGui::Checkbox("LESSEN_BREAKUP_KICK"_T.data(), &g.protections.lessen_breakups);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Attacker must join after you have become host for this to work. There are anti-cheat concerns with this feature");
|
||||
ImGui::SetTooltip("LESSEN_BREAKUP_KICK_DESCRIPTION"_T.data());
|
||||
ImGui::EndGroup();
|
||||
}
|
||||
|
||||
|
@ -4,11 +4,11 @@ namespace big
|
||||
{
|
||||
void draw_pair_option(const std::string_view name, decltype(g.notifications.gta_thread_kill)& option)
|
||||
{
|
||||
ImGui::Text("%s", name.data());
|
||||
ImGui::Text(name.data());
|
||||
|
||||
ImGui::PushID(name.data());
|
||||
ImGui::Checkbox("Log", &option.log);
|
||||
ImGui::Checkbox("Notify", &option.notify);
|
||||
ImGui::Checkbox("LOG"_T.data(), &option.log);
|
||||
ImGui::Checkbox("NOTIFY"_T.data(), &option.notify);
|
||||
ImGui::PopID();
|
||||
}
|
||||
|
||||
@ -16,13 +16,13 @@ namespace big
|
||||
{
|
||||
if (ImGui::TreeNode(reaction.m_event_name))
|
||||
{
|
||||
ImGui::Checkbox("Announce In Chat", &reaction.announce_in_chat);
|
||||
ImGui::Checkbox("Notify", &reaction.notify);
|
||||
ImGui::Checkbox("Log", &reaction.log);
|
||||
ImGui::Checkbox("Add Player To Database", &reaction.add_to_player_db);
|
||||
ImGui::Checkbox("REACTION_CHAT"_T.data(), &reaction.announce_in_chat);
|
||||
ImGui::Checkbox("NOTIFY"_T.data(), &reaction.notify);
|
||||
ImGui::Checkbox("LOG"_T.data(), &reaction.log);
|
||||
ImGui::Checkbox("REACTION_ADD_TO_DATABASE"_T.data(), &reaction.add_to_player_db);
|
||||
if (reaction.add_to_player_db)
|
||||
ImGui::Checkbox("Block Joins", &reaction.block_joins);
|
||||
ImGui::Checkbox("Kick Player", &reaction.kick);
|
||||
ImGui::Checkbox("REACTION_BLOCK_JOINS"_T.data(), &reaction.block_joins);
|
||||
ImGui::Checkbox("REACTION_KICK_PLAYER"_T.data(), &reaction.kick);
|
||||
ImGui::TreePop();
|
||||
}
|
||||
}
|
||||
@ -32,22 +32,22 @@ namespace big
|
||||
{
|
||||
if (ImGui::TreeNode(reaction.m_event_name))
|
||||
{
|
||||
ImGui::Checkbox("Announce In Chat", &reaction.announce_in_chat);
|
||||
ImGui::Checkbox("Notify", &reaction.notify);
|
||||
ImGui::Checkbox("Log", &reaction.log);
|
||||
ImGui::Checkbox("Add Attacker To Database", &reaction.add_to_player_db);
|
||||
ImGui::Checkbox("REACTION_CHAT"_T.data(), &reaction.announce_in_chat);
|
||||
ImGui::Checkbox("NOTIFY"_T.data(), &reaction.notify);
|
||||
ImGui::Checkbox("LOG"_T.data(), &reaction.log);
|
||||
ImGui::Checkbox("REACTION_ADD_TO_DATABASE"_T.data(), &reaction.add_to_player_db);
|
||||
if (reaction.add_to_player_db)
|
||||
ImGui::Checkbox("Block Joins", &reaction.block_joins);
|
||||
ImGui::Checkbox("Kick Attacker", &reaction.kick);
|
||||
ImGui::Checkbox("REACTION_BLOCK_JOINS"_T.data(), &reaction.block_joins);
|
||||
ImGui::Checkbox("REACTION_KICK_ATTACKER"_T.data(), &reaction.kick);
|
||||
|
||||
if (reaction.m_blockable || reaction.m_karmaable)
|
||||
ImGui::Separator();
|
||||
|
||||
if (reaction.m_blockable)
|
||||
ImGui::Checkbox("Block", &reaction.block);
|
||||
ImGui::Checkbox("BLOCK"_T.data(), &reaction.block);
|
||||
|
||||
if (reaction.m_karmaable)
|
||||
ImGui::Checkbox("Karma", &reaction.karma);
|
||||
ImGui::Checkbox("KARMA"_T.data(), &reaction.karma);
|
||||
|
||||
ImGui::TreePop();
|
||||
}
|
||||
@ -55,7 +55,7 @@ namespace big
|
||||
|
||||
void view::reaction_settings()
|
||||
{
|
||||
components::title("Reactions");
|
||||
components::title("SETTINGS_REACTIONS"_T);
|
||||
draw_reaction(g.reactions.bounty);
|
||||
draw_reaction(g.reactions.ceo_kick);
|
||||
draw_reaction(g.reactions.ceo_money);
|
||||
@ -104,31 +104,31 @@ namespace big
|
||||
draw_interloper_reaction(g.reactions.lost_connection_kick_others);
|
||||
draw_interloper_reaction(g.reactions.breakup_others);
|
||||
|
||||
components::title("Notifications");
|
||||
components::sub_title("GTA Threads");
|
||||
components::title("SETTINGS_NOTIFICATIONS"_T);
|
||||
components::sub_title("SETTINGS_NOTIFY_GTA_THREADS"_T);
|
||||
|
||||
draw_pair_option("Terminate", g.notifications.gta_thread_kill);
|
||||
draw_pair_option("Start", g.notifications.gta_thread_start);
|
||||
draw_pair_option("SETTINGS_NOTIFY_GTA_THREADS_TERMINATE"_T, g.notifications.gta_thread_kill);
|
||||
draw_pair_option("SETTINGS_NOTIFY_GTA_THREADS_START"_T, g.notifications.gta_thread_start);
|
||||
|
||||
components::sub_title("Network Player Manager");
|
||||
components::sub_title("SETTINGS_NOTIFY_PLAYER_MGR"_T);
|
||||
|
||||
ImGui::Text("Player Join");
|
||||
ImGui::Text("SETTINGS_NOTIFY_PLAYER_JOIN"_T.data());
|
||||
|
||||
ImGui::Checkbox("Above Map", &g.notifications.player_join.above_map);
|
||||
ImGui::Checkbox("Log", &g.notifications.player_join.log);
|
||||
ImGui::Checkbox("Notify", &g.notifications.player_join.notify);
|
||||
ImGui::Checkbox("SETTINGS_NOTIFY_PLAYER_JOIN_ABOVE_MAP"_T.data(), &g.notifications.player_join.above_map);
|
||||
ImGui::Checkbox("LOG"_T.data(), &g.notifications.player_join.log);
|
||||
ImGui::Checkbox("NOTIFY"_T.data(), &g.notifications.player_join.notify);
|
||||
|
||||
draw_pair_option("Player Leave", g.notifications.player_leave);
|
||||
draw_pair_option("SETTINGS_NOTIFY_PLAYER_LEAVE"_T, g.notifications.player_leave);
|
||||
|
||||
draw_pair_option("Init", g.notifications.network_player_mgr_init);
|
||||
draw_pair_option("Shutdown", g.notifications.network_player_mgr_shutdown);
|
||||
draw_pair_option("SETTINGS_NOTIFY_PLAYER_MGR_INIT"_T, g.notifications.network_player_mgr_init);
|
||||
draw_pair_option("SETTINGS_NOTIFY_PLAYER_MGR_SHUTDOWN"_T, g.notifications.network_player_mgr_shutdown);
|
||||
|
||||
components::sub_title("Other");
|
||||
components::sub_title("SETTINGS_NOTIFY_OTHER"_T);
|
||||
|
||||
draw_pair_option("Transaction Error / Rate Limit", g.notifications.transaction_rate_limit);
|
||||
draw_pair_option("Mismatch sync type", g.notifications.mismatch_sync_type);
|
||||
draw_pair_option("Out of allowed range sync type", g.notifications.out_of_allowed_range_sync_type);
|
||||
draw_pair_option("Invalid sync", g.notifications.invalid_sync);
|
||||
draw_pair_option("SETTINGS_NOTIFY_TRANSACTION_RATE_LIMIT"_T, g.notifications.transaction_rate_limit);
|
||||
draw_pair_option("SETTINGS_NOTIFY_MISMATCH_SYNC_TYPE"_T, g.notifications.mismatch_sync_type);
|
||||
draw_pair_option("SETTINGS_NOTIFY_OUT_OF_ALLOWED_RANGE_SYNC_TYPE"_T, g.notifications.out_of_allowed_range_sync_type);
|
||||
draw_pair_option("SETTINGS_NOTIFY_INVALID_SYNC"_T, g.notifications.invalid_sync);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,44 +1,10 @@
|
||||
#include "views/view.hpp"
|
||||
#include "script_mgr.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
void scripts_popupmodal()
|
||||
{
|
||||
ImGui::BeginGroup();
|
||||
components::sub_title("Scripts");
|
||||
ImGui::SameLine(ImGui::GetWindowWidth() - 100);
|
||||
if (ImGui::Button("Close")) ImGui::CloseCurrentPopup();
|
||||
ImGui::Spacing();
|
||||
components::sub_title("These scripts are responsible for all looped features.\nOnly disable if you know what you are doing.");
|
||||
|
||||
for (const auto& script : g_script_mgr.scripts())
|
||||
{
|
||||
if (script->is_toggleable())
|
||||
if (ImGui::Checkbox(script->name(), script->toggle_ptr()))
|
||||
g_notification_service->push(std::string(script->name()).append(" script"), script->is_enabled() ? "Resumed" : "Halted");
|
||||
}
|
||||
|
||||
ImGui::EndGroup();
|
||||
}
|
||||
|
||||
void view::settings()
|
||||
{
|
||||
components::sub_title("Misc");
|
||||
ImGui::Checkbox("Enable Dev DLC", &g.settings.dev_dlc);
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
if (ImGui::Button("Manage scripts"))
|
||||
ImGui::OpenPopup("Scripts");
|
||||
|
||||
ImGui::SetNextWindowPos({ 780,228 }, ImGuiCond_FirstUseEver);
|
||||
if (ImGui::BeginPopupModal("Scripts", nullptr, ImGuiWindowFlags_AlwaysAutoResize))
|
||||
{
|
||||
scripts_popupmodal();
|
||||
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
|
||||
components::sub_title("SETTINGS_MISC"_T);
|
||||
ImGui::Checkbox("SETTINGS_MISC_DEV_DLC"_T.data(), &g.settings.dev_dlc);
|
||||
}
|
||||
}
|
26
src/views/settings/view_translation_settings.cpp
Normal file
26
src/views/settings/view_translation_settings.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
#include "views/view.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
void view::translation_settings()
|
||||
{
|
||||
const auto& language_entries = g_translation_service.available_translations();
|
||||
const auto current_pack = g_translation_service.current_language_pack();
|
||||
|
||||
ImGui::Text("SETTINGS_LANGUAGES"_T.data());
|
||||
if (ImGui::BeginCombo("##combo-languages", language_entries.at(current_pack).name.c_str()))
|
||||
{
|
||||
for (auto& i : language_entries)
|
||||
{
|
||||
if (ImGui::Selectable(i.second.name.c_str(), i.first == current_pack))
|
||||
g_translation_service.select_language_pack(i.first);
|
||||
|
||||
if (i.first == current_pack)
|
||||
{
|
||||
ImGui::SetItemDefaultFocus();
|
||||
}
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
}
|
||||
}
|
@ -14,7 +14,7 @@ namespace big
|
||||
{
|
||||
void view::fun_vehicle()
|
||||
{
|
||||
components::sub_title("Seat Changer");
|
||||
components::sub_title("SEAT_CHANGER"_T);
|
||||
{
|
||||
static std::map<int, bool> seats;
|
||||
static bool ready = true;
|
||||
@ -46,7 +46,7 @@ namespace big
|
||||
|
||||
if (seats.size() == 0)
|
||||
{
|
||||
ImGui::Text("Please enter a vehicle.");
|
||||
ImGui::Text("PLEASE_ENTER_VEHICLE"_T.data());
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -59,11 +59,11 @@ namespace big
|
||||
ImGui::BeginDisabled();
|
||||
}
|
||||
|
||||
std::string name = "Driver";
|
||||
std::string name = "DRIVER"_T.data();
|
||||
|
||||
if (idx >= 0)
|
||||
{
|
||||
name = "Seat " + std::to_string(idx + 1);
|
||||
name = "FUN_VEHICLE_SEAT"_T.data() + std::to_string(idx + 1);
|
||||
}
|
||||
|
||||
if ((idx + 1) % 4 != 0) {
|
||||
@ -83,11 +83,11 @@ namespace big
|
||||
ImGui::Separator();
|
||||
|
||||
|
||||
components::sub_title("Auto Drive");
|
||||
components::sub_title("AUTO_DRIVE"_T);
|
||||
{
|
||||
float auto_drive_speed_user_unit = vehicle::mps_to_speed(g.vehicle.auto_drive_speed, g.vehicle.speed_unit);
|
||||
if (ImGui::SliderFloat(
|
||||
std::format("Top Speed({})", speed_unit_strings[(int)g.vehicle.speed_unit]).c_str(),
|
||||
std::vformat("FUN_VEHICLE_TOP_SPEED"_T, std::make_format_args(speed_unit_strings[(int)g.vehicle.speed_unit])).c_str(),
|
||||
&auto_drive_speed_user_unit,
|
||||
vehicle::mps_to_speed(0.f, g.vehicle.speed_unit),
|
||||
vehicle::mps_to_speed(150.f, g.vehicle.speed_unit),
|
||||
@ -96,8 +96,8 @@ namespace big
|
||||
g.vehicle.auto_drive_speed = vehicle::speed_to_mps(auto_drive_speed_user_unit, g.vehicle.speed_unit);
|
||||
}
|
||||
|
||||
static constexpr char const* driving_style_names[] = { "Law-Abiding", "The Road Is Yours" };
|
||||
if (ImGui::BeginCombo("Driving Style", driving_style_names[(int)g.vehicle.auto_drive_style]))
|
||||
const char* driving_style_names[] = { "LAW_ABIDING"_T.data(), "ROAD_IS_YOURS"_T.data() };
|
||||
if (ImGui::BeginCombo("DRIVING_STYLE"_T.data(), driving_style_names[(int)g.vehicle.auto_drive_style]))
|
||||
{
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
@ -105,8 +105,8 @@ namespace big
|
||||
{
|
||||
g.vehicle.auto_drive_style = (AutoDriveStyle)i;
|
||||
g_notification_service->push_warning(
|
||||
"Auto Drive",
|
||||
std::format("Driving style set to {}.", driving_style_names[i])
|
||||
"AUTO_DRIVE"_T.data(),
|
||||
std::vformat("DRIVING_STYLE_SET_TO"_T.data(), std::make_format_args(driving_style_names[i]))
|
||||
);
|
||||
}
|
||||
|
||||
@ -119,39 +119,39 @@ namespace big
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
|
||||
if (components::button("To Objective")) {
|
||||
if (components::button("TO_OBJECTIVE"_T)) {
|
||||
g.vehicle.auto_drive_destination = AutoDriveDestination::OBJECTITVE;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (components::button("To Waypoint")) {
|
||||
if (components::button("TO_WAYPOINT"_T)) {
|
||||
g.vehicle.auto_drive_destination = AutoDriveDestination::WAYPOINT;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (components::button("Wander")) {
|
||||
if (components::button("WANDER"_T)) {
|
||||
g.vehicle.auto_drive_destination = AutoDriveDestination::WANDER;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (components::button("Emergency Stop")) {
|
||||
if (components::button("EMERGENCY_STOP"_T)) {
|
||||
g.vehicle.auto_drive_destination = AutoDriveDestination::EMERGENCY_STOP;
|
||||
}
|
||||
}
|
||||
ImGui::Separator();
|
||||
|
||||
|
||||
components::sub_title("Rainbow Paint");
|
||||
components::sub_title("RAINBOW_PAINT"_T);
|
||||
{
|
||||
ImGui::Checkbox("Primary", &g.vehicle.rainbow_paint.primary);
|
||||
ImGui::Checkbox("PRIMARY"_T.data(), &g.vehicle.rainbow_paint.primary);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Secondary", &g.vehicle.rainbow_paint.secondary);
|
||||
ImGui::Checkbox("SECONDARY"_T.data(), &g.vehicle.rainbow_paint.secondary);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Neon", &g.vehicle.rainbow_paint.neon);
|
||||
ImGui::Checkbox("NEON"_T.data(), &g.vehicle.rainbow_paint.neon);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Smoke", &g.vehicle.rainbow_paint.smoke);
|
||||
ImGui::Checkbox("SMOKE"_T.data(), &g.vehicle.rainbow_paint.smoke);
|
||||
|
||||
static constexpr char const* rgb_types[] = { "Off", "Fade", "Spasm" };
|
||||
const char* rgb_types[] = { "OFF"_T.data(), "FADE"_T.data(), "SPASM"_T.data() };
|
||||
|
||||
ImGui::SetNextItemWidth(120);
|
||||
if (ImGui::BeginCombo("RGB Type", rgb_types[(int)g.vehicle.rainbow_paint.type]))
|
||||
if (ImGui::BeginCombo("RGB_TYPE"_T.data(), rgb_types[(int)g.vehicle.rainbow_paint.type]))
|
||||
{
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
@ -174,13 +174,13 @@ namespace big
|
||||
{
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(150);
|
||||
ImGui::SliderInt("RGB Speed", &g.vehicle.rainbow_paint.speed, 1, 10);
|
||||
ImGui::SliderInt("RGB_SPEED"_T.data(), &g.vehicle.rainbow_paint.speed, 1, 10);
|
||||
}
|
||||
}
|
||||
ImGui::Separator();
|
||||
|
||||
static constexpr char const* boost_behaviors[] = { "Default", "Instant Refill", "Infinite" };
|
||||
if (ImGui::BeginCombo("Boost Behavior", boost_behaviors[static_cast<int>(g.vehicle.boost_behavior)]))
|
||||
const char* boost_behaviors[] = { "DEFAULT"_T.data(), "INSTANT_REFILL"_T.data(), "INFINITE"_T.data() };
|
||||
if (ImGui::BeginCombo("BOOST_BEHAVIOR"_T.data(), boost_behaviors[static_cast<int>(g.vehicle.boost_behavior)]))
|
||||
{
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
@ -203,25 +203,25 @@ namespace big
|
||||
ImGui::Separator();
|
||||
|
||||
|
||||
components::sub_title("Vehicle Fly");
|
||||
components::sub_title("VEHICLE_FLY"_T);
|
||||
{
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Checkbox("Enabled", &g.vehicle.fly.enabled);
|
||||
ImGui::Checkbox("Don't Stop", &g.vehicle.fly.dont_stop);
|
||||
ImGui::Checkbox("ENABLED"_T.data(), &g.vehicle.fly.enabled);
|
||||
ImGui::Checkbox("DONT_STOP"_T.data(), &g.vehicle.fly.dont_stop);
|
||||
|
||||
ImGui::EndGroup();
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Checkbox("Disable Collision", &g.vehicle.fly.no_collision);
|
||||
ImGui::Checkbox("Stop On Exit", &g.vehicle.fly.stop_on_exit);
|
||||
ImGui::Checkbox("DISABLE_COLLISION"_T.data(), &g.vehicle.fly.no_collision);
|
||||
ImGui::Checkbox("STOP_ON_EXIT"_T.data(), &g.vehicle.fly.stop_on_exit);
|
||||
|
||||
ImGui::EndGroup();
|
||||
|
||||
float fly_speed_user_unit = vehicle::mps_to_speed(g.vehicle.fly.speed, g.vehicle.speed_unit);
|
||||
if (ImGui::SliderFloat(
|
||||
std::format("Speed({})", speed_unit_strings[(int)g.vehicle.speed_unit]).c_str(),
|
||||
std::vformat("FUN_VEHICLE_SPEED"_T.data(), std::make_format_args(speed_unit_strings[(int)g.vehicle.speed_unit])).c_str(),
|
||||
&fly_speed_user_unit,
|
||||
vehicle::mps_to_speed(0.f, g.vehicle.speed_unit),
|
||||
vehicle::mps_to_speed(150.f, g.vehicle.speed_unit),
|
||||
|
@ -37,7 +37,7 @@ namespace big
|
||||
player_vehicle = 0;
|
||||
|
||||
selected_slot = -1;
|
||||
ImGui::Text("Please enter a vehicle.");
|
||||
ImGui::Text("PLEASE_ENTER_A_VEHICLE"_T.data());
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -67,9 +67,9 @@ namespace big
|
||||
std::map<std::string, std::vector<int>> tmp_front_wheel_map;
|
||||
std::map<std::string, std::vector<int>> tmp_rear_wheel_map;
|
||||
|
||||
tmp_slot_display_names[MOD_PLATE_STYLE] = "Plate Style";
|
||||
tmp_slot_display_names[MOD_WINDOW_TINT] = "Window Tint";
|
||||
tmp_slot_display_names[MOD_WHEEL_TYPE] = "Wheel Type";
|
||||
tmp_slot_display_names[MOD_PLATE_STYLE] = "PLATE_STYLE"_T.data();
|
||||
tmp_slot_display_names[MOD_WINDOW_TINT] = "WINDOW_TINT"_T.data();
|
||||
tmp_slot_display_names[MOD_WHEEL_TYPE] = "WHEEL_TYPE"_T.data();
|
||||
|
||||
tmp_mod_display_names[MOD_PLATE_STYLE].insert(lsc_plate_styles.begin(), lsc_plate_styles.end());
|
||||
tmp_mod_display_names[MOD_WINDOW_TINT].insert(lsc_window_tint_types.begin(), lsc_window_tint_types.end());
|
||||
@ -117,7 +117,7 @@ namespace big
|
||||
{
|
||||
if (is_bennys)
|
||||
{
|
||||
if (mod_name.rfind("Chrome ", 0) == 0)
|
||||
if (mod_name.rfind("LSC_CHROME"_T.data(), 0) == 0)
|
||||
{
|
||||
std::string new_mod_name = mod_name.substr(7);
|
||||
|
||||
@ -145,7 +145,7 @@ namespace big
|
||||
{
|
||||
if (is_bennys)
|
||||
{
|
||||
if (mod_name.rfind("Chrome ", 0) == 0)
|
||||
if (mod_name.rfind("LSC_CHROME"_T.data(), 0) == 0)
|
||||
{
|
||||
std::string new_mod_name = mod_name.substr(7);
|
||||
|
||||
@ -194,11 +194,11 @@ namespace big
|
||||
});
|
||||
}
|
||||
|
||||
components::button("Start LS Customs", [] {
|
||||
components::button("START_LS_CUSTOMS"_T, [] {
|
||||
g.vehicle.ls_customs = true;
|
||||
});
|
||||
ImGui::SameLine();
|
||||
if (components::button("Max Vehicle"))
|
||||
if (components::button("MAX_VEHICLE"_T))
|
||||
{
|
||||
g_fiber_pool->queue_job([] {
|
||||
vehicle::max_vehicle(self::veh);
|
||||
@ -213,9 +213,9 @@ namespace big
|
||||
static char plate[9];
|
||||
|
||||
ImGui::SetNextItemWidth(200.f);
|
||||
components::input_text_with_hint("##plate", "Plate Number", plate, sizeof(plate), ImGuiInputTextFlags_None);
|
||||
components::input_text_with_hint("##plate", "PLATE_NUMBER"_T, plate, sizeof(plate), ImGuiInputTextFlags_None);
|
||||
ImGui::SameLine();
|
||||
if (components::button("Change Plate Number"))
|
||||
if (components::button("CHANGE_PLATE_NUMBER"_T))
|
||||
{
|
||||
g_fiber_pool->queue_job([] {
|
||||
vehicle::set_plate(self::veh, plate);
|
||||
@ -223,10 +223,10 @@ namespace big
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
components::sub_title("Mod Options");
|
||||
components::sub_title("MOD_OPTIONS"_T);
|
||||
|
||||
bool is_bulletproof_tires = !owned_mods[MOD_TIRE_CAN_BURST];
|
||||
if (ImGui::Checkbox("Bulletproof Tires", (bool*)&is_bulletproof_tires))
|
||||
if (ImGui::Checkbox("BULLETPROOF_TIRES"_T.data(), (bool*)&is_bulletproof_tires))
|
||||
{
|
||||
g_fiber_pool->queue_job([is_bulletproof_tires] {
|
||||
owned_mods[MOD_TIRE_CAN_BURST] = (int32_t)!is_bulletproof_tires;
|
||||
@ -235,7 +235,7 @@ namespace big
|
||||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Checkbox("Low Grip Tires", (bool*)&owned_mods[MOD_DRIFT_TIRE]))
|
||||
if (ImGui::Checkbox("LOW_GRIP_TIRES"_T.data(), (bool*)&owned_mods[MOD_DRIFT_TIRE]))
|
||||
{
|
||||
g_fiber_pool->queue_job([] {
|
||||
VEHICLE::SET_DRIFT_TYRES(player_vehicle, owned_mods[MOD_DRIFT_TIRE]);
|
||||
@ -243,14 +243,14 @@ namespace big
|
||||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Checkbox("Turbo", (bool*)&owned_mods[MOD_TURBO]))
|
||||
if (ImGui::Checkbox("TURBO"_T.data(), (bool*)&owned_mods[MOD_TURBO]))
|
||||
{
|
||||
g_fiber_pool->queue_job([] {
|
||||
VEHICLE::TOGGLE_VEHICLE_MOD(player_vehicle, MOD_TURBO, owned_mods[MOD_TURBO]);
|
||||
});
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Checkbox("Tiresmoke", (bool*)&owned_mods[MOD_TYRE_SMOKE]))
|
||||
if (ImGui::Checkbox("TIRESMOKE"_T.data(), (bool*)&owned_mods[MOD_TYRE_SMOKE]))
|
||||
{
|
||||
g_fiber_pool->queue_job([] {
|
||||
VEHICLE::TOGGLE_VEHICLE_MOD(player_vehicle, MOD_TYRE_SMOKE, owned_mods[MOD_TYRE_SMOKE]);
|
||||
@ -261,7 +261,7 @@ namespace big
|
||||
|
||||
ImGui::BeginGroup();
|
||||
|
||||
components::sub_title("Slot");
|
||||
components::sub_title("SLOT"_T);
|
||||
if (ImGui::ListBoxHeader("##slot", ImVec2(200, 200)))
|
||||
{
|
||||
for (const auto& [slot, name] : slot_display_names)
|
||||
@ -300,7 +300,7 @@ namespace big
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginGroup();
|
||||
|
||||
components::sub_title("Mod");
|
||||
components::sub_title("MOD"_T);
|
||||
if (ImGui::ListBoxHeader("##mod", ImVec2(240, 200)))
|
||||
{
|
||||
for (const auto& it : mod_display_names[selected_slot])
|
||||
@ -369,7 +369,7 @@ namespace big
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginGroup();
|
||||
|
||||
components::sub_title("Style");
|
||||
components::sub_title("STYLE"_T);
|
||||
if (ImGui::ListBoxHeader("##style", ImVec2(200, 200)))
|
||||
{
|
||||
std::string mod_name = mod_display_names[selected_slot][*wheel_stock_mod];
|
||||
@ -386,7 +386,7 @@ namespace big
|
||||
{
|
||||
if (i == 0)
|
||||
{
|
||||
if (ImGui::Selectable("Stock", mod == owned_mods[selected_slot] && *wheel_custom == false))
|
||||
if (ImGui::Selectable("STOCK"_T.data(), mod == owned_mods[selected_slot] && *wheel_custom == false))
|
||||
{
|
||||
g_fiber_pool->queue_job([&mod] {
|
||||
VEHICLE::SET_VEHICLE_MOD(player_vehicle, selected_slot, mod, false);
|
||||
@ -398,7 +398,7 @@ namespace big
|
||||
should_custom = true;
|
||||
}
|
||||
|
||||
std::string label = "Style " + std::to_string(mod);
|
||||
std::string label = "LSC_STYLE"_T.data() + std::to_string(mod);
|
||||
if (ImGui::Selectable(label.c_str(), mod == owned_mods[selected_slot] && *wheel_custom == should_custom))
|
||||
{
|
||||
g_fiber_pool->queue_job([&mod, should_custom] {
|
||||
@ -417,44 +417,47 @@ namespace big
|
||||
|
||||
|
||||
ImGui::Separator();
|
||||
components::sub_title("Neon Light Options");
|
||||
components::sub_title("NEON_LIGHT_OPTIONS"_T);
|
||||
|
||||
if (ImGui::Checkbox("Headlight##headlight_en", (bool*)&owned_mods[MOD_XENON_LIGHTS]))
|
||||
ImGui::PushID("##headlight_en");
|
||||
if (ImGui::Checkbox("HEADLIGHT"_T.data(), (bool*)&owned_mods[MOD_XENON_LIGHTS]))
|
||||
{
|
||||
g_fiber_pool->queue_job([] {
|
||||
VEHICLE::TOGGLE_VEHICLE_MOD(player_vehicle, MOD_XENON_LIGHTS, owned_mods[MOD_XENON_LIGHTS]);
|
||||
});
|
||||
}
|
||||
ImGui::PopID();
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Checkbox("Left", (bool*)&owned_mods[MOD_NEON_LEFT_ON]))
|
||||
if (ImGui::Checkbox("LEFT"_T.data(), (bool*)&owned_mods[MOD_NEON_LEFT_ON]))
|
||||
{
|
||||
g_fiber_pool->queue_job([] {
|
||||
VEHICLE::SET_VEHICLE_NEON_ENABLED(player_vehicle, NEON_LEFT, owned_mods[MOD_NEON_LEFT_ON]);
|
||||
});
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Checkbox("Right", (bool*)&owned_mods[MOD_NEON_RIGHT_ON]))
|
||||
if (ImGui::Checkbox("RIGHT"_T.data(), (bool*)&owned_mods[MOD_NEON_RIGHT_ON]))
|
||||
{
|
||||
g_fiber_pool->queue_job([] {
|
||||
VEHICLE::SET_VEHICLE_NEON_ENABLED(player_vehicle, NEON_RIGHT, owned_mods[MOD_NEON_RIGHT_ON]);
|
||||
});
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Checkbox("Front", (bool*)&owned_mods[MOD_NEON_FRONT_ON]))
|
||||
if (ImGui::Checkbox("FRONT"_T.data(), (bool*)&owned_mods[MOD_NEON_FRONT_ON]))
|
||||
{
|
||||
g_fiber_pool->queue_job([] {
|
||||
VEHICLE::SET_VEHICLE_NEON_ENABLED(player_vehicle, NEON_FRONT, owned_mods[MOD_NEON_FRONT_ON]);
|
||||
});
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Checkbox("Back", (bool*)&owned_mods[MOD_NEON_BACK_ON]))
|
||||
if (ImGui::Checkbox("BACK"_T.data(), (bool*)&owned_mods[MOD_NEON_BACK_ON]))
|
||||
{
|
||||
g_fiber_pool->queue_job([] {
|
||||
VEHICLE::SET_VEHICLE_NEON_ENABLED(player_vehicle, NEON_BACK, owned_mods[MOD_NEON_BACK_ON]);
|
||||
});
|
||||
}
|
||||
ImGui::SameLine();
|
||||
components::button("Check All##neon_check_all", [] {
|
||||
ImGui::PushID("##neon_check_all");
|
||||
components::button("CHECK_ALL"_T, [] {
|
||||
owned_mods[MOD_XENON_LIGHTS] = true;
|
||||
owned_mods[MOD_NEON_LEFT_ON] = true;
|
||||
owned_mods[MOD_NEON_RIGHT_ON] = true;
|
||||
@ -467,8 +470,10 @@ namespace big
|
||||
VEHICLE::SET_VEHICLE_NEON_ENABLED(player_vehicle, NEON_FRONT, owned_mods[MOD_NEON_FRONT_ON]);
|
||||
VEHICLE::SET_VEHICLE_NEON_ENABLED(player_vehicle, NEON_BACK, owned_mods[MOD_NEON_BACK_ON]);
|
||||
});
|
||||
ImGui::PopID();
|
||||
ImGui::SameLine();
|
||||
components::button("Uncheck All##neon_uncheck_all", [] {
|
||||
ImGui::PushID("##neon_uncheck_all");
|
||||
components::button("UNCHECK_ALL"_T, [] {
|
||||
owned_mods[MOD_XENON_LIGHTS] = false;
|
||||
owned_mods[MOD_NEON_LEFT_ON] = false;
|
||||
owned_mods[MOD_NEON_RIGHT_ON] = false;
|
||||
@ -481,9 +486,10 @@ namespace big
|
||||
VEHICLE::SET_VEHICLE_NEON_ENABLED(player_vehicle, NEON_FRONT, owned_mods[MOD_NEON_FRONT_ON]);
|
||||
VEHICLE::SET_VEHICLE_NEON_ENABLED(player_vehicle, NEON_BACK, owned_mods[MOD_NEON_BACK_ON]);
|
||||
});
|
||||
ImGui::PopID();
|
||||
|
||||
ImGui::Separator();
|
||||
components::sub_title("Color Options");
|
||||
components::sub_title("COLOR_OPTIONS"_T);
|
||||
|
||||
static int color_to_change = 0;
|
||||
static int color_type = 8;
|
||||
@ -498,29 +504,29 @@ namespace big
|
||||
|
||||
if (ImGui::ListBoxHeader("##color_options", ImVec2(120, 254)))
|
||||
{
|
||||
if (ImGui::Selectable("Primary", color_to_change == 0, ImGuiSelectableFlags_SelectOnClick))
|
||||
if (ImGui::Selectable("PRIMARY"_T.data(), color_to_change == 0, ImGuiSelectableFlags_SelectOnClick))
|
||||
{
|
||||
color_to_change = 0;
|
||||
}
|
||||
|
||||
if (ImGui::Selectable("Secondary", color_to_change == 1))
|
||||
if (ImGui::Selectable("SECONDARY"_T.data(), color_to_change == 1))
|
||||
{
|
||||
color_to_change = 1;
|
||||
}
|
||||
|
||||
if (ImGui::Selectable("Pearlescent", color_to_change == 2))
|
||||
if (ImGui::Selectable("PEARLESCENT"_T.data(), color_to_change == 2))
|
||||
{
|
||||
color_to_change = 2;
|
||||
color_type = 4;
|
||||
}
|
||||
|
||||
if (ImGui::Selectable("Interior", color_to_change == 3))
|
||||
if (ImGui::Selectable("INTERIOR"_T.data(), color_to_change == 3))
|
||||
{
|
||||
color_to_change = 3;
|
||||
color_type = 6;
|
||||
}
|
||||
|
||||
if (ImGui::Selectable("Dashboard", color_to_change == 4))
|
||||
if (ImGui::Selectable("DASHBOARD"_T.data(), color_to_change == 4))
|
||||
{
|
||||
color_to_change = 4;
|
||||
color_type = 7;
|
||||
@ -530,7 +536,7 @@ namespace big
|
||||
{
|
||||
ImGui::BeginDisabled();
|
||||
}
|
||||
if (ImGui::Selectable("Tire Smoke", color_to_change == 5))
|
||||
if (ImGui::Selectable("TIRE_SMOKE"_T.data(), color_to_change == 5))
|
||||
{
|
||||
color_to_change = 5;
|
||||
color_type = 8;
|
||||
@ -540,7 +546,7 @@ namespace big
|
||||
ImGui::EndDisabled();
|
||||
}
|
||||
|
||||
if (ImGui::Selectable("Wheel Color", color_to_change == 6))
|
||||
if (ImGui::Selectable("WHEEL_COLOR"_T.data(), color_to_change == 6))
|
||||
{
|
||||
color_to_change = 6;
|
||||
color_type = 5;
|
||||
@ -550,17 +556,19 @@ namespace big
|
||||
{
|
||||
ImGui::BeginDisabled();
|
||||
}
|
||||
if (ImGui::Selectable("Headlight##headlight_col", color_to_change == 7))
|
||||
ImGui::PushID("##headlight_col");
|
||||
if (ImGui::Selectable("HEADLIGHT"_T.data(), color_to_change == 7))
|
||||
{
|
||||
color_to_change = 7;
|
||||
color_type = 9;
|
||||
}
|
||||
ImGui::PopID();
|
||||
if (!owned_mods[MOD_XENON_LIGHTS])
|
||||
{
|
||||
ImGui::EndDisabled();
|
||||
}
|
||||
|
||||
if (ImGui::Selectable("Neon", color_to_change == 8))
|
||||
if (ImGui::Selectable("NEON"_T.data(), color_to_change == 8))
|
||||
{
|
||||
color_to_change = 8;
|
||||
color_type = 8;
|
||||
@ -582,11 +590,11 @@ namespace big
|
||||
ImGui::SameLine();
|
||||
if (ImGui::ListBoxHeader("##colors", ImVec2(140, 254)))
|
||||
{
|
||||
if (ImGui::Selectable("Custom", color_type == 8, ImGuiSelectableFlags_SelectOnClick))
|
||||
if (ImGui::Selectable("CUSTOM"_T.data(), color_type == 8, ImGuiSelectableFlags_SelectOnClick))
|
||||
{
|
||||
color_type = 8;
|
||||
}
|
||||
if (ImGui::Selectable("Remove Custom", false))
|
||||
if (ImGui::Selectable("REMOVE_CUSTOM"_T.data(), false))
|
||||
{
|
||||
g_fiber_pool->queue_job([] {
|
||||
if (color_to_change == 0)
|
||||
@ -601,19 +609,19 @@ namespace big
|
||||
});
|
||||
}
|
||||
|
||||
if (ImGui::Selectable("Chrome", color_type == 0))
|
||||
if (ImGui::Selectable("CHROME"_T.data(), color_type == 0))
|
||||
{
|
||||
color_type = 0;
|
||||
}
|
||||
if (ImGui::Selectable("Classic", color_type == 1))
|
||||
if (ImGui::Selectable("CLASSIC"_T.data(), color_type == 1))
|
||||
{
|
||||
color_type = 1;
|
||||
}
|
||||
if (ImGui::Selectable("Matte", color_type == 2))
|
||||
if (ImGui::Selectable("MATTE"_T.data(), color_type == 2))
|
||||
{
|
||||
color_type = 2;
|
||||
}
|
||||
if (ImGui::Selectable("Metals", color_type == 3))
|
||||
if (ImGui::Selectable("METALS"_T.data(), color_type == 3))
|
||||
{
|
||||
color_type = 3;
|
||||
}
|
||||
@ -710,7 +718,7 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(214);
|
||||
if (ImGui::ColorPicker3("Custom VehColor", color, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoDragDrop | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHex))
|
||||
if (ImGui::ColorPicker3("CUSTOM_VEHCOLOR"_T.data(), color, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoDragDrop | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHex))
|
||||
{
|
||||
*color_r = (int)(color[0] * 255);
|
||||
*color_g = (int)(color[1] * 255);
|
||||
@ -772,7 +780,7 @@ namespace big
|
||||
{
|
||||
case 0: //Chrome
|
||||
{
|
||||
if (ImGui::Selectable("Chrome", selected_color == COLOR_CHROME))
|
||||
if (ImGui::Selectable("CHROME"_T.data(), selected_color == COLOR_CHROME))
|
||||
{
|
||||
if (color_to_change == 0)
|
||||
{
|
||||
|
@ -25,7 +25,7 @@ namespace big
|
||||
const auto vehicle = persist_car_service::load_vehicle(selected_vehicle_file);
|
||||
if (!vehicle)
|
||||
{
|
||||
g_notification_service->push_warning("Persist Car", "Vehicle failed to spawn, there is most likely too many spawned vehicles in the area");
|
||||
g_notification_service->push_warning("PERSIST_CAR"_T.data(), "PERSIST_CAR_TO_MANY_SPAWNED"_T.data());
|
||||
}
|
||||
else if (g.spawn_vehicle.spawn_inside)
|
||||
teleport::into_vehicle(vehicle);
|
||||
@ -34,7 +34,7 @@ namespace big
|
||||
}
|
||||
else
|
||||
{
|
||||
g_notification_service->push_warning("Persist Car", "Select a file first");
|
||||
g_notification_service->push_warning("PERSIST_CAR"_T.data(), "SELECT_FILE_FIRST"_T.data());
|
||||
}
|
||||
}
|
||||
|
||||
@ -45,7 +45,7 @@ namespace big
|
||||
const auto vehicle_files = persist_car_service::list_files();
|
||||
|
||||
ImGui::PushItemWidth(250);
|
||||
ImGui::Text("Saved Vehicles");
|
||||
ImGui::Text("SAVED_VEHICLES"_T.data());
|
||||
|
||||
if (ImGui::ListBoxHeader("##empty", ImVec2(200, 200)))
|
||||
{
|
||||
@ -65,18 +65,18 @@ namespace big
|
||||
|
||||
ImGui::PushItemWidth(250);
|
||||
components::input_text_with_hint(
|
||||
"Vehicle File Name",
|
||||
"Ex: My Cool Car",
|
||||
"VEHICLE_FILE_NAME"_T,
|
||||
"VEHICLE_FILE_NAME_EXAMPLE"_T,
|
||||
vehicle_file_name_input, IM_ARRAYSIZE(vehicle_file_name_input));
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::button("Save Vehicle", []
|
||||
components::button("SAVE_VEHICLE"_T, []
|
||||
{
|
||||
save_vehicle(vehicle_file_name_input);
|
||||
});
|
||||
|
||||
components::button("Load Vehicle", []
|
||||
components::button("LOAD_VEHICLE"_T, []
|
||||
{
|
||||
load_vehicle(selected_vehicle_file);
|
||||
});
|
||||
|
@ -11,7 +11,7 @@ namespace big
|
||||
void view::pv() {
|
||||
ImGui::SetWindowSize({ 0.f, (float)*g_pointers->m_resolution_y }, ImGuiCond_Always);
|
||||
|
||||
if (ImGui::Checkbox("Preview", &g.clone_pv.preview_vehicle))
|
||||
if (ImGui::Checkbox("PREVIEW"_T.data(), &g.clone_pv.preview_vehicle))
|
||||
{
|
||||
if (!g.clone_pv.preview_vehicle)
|
||||
{
|
||||
@ -19,21 +19,21 @@ namespace big
|
||||
}
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Spawn In", &g.clone_pv.spawn_inside);
|
||||
ImGui::Checkbox("SPAWN_IN"_T.data(), &g.clone_pv.spawn_inside);
|
||||
ImGui::SameLine();
|
||||
|
||||
static char plate_buf[9] = { 0 };
|
||||
int num_of_rows = 3;
|
||||
|
||||
ImGui::Checkbox("Spawn Clone", &g.clone_pv.spawn_clone);
|
||||
ImGui::Checkbox("SPAWN_CLONE"_T.data(), &g.clone_pv.spawn_clone);
|
||||
if (g.clone_pv.spawn_clone)
|
||||
{
|
||||
num_of_rows = 5;
|
||||
|
||||
ImGui::Checkbox("Spawn Maxed", &g.clone_pv.spawn_maxed);
|
||||
ImGui::Checkbox("SPAWN_MAXED"_T.data(), &g.clone_pv.spawn_maxed);
|
||||
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Clone PV Plate", &g.clone_pv.clone_plate);
|
||||
ImGui::Checkbox("CLONE_PV_PLATE"_T.data(), &g.clone_pv.clone_plate);
|
||||
if (g.clone_pv.clone_plate)
|
||||
{
|
||||
num_of_rows = 4;
|
||||
@ -43,7 +43,7 @@ namespace big
|
||||
ImGui::SetNextItemWidth(300.f);
|
||||
|
||||
strncpy(plate_buf, g.clone_pv.plate.c_str(), 9);
|
||||
components::input_text_with_hint("Plate", "Plate Number", plate_buf, sizeof(plate_buf), ImGuiInputTextFlags_None, [] {
|
||||
components::input_text_with_hint("PLATE"_T, "PLATE_NUMBER"_T, plate_buf, sizeof(plate_buf), ImGuiInputTextFlags_None, [] {
|
||||
g.clone_pv.plate = plate_buf;
|
||||
});
|
||||
}
|
||||
@ -54,9 +54,9 @@ namespace big
|
||||
const auto& class_arr = g_gta_data_service->vehicle_classes();
|
||||
|
||||
ImGui::SetNextItemWidth(300.f);
|
||||
if (ImGui::BeginCombo("Vehicle Class", selected_class == -1 ? "ALL" : class_arr[selected_class].c_str()))
|
||||
if (ImGui::BeginCombo("VEHICLE_CLASS"_T.data(), selected_class == -1 ? "ALL"_T.data() : class_arr[selected_class].c_str()))
|
||||
{
|
||||
if (ImGui::Selectable("ALL", selected_class == -1))
|
||||
if (ImGui::Selectable("ALL"_T.data(), selected_class == -1))
|
||||
{
|
||||
selected_class = -1;
|
||||
}
|
||||
@ -81,14 +81,14 @@ namespace big
|
||||
static char search[64];
|
||||
|
||||
ImGui::SetNextItemWidth(300.f);
|
||||
components::input_text_with_hint("Model Name", "Search", search, sizeof(search), ImGuiInputTextFlags_None);
|
||||
components::input_text_with_hint("MODEL_NAME"_T, "SEARCH"_T, search, sizeof(search), ImGuiInputTextFlags_None);
|
||||
|
||||
g_mobile_service->refresh_personal_vehicles();
|
||||
if (ImGui::ListBoxHeader("###personal_veh_list", { 300, static_cast<float>(*g_pointers->m_resolution_y - 188 - 38 * num_of_rows) }))
|
||||
{
|
||||
if (g_mobile_service->personal_vehicles().empty())
|
||||
{
|
||||
ImGui::Text("No personal vehicles found, \nare you online?");
|
||||
ImGui::Text("NO_PERSONAL_VEHICLES"_T.data());
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -134,7 +134,7 @@ namespace big
|
||||
|
||||
if (veh == 0)
|
||||
{
|
||||
g_notification_service->push_error("Vehicle", "Unable to spawn vehicle");
|
||||
g_notification_service->push_error("VEHICLE"_T.data(), "UNABLE_TO_SPAWN_VEHICLE"_T.data());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -11,7 +11,7 @@ namespace big
|
||||
{
|
||||
ImGui::SetWindowSize({ 0.f, (float)*g_pointers->m_resolution_y }, ImGuiCond_Always);
|
||||
|
||||
if (ImGui::Checkbox("Preview", &g.spawn_vehicle.preview_vehicle))
|
||||
if (ImGui::Checkbox("PREVIEW"_T.data(), &g.spawn_vehicle.preview_vehicle))
|
||||
{
|
||||
if (!g.spawn_vehicle.preview_vehicle)
|
||||
{
|
||||
@ -27,7 +27,7 @@ namespace big
|
||||
strncpy(plate_buf, g.spawn_vehicle.plate.c_str(), 9);
|
||||
|
||||
ImGui::SetNextItemWidth(300.f);
|
||||
components::input_text_with_hint("Plate", "Plate Number", plate_buf, sizeof(plate_buf), ImGuiInputTextFlags_None, [] {
|
||||
components::input_text_with_hint("PLATE"_T, "PLATE_NUMBER"_T, plate_buf, sizeof(plate_buf), ImGuiInputTextFlags_None, [] {
|
||||
g.spawn_vehicle.plate = plate_buf;
|
||||
});
|
||||
|
||||
@ -36,9 +36,9 @@ namespace big
|
||||
const auto& class_arr = g_gta_data_service->vehicle_classes();
|
||||
|
||||
ImGui::SetNextItemWidth(300.f);
|
||||
if (ImGui::BeginCombo("Vehicle Class", selected_class == -1 ? "ALL" : class_arr[selected_class].c_str()))
|
||||
if (ImGui::BeginCombo("VEHICLE_CLASS"_T.data(), selected_class == -1 ? "ALL"_T.data() : class_arr[selected_class].c_str()))
|
||||
{
|
||||
if (ImGui::Selectable("ALL", selected_class == -1))
|
||||
if (ImGui::Selectable("ALL"_T.data(), selected_class == -1))
|
||||
{
|
||||
selected_class = -1;
|
||||
}
|
||||
@ -63,7 +63,7 @@ namespace big
|
||||
static char search[64];
|
||||
|
||||
ImGui::SetNextItemWidth(300.f);
|
||||
components::input_text_with_hint("Model Name", "Search", search, sizeof(search), ImGuiInputTextFlags_None);
|
||||
components::input_text_with_hint("MODEL_NAME"_T, "SEARCH"_T, search, sizeof(search), ImGuiInputTextFlags_None);
|
||||
|
||||
|
||||
if (ImGui::ListBoxHeader("###vehicles", { 300, static_cast<float>(*g_pointers->m_resolution_y - 188 - 38 * 4) }))
|
||||
@ -80,7 +80,7 @@ namespace big
|
||||
{
|
||||
const auto& item = g_gta_data_service->vehicle_by_hash(veh_hash);
|
||||
|
||||
components::selectable(std::format("Current Vehicle [{}]", item.m_display_name), false, [] {
|
||||
components::selectable(std::vformat("SPAWN_VEHICLE_CURRENT_VEHICLE"_T, std::make_format_args(item.m_display_name)), false, [] {
|
||||
if (self::veh)
|
||||
{
|
||||
Vector3 spawn_location = vehicle::get_spawn_location(g.spawn_vehicle.spawn_inside);
|
||||
@ -92,7 +92,7 @@ namespace big
|
||||
|
||||
if (veh == 0)
|
||||
{
|
||||
g_notification_service->push_error("Vehicle", "Unable to spawn vehicle");
|
||||
g_notification_service->push_error("VEHICLE"_T.data(), "UNABLE_TO_SPAWN_VEHICLE"_T.data());
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -162,7 +162,7 @@ namespace big
|
||||
|
||||
if (veh == 0)
|
||||
{
|
||||
g_notification_service->push_error("Vehicle", "Unable to spawn vehicle");
|
||||
g_notification_service->push_error("VEHICLE"_T.data(), "UNABLE_TO_SPAWN_VEHICLE"_T.data());
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -196,7 +196,7 @@ namespace big
|
||||
}
|
||||
else
|
||||
{
|
||||
ImGui::Text("No vehicles in registry.");
|
||||
ImGui::Text("NO_VEHICLE_IN_REGISTRY"_T.data());
|
||||
}
|
||||
ImGui::ListBoxFooter();
|
||||
}
|
||||
|
@ -8,14 +8,14 @@ namespace big
|
||||
{
|
||||
void view::vehicle()
|
||||
{
|
||||
components::button("MMI Fix All PV", [] {
|
||||
components::button("MORS_FIX_ALL"_T, [] {
|
||||
int amount_fixed = mobile::mors_mutual::fix_all();
|
||||
g_notification_service->push("Mobile",
|
||||
std::format("{} vehicle{} been fixed.", amount_fixed, amount_fixed == 1 ? " has" : "s have")
|
||||
g_notification_service->push("MOBILE"_T.data(),
|
||||
std::vformat("VEHICLE_FIX_AMOUNT"_T.data(), std::make_format_args(amount_fixed, amount_fixed == 1 ? "VEHICLE_FIX_HAS"_T.data() : "VEHICLE_FIX_HAVE"_T.data()))
|
||||
);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Repair", [] {
|
||||
components::button("REPAIR"_T, [] {
|
||||
vehicle::repair(self::veh);
|
||||
});
|
||||
|
||||
@ -24,24 +24,24 @@ namespace big
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
components::button("Teleport in PV", [] {
|
||||
components::button("TP_IN_PV"_T, [] {
|
||||
Vehicle veh = mobile::mechanic::get_personal_vehicle();
|
||||
teleport::into_vehicle(veh);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Bring PV", [] {
|
||||
components::button("BRING_PV"_T, [] {
|
||||
Vehicle veh = mobile::mechanic::get_personal_vehicle();
|
||||
vehicle::bring(veh, self::pos, true);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Bring Closest Vehicle", [] {
|
||||
components::button("BRING_CLOSEST_VEHICLE"_T, [] {
|
||||
Vehicle veh = vehicle::get_closest_to_location(self::pos, 200);
|
||||
vehicle::bring(veh, self::pos, true, -1);
|
||||
});
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
components::button("Turn Engine On", [] {
|
||||
components::button("TURN_ENGINE_ON"_T, [] {
|
||||
vehicle::set_engine_state(
|
||||
self::veh,
|
||||
true,
|
||||
@ -50,7 +50,7 @@ namespace big
|
||||
);
|
||||
});
|
||||
ImGui::SameLine();
|
||||
components::button("Turn Engine Off", [] {
|
||||
components::button("TURN_ENGINE_OFF"_T, [] {
|
||||
vehicle::set_engine_state(
|
||||
self::veh,
|
||||
false,
|
||||
@ -58,17 +58,17 @@ namespace big
|
||||
g.vehicle.disable_engine_auto_start
|
||||
);
|
||||
});
|
||||
ImGui::Checkbox("Disable Engine Auto Start", &g.vehicle.disable_engine_auto_start);
|
||||
ImGui::Checkbox("DISABLE_ENGINE_AUTO_START"_T.data(), &g.vehicle.disable_engine_auto_start);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Change State Immediately", &g.vehicle.change_engine_state_immediately);
|
||||
ImGui::Checkbox("CHANGE_STATE_IMMEDIATELY"_T.data(), &g.vehicle.change_engine_state_immediately);
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
components::sub_title("General");
|
||||
components::sub_title("GENERAL"_T);
|
||||
{
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Checkbox("God Mode", &g.vehicle.god_mode);
|
||||
ImGui::Checkbox("GOD_MODE"_T.data(), &g.vehicle.god_mode);
|
||||
components::command_checkbox<"hornboost">();
|
||||
components::command_checkbox<"vehjump">();
|
||||
components::command_checkbox<"invisveh">();
|
||||
@ -91,10 +91,10 @@ namespace big
|
||||
ImGui::BeginGroup();
|
||||
|
||||
components::command_checkbox<"seatbelt">();
|
||||
ImGui::Checkbox("Turn Signals", &g.vehicle.turn_signals);
|
||||
ImGui::Checkbox("TURN_SIGNALS"_T.data(), &g.vehicle.turn_signals);
|
||||
if (g.vehicle.turn_signals)
|
||||
{
|
||||
ImGui::Checkbox("Fully Automatic Signal", &g.vehicle.auto_turn_signals);
|
||||
ImGui::Checkbox("FULLY_AUTOMATIC_SIGNAL"_T.data(), &g.vehicle.auto_turn_signals);
|
||||
}
|
||||
components::command_checkbox<"driveunder">();
|
||||
|
||||
@ -103,9 +103,9 @@ namespace big
|
||||
ImGui::Separator();
|
||||
|
||||
|
||||
components::sub_title("Proofs");
|
||||
components::sub_title("PROOFS"_T);
|
||||
{
|
||||
if (ImGui::Button("Check all"))
|
||||
if (ImGui::Button("CHECK_ALL"_T.data()))
|
||||
{
|
||||
g.vehicle.proof_bullet = true;
|
||||
g.vehicle.proof_fire = true;
|
||||
@ -118,7 +118,7 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
if (ImGui::Button("Uncheck all"))
|
||||
if (ImGui::Button("UNCHECK_ALL"_T.data()))
|
||||
{
|
||||
g.vehicle.proof_bullet = false;
|
||||
g.vehicle.proof_fire = false;
|
||||
@ -131,35 +131,35 @@ namespace big
|
||||
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Checkbox("Bullet", &g.vehicle.proof_bullet);
|
||||
ImGui::Checkbox("Fire", &g.vehicle.proof_fire);
|
||||
ImGui::Checkbox("BULLET"_T.data(), &g.vehicle.proof_bullet);
|
||||
ImGui::Checkbox("FIRE"_T.data(), &g.vehicle.proof_fire);
|
||||
|
||||
ImGui::EndGroup();
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Checkbox("Collision", &g.vehicle.proof_collision);
|
||||
ImGui::Checkbox("Melee", &g.vehicle.proof_melee);
|
||||
ImGui::Checkbox("COLLISION"_T.data(), &g.vehicle.proof_collision);
|
||||
ImGui::Checkbox("MELEE"_T.data(), &g.vehicle.proof_melee);
|
||||
|
||||
ImGui::EndGroup();
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Checkbox("Explosion", &g.vehicle.proof_explosion);
|
||||
ImGui::Checkbox("Steam", &g.vehicle.proof_steam);
|
||||
ImGui::Checkbox("EXPLOSION"_T.data(), &g.vehicle.proof_explosion);
|
||||
ImGui::Checkbox("STEAM"_T.data(), &g.vehicle.proof_steam);
|
||||
|
||||
ImGui::EndGroup();
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Checkbox("Water", &g.vehicle.proof_water);
|
||||
ImGui::Checkbox("WATER"_T.data(), &g.vehicle.proof_water);
|
||||
|
||||
ImGui::EndGroup();
|
||||
}
|
||||
ImGui::Separator();
|
||||
|
||||
|
||||
components::sub_title("Speed Unit");
|
||||
components::sub_title("SPEED_UNIT"_T);
|
||||
{
|
||||
ImGui::RadioButton(
|
||||
speed_unit_strings[(int)SpeedUnit::KMPH].c_str(),
|
||||
@ -181,13 +181,13 @@ namespace big
|
||||
}
|
||||
ImGui::Separator();
|
||||
|
||||
components::sub_title("Speedo Meter");
|
||||
components::sub_title("SPEEDO_METER"_T);
|
||||
{
|
||||
ImGui::Checkbox("Enabled", &g.vehicle.speedo_meter.enabled);
|
||||
ImGui::Checkbox("ENABLED"_T.data(), &g.vehicle.speedo_meter.enabled);
|
||||
|
||||
if (g.vehicle.speedo_meter.enabled)
|
||||
{
|
||||
ImGui::Text("Position (X, Y)");
|
||||
ImGui::Text("POS_X_Y"_T.data());
|
||||
|
||||
float pos[2] = { g.vehicle.speedo_meter.x, g.vehicle.speedo_meter.y };
|
||||
|
||||
@ -199,7 +199,7 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::Checkbox("Left Sided", &g.vehicle.speedo_meter.left_side);
|
||||
ImGui::Checkbox("LEFT_SIDED"_T.data(), &g.vehicle.speedo_meter.left_side);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,7 @@ namespace big
|
||||
static void handling_saved_profiles();
|
||||
static void reaction_settings();
|
||||
static void protection_settings();
|
||||
static void translation_settings();
|
||||
static void heading();
|
||||
static void mobile();
|
||||
static void navigation();
|
||||
|
@ -13,36 +13,36 @@ namespace big
|
||||
if (g_gta_data_service->cache_needs_update())
|
||||
{
|
||||
g_gui->toggle(true);
|
||||
ImGui::OpenPopup("Game Cache");
|
||||
ImGui::OpenPopup("GAME_CACHE"_T.data());
|
||||
}
|
||||
|
||||
ImGui::SetNextWindowSize({ 800, 210 }, ImGuiCond_FirstUseEver);
|
||||
ImGui::SetNextWindowPos({ 200, 200 }, ImGuiCond_FirstUseEver);
|
||||
if (ImGui::BeginPopupModal("Game Cache"))
|
||||
if (ImGui::BeginPopupModal("GAME_CACHE"_T.data()))
|
||||
{
|
||||
switch (g_gta_data_service->state())
|
||||
{
|
||||
case eGtaDataUpdateState::NEEDS_UPDATE:
|
||||
{
|
||||
ImGui::Text("YimMenu requires a rebuild of the game cache. This may take up to one minute to generate.");
|
||||
ImGui::Text("GAME_CACHE_UPDATE"_T.data());
|
||||
|
||||
if (*g_pointers->m_is_session_started)
|
||||
{
|
||||
if (ImGui::Button("Update Cache"))
|
||||
if (ImGui::Button("GAME_CACHE_UPDATE_CACHE"_T.data()))
|
||||
{
|
||||
g_gta_data_service->update_now();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ImGui::TextWrapped("You are currently in single player, you can force build the cache in single player but risk crashing when going into multiplayer or load online and cache.");
|
||||
ImGui::TextWrapped("GAME_CACHE_SINGLE_PLAYER_DESCRIPTION"_T.data());
|
||||
|
||||
if (ImGui::Button("I don't care, update in single player!"))
|
||||
if (ImGui::Button("GAME_CACHE_DONT_CARE"_T.data()))
|
||||
{
|
||||
g_gta_data_service->update_now();
|
||||
}
|
||||
|
||||
if (ImGui::Button("Update cache in online."))
|
||||
if (ImGui::Button("GAME_CACHE_GO_ONLINE"_T.data()))
|
||||
{
|
||||
g_gta_data_service->update_in_online();
|
||||
}
|
||||
@ -52,13 +52,13 @@ namespace big
|
||||
}
|
||||
case eGtaDataUpdateState::WAITING_FOR_ONLINE:
|
||||
{
|
||||
ImGui::Text("Waiting for online to start cache update...");
|
||||
ImGui::Text("GAME_CACHE_WAITING_FOR_ONLINE"_T.data());
|
||||
|
||||
break;
|
||||
}
|
||||
case eGtaDataUpdateState::UPDATING:
|
||||
{
|
||||
ImGui::Text("Updating cache, please wait...");
|
||||
ImGui::Text("GAME_CACHE_UPDATING"_T.data());
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ namespace big
|
||||
}
|
||||
|
||||
ImGui::PushItemWidth(250);
|
||||
components::sub_title("Saved Jobs");
|
||||
components::sub_title("CREATOR_SAVED_JOBS"_T);
|
||||
|
||||
if (ImGui::ListBoxHeader("##empty", ImVec2(200, 200)))
|
||||
{
|
||||
@ -40,14 +40,14 @@ namespace big
|
||||
|
||||
if (!selected_creator_file.empty())
|
||||
{
|
||||
components::button("Save To File", []
|
||||
components::button("CREATOR_SAVE_TO_FILE"_T, []
|
||||
{
|
||||
creator_storage_service::save_file(selected_creator_file);
|
||||
});
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::button("Load From File", []
|
||||
components::button("CREATOR_LOAD_FROM_FILE"_T, []
|
||||
{
|
||||
creator_storage_service::load_file(selected_creator_file);
|
||||
});
|
||||
@ -57,11 +57,11 @@ namespace big
|
||||
|
||||
ImGui::PushItemWidth(250);
|
||||
components::input_text_with_hint(
|
||||
"Job Name",
|
||||
"Ex: My Cool Job",
|
||||
"CREATOR_JOB_FILENAME"_T,
|
||||
"CREATOR_JOB_FILENAME_HINT"_T,
|
||||
job_file_name_input, IM_ARRAYSIZE(job_file_name_input));
|
||||
|
||||
components::button("Create Job File", []
|
||||
components::button("CREATOR_JOB_CREATE_FILE"_T, []
|
||||
{
|
||||
cached_creator_files = false;
|
||||
creator_storage_service::create_file(std::string(job_file_name_input) + ".json");
|
||||
@ -69,7 +69,7 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::button("Refresh", []
|
||||
components::button("REFRESH"_T, []
|
||||
{
|
||||
cached_creator_files = false;
|
||||
});
|
||||
@ -77,9 +77,9 @@ namespace big
|
||||
ImGui::Separator();
|
||||
|
||||
static char job_link[69]{};
|
||||
components::input_text("SocialClub Job Link", job_link, sizeof(job_link));
|
||||
components::input_text("CREATOR_JOB_LINK"_T, job_link, sizeof(job_link));
|
||||
|
||||
components::button("Import", []
|
||||
components::button("CREATOR_JOB_IMPORT"_T, []
|
||||
{
|
||||
g_thread_pool->push([]
|
||||
{
|
||||
@ -100,14 +100,14 @@ namespace big
|
||||
if (g_api_service->download_job_metadata(content_id, f1 < 0 ? 0 : f1, f0 < 0 ? 0 : f0, NETWORK::UGC_GET_CONTENT_LANGUAGE(0)))
|
||||
{
|
||||
cached_creator_files = false;
|
||||
g_notification_service->push("Job Import", "Job Import successfully done");
|
||||
g_notification_service->push("CREATOR_JOB_IMPORT_NOTIFICATION"_T.data(), "CREATOR_JOB_IMPORT_SUCCESS"_T.data());
|
||||
}
|
||||
else {
|
||||
g_notification_service->push_error("Job Import", "Could download job metadata");
|
||||
g_notification_service->push_error("CREATOR_JOB_IMPORT_NOTIFICATION"_T.data(), "CREATOR_JOB_FAILED_METADATA_FETCH"_T.data());
|
||||
}
|
||||
}
|
||||
else {
|
||||
g_notification_service->push_error("Job Import", "UGC QueryContent failed");
|
||||
g_notification_service->push_error("CREATOR_JOB_IMPORT_NOTIFICATION"_T.data(), "CREATOR_JOB_UGC_QUERY_FAILED"_T.data());
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -115,19 +115,19 @@ namespace big
|
||||
|
||||
ImGui::EndGroup();
|
||||
|
||||
components::sub_title("Launch Creator");
|
||||
components::sub_title("CREATOR_LAUNCH"_T);
|
||||
ImGui::BeginGroup();
|
||||
components::button("Race", [] { scripts::start_creator_script(RAGE_JOAAT("fm_race_creator")); }); ImGui::SameLine();
|
||||
components::button("Capture", [] { scripts::start_creator_script(RAGE_JOAAT("fm_capture_creator")); }); ImGui::SameLine();
|
||||
components::button("Deathmatch", [] { scripts::start_creator_script(RAGE_JOAAT("fm_deathmatch_creator")); }); ImGui::SameLine();
|
||||
components::button("LTS", [] { scripts::start_creator_script(RAGE_JOAAT("fm_lts_creator")); });
|
||||
components::button("RACE"_T, [] { scripts::start_creator_script(RAGE_JOAAT("fm_race_creator")); }); ImGui::SameLine();
|
||||
components::button("CAPTURE"_T, [] { scripts::start_creator_script(RAGE_JOAAT("fm_capture_creator")); }); ImGui::SameLine();
|
||||
components::button("DEATHMATCH"_T, [] { scripts::start_creator_script(RAGE_JOAAT("fm_deathmatch_creator")); }); ImGui::SameLine();
|
||||
components::button("LTS"_T, [] { scripts::start_creator_script(RAGE_JOAAT("fm_lts_creator")); });
|
||||
ImGui::EndGroup();
|
||||
|
||||
components::sub_title("Creator Options");
|
||||
components::sub_title("CREATOR_OPTIONS"_T);
|
||||
ImGui::BeginGroup();
|
||||
ImGui::Checkbox("Infinite Model Memory", &g.ugc.infinite_model_memory);
|
||||
ImGui::Checkbox("CREATOR_INFINITE_MEMORY"_T.data(), &g.ugc.infinite_model_memory);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("Infinite Model Memory is only useful if dev mode is not activated");
|
||||
ImGui::SetTooltip("CREATOR_INFINITE_MEMORY_DESCRIPTION"_T.data());
|
||||
|
||||
ImGui::EndGroup();
|
||||
}
|
||||
|
@ -77,7 +77,7 @@ namespace big
|
||||
auto plyr = g_player_service->get_by_id(selected_ped_player_id);
|
||||
if (plyr == nullptr || !plyr->is_valid() || !plyr->get_ped() || !plyr->get_ped()->m_navigation)
|
||||
{
|
||||
g_notification_service->push_error("Ped", "Invalid Online Player.");
|
||||
g_notification_service->push_error("PED"_T.data(), "INVALID_ONLINE_PED"_T.data());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -102,7 +102,7 @@ namespace big
|
||||
auto plyr = g_player_service->get_by_id(selected_ped_for_player_id);
|
||||
if (plyr == nullptr || !plyr->is_valid() || !plyr->get_ped() || !plyr->get_ped()->m_navigation)
|
||||
{
|
||||
g_notification_service->push_error("Ped", "Invalid Online Player.");
|
||||
g_notification_service->push_error("PED"_T.data(), "INVALID_ONLINE_PED"_T.data());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -121,7 +121,7 @@ namespace big
|
||||
|
||||
if (ped == 0)
|
||||
{
|
||||
g_notification_service->push_error("Ped", "Failed to spawn model, did you give an incorrect model ? ");
|
||||
g_notification_service->push_error("PED"_T.data(), "SPAWN_MODEL_FAILED"_T.data());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -234,26 +234,26 @@ namespace big
|
||||
}
|
||||
}
|
||||
|
||||
components::sub_title("Ped Model");
|
||||
components::sub_title("PED_MODEL"_T);
|
||||
{
|
||||
ImGui::BeginGroup();
|
||||
{
|
||||
ImGui::Text("Ped Type");
|
||||
ImGui::Text("PED_TYPE"_T.data());
|
||||
|
||||
ImGui::SetNextItemWidth(160.f);
|
||||
if (ImGui::BeginCombo(
|
||||
"##ped_type",
|
||||
selected_ped_type == -1 ? "ALL" :
|
||||
selected_ped_type == -2 ? "ONLINE PLAYER" :
|
||||
selected_ped_type == -1 ? "ALL"_T.data() :
|
||||
selected_ped_type == -2 ? "ONLINE_PLAYER"_T.data() :
|
||||
ped_type_arr[selected_ped_type].c_str()
|
||||
)) {
|
||||
|
||||
if (ImGui::Selectable("ONLINE PLAYER", selected_ped_type == -2))
|
||||
if (ImGui::Selectable("ONLINE_PLAYER"_T.data(), selected_ped_type == -2))
|
||||
{
|
||||
selected_ped_type = -2;
|
||||
}
|
||||
|
||||
if (ImGui::Selectable("ALL", selected_ped_type == -1))
|
||||
if (ImGui::Selectable("ALL"_T.data(), selected_ped_type == -1))
|
||||
{
|
||||
selected_ped_type = -1;
|
||||
}
|
||||
@ -283,16 +283,16 @@ namespace big
|
||||
{
|
||||
ImGui::BeginGroup();
|
||||
{
|
||||
ImGui::Text("Player");
|
||||
ImGui::Text("PLAYER"_T.data());
|
||||
|
||||
ImGui::SetNextItemWidth(240.f);
|
||||
if (ImGui::BeginCombo(
|
||||
"##ped_player",
|
||||
selected_ped_player_id == -1 ?
|
||||
"Self" :
|
||||
"SELF"_T.data() :
|
||||
g_player_service->get_by_id(selected_ped_player_id)->get_name()
|
||||
)) {
|
||||
if (ImGui::Selectable("Self", selected_ped_player_id == -1))
|
||||
if (ImGui::Selectable("SELF"_T.data(), selected_ped_player_id == -1))
|
||||
{
|
||||
selected_ped_player_id = -1;
|
||||
g_model_preview_service->stop_preview();
|
||||
@ -364,11 +364,11 @@ namespace big
|
||||
{
|
||||
ImGui::BeginGroup();
|
||||
{
|
||||
ImGui::Text("Model Name");
|
||||
ImGui::Text("MODEL_NAME"_T.data());
|
||||
|
||||
ImGui::SetNextItemWidth(240.f);
|
||||
components::input_text_with_hint(
|
||||
"##ped_model_name", "Model Name",
|
||||
"##ped_model_name", "MODEL_NAME"_T,
|
||||
ped_model_buf, sizeof(ped_model_buf), ImGuiInputTextFlags_EnterReturnsTrue,
|
||||
[] {
|
||||
ped_model_dropdown_open = false;
|
||||
@ -453,22 +453,22 @@ namespace big
|
||||
ImGui::Separator();
|
||||
|
||||
|
||||
components::sub_title("Weapon");
|
||||
components::sub_title("WEAPON"_T);
|
||||
{
|
||||
ImGui::BeginGroup();
|
||||
{
|
||||
ImGui::Text("Weapon Type");
|
||||
ImGui::Text("WEAPON_TYPE"_T.data());
|
||||
|
||||
ImGui::SetNextItemWidth(160.f);
|
||||
if (ImGui::BeginCombo(
|
||||
"##ped_weapon_type",
|
||||
selected_ped_weapon_type == SPAWN_PED_ALL_WEAPONS ?
|
||||
"ALL" :
|
||||
"ALL"_T.data() :
|
||||
selected_ped_weapon_type == SPAWN_PED_NO_WEAPONS ?
|
||||
"NO WEAPONS" :
|
||||
"NO_WEAPONS"_T.data() :
|
||||
weapon_type_arr[selected_ped_weapon_type].c_str()
|
||||
)) {
|
||||
if (ImGui::Selectable("ALL", selected_ped_weapon_type == SPAWN_PED_ALL_WEAPONS))
|
||||
if (ImGui::Selectable("ALL"_T.data(), selected_ped_weapon_type == SPAWN_PED_ALL_WEAPONS))
|
||||
{
|
||||
selected_ped_weapon_type = SPAWN_PED_ALL_WEAPONS;
|
||||
}
|
||||
@ -478,7 +478,7 @@ namespace big
|
||||
ImGui::SetItemDefaultFocus();
|
||||
}
|
||||
|
||||
if (ImGui::Selectable("NO WEAPONS", selected_ped_weapon_type == SPAWN_PED_NO_WEAPONS))
|
||||
if (ImGui::Selectable("NO_WEAPONS"_T.data(), selected_ped_weapon_type == SPAWN_PED_NO_WEAPONS))
|
||||
{
|
||||
selected_ped_weapon_type = SPAWN_PED_NO_WEAPONS;
|
||||
}
|
||||
@ -511,20 +511,20 @@ namespace big
|
||||
|
||||
ImGui::BeginGroup();
|
||||
{
|
||||
ImGui::Text("Weapon");
|
||||
ImGui::Text("WEAPON"_T.data());
|
||||
|
||||
ImGui::SetNextItemWidth(240.f);
|
||||
if (ImGui::BeginCombo(
|
||||
"##ped_weapon",
|
||||
selected_ped_weapon_type == SPAWN_PED_NO_WEAPONS ?
|
||||
"NO WEAPONS" :
|
||||
"NO_WEAPONS"_T.data() :
|
||||
selected_ped_weapon_hash == 0 ?
|
||||
"ALL" :
|
||||
"ALL"_T.data() :
|
||||
g_gta_data_service->weapon_by_hash(selected_ped_weapon_hash).m_display_name
|
||||
)) {
|
||||
if (selected_ped_weapon_type != SPAWN_PED_NO_WEAPONS)
|
||||
{
|
||||
if (ImGui::Selectable("ALL", selected_ped_weapon_hash == 0))
|
||||
if (ImGui::Selectable("ALL"_T.data(), selected_ped_weapon_hash == 0))
|
||||
{
|
||||
selected_ped_weapon_hash = 0;
|
||||
}
|
||||
@ -562,7 +562,7 @@ namespace big
|
||||
ImGui::Separator();
|
||||
|
||||
|
||||
components::sub_title("Spawn For");
|
||||
components::sub_title("SPAWN_FOR"_T);
|
||||
{
|
||||
if (ImGui::BeginCombo(
|
||||
"##ped_for",
|
||||
@ -619,7 +619,7 @@ namespace big
|
||||
ImGui::Separator();
|
||||
|
||||
|
||||
if (ImGui::Checkbox("Preview", &g.world.spawn_ped.preview_ped))
|
||||
if (ImGui::Checkbox("PREVIEW"_T.data(), &g.world.spawn_ped.preview_ped))
|
||||
{
|
||||
if (!g.world.spawn_ped.preview_ped)
|
||||
{
|
||||
@ -631,7 +631,7 @@ namespace big
|
||||
ImGui::Checkbox("Invisible", &g.world.spawn_ped.spawn_invisible);
|
||||
ImGui::Checkbox("Attacker", &g.world.spawn_ped.spawn_as_attacker);
|
||||
|
||||
components::button("Change Player Model", []
|
||||
components::button("CHANGE_PLAYER_MODEL"_T, []
|
||||
{
|
||||
if (selected_ped_type == -2)
|
||||
{
|
||||
@ -649,7 +649,7 @@ namespace big
|
||||
{
|
||||
if (!ped::change_player_model(rage::joaat(ped_model_buf)))
|
||||
{
|
||||
g_notification_service->push_error("Ped", "Failed to spawn model, did you give an incorrect model?");
|
||||
g_notification_service->push_error("PED"_T.data(), "SPAWN_MODEL_FAILED"_T.data());
|
||||
return;
|
||||
}
|
||||
|
||||
@ -659,7 +659,8 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::button("Spawn Ped", []
|
||||
|
||||
components::button("SPAWN_PED"_T, []
|
||||
{
|
||||
if (selected_ped_for_player_id == SPAWN_PED_FOR_EVERYONE)
|
||||
{
|
||||
@ -676,7 +677,7 @@ namespace big
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::button("Spawn Bodyguard", []
|
||||
components::button("SPAWN_BODYGUARD"_T, []
|
||||
{
|
||||
if (selected_ped_for_player_id == SPAWN_PED_FOR_EVERYONE)
|
||||
{
|
||||
|
@ -6,28 +6,28 @@ namespace big
|
||||
{
|
||||
void view::time_and_weather()
|
||||
{
|
||||
if (ImGui::TreeNode("Local Time"))
|
||||
if (ImGui::TreeNode("LOCAL_TIME"_T.data()))
|
||||
{
|
||||
ImGui::Checkbox("Override Time", &g.session.override_time);
|
||||
ImGui::Checkbox("OVERRIDE_TIME"_T.data(), &g.session.override_time);
|
||||
|
||||
if (g.session.override_time)
|
||||
{
|
||||
ImGui::SliderInt("Hour", &g.session.custom_time.hour, 0, 23);
|
||||
ImGui::SliderInt("Minute", &g.session.custom_time.minute, 0, 59);
|
||||
ImGui::SliderInt("Second", &g.session.custom_time.second, 0, 59);
|
||||
ImGui::SliderInt("HOUR"_T.data(), &g.session.custom_time.hour, 0, 23);
|
||||
ImGui::SliderInt("MINUTE"_T.data(), &g.session.custom_time.minute, 0, 59);
|
||||
ImGui::SliderInt("SECOND"_T.data(), &g.session.custom_time.second, 0, 59);
|
||||
}
|
||||
|
||||
ImGui::TreePop();
|
||||
}
|
||||
|
||||
if (ImGui::TreeNode("Local Weather"))
|
||||
if (ImGui::TreeNode("LOCAL_WEATHER"_T.data()))
|
||||
{
|
||||
components::button("Clear Override", []
|
||||
components::button("CLEAR_OVERRIDE"_T, []
|
||||
{
|
||||
MISC::CLEAR_OVERRIDE_WEATHER();
|
||||
});
|
||||
|
||||
if (ImGui::ListBox("", &g.session.local_weather, session::weathers, 15))
|
||||
if (ImGui::ListBox("##weather-listbox", &g.session.local_weather, session::weathers, 15))
|
||||
{
|
||||
g_fiber_pool->queue_job([]
|
||||
{
|
||||
|
@ -8,39 +8,38 @@ namespace big
|
||||
{
|
||||
void view::train()
|
||||
{
|
||||
components::button("Hijack Train", []
|
||||
{
|
||||
train::hijack_train();
|
||||
});
|
||||
components::button("HIJACK_TRAIN"_T, []
|
||||
{
|
||||
train::hijack_train();
|
||||
});
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::button("Delete Train", []
|
||||
{
|
||||
train::delete_train();
|
||||
});
|
||||
components::button("DELETE_TRAIN"_T, []
|
||||
{
|
||||
train::delete_train();
|
||||
});
|
||||
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("You cant delete the train while in it.");
|
||||
ImGui::SetTooltip("DELETE_TRAIN_DESC"_T.data());
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
components::button("Exit Train", []
|
||||
{
|
||||
train::exit_train();
|
||||
});
|
||||
components::button("EXIT_TRAIN"_T, []
|
||||
{
|
||||
train::exit_train();
|
||||
});
|
||||
|
||||
static float train_speed = 0;
|
||||
|
||||
ImGui::SliderFloat("Train Speed", &train_speed, -500.f, 500.f);
|
||||
ImGui::SliderFloat("TRAIN_SPEED"_T.data(), &train_speed, -500.f, 500.f);
|
||||
ImGui::SameLine();
|
||||
components::button("Set", [] { train::set_train_speed(train_speed); });
|
||||
components::button("SET"_T, [] { train::set_train_speed(train_speed); });
|
||||
|
||||
ImGui::Checkbox("Drive Train", &g.world.train.drive_train);
|
||||
ImGui::Checkbox("DRIVE_TRAIN"_T.data(), &g.world.train.drive_train);
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::Checkbox("Derail Train", &g.world.train.derail_train);
|
||||
|
||||
ImGui::Checkbox("DERAIL_TRAIN"_T.data(), &g.world.train.derail_train);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user