Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0d7dde929d | ||
|
|
3ab802fd56 | ||
|
|
53030cc5f7 | ||
|
|
383224c2fa | ||
|
|
575a6a4f1d | ||
|
|
17579de277 | ||
|
|
00727b9913 | ||
|
|
1f6fc22525 | ||
|
|
27b09be76e |
Generated
+1
-1
@@ -864,7 +864,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "gta-tools"
|
||||
version = "0.5.2"
|
||||
version = "0.5.3"
|
||||
dependencies = [
|
||||
"catppuccin-egui",
|
||||
"chrono",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "gta-tools"
|
||||
version = "0.5.2"
|
||||
version = "0.5.3"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
# GTA Tools
|
||||
|
||||
A toolset of convenient things for GTA V Online.
|
||||
|
||||

|
||||

|
||||
|
||||
## Installing
|
||||
|
||||
**Option 1** — <ins>Download</ins>
|
||||
Download the latest release [here](https://codeberg.org/futile/gta-tools/releases/download/latest/gta-tools.exe) and place it somewhere convenient for you, such as Documents. You could then make a shortcut titled "GTA Tools", and pin it to taskbar or Start.
|
||||
|
||||
**Option 2** — <ins>Build from source</ins>
|
||||
You will need the Rust toolchain, which can be obtained [here](https://rustup.rs). Follow the instructions of its installer. Once you have Rust installed, clone this repo and navigate to it. At this point, you should probably `git checkout x.x.x`, where `x.x.x` is the latest tag. You can then run `cargo build --release`. Once you do that, you can use the binary located at `.\target\release\gta-tools.exe` in the same way as **Option 1**.
|
||||
|
||||
@@ -3,6 +3,7 @@ use std::{
|
||||
path::Path,
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
use strum::{Display, EnumIter};
|
||||
use sysinfo::System;
|
||||
use windows::{
|
||||
Win32::{
|
||||
@@ -23,7 +24,7 @@ const FILTER_NAME_OUT: &str = "[GTA Tools] Block all outbound traffic for GTA V"
|
||||
|
||||
const INTERVAL: Duration = Duration::from_secs(3);
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||
#[derive(Clone, Copy, Debug, Display, PartialEq, Eq, EnumIter)]
|
||||
pub enum BlockedStatus {
|
||||
Blocked,
|
||||
Failed,
|
||||
|
||||
+12
-2
@@ -17,13 +17,23 @@ enum Stage {
|
||||
About,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
#[derive(Debug)]
|
||||
pub struct Flags {
|
||||
pub elevated: bool,
|
||||
pub debug: bool,
|
||||
closing: bool,
|
||||
}
|
||||
|
||||
impl Default for Flags {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
elevated: win::is_elevated(),
|
||||
debug: false,
|
||||
closing: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
pub struct App {
|
||||
pub meta: Meta,
|
||||
@@ -35,7 +45,7 @@ pub struct App {
|
||||
pub anti_afk: features::anti_afk::AntiAfk,
|
||||
empty_session: features::empty_session::EmptySession,
|
||||
force_close: features::force_close::ForceClose,
|
||||
game_networking: features::game_networking::GameNetworking,
|
||||
pub game_networking: features::game_networking::GameNetworking,
|
||||
pub launch: features::launch::Launch,
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
use crate::features::game_networking::BlockedStatus;
|
||||
use eframe::egui;
|
||||
|
||||
pub const RED: egui::Color32 = egui::Color32::from_rgb(255, 128, 128);
|
||||
pub const YELLOW: egui::Color32 = egui::Color32::from_rgb(255, 255, 128);
|
||||
pub const GREEN: egui::Color32 = egui::Color32::from_rgb(128, 255, 128);
|
||||
pub const RED: egui::Color32 = egui::Color32::from_rgb(255, 96, 96);
|
||||
pub const YELLOW: egui::Color32 = egui::Color32::from_rgb(255, 255, 96);
|
||||
pub const GREEN: egui::Color32 = egui::Color32::from_rgb(96, 255, 96);
|
||||
|
||||
impl From<BlockedStatus> for egui::Color32 {
|
||||
fn from(value: BlockedStatus) -> Self {
|
||||
|
||||
@@ -50,6 +50,15 @@ impl App {
|
||||
};
|
||||
ui.label(format!("focused: \"{current_title}\""));
|
||||
});
|
||||
ui.horizontal(|ui| {
|
||||
ui.label("blocked_status");
|
||||
egui::ComboBox::from_id_salt("blocked_status")
|
||||
.selected_text(&self.game_networking.blocked_status.to_string())
|
||||
.show_ui(ui, |ui| {
|
||||
tools::build_menu(ui, &mut self.game_networking.blocked_status);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
ui.collapsing("anti afk", |ui| {
|
||||
ui.label(format!(
|
||||
|
||||
+1
-3
@@ -34,11 +34,9 @@ fn app_creator(
|
||||
app.settings = persistent_state.settings;
|
||||
}
|
||||
// check if we're elevated. if not, and the user wants an elevated launch - relaunch elevated
|
||||
let elevated = util::win::is_elevated();
|
||||
if app.settings.start_elevated && !elevated {
|
||||
if !app.flags.elevated && app.settings.start_elevated {
|
||||
util::win::elevate(util::win::ElevationExitMethod::Forced);
|
||||
}
|
||||
app.flags.elevated = elevated;
|
||||
// refresh sysinfo because it initializes with nothing
|
||||
app.sysinfo.refresh_all();
|
||||
// enable image loading support in egui
|
||||
|
||||
Reference in New Issue
Block a user