From 23849617df9c464c02592936187a9104888eed95 Mon Sep 17 00:00:00 2001 From: Flowseal Date: Sun, 20 Sep 2026 11:17:43 +0300 Subject: [PATCH] GameFilter ports selection --- service.bat | 167 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 130 insertions(+), 37 deletions(-) diff --git a/service.bat b/service.bat index 6bb87f1..ccd3584 100644 --- a/service.bat +++ b/service.bat @@ -731,35 +731,51 @@ goto menu chcp 437 > nul set "gameFlagFile=%~dp0utils\game_filter.enabled" +set "GameFilterMode=disabled" +set "GameFilterTCPRange=1024-65535" +set "GameFilterUDPRange=1024-65535" +set "GameFilterStatus=disabled" +set "GameFilter=12" +set "GameFilterTCP=12" +set "GameFilterUDP=12" -if not exist "%gameFlagFile%" ( - set "GameFilterStatus=disabled" - set "GameFilter=12" - set "GameFilterTCP=12" - set "GameFilterUDP=12" - exit /b +if not exist "%gameFlagFile%" exit /b + +set "GameFilterTCPCandidate=" +set "GameFilterUDPCandidate=" +for /f "usebackq tokens=1,* delims==" %%A in ("%gameFlagFile%") do ( + if /i "%%A"=="mode" set "GameFilterMode=%%B" + if /i "%%A"=="all" set "GameFilterMode=all" + if /i "%%A"=="udp" ( + if "%%B"=="" (set "GameFilterMode=udp") else set "GameFilterUDPCandidate=%%B" + ) + if /i "%%A"=="tcp" ( + if "%%B"=="" (set "GameFilterMode=tcp") else set "GameFilterTCPCandidate=%%B" + ) ) -set "GameFilterMode=" -for /f "usebackq delims=" %%A in ("%gameFlagFile%") do ( - if not defined GameFilterMode set "GameFilterMode=%%A" -) +call :validate_game_filter_range "%GameFilterTCPCandidate%" +if defined ValidatedGameFilterRange set "GameFilterTCPRange=%ValidatedGameFilterRange%" +call :validate_game_filter_range "%GameFilterUDPCandidate%" +if defined ValidatedGameFilterRange set "GameFilterUDPRange=%ValidatedGameFilterRange%" if /i "%GameFilterMode%"=="all" ( set "GameFilterStatus=enabled (TCP and UDP)" - set "GameFilter=1024-65535" - set "GameFilterTCP=1024-65535" - set "GameFilterUDP=1024-65535" + set "GameFilter=%GameFilterTCPRange%" + set "GameFilterTCP=%GameFilterTCPRange%" + set "GameFilterUDP=%GameFilterUDPRange%" ) else if /i "%GameFilterMode%"=="tcp" ( set "GameFilterStatus=enabled (TCP)" - set "GameFilter=1024-65535" - set "GameFilterTCP=1024-65535" + set "GameFilter=%GameFilterTCPRange%" + set "GameFilterTCP=%GameFilterTCPRange%" set "GameFilterUDP=12" -) else ( +) else if /i "%GameFilterMode%"=="udp" ( set "GameFilterStatus=enabled (UDP)" - set "GameFilter=1024-65535" + set "GameFilter=%GameFilterUDPRange%" set "GameFilterTCP=12" - set "GameFilterUDP=1024-65535" + set "GameFilterUDP=%GameFilterUDPRange%" +) else ( + set "GameFilterMode=disabled" ) exit /b @@ -767,38 +783,115 @@ exit /b :game_switch chcp 437 > nul cls +call :game_switch_status -echo Select game filter mode: -echo 0. Disable -echo 1. TCP and UDP -echo 2. TCP only -echo 3. UDP only +echo Select game filter option: +if "%GameFilterMode%"=="disabled" (echo 1. * Disable) else echo 1. Disable +if "%GameFilterMode%"=="all" (echo 2. * TCP and UDP) else echo 2. TCP and UDP +if "%GameFilterMode%"=="tcp" (echo 3. * TCP) else echo 3. TCP +if "%GameFilterMode%"=="udp" (echo 4. * UDP) else echo 4. UDP +echo. +echo 5. Change TCP port range (current: %GameFilterTCPRange%) +echo 6. Change UDP port range (current: %GameFilterUDPRange%) +echo 7. Change TCP and UDP port ranges +echo. +echo. 0. Exit echo. set "GameFilterChoice=0" -set /p "GameFilterChoice=Select option (0-3, default: 0): " +set /p "GameFilterChoice=Select option (0-7, default: 0): " if "%GameFilterChoice%"=="" set "GameFilterChoice=0" -if "%GameFilterChoice%"=="0" ( - if exist "%gameFlagFile%" ( - del /f /q "%gameFlagFile%" - ) else ( - goto menu - ) -) else if "%GameFilterChoice%"=="1" ( - echo all>"%gameFlagFile%" +if "%GameFilterChoice%"=="1" ( + set "GameFilterMode=disabled" ) else if "%GameFilterChoice%"=="2" ( - echo tcp>"%gameFlagFile%" + set "GameFilterMode=all" ) else if "%GameFilterChoice%"=="3" ( - echo udp>"%gameFlagFile%" + set "GameFilterMode=tcp" +) else if "%GameFilterChoice%"=="4" ( + set "GameFilterMode=udp" +) else if "%GameFilterChoice%"=="5" ( + call :change_game_filter_range tcp +) else if "%GameFilterChoice%"=="6" ( + call :change_game_filter_range udp +) else if "%GameFilterChoice%"=="7" ( + call :change_game_filter_range all ) else ( - echo Invalid choice, exiting... - pause goto menu ) +echo. +call :save_game_filter_settings call :PrintYellow "Restart the zapret to apply the changes" pause -goto menu +goto game_switch + + +:change_game_filter_range +set "GameFilterRangeInput=" + +echo. +echo Changing ports for %~1 (example: 1024-1934,1936-65535, default: 1024-65535) +set /p "GameFilterRangeInput=Enter ports/ranges: " +call :validate_game_filter_range "%GameFilterRangeInput%" +if not defined ValidatedGameFilterRange ( + call :PrintRed "Invalid input. Please enter valid ports/ranges." + pause + goto game_switch +) + +if /i "%~1"=="tcp" set "GameFilterTCPRange=%ValidatedGameFilterRange%" +if /i "%~1"=="udp" set "GameFilterUDPRange=%ValidatedGameFilterRange%" +if /i "%~1"=="all" ( + set "GameFilterTCPRange=%ValidatedGameFilterRange%" + set "GameFilterUDPRange=%ValidatedGameFilterRange%" +) +exit /b + + +:validate_game_filter_range +set "ValidatedGameFilterRange=" +setlocal EnableDelayedExpansion +set "GameFilterRangeToValidate=%~1" +set "GameFilterRangeToValidate=!GameFilterRangeToValidate: =!" +if not defined GameFilterRangeToValidate exit /b +for %%A in ("!GameFilterRangeToValidate:,=" "!") do ( + call :gf_validate_item "%%~A" + if not defined GameFilterRangeItemValid exit /b +) +endlocal & set "ValidatedGameFilterRange=%GameFilterRangeToValidate%" +exit /b + + +:gf_validate_item +set "GameFilterRangeItemValid=" +setlocal EnableDelayedExpansion +set "GameFilterRangeItem=%~1" + +echo(!GameFilterRangeItem!| findstr /r /x /c:"[1-9][0-9]*" /c:"[1-9][0-9]*-[1-9][0-9]*" > nul || exit /b +for /f "tokens=1,2 delims=-" %%A in ("!GameFilterRangeItem!") do ( + set "GameFilterRangeStart=%%A" + set "GameFilterRangeEnd=%%B" +) +if not defined GameFilterRangeEnd set "GameFilterRangeEnd=!GameFilterRangeStart!" + +if not "!GameFilterRangeStart:~5,1!"=="" exit /b +if not "!GameFilterRangeEnd:~5,1!"=="" exit /b +set /a GameFilterRangeStartNumber=GameFilterRangeStart, GameFilterRangeEndNumber=GameFilterRangeEnd +if !GameFilterRangeStartNumber! gtr 65535 exit /b +if !GameFilterRangeEndNumber! gtr 65535 exit /b +if !GameFilterRangeStartNumber! gtr !GameFilterRangeEndNumber! exit /b + +endlocal & set "GameFilterRangeItemValid=1" +exit /b + + +:save_game_filter_settings +>"%gameFlagFile%" ( + echo mode=%GameFilterMode% + echo tcp=%GameFilterTCPRange% + echo udp=%GameFilterUDPRange% +) +exit /b :: CHECK UPDATES SWITCH =================