@echo off
chcp 65001 > nul
title 郑晓余无名服安装器

:: ========== 颜色设置 ==========
for /f "delims=#" %%a in ('"prompt #$E# & for %%a in (1) do rem"') do set "ESC=%%a"
set "GREEN=%ESC%[92m"
set "YELLOW=%ESC%[93m"
set "CYAN=%ESC%[96m"
set "RED=%ESC%[91m"
set "BLUE=%ESC%[94m"
set "MAGENTA=%ESC%[95m"
set "ORANGE=%ESC%[38;5;214m"
set "PURPLE=%ESC%[38;5;129m"
set "GOLD=%ESC%[38;5;220m"
set "RESET=%ESC%[0m"

:: 隐藏光标
echo %ESC%[?25l

:: 检查管理员权限
call :check_admin_privileges

:: 设置目标路径（游戏配置文件目录）
for /f "tokens=*" %%i in ('echo %APPDATA%') do set "APPDATA_PATH=%%i"
set "TARGET_DIR=%APPDATA_PATH%\..\LocalLow\Innersloth\Among Us"
set "TARGET_REGION=%TARGET_DIR%\regionInfo.json"

:: 显示启动画面
call :startup_screen

:: 执行离线安装
call :loading_screen_with_banner "正在准备离线安装" 3
call :offline_install

:: 退出
call :display_header "安装完成"
echo.
echo        %GREEN%离线安装已成功完成！%RESET%
echo.
echo        %CYAN%按任意键退出...%RESET%
echo.
echo %ESC%[?25h
pause > nul
exit /b 0

:: ==================== 离线安装 ====================
:offline_install
if not exist "%TARGET_DIR%" (
    mkdir "%TARGET_DIR%" >nul 2>&1
    if errorlevel 1 (
        echo        %RED%无法创建游戏目录，请以管理员身份运行%RESET%
        goto :error
    )
)
(
echo {
echo 	"CurrentRegionIdx": 5,
echo   	"Regions": [
echo         {
echo             "$type":"StaticHttpRegionInfo, Assembly-CSharp",
echo             "Name":"<color=#0000cc>\u90d1\u6653\u4f59\u306e\u9c7c\u7f38</color><color=#ffff00>[\u5317\u4eac]</color>",
echo             "PingServer":"zxy.au.fanchuanovo.cn",
echo             "Servers":[
echo                 {
echo                     "Name":"http-1",
echo                     "Ip":"zxy.au.fanchuanovo.cn",
echo                     "Port":443,
echo                     "UseDtls":false,
echo                     "Players":0,
echo                     "ConnectionFailures":0
echo                 }
echo             ],
echo             "TargetServer":null,
echo             "TranslateName":1003
echo         }
echo     ]
echo }
) > "%TARGET_REGION%"
echo.
echo        %GREEN%✓ 配置文件写入成功%RESET%
call :set_readonly_prompt
goto :eof

:set_readonly_prompt
echo.
echo        %ORANGE%无名服已安装成功！%RESET%
echo.
echo        %CYAN%是否切换为只读模式？%RESET%
echo.
echo        %YELLOW%只读模式能有效防止文件被其他安装器和恶意程序篡改%RESET%
echo        %RED%不过有些安装器无法覆盖只读的配置文件，可能无法成功使用其他安装器安装其他私服%RESET%
echo        %GREEN%请慎重选择！%RESET%
echo.
echo        %BLUE%[1]%RESET% 是，设置为只读模式
echo.
echo        %BLUE%[2]%RESET% 否  %RED%（推荐）%RESET%
echo.
echo.
set /p "readonly_choice=        请选择 [1-2]: "
if "%readonly_choice%"=="1" (
    call :set_file_readonly
    echo.
    echo        %GREEN%文件已设置为只读模式！%RESET%
    timeout /t 2 > nul
)
goto :eof

:set_file_readonly
attrib +R "%TARGET_REGION%" >nul 2>&1
goto :eof

:check_admin_privileges
net session >nul 2>&1
if %errorlevel% equ 0 goto :eof
call :display_header "权限警告"
echo.
echo        %RED%检测到当前脚本非管理员权限运行，少数电脑可能无法完成安装%RESET%
echo.
echo        %BLUE%[1]%RESET% 重新以管理员权限启动
echo.
echo        %BLUE%[2]%RESET% 我不是少数，继续使用安装！
echo.
echo          %CYAN%（其实都一样的，选哪个都可以）%RESET%
echo.
set /p "admin_choice=        请选择 [1-2]: "
if "%admin_choice%"=="1" (
    echo.
    echo        %CYAN%正在以管理员权限重新启动...%RESET%
    echo %ESC%[?25h
    PowerShell -Command "Start-Process '%~f0' -Verb RunAs" >nul 2>&1
    exit
) else if "%admin_choice%"=="2" (
    goto :eof
) else (
    echo.
    echo        %RED%无效选择，将继续执行程序%RESET%
    timeout /t 2 > nul
)
goto :eof

:startup_screen
cls
echo.
echo.
echo    %MAGENTA%███████╗██╗  ██╗███████╗███╗   ██╗ ██████╗ ██╗  ██╗██╗ █████╗  ██████╗ ██╗   ██╗██╗   ██╗%RESET%
echo    %CYAN%╚══███╔╝██║  ██║██╔════╝████╗  ██║██╔════╝ ╚██╗██╔╝██║██╔══██╗██╔═══██╗╚██╗ ██╔╝██║   ██║%RESET%
echo    %GREEN%  ███╔╝ ███████║█████╗  ██╔██╗ ██║██║  ███╗ ╚███╔╝ ██║███████║██║   ██║ ╚████╔╝ ██║   ██║%RESET%
echo    %YELLOW% ███╔╝  ██╔══██║██╔══╝  ██║╚██╗██║██║   ██║ ██╔██╗ ██║██╔══██║██║   ██║  ╚██╔╝  ╚██╗ ██╔╝%RESET%
echo    %RED%███████╗██║  ██║███████╗██║ ╚████║╚██████╔╝██╔╝ ██╗██║██║  ██║╚██████╔╝   ██║    ╚████╔╝ %RESET%
echo    %ORANGE%╚══════╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═══╝ ╚═════╝ ╚═╝  ╚═╝╚═╝╚═╝  ╚═╝ ╚═════╝   ╚═╝     ╚═══╝  %RESET%
echo.
echo        %CYAN%郑晓余无名服北京安装器%RESET%
echo        %CYAN%由帆船AmongUs工具箱改造/技术支持%RESET%
echo.
call :spinner 78
goto :eof

:loading_screen_with_banner
setlocal
set "text=%~1"
set /a "duration=%~2"
cls
echo.
echo.
echo    %MAGENTA%███████╗██╗  ██╗███████╗███╗   ██╗ ██████╗ ██╗  ██╗██╗ █████╗  ██████╗ ██╗   ██╗██╗   ██╗%RESET%
echo    %CYAN%╚══███╔╝██║  ██║██╔════╝████╗  ██║██╔════╝ ╚██╗██╔╝██║██╔══██╗██╔═══██╗╚██╗ ██╔╝██║   ██║%RESET%
echo    %GREEN%  ███╔╝ ███████║█████╗  ██╔██╗ ██║██║  ███╗ ╚███╔╝ ██║███████║██║   ██║ ╚████╔╝ ██║   ██║%RESET%
echo    %YELLOW% ███╔╝  ██╔══██║██╔══╝  ██║╚██╗██║██║   ██║ ██╔██╗ ██║██╔══██║██║   ██║  ╚██╔╝  ╚██╗ ██╔╝%RESET%
echo    %RED%███████╗██║  ██║███████╗██║ ╚████║╚██████╔╝██╔╝ ██╗██║██║  ██║╚██████╔╝   ██║    ╚████╔╝ %RESET%
echo    %ORANGE%╚══════╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═══╝ ╚═════╝ ╚═╝  ╚═╝╚═╝╚═╝  ╚═╝ ╚═════╝   ╚═╝     ╚═══╝  %RESET%
echo.
echo        %CYAN%%text%...%RESET%
echo.
call :spinner %duration%
echo.
endlocal
goto :eof

:display_header
setlocal
set "step_name=%~1"
cls
echo.
echo    %MAGENTA%=============================================%RESET%
echo    %CYAN%         丨%GREEN%郑晓余%YELLOW%无名服%RED%安%BLUE%装器%PURPLE%丨%RESET%
echo    %MAGENTA%=============================================%RESET%
echo    %CYAN%         #由帆船AmongUs服务器工具箱改造%RESET%
echo    %GOLD%           %step_name%%RESET%
echo.
endlocal
goto :eof

:spinner_with_text
setlocal enabledelayedexpansion
set "text=%~1"
set /a "duration=%~2"
set "frames=⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏"
set "frame_count=10"
set /a "total_loops=duration*5"
for /l %%i in (1,1,%total_loops%) do (
    set /a "frame_index=(%%i-1) %% frame_count"
    for /f "tokens=1,2" %%a in ("!frame_index!") do (
        <nul set /p "=%CYAN%!frames:~%%a,1!%RESET% %YELLOW%%text%...%RESET%"
    )
    ping -n 1 -w 200 127.0.0.1 > nul
    <nul set /p "=%ESC%[2K%ESC%[0G"
)
echo        %GREEN%✓%RESET% %YELLOW%%text%完成%RESET%
endlocal
goto :eof

:spinner
setlocal enabledelayedexpansion
set /a "duration=%~1"
set "frames=⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏"
set "frame_count=10"
set /a "total_loops=duration*5"
for /l %%i in (1,1,%total_loops%) do (
    set /a "frame_index=(%%i-1) %% frame_count"
    for /f "tokens=1,2" %%a in ("!frame_index!") do (
        <nul set /p "=%YELLOW%!frames:~%%a,1!%RESET%"
    )
    ping -n 1 -w 200 127.0.0.1 > nul
    <nul set /p "=%ESC%[1D"
)
echo.
endlocal
goto :eof

:error
echo.
echo        %RED%安装失败！%RESET%
echo.
echo        %YELLOW%可能的解决方案:%RESET%
echo        %CYAN%1. 以管理员身份运行此程序%RESET%
echo        %CYAN%2. 关闭Among Us游戏和其他可能使用此文件的程序%RESET%
echo.
echo        %CYAN%按任意键退出...%RESET%
echo %ESC%[?25h
pause > nul
exit /b 1
