This repository has been archived by the owner on Nov 8, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
195 additions
and
92 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
*roblox-version-folder | ||
*grapejuice-prefix | ||
*path* | ||
*backup* | ||
*config* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,13 @@ | ||
**Note: This is not a FPS booster.** | ||
# Roblox Tweaker | ||
## [Download](https://github.com/OhRetro/Roblox-Tweaker/archive/refs/heads/stable-stage.zip). | ||
## [Download Roblox Texture Remover Legacy](https://github.com/OhRetro/Roblox-Tweaker/releases/tag/Legacy). | ||
An easier automatic way to remove the textures from Roblox. <br/> | ||
It is recommended using [Roblox FPS Unlocker](https://github.com/axstin/rbxfpsunlocker/releases) made by [axstin](https://github.com/axstin). <br/> | ||
|
||
Version: v2.1 | ||
An one of the automatic ways to tweak Roblox. <br/> | ||
I recommended using [Roblox FPS Unlocker](https://github.com/axstin/rbxfpsunlocker/releases) made by [axstin](https://github.com/axstin). <br/> | ||
|
||
**Note: This is not a FPS booster;** | ||
# Roblox Tweaker C Edition | ||
|
||
In case of not wanting to install Python just to use Roblox Tweaker, <br/> | ||
You should try [Roblox Tweaker C Edition](https://github.com/OhRetro/Roblox-Tweaker-C-Edition) | ||
|
||
![roblox_tweaker_logo (Small)](https://user-images.githubusercontent.com/70819072/132238157-9f3a0148-aced-4fb8-ab3c-bc878a0537ec.png) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,118 +1,218 @@ | ||
#Roblox Tweaker | ||
_version = ["2.1", "Stable"] | ||
VERSION = ["2.2", "Stable"] | ||
|
||
#Imports | ||
try: | ||
from oreto_utils import Terminal | ||
from oreto_utils import File | ||
from os import environ as os_environ, name as os_name | ||
from contextlib import suppress as cl_suppress | ||
from types import NoneType | ||
from traceback import format_exc as tb_format_exc | ||
from sys import argv as sys_argv | ||
|
||
except ImportError as missing_package: | ||
print(missing_package) | ||
exit(1) | ||
ONLY_WINDOWS = "--no-windows" not in sys_argv | ||
|
||
finally: | ||
from os import environ as os_environ, name as os_name | ||
from tkinter import Tk, filedialog | ||
from shutil import rmtree as sh_rmtree | ||
from contextlib import suppress as ctxl_suppress | ||
if ONLY_WINDOWS and os_name != "nt": | ||
print("Roblox Tweaker was intended to be runned on Windows, Exiting...") | ||
exit(2) | ||
|
||
elif not ONLY_WINDOWS: | ||
print("Roblox Tweaker running with \"--no-windows\" flag.") | ||
|
||
with cl_suppress(ImportError): | ||
from rich import print | ||
|
||
if os_name != "nt": | ||
print("This program was intended to be run on Windows, Exiting...") | ||
try: | ||
from oreto_utils.terminal_utils import title as out_title, clear as out_clear, waitinput as out_waitinput | ||
from oreto_utils.file_utils import File as ouf_File | ||
from oreto_utils.folder_utils import Folder as ouf_Folder, folderselect as ouf_folderselect | ||
from oreto_utils.others_utils import countdown as ouo_countdown | ||
|
||
except ImportError as missing_package: | ||
print(tb_format_exc()) | ||
print("\n[!] Please try running \"pip install -r requirements.txt\"") | ||
exit(1) | ||
|
||
class RobloxTweaker(): | ||
def __init__(self): | ||
Terminal.title(f"Roblox Tweaker v{_version[0]} {_version[1]}") | ||
Terminal.clear() | ||
out_title(f"Roblox Tweaker v{VERSION[0]} {VERSION[1]}") | ||
out_clear() | ||
|
||
self.running = True | ||
self.exit_code = None | ||
|
||
self._roblox_versions_path = os_environ["LocalAppData"]+"/Roblox/Versions" | ||
self._textures_folders_path = "/PlatformContent/pc/textures" | ||
self._textures_folders_path = "PlatformContent/pc/textures" | ||
|
||
self._exception_texs = ["sky", "brdfLUT.dds", "studs.dds", "wangIndex.dds"] | ||
|
||
self._textures_folders_list = ["aluminum", "brick", "cobblestone", "concrete", "diamondplate", "fabric", "glass", "granite", "grass", | ||
"ice", "marble", "metal", "pebble", "plastic", "rust", "sand", "slate", "water", "wood", "woodplanks"] | ||
|
||
self.roblox_version_file = File(file_name="roblox-version-folder", file_ext="") | ||
self.path_file = ouf_File("path.txt") | ||
self.path_dir = ouf_Folder("", self._roblox_versions_path) | ||
self.backup_dir = ouf_Folder("backup") | ||
|
||
if not self.roblox_version_file.exists(): | ||
self.write_file() | ||
if not self.path_file.exists(): | ||
print("[Path File Not Found.]") | ||
self.writepath() | ||
out_clear() | ||
|
||
if self.roblox_version_file.exists: | ||
self._rvf_r = self.roblox_version_file.read() | ||
if self.path_file.exists: | ||
self.path = self.path_file.read() | ||
self.path_folder = ouf_Folder("", self.path) | ||
|
||
while self.running: | ||
self.menu() | ||
|
||
def menu(self): | ||
print(f"Roblox Tweaker v{_version[0]} {_version[1]}") | ||
print("What do you want to do?\n") | ||
print("[D]elete Textures\n[U]pdate Roblox Version Folder Path\n[E]xit\n") | ||
print(f"Current Roblox Version Folder Path:\n\"{self._rvf_r}\"\nType: {self.get_type()}\n") | ||
_selected_option = input(">") | ||
|
||
if _selected_option in ["D", "d", "1"]: | ||
self.delete_textures() | ||
print(f"Roblox Tweaker v{VERSION[0]} {VERSION[1]}") | ||
print("What do you want to do?\n") | ||
print("[1]Delete Textures\n[2]Show Textures List\n[3]Update Roblox Version Path\n[4]Backup Textures\n[5]Restore Textures from Backup\n[0]Exit\n") | ||
print(f"Current Roblox Version Path:\n\"{self.path}\"\nType: {self.gettype()}") | ||
_selected_option = input(">") | ||
|
||
elif _selected_option in ["U", "u", "2"]: | ||
self.update_path() | ||
|
||
elif _selected_option in ["E", "e", "3"]: | ||
Terminal.clear() | ||
self.exit_code = 0 | ||
self.running = False | ||
if _selected_option in ["D", "d", "1"]: | ||
self.deletetextures() | ||
|
||
elif _selected_option in ["S", "s", "2"]: | ||
self.listtextures() | ||
|
||
else: | ||
Terminal.clear() | ||
elif _selected_option in ["U", "u", "3"]: | ||
self.writepath() | ||
self.path = self.path_file.read() | ||
self.path_folder = ouf_Folder("", self.path) | ||
|
||
elif _selected_option in ["B", "b", "4"]: | ||
self.backuptextures() | ||
|
||
elif _selected_option in ["R", "r", "5"]: | ||
self.restoretextures() | ||
|
||
elif _selected_option in ["E", "e", "0"]: | ||
out_clear() | ||
self.running = False | ||
|
||
else: | ||
out_clear() | ||
|
||
#Delete Textures | ||
def delete_textures(self): | ||
for _texture_folder in self._textures_folders_list: | ||
with ctxl_suppress(FileNotFoundError): | ||
sh_rmtree(f"{self._rvf_r}/{self._textures_folders_path}/{_texture_folder}") | ||
def deletetextures(self): | ||
out_clear() | ||
textures_path = ouf_Folder(self._textures_folders_path, self.path) | ||
textures_list = textures_path.list() | ||
|
||
option = None | ||
while option not in ["a", "all", "l", "leave"]: | ||
print("[Delete Textures]\n") | ||
print("Do you want to delete ALL textures or leave some untouched?\n") | ||
option = input("[A]ll\n[L]eave (Default) (Recommended)\n\n>") or "l" | ||
|
||
if option.lower() in ["l", "leave"]: | ||
textures_path.deletecontents(self._exception_texs) | ||
|
||
elif option.lower() in ["a", "all"]: | ||
option = None | ||
while option not in ["y", "yes", "n", "no"]: | ||
out_clear() | ||
print("Do you want to backup the textures before deleting?\n") | ||
option = input("[Y]es (Default) (Recommended)\n[N]o\n\n>") or "y" | ||
|
||
if option.lower() in ["y", "yes"]: | ||
self.backuptextures() | ||
out_clear() | ||
|
||
ouo_countdown(3, "Deleting Textures in ", "Deleting Textures...") | ||
|
||
Terminal.clear() | ||
print("[Textures Deleted.]\n") | ||
textures_path.deletecontents() | ||
|
||
out_clear() | ||
|
||
if len(textures_list) <= len(self._exception_texs): | ||
print("[There's nothing to delete.]\n") | ||
else: | ||
print("[Textures Deleted.]\n") | ||
|
||
#List Textures | ||
def listtextures(self): | ||
out_clear() | ||
textures_path = ouf_Folder(self._textures_folders_path, self.path) | ||
try: | ||
textures_list = textures_path.list() | ||
success = True | ||
except FileNotFoundError: | ||
print("Unable to detemine type, path is inexistent, Try updating the path.") | ||
success = False | ||
|
||
if success: | ||
print("[Textures List]") | ||
for texture in textures_list: | ||
print(texture) | ||
print("") | ||
|
||
out_waitinput() | ||
out_clear() | ||
|
||
#Backup Textures | ||
def backuptextures(self): | ||
out_clear() | ||
textures_path = ouf_Folder(self._textures_folders_path, self.path) | ||
|
||
#Update Roblox Version Folder Path | ||
def update_path(self): | ||
_updated = self.write_file() | ||
self._rvf_r = self.roblox_version_file.read() | ||
Terminal.clear() | ||
if not self.backup_dir.exists(): | ||
self.backup_dir.create() | ||
|
||
print("[Copying contents to the backup directory]") | ||
if self.backup_dir.list(): | ||
|
||
print("[Overwriting backup directory]") | ||
self.backup_dir.deletecontents() | ||
|
||
textures_path.copycontents(self.backup_dir._folder["FULL_PATH"]) | ||
|
||
if _updated: | ||
print("[Updated]\n") | ||
print("[Done]\n") | ||
|
||
#Restore Textures from Backup | ||
def restoretextures(self): | ||
out_clear() | ||
|
||
textures_path = ouf_Folder(self._textures_folders_path, self.path) | ||
|
||
if self.backup_dir.exists(): | ||
if self.backup_dir.list(): | ||
print("[Restoring Textures]") | ||
textures_path.deletecontents() | ||
self.backup_dir.copycontents(textures_path._folder["FULL_PATH"]) | ||
print("[Done]\n") | ||
|
||
else: | ||
print("[There's nothing to restore.]\n") | ||
|
||
else: | ||
print("[Operation Canceled]\n") | ||
|
||
#Select Directory | ||
def select_directory(self, title, initialdir): | ||
dialog = Tk() | ||
dialog.withdraw() | ||
|
||
return filedialog.askdirectory(title=title, initialdir=initialdir, parent=dialog) | ||
|
||
print("[There's nothing to restore.]\n") | ||
|
||
out_waitinput() | ||
out_clear() | ||
|
||
#Write File | ||
def write_file(self): | ||
self.roblox_version_path = self.select_directory("Select a Roblox Version Folder.", self._roblox_versions_path) | ||
def writepath(self): | ||
while True: | ||
roblox_version_path = ouf_folderselect("Select a Roblox Version", self._roblox_versions_path, True) | ||
|
||
if type(roblox_version_path) != NoneType and roblox_version_path.split("/")[-1].startswith("version-"): | ||
break | ||
|
||
self.path_file.write(roblox_version_path) | ||
out_clear() | ||
print("[Path File Written.]\n") | ||
|
||
if self.roblox_version_path == "": | ||
return False | ||
|
||
self.roblox_version_file.write(self.roblox_version_path) | ||
return True | ||
|
||
#Get which Roblox Type is currently selected | ||
def get_type(self): | ||
rop = File(file_name="RobloxPlayerBeta", file_ext=".exe", file_path=f"{self._rvf_r}") | ||
ros = File(file_name="RobloxStudioBeta", file_ext=".exe", file_path=f"{self._rvf_r}") | ||
def gettype(self): | ||
roblox_exes = ["RobloxPlayerBeta.exe", "RobloxStudioBeta.exe"] | ||
try: | ||
roblox_version_path = ouf_Folder("", self.path).list() | ||
|
||
except FileNotFoundError: | ||
return "Unable to detemine type, path is inexistent, Try updating the path." | ||
|
||
if rop.exists(): | ||
if roblox_exes[0] in roblox_version_path: | ||
return "Roblox Player" | ||
elif ros.exists(): | ||
|
||
elif roblox_exes[1] in roblox_version_path: | ||
return "Roblox Studio" | ||
|
||
|
||
else: | ||
return "Unknown" | ||
|
||
if __name__ == "__main__": | ||
_rt = RobloxTweaker() | ||
exit(_rt.exit_code) | ||
RobloxTweaker() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
oreto-utils>=0.5 | ||
oreto-utils==0.9 |