diff --git a/lug-helper.sh b/lug-helper.sh index fbb5523..8310228 100755 --- a/lug-helper.sh +++ b/lug-helper.sh @@ -144,7 +144,11 @@ eptu_dir="EPTU" appdata_path="drive_c/users/$USER/AppData/Local/Star Citizen" # The shaders subdirectory name -shaders_subdir="shaders" +shaders_subdirs=( + "shaders" + "Shaders" + "VulkanShaderCache" +) # Remaining directory paths are set at the end of the getdirs() function @@ -679,11 +683,18 @@ getdirs() { # $game_version is set in the version_menu() function ############################################################################ # The game's user directory - user_dir="$game_path/$game_version/USER/Client/0" + if [ -d "$game_path/$game_version/USER/Client" ]; then + # Backwards compatibility for older installs + user_dir="$game_path/$game_version/USER/Client/0" + else + user_dir="$game_path/$game_version/user/client/0" + fi # The location within the USER directory to which the game exports keybinds keybinds_dir="$user_dir/Controls/Mappings" # Shaders directory shaders_dir="$wine_prefix/$appdata_path" + # Custom characters directory + custom_characters_dir="$user_dir/CustomCharacters" # dxvk cache file dxvk_cache="$game_path/$game_version/StarCitizen.dxvk-cache" # Where to store backed up keybinds @@ -2023,7 +2034,7 @@ version_menu(){ # Save exported keybinds, wipe the USER directory, and restore keybinds rm_userdir() { # Prompt user to back up the current keybinds in the game - message info "Before proceeding, please be sure you have exported\nyour Star Citizen keybinds from within the game.\n\nTo do this, launch the game and go to:\nOptions->Keybindings->Control Profiles->Save Control Settings\n\nGo on; I'll wait." + message info "Before proceeding, please be sure you have exported your Star Citizen keybinds and characters from within the game.\n\nTo export keybinds, launch the game and go to:\nOptions->Keybindings->Control Profiles->Save Control Settings\n\nTo export your character, go to the character creator from the main menu and save it with a name.\n\nGo on; I'll wait." # Get/Set directory paths getdirs @@ -2035,41 +2046,64 @@ rm_userdir() { # Sanity check if [ ! -d "$user_dir" ]; then - message warning "USER directory not found. There is nothing to delete!\n\n$user_dir" + message warning "user directory not found. There is nothing to delete!\n\n$user_dir" return 0 fi # Check for exported keybind files if [ ! -d "$keybinds_dir" ] || [ -z "$(ls -A "$keybinds_dir")" ]; then if message question "Warning: No exported keybindings found.\nContinuing will erase your existing keybinds!\n\nDo you want to continue anyway?"; then - exported=0 + keybinds_exported=0 else # User said no return 0 fi else - exported=1 + keybinds_exported=1 + fi + + # Check for saved custom character files + if [ ! -d "$custom_characters_dir" ] || [ -z "$(ls -A "$custom_characters_dir")" ]; then + if message question "Warning: No saved characters found.\nContinuing will erase your existing character!\n\nDo you want to continue anyway?"; then + characters_exported=0 + else + # User said no + return 0 + fi + else + characters_exported=1 fi if message question "The following directory will be deleted:\n\n$user_dir\n\nDo you want to proceed?"; then # Back up keybinds - if [ "$exported" -eq 1 ]; then + if [ "$keybinds_exported" -eq 1 ]; then debug_print continue "Backing up keybinds to $backup_path/keybinds..." mkdir -p "$backup_path/keybinds" && cp -r "$keybinds_dir/." "$backup_path/keybinds/" fi - # Wipe the user directory - debug_print continue "Wiping $user_dir..." - rm -r "$user_dir" - - # Restore custom keybinds - if [ "$exported" -eq 1 ]; then - debug_print continue "Restoring keybinds..." - mkdir -p "$keybinds_dir" && cp -r "$backup_path/keybinds/." "$keybinds_dir/" - message info "To re-import your keybinds, select it in-game from the list:\nOptions->Keybindings->Control Profiles" + #Back up characters + if [ "$characters_exported" -eq 1 ]; then + debug_print continue "Backing up characters to $backup_path/CustomCharacters..." + mkdir -p "$backup_path/CustomCharacters" && cp -r "$custom_characters_dir/." "$backup_path/CustomCharacters/" fi - message info "Your Star Citizen USER directory has been cleaned up!" + # Wipe the user directory + debug_print continue "Wiping $user_dir..." + rm -r --interactive=never "$user_dir" + + # Restore custom keybinds + if [ "$keybinds_exported" -eq 1 ]; then + debug_print continue "Restoring keybinds..." + mkdir -p "$keybinds_dir" && cp -r "$backup_path/keybinds/." "$keybinds_dir/" + fi + + # Restore custom characters + if [ "$characters_exported" -eq 1 ]; then + debug_print continue "Restoring custom characters..." + mkdir -p "$custom_characters_dir" && cp -r "$backup_path/CustomCharacters/." "$custom_characters_dir/" + fi + + message info "Your Star Citizen USER directory has been cleaned up!\n\nExported keybinds can be re-imported in-game from:\nOptions->Keybindings->Control Profiles\n\nSaved characters can be selected in the character creator." fi } @@ -2084,13 +2118,18 @@ rm_shaders() { # Loop through all possible shader directories for appdata_dir in "$shaders_dir"/*; do - if [ -d "$appdata_dir/$shaders_subdir" ]; then - # If a shaders directory is found, delete it - if message question "The following directory will be deleted:\n\n$appdata_dir/$shaders_subdir\n\nDo you want to proceed?"; then - debug_print continue "Deleting $appdata_dir/$shaders_subdir..." - rm -r "${appdata_dir:?}/$shaders_subdir" + # Loop through the shaders subdir array + for shaders_subdir in "${shaders_subdirs[@]}"; do + if [ -d "$appdata_dir/$shaders_subdir" ]; then + # If a shaders directory is found, delete it + if message question "The following directory will be deleted:\n\n$appdata_dir/$shaders_subdir\n\nDo you want to proceed?"; then + debug_print continue "Deleting $appdata_dir/$shaders_subdir..." + rm -r --interactive=never "${appdata_dir:?}/$shaders_subdir" + fi + else + debug_print continue "skipping $appdata_dir/$shaders_subdir" fi - fi + done done message info "Shader operations completed" @@ -2207,18 +2246,17 @@ maintenance_menu() { # Configure the menu options version_msg="Switch the Helper between LIVE/PTU/EPTU (Currently: $game_version)" - userdir_msg="Delete my Star Citizen USER folder and preserve my keybinds" + userdir_msg="Delete my user folder and preserve keybinds/characters" shaders_msg="Delete my shaders (Do this after each game update)" vidcache_msg="Delete my DXVK cache" - eac_msg="Deploy Global Easy Anti-Cheat Workaround" dirs_msg="Display Helper and Star Citizen directories" reset_msg="Reset Helper configs" quit_msg="Return to the main menu" # Set the options to be displayed in the menu - menu_options=("$version_msg" "$userdir_msg" "$shaders_msg" "$vidcache_msg" "$eac_msg" "$dirs_msg" "$reset_msg" "$quit_msg") + menu_options=("$version_msg" "$userdir_msg" "$shaders_msg" "$vidcache_msg" "$dirs_msg" "$reset_msg" "$quit_msg") # Set the corresponding functions to be called for each of the options - menu_actions=("version_menu" "rm_userdir" "rm_shaders" "rm_dxvkcache" "eac_workaround" "display_dirs" "reset_helper" "menu_loop_done") + menu_actions=("version_menu" "rm_userdir" "rm_shaders" "rm_dxvkcache" "display_dirs" "reset_helper" "menu_loop_done") # Calculate the total height the menu should be # menu_option_height = pixels per menu option @@ -2290,80 +2328,6 @@ install_game() { fi } -# Deploy Easy Anti-Cheat Workaround -eac_workaround() { - # Get/set directory paths - getdirs - if [ "$?" -eq 1 ]; then - # User cancelled and wants to return to the main menu - # or there was an error - return 0 - fi - - # Set the EAC directory path and hosts modification - eac_dir="$wine_prefix/drive_c/users/$USER/AppData/Roaming/EasyAntiCheat" - eac_hosts="127.0.0.1 modules-cdn.eac-prod.on.epicgames.com" - - # Configure message variables - eac_title="Easy Anti-Cheat Workaround" - eac_hosts_formatted="$eac_hosts" - eac_dir_formatted="$eac_dir" - if [ "$use_zenity" -eq 1 ]; then - eac_title="$eac_title" - eac_hosts_formatted="$eac_hosts_formatted" - eac_dir_formatted="$eac_dir_formatted" - fi - - apply_eac_hosts="false" - delete_eac_dir="false" - if grep -q "^$eac_hosts" /etc/hosts; then - # Hosts workaround is in place - # Check if we still need to delete the eac directory - if [ -d "$eac_dir" ]; then - delete_eac_dir="true" - eac_message="$eac_title\n\nYour /etc/hosts is already modified with the Easy Anti-Cheat workaround.\n\nThe following directory must still be deleted:\n$eac_dir_formatted" - fi - else - # Hosts workaround is needed - apply_eac_hosts="true" - eac_message="$eac_title\n\nThe following entry will be added to /etc/hosts:\n$eac_hosts_formatted" - # Check if we also need to delete the eac directory - if [ -d "$eac_dir" ]; then - delete_eac_dir="true" - eac_message="$eac_message\n\nThe following directory will be deleted:\n$eac_dir_formatted" - fi - fi - # Finish up the message - eac_message="$eac_message\n\n\nTo revert these changes, delete the marked EAC workaround line\nin /etc/hosts and relaunch the game\n\nDo you want to proceed?" - - # Check if the EAC workaround has already been fully applied - if [ "$apply_eac_hosts" = "false" ] && [ "$delete_eac_dir" = "false" ]; then - message info "The Easy Anti-Cheat workaround has already been applied.\nYou're all set!" - return 0 - fi - - if message question "$eac_message"; then - # Apply the hosts workaround if needed - if [ "$apply_eac_hosts" = "true" ]; then - debug_print continue "Editing hosts file..." - # Try to modify /etc/hosts as root - try_exec "printf '\n$eac_hosts #Star Citizen EAC workaround\n' >> /etc/hosts" - if [ "$?" -eq 1 ]; then - message error "Authentication failed or there was an error modifying /etc/hosts.\nSee terminal for more information.\n\nReturning to main menu." - return 0 - fi - fi - - # Delete the EAC directory if it exists - if [ -d "$eac_dir" ]; then - debug_print continue "Deleting $eac_dir..." - rm -r "$eac_dir" - fi - - message info "Easy Anti-Cheat workaround has been deployed!" - fi -} - # Format some URLs for Zenity format_urls() { if [ "$use_zenity" -eq 1 ]; then @@ -2476,7 +2440,6 @@ if [ "$#" -gt 0 ]; then Usage: lug-helper -p, --preflight-check Run system optimization checks -i, --install Install Star Citizen - -e, --eac Deploy Easy Anti-Cheat Workaround -m, --manage-runners Install or remove Lutris runners -k, --manage-dxvk Install or remove DXVK versions -u, --delete-user-folder Delete Star Citizen USER dir, preserve keybinds @@ -2498,9 +2461,6 @@ Usage: lug-helper --install | -i ) cargs+=("install_game") ;; - --eac | -e ) - cargs+=("eac_workaround") - ;; --manage-runners | -m ) cargs+=("runner_manage") ;;