This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Мануал Четкий батник для RedAge 3.0

vvrm7

Участник портала
Мошенник
21 Дек 2025
38
8
8
Всем привет!
Сегодня мы создадим батник, который автоматически установит node js для RedAge 3.0, зависимости и скомпилирует поочередно клиент и cef
Заходим в корень проекта
Создаем текстовый файл, и переименовываем его меняя расширение .txt на .bat и называем его build, получается файл build.bat
Далее открываем его с помощью например блокнота, или VScode, cursor или любым другим редактором и вставляем следующий код:
Код:
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
set "ERROR=0"
set "NODE_VERSION=16.14.0"
set "NVM_VERSION=1.1.11"
set "NVM_INSTALLED=0"
set "NODE_INSTALLED=0"
set "DOTNET_VERSION=3.1"
set "DOTNET_SDK_INSTALLED=0"
:: Меню выбора
:menu
cls
echo ========================================
echo   Меню компиляции проекта
echo ========================================
echo.
echo   1. Установка Node.js
echo   2. Компиляция клиента (src_client)
echo   3. Компиляция CEF (src_cef)
echo   4. Компиляция CEF и клиента
echo   5. Установка .NET SDK
echo   6. Компиляция .NET проекта (dotnet/resources)
echo   7. Компиляция всего проекта (CEF + клиент + .NET)
echo   0. Выход
echo.
echo ========================================
set /p "choice=Выберите действие (0-7): "
if "%choice%"=="1" goto :install_nodejs
if "%choice%"=="2" goto :build_client
if "%choice%"=="3" goto :build_cef
if "%choice%"=="4" goto :build_both
if "%choice%"=="5" goto :install_dotnet
if "%choice%"=="6" goto :build_dotnet
if "%choice%"=="7" goto :build_all
if "%choice%"=="0" goto :end_script
echo.
echo [ОШИБКА] Неверный выбор. Попробуйте снова.
timeout /t 2 /nobreak >nul
goto :menu
:: Установка Node.js
:install_nodejs
echo.
echo ========================================
echo   Установка Node.js
echo ========================================
echo.
call :check_nvm
if %ERROR%==1 goto :end_install_nodejs
call :install_node
if %ERROR%==1 goto :end_install_nodejs
:end_install_nodejs
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Ошибка при установке Node.js
    echo ========================================
) else (
    echo ========================================
    echo   Node.js установлен успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Компиляция клиента
:build_client
echo.
echo ========================================
echo   Компиляция клиента (src_client)
echo ========================================
echo.
call :check_nodejs
if %ERROR%==1 goto :end_build_client
call :build_src_client
if %ERROR%==1 goto :end_build_client
:end_build_client
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Компиляция клиента завершена с ошибками
    echo ========================================
) else (
    echo ========================================
    echo   Компиляция клиента завершена успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Компиляция CEF
:build_cef
echo.
echo ========================================
echo   Компиляция CEF (src_cef)
echo ========================================
echo.
call :check_nodejs
if %ERROR%==1 goto :end_build_cef
call :build_src_cef
if %ERROR%==1 goto :end_build_cef
:end_build_cef
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Компиляция CEF завершена с ошибками
    echo ========================================
) else (
    echo ========================================
    echo   Компиляция CEF завершена успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Компиляция обоих
:build_both
echo.
echo ========================================
echo   Компиляция CEF и клиента
echo ========================================
echo.
call :check_nodejs
if %ERROR%==1 goto :end_build_both
call :build_src_client
if %ERROR%==1 goto :end_build_both
echo.
call :build_src_cef
if %ERROR%==1 goto :end_build_both
:end_build_both
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Компиляция завершена с ошибками
    echo ========================================
) else (
    echo ========================================
    echo   Компиляция завершена успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Установка .NET SDK
:install_dotnet
echo.
echo ========================================
echo   Установка .NET SDK
echo ========================================
echo.
call :check_dotnet_sdk
if %ERROR%==0 goto :end_install_dotnet
call :install_dotnet_sdk
if %ERROR%==1 goto :end_install_dotnet
:end_install_dotnet
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Ошибка при установке .NET SDK
    echo ========================================
) else (
    echo ========================================
    echo   .NET SDK установлен успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Компиляция .NET проекта
:build_dotnet
echo.
echo ========================================
echo   Компиляция .NET проекта (dotnet/resources)
echo ========================================
echo.
call :check_dotnet_sdk
if %ERROR%==1 goto :end_build_dotnet
call :build_dotnet_project
if %ERROR%==1 goto :end_build_dotnet
:end_build_dotnet
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Компиляция .NET проекта завершена с ошибками
    echo ========================================
) else (
    echo ========================================
    echo   Компиляция .NET проекта завершена успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Компиляция всего проекта
:build_all
echo.
echo ========================================
echo   Компиляция всего проекта
echo ========================================
echo.
call :check_nodejs
if %ERROR%==1 goto :end_build_all
call :check_dotnet_sdk
if %ERROR%==1 goto :end_build_all
echo [1/3] Компиляция клиента...
call :build_src_client
if %ERROR%==1 goto :end_build_all
echo.
echo [2/3] Компиляция CEF...
call :build_src_cef
if %ERROR%==1 goto :end_build_all
echo.
echo [3/3] Компиляция .NET проекта...
call :build_dotnet_project
if %ERROR%==1 goto :end_build_all
:end_build_all
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Компиляция завершена с ошибками
    echo ========================================
) else (
    echo ========================================
    echo   Компиляция всего проекта завершена успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Выход
:end_script
exit /b 0
:: ========================================
:: Функции
:: ========================================
:: Проверка наличия nvm-windows
:check_nvm
echo [Шаг 1/2] Проверка nvm-windows...
echo ----------------------------------------
where nvm >nul 2>&1
if %errorlevel%==0 (
    echo [OK] nvm-windows найден
    set "NVM_INSTALLED=1"
    goto :eof
)
echo nvm-windows не найден, попытка автоматической установки...
:: Проверяем наличие установщика nvm-windows
set "NVM_INSTALLER=nvm-setup.exe"
set "NVM_URL=https://github.com/coreybutler/nvm-windows/releases/download/%NVM_VERSION%/nvm-setup.exe"
if not exist "%TEMP%\%NVM_INSTALLER%" (
    echo Скачивание установщика nvm-windows...
    echo Это может занять некоторое время...
    
    :: Пытаемся скачать через PowerShell
    powershell -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%NVM_URL%' -OutFile '%TEMP%\%NVM_INSTALLER%' -UseBasicParsing}" >nul 2>&1
    
    if not exist "%TEMP%\%NVM_INSTALLER%" (
        echo [ОШИБКА] Не удалось скачать установщик nvm-windows
        echo Пожалуйста, скачайте и установите nvm-windows вручную:
        echo %NVM_URL%
        echo После установки перезапустите этот скрипт
        set "ERROR=1"
        goto :eof
    )
)
echo Установка nvm-windows...
echo ВНИМАНИЕ: Установка может потребовать прав администратора
echo Если появится запрос UAC, нажмите "Да"
:: Запускаем установщик
start /wait "" "%TEMP%\%NVM_INSTALLER%" /S
:: Ждем немного после установки
timeout /t 3 /nobreak >nul
:: Обновляем переменные окружения в текущей сессии
call refreshenv >nul 2>&1
:: Проверяем установку через реестр
reg query "HKCU\Software\nvm" >nul 2>&1
if %errorlevel%==0 (
    echo [OK] nvm-windows установлен
    set "NVM_INSTALLED=1"
    
    :: Добавляем путь nvm в PATH текущей сессии
    for /f "tokens=2*" %%A in ('reg query "HKCU\Software\nvm" /v root 2^>nul') do set "NVM_ROOT=%%B"
    if defined NVM_ROOT (
        set "PATH=%NVM_ROOT%;%PATH%"
    )
) else (
    :: Пробуем найти nvm в стандартных местах
    if exist "%APPDATA%\nvm\nvm.exe" (
        set "NVM_ROOT=%APPDATA%\nvm"
        set "PATH=%NVM_ROOT%;%PATH%"
        set "NVM_INSTALLED=1"
        echo [OK] nvm-windows найден в %NVM_ROOT%
    ) else if exist "%PROGRAMFILES%\nvm\nvm.exe" (
        set "NVM_ROOT=%PROGRAMFILES%\nvm"
        set "PATH=%NVM_ROOT%;%PATH%"
        set "NVM_INSTALLED=1"
        echo [OK] nvm-windows найден в %NVM_ROOT%
    ) else (
        echo [ОШИБКА] Не удалось найти установленный nvm-windows
        echo Возможно, требуется перезапуск командной строки или системы
        echo Пожалуйста, перезапустите этот скрипт после установки nvm-windows
        set "ERROR=1"
        goto :eof
    )
)
if %NVM_INSTALLED%==0 (
    echo [ОШИБКА] Не удалось установить или найти nvm-windows
    set "ERROR=1"
)
goto :eof
:: Установка Node.js через nvm
:install_node
echo.
echo [Шаг 2/2] Проверка Node.js через nvm...
echo ----------------------------------------
:: Используем nvm для проверки установленных версий
call nvm list >nul 2>&1
if errorlevel 1 (
    echo [ВНИМАНИЕ] Команда nvm не работает в текущей сессии
    echo Попытка обновления переменных окружения...
    
    :: Пробуем найти nvm в реестре и добавить в PATH
    for /f "tokens=2*" %%A in ('reg query "HKCU\Software\nvm" /v root 2^>nul') do set "NVM_ROOT=%%B"
    if defined NVM_ROOT (
        set "PATH=%NVM_ROOT%;%PATH%"
    )
    
    :: Пробуем использовать полный путь к nvm
    if exist "%APPDATA%\nvm\nvm.exe" (
        set "NVM_CMD=%APPDATA%\nvm\nvm.exe"
    ) else if exist "%PROGRAMFILES%\nvm\nvm.exe" (
        set "NVM_CMD=%PROGRAMFILES%\nvm\nvm.exe"
    ) else (
        set "NVM_CMD=nvm"
    )
) else (
    set "NVM_CMD=nvm"
)
:: Проверяем, установлена ли нужная версия Node.js
call %NVM_CMD% list | findstr /C:"%NODE_VERSION%" >nul
if %errorlevel%==0 (
    echo Версия Node.js %NODE_VERSION% уже установлена
    call %NVM_CMD% use %NODE_VERSION% >nul 2>&1
    if errorlevel 1 (
        echo [ВНИМАНИЕ] Не удалось переключиться на версию %NODE_VERSION%
        echo Попытка продолжения...
    ) else (
        echo [OK] Переключено на Node.js %NODE_VERSION%
        set "NODE_INSTALLED=1"
    )
) else (
    echo Установка Node.js %NODE_VERSION% через nvm...
    call %NVM_CMD% install %NODE_VERSION%
    if errorlevel 1 (
        echo [ОШИБКА] Не удалось установить Node.js %NODE_VERSION%
        set "ERROR=1"
        goto :eof
    )
    
    call %NVM_CMD% use %NODE_VERSION%
    if errorlevel 1 (
        echo [ОШИБКА] Не удалось переключиться на версию %NODE_VERSION%
        set "ERROR=1"
        goto :eof
    )
    echo [OK] Node.js %NODE_VERSION% установлен и активирован
    set "NODE_INSTALLED=1"
)
:: Проверяем, что Node.js доступен
where node >nul 2>&1
if %errorlevel%==0 (
    for /f "tokens=*" %%i in ('node --version') do set "CURRENT_NODE_VERSION=%%i"
    echo Текущая версия Node.js: %CURRENT_NODE_VERSION%
    echo [OK] Node.js готов к использованию
    set "NODE_INSTALLED=1"
) else (
    echo [ОШИБКА] Node.js не доступен после установки
    echo Возможно, требуется перезапуск командной строки
    set "ERROR=1"
    goto :eof
)
if %NODE_INSTALLED%==0 (
    echo [ОШИБКА] Не удалось установить или использовать Node.js
    set "ERROR=1"
)
goto :eof
:: Проверка наличия Node.js (для компиляции)
:check_nodejs
where node >nul 2>&1
if %errorlevel%==0 (
    for /f "tokens=*" %%i in ('node --version') do set "CURRENT_NODE_VERSION=%%i"
    echo [OK] Node.js найден: %CURRENT_NODE_VERSION%
    echo.
    goto :eof
)
echo [ОШИБКА] Node.js не найден
echo Пожалуйста, сначала установите Node.js (выберите пункт 1 в меню)
set "ERROR=1"
goto :eof
:: Компиляция src_client
:build_src_client
echo Компиляция src_client...
echo ----------------------------------------
cd src_client
if not exist "node_modules" (
    echo Установка зависимостей для src_client...
    call npm install
    if errorlevel 1 (
        echo [ОШИБКА] Не удалось установить зависимости для src_client
        set "ERROR=1"
        cd ..
        goto :eof
    )
)
call npm run build
if errorlevel 1 (
    echo [ОШИБКА] Компиляция src_client не удалась
    set "ERROR=1"
) else (
    echo [УСПЕХ] src_client скомпилирован успешно
)
cd ..
goto :eof
:: Компиляция src_cef
:build_src_cef
echo Компиляция src_cef...
echo ----------------------------------------
cd src_cef
if not exist "node_modules" (
    echo Установка зависимостей для src_cef...
    call npm install --legacy-peer-deps
    if errorlevel 1 (
        echo [ОШИБКА] Не удалось установить зависимости для src_cef
        set "ERROR=1"
        cd ..
        goto :eof
    )
)
call npm run build
if errorlevel 1 (
    echo [ОШИБКА] Компиляция src_cef не удалась
    set "ERROR=1"
) else (
    echo [УСПЕХ] src_cef скомпилирован успешно
)
cd ..
goto :eof
:: Проверка наличия .NET SDK
:check_dotnet_sdk
set "ERROR=0"
where dotnet >nul 2>&1
if %errorlevel%==0 (
    for /f "tokens=*" %%i in ('dotnet --version 2^>nul') do set "CURRENT_DOTNET_VERSION=%%i"
    echo [OK] .NET SDK найден: %CURRENT_DOTNET_VERSION%
    
    :: Проверяем, что установлена нужная версия или совместимая
    echo Проверка версии .NET SDK...
    dotnet --list-sdks | findstr /C:"%DOTNET_VERSION%" >nul
    if %errorlevel%==0 (
        echo [OK] .NET SDK %DOTNET_VERSION% установлен
        set "DOTNET_SDK_INSTALLED=1"
        set "ERROR=0"
        echo.
        goto :eof
    ) else (
        echo [ВНИМАНИЕ] .NET SDK %DOTNET_VERSION% не найден в списке установленных версий
        echo Установленные версии:
        dotnet --list-sdks
        echo.
        echo Продолжаем с текущей версией...
        set "DOTNET_SDK_INSTALLED=1"
        set "ERROR=0"
        echo.
        goto :eof
    )
)
echo [ОШИБКА] .NET SDK не найден
echo Пожалуйста, сначала установите .NET SDK (выберите пункт 5 в меню)
set "ERROR=1"
goto :eof
:: Установка .NET SDK
:install_dotnet_sdk
set "ERROR=0"
echo [Шаг 1/2] Определение архитектуры системы...
echo ----------------------------------------
:: Определяем архитектуру (x64 или x86)
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
    set "ARCH=x64"
) else if "%PROCESSOR_ARCHITECTURE%"=="x86" (
    set "ARCH=x86"
) else (
    set "ARCH=x64"
)
echo Архитектура: %ARCH%
echo.
echo [Шаг 2/2] Установка .NET SDK %DOTNET_VERSION%...
echo ----------------------------------------
echo ВНИМАНИЕ: Установка может потребовать прав администратора
echo Если появится запрос UAC, нажмите "Да"
echo.
:: Используем dotnet-install скрипт для установки
set "DOTNET_INSTALL_SCRIPT=%TEMP%\dotnet-install.ps1"
set "DOTNET_INSTALL_URL=https://dot.net/v1/dotnet-install.ps1"
echo Скачивание установщика .NET SDK...
powershell -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%DOTNET_INSTALL_URL%' -OutFile '%DOTNET_INSTALL_SCRIPT%' -UseBasicParsing}" >nul 2>&1
if not exist "%DOTNET_INSTALL_SCRIPT%" (
    echo [ОШИБКА] Не удалось скачать установщик .NET SDK
    echo Пожалуйста, скачайте и установите .NET SDK %DOTNET_VERSION% вручную:
    echo https://dotnet.microsoft.com/download/dotnet/%DOTNET_VERSION%
    set "ERROR=1"
    goto :eof
)
echo Установка .NET SDK %DOTNET_VERSION%...
powershell -ExecutionPolicy Bypass -Command "& '%DOTNET_INSTALL_SCRIPT%' -Channel %DOTNET_VERSION% -Architecture %ARCH% -InstallDir '%USERPROFILE%\.dotnet'"
if errorlevel 1 (
    echo [ОШИБКА] Не удалось установить .NET SDK %DOTNET_VERSION%
    echo Попробуйте установить вручную: https://dotnet.microsoft.com/download/dotnet/%DOTNET_VERSION%
    set "ERROR=1"
    goto :eof
)
:: Обновляем PATH для текущей сессии
set "DOTNET_ROOT=%USERPROFILE%\.dotnet"
if exist "%DOTNET_ROOT%\dotnet.exe" (
    set "PATH=%DOTNET_ROOT%;%PATH%"
)
:: Проверяем также стандартные места установки
if exist "%ProgramFiles%\dotnet\dotnet.exe" (
    set "PATH=%ProgramFiles%\dotnet;%PATH%"
)
if exist "%ProgramFiles(x86)%\dotnet\dotnet.exe" (
    set "PATH=%ProgramFiles(x86)%\dotnet;%PATH%"
)
:: Проверяем установку
timeout /t 3 /nobreak >nul
where dotnet >nul 2>&1
if %errorlevel%==0 (
    for /f "tokens=*" %%i in ('dotnet --version 2^>nul') do set "CURRENT_DOTNET_VERSION=%%i"
    echo [OK] .NET SDK установлен: %CURRENT_DOTNET_VERSION%
    set "DOTNET_SDK_INSTALLED=1"
    set "ERROR=0"
) else (
    echo [ВНИМАНИЕ] .NET SDK установлен, но не доступен в текущей сессии
    echo Возможно, требуется перезапуск командной строки
    echo Путь установки: %DOTNET_ROOT%
    echo.
    echo Попробуйте перезапустить командную строку и запустить скрипт снова
    echo Или установите .NET SDK вручную: https://dotnet.microsoft.com/download/dotnet/%DOTNET_VERSION%
    set "ERROR=1"
)
goto :eof
:: Компиляция .NET проекта
:build_dotnet_project
set "ERROR=0"
echo Компиляция .NET проекта (dotnet/resources)...
echo ----------------------------------------
cd dotnet\resources
if not exist "NeptuneEvo.sln" (
    echo [ОШИБКА] Файл NeptuneEvo.sln не найден
    set "ERROR=1"
    cd ..\..
    goto :eof
)
echo Восстановление зависимостей NuGet...
dotnet restore NeptuneEvo.sln
if errorlevel 1 (
    echo [ОШИБКА] Не удалось восстановить зависимости NuGet
    set "ERROR=1"
    cd ..\..
    goto :eof
)
echo Компиляция решения...
echo Конфигурация: Debug (сервер ищет файлы в bin\Debug)
echo.
:: Собираем решение
dotnet build NeptuneEvo.sln --configuration Debug -p:Platform=x64
if errorlevel 1 (
    echo [ОШИБКА] Компиляция .NET проекта не удалась
    set "ERROR=1"
    cd ..\..
    goto :eof
)
:: Публикуем основной проект для копирования всех зависимостей
echo Публикация проекта NeptuneEvo для копирования зависимостей...
cd NeptuneEvo
dotnet publish --configuration Debug -p:Platform=x64 -p:CopyLocalLockFileAssemblies=true -o bin\Debug\netcoreapp3.1
if errorlevel 1 (
    echo [ВНИМАНИЕ] Публикация с --no-build не удалась, пробуем полную пересборку...
    dotnet publish --configuration Debug -p:Platform=x64 -p:CopyLocalLockFileAssemblies=true -o bin\Debug\netcoreapp3.1 --force
    if errorlevel 1 (
        echo [ОШИБКА] Публикация проекта не удалась
        set "ERROR=1"
        cd ..\..
        goto :eof
    )
)
cd ..
if %ERROR%==0 (
    echo [УСПЕХ] .NET проект скомпилирован и опубликован успешно
    echo Все зависимости скопированы в: dotnet\resources\NeptuneEvo\bin\Debug\netcoreapp3.1\
)
cd ..\..
goto :eof
Запускаем батник и радуемся!
 
Последнее редактирование:
Реакции: WHYNOT

WHYNOT

Активный участник
VIP
BackEnd developer
8 Апр 2021
161
39
92
так вроде для того что бы твой батник работал нужно nvm установить(
 

WHYNOT

Активный участник
VIP
BackEnd developer
8 Апр 2021
161
39
92
а сорян не увидел инсталлер в батнике
 
Реакции: vvrm7

Harland David Sanders

🍔 ChefBurger
Команда форума
High developer
10 Сен 2020
3,809
3,044
259

vvrm7

Участник портала
Мошенник
21 Дек 2025
38
8
8
зачем? если все еще нужно указывать mysql настройки и билдить dotnet.
просто удобнее через 1 батник, чем рыться по сайтам, скачивать что то и т.д., это больше для тех кто первый раз скачивает RedAge. А mysql и билд dotnet это уже немного другая история
 

Harland David Sanders

🍔 ChefBurger
Команда форума
High developer
10 Сен 2020
3,809
3,044
259
для тех кто первый раз скачивает RedAge
щас легче, а потом у тебя 100500 новых вопросов и проблем почему не работает что-то, ибо лучше самому понять что и как надо установить, чем запустить батник и нихуя не понять.
я понимаю что этот батник сделан через ИИ, но можно найти и другие (более полезные) применения токенам
 
Реакции: 🐝 ubees и WHYNOT

vvrm7

Участник портала
Мошенник
21 Дек 2025
38
8
8
да это мем из разряда, сделал простой и понятный интерфейс, а природа создала более тупого юзера, вопросы в любом случае будут(
 

NULMEKS

Высший разум
22 Сен 2023
820
514
143
28
Прям сказка получается:
1. Мошенник, и батник.
2. Батник и мошенник.

Как по мне не плохие заголовки для названия.

Теперь перейдем к сценарию:
1. Как запустить мошенника через батник?
2. Как запустить батник через мошенника?

Ну или ещё можно добавить третье лицо:
Их было трое, три лучших друга, батник, мошенник, и ИИ.

Хотите узнать как?
1. ИИ, запускало мошенника чтоб мошенник запустил батник?

2. ИИ, запустило батник, чтоб батник запустил мошенника.

PS: Это так себе просто проснулся и порвало 🫠
 
Последнее редактирование:

night.

Начинающий специалист
2 Июл 2023
545
59
65
 

vvrm7

Участник портала
Мошенник
21 Дек 2025
38
8
8
Обновленный батник

Код:
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul

set "ERROR=0"
set "NODE_VERSION=16.14.0"
set "NVM_VERSION=1.1.11"
set "NVM_INSTALLED=0"
set "NODE_INSTALLED=0"
set "DOTNET_VERSION=3.1"
set "DOTNET_SDK_INSTALLED=0"

:: Меню выбора
:menu
cls
echo ========================================
echo   Меню компиляции проекта
echo ========================================
echo.
echo   1. Установка Node.js
echo   2. Компиляция клиента (src_client)
echo   3. Компиляция CEF (src_cef)
echo   4. Компиляция CEF и клиента
echo   5. Установка .NET SDK
echo   6. Компиляция .NET проекта (dotnet/resources)
echo   7. Компиляция всего проекта (CEF + клиент + .NET)
echo   0. Выход
echo.
echo ========================================
set /p "choice=Выберите действие (0-7): "

if "%choice%"=="1" goto :install_nodejs
if "%choice%"=="2" goto :build_client
if "%choice%"=="3" goto :build_cef
if "%choice%"=="4" goto :build_both
if "%choice%"=="5" goto :install_dotnet
if "%choice%"=="6" goto :build_dotnet
if "%choice%"=="7" goto :build_all
if "%choice%"=="0" goto :end_script

echo.
echo [ОШИБКА] Неверный выбор. Попробуйте снова.
timeout /t 2 /nobreak >nul
goto :menu

:: Установка Node.js
:install_nodejs
echo.
echo ========================================
echo   Установка Node.js
echo ========================================
echo.

call :check_nvm
if %ERROR%==1 goto :end_install_nodejs

call :install_node
if %ERROR%==1 goto :end_install_nodejs

:end_install_nodejs
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Ошибка при установке Node.js
    echo ========================================
) else (
    echo ========================================
    echo   Node.js установлен успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu

:: Компиляция клиента
:build_client
echo.
echo ========================================
echo   Компиляция клиента (src_client)
echo ========================================
echo.

call :check_nodejs
if %ERROR%==1 goto :end_build_client

call :build_src_client
if %ERROR%==1 goto :end_build_client

:end_build_client
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Компиляция клиента завершена с ошибками
    echo ========================================
) else (
    echo ========================================
    echo   Компиляция клиента завершена успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu

:: Компиляция CEF
:build_cef
echo.
echo ========================================
echo   Компиляция CEF (src_cef)
echo ========================================
echo.

call :check_nodejs
if %ERROR%==1 goto :end_build_cef

call :build_src_cef
if %ERROR%==1 goto :end_build_cef

:end_build_cef
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Компиляция CEF завершена с ошибками
    echo ========================================
) else (
    echo ========================================
    echo   Компиляция CEF завершена успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu

:: Компиляция обоих
:build_both
echo.
echo ========================================
echo   Компиляция CEF и клиента
echo ========================================
echo.

call :check_nodejs
if %ERROR%==1 goto :end_build_both

call :build_src_client
if %ERROR%==1 goto :end_build_both

echo.

call :build_src_cef
if %ERROR%==1 goto :end_build_both

:end_build_both
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Компиляция завершена с ошибками
    echo ========================================
) else (
    echo ========================================
    echo   Компиляция завершена успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu

:: Установка .NET SDK
:install_dotnet
echo.
echo ========================================
echo   Установка .NET SDK
echo ========================================
echo.

call :check_dotnet_sdk
if %ERROR%==0 goto :end_install_dotnet

call :install_dotnet_sdk
if %ERROR%==1 goto :end_install_dotnet

:end_install_dotnet
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Ошибка при установке .NET SDK
    echo ========================================
) else (
    echo ========================================
    echo   .NET SDK установлен успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu

:: Компиляция .NET проекта
:build_dotnet
echo.
echo ========================================
echo   Компиляция .NET проекта (dotnet/resources)
echo ========================================
echo.

call :check_dotnet_sdk
if %ERROR%==1 goto :end_build_dotnet

call :build_dotnet_project
if %ERROR%==1 goto :end_build_dotnet

:end_build_dotnet
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Компиляция .NET проекта завершена с ошибками
    echo ========================================
) else (
    echo ========================================
    echo   Компиляция .NET проекта завершена успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu

:: Компиляция всего проекта
:build_all
echo.
echo ========================================
echo   Компиляция всего проекта
echo ========================================
echo.

call :check_nodejs
if %ERROR%==1 goto :end_build_all

call :check_dotnet_sdk
if %ERROR%==1 goto :end_build_all

echo [1/3] Компиляция клиента...
call :build_src_client
if %ERROR%==1 goto :end_build_all

echo.
echo [2/3] Компиляция CEF...
call :build_src_cef
if %ERROR%==1 goto :end_build_all

echo.
echo [3/3] Компиляция .NET проекта...
call :build_dotnet_project
if %ERROR%==1 goto :end_build_all

:end_build_all
echo.
if %ERROR%==1 (
    echo ========================================
    echo   Компиляция завершена с ошибками
    echo ========================================
) else (
    echo ========================================
    echo   Компиляция всего проекта завершена успешно
    echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu

:: Выход
:end_script
exit /b 0

:: ========================================
:: Функции
:: ========================================

:: Проверка наличия nvm-windows
:check_nvm
echo [Шаг 1/2] Проверка nvm-windows...
echo ----------------------------------------
where nvm >nul 2>&1
if %errorlevel%==0 (
    echo [OK] nvm-windows найден
    set "NVM_INSTALLED=1"
    goto :eof
)

echo nvm-windows не найден, попытка автоматической установки...

:: Проверяем наличие установщика nvm-windows
set "NVM_INSTALLER=nvm-setup.exe"
set "NVM_URL=https://github.com/coreybutler/nvm-windows/releases/download/%NVM_VERSION%/nvm-setup.exe"

if not exist "%TEMP%\%NVM_INSTALLER%" (
    echo Скачивание установщика nvm-windows...
    echo Это может занять некоторое время...
   
    :: Пытаемся скачать через PowerShell
    powershell -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%NVM_URL%' -OutFile '%TEMP%\%NVM_INSTALLER%' -UseBasicParsing}" >nul 2>&1
   
    if not exist "%TEMP%\%NVM_INSTALLER%" (
        echo [ОШИБКА] Не удалось скачать установщик nvm-windows
        echo Пожалуйста, скачайте и установите nvm-windows вручную:
        echo %NVM_URL%
        echo После установки перезапустите этот скрипт
        set "ERROR=1"
        goto :eof
    )
)

echo Установка nvm-windows...
echo ВНИМАНИЕ: Установка может потребовать прав администратора
echo Если появится запрос UAC, нажмите "Да"

:: Запускаем установщик
start /wait "" "%TEMP%\%NVM_INSTALLER%" /S

:: Ждем немного после установки
timeout /t 3 /nobreak >nul

:: Обновляем переменные окружения в текущей сессии
call refreshenv >nul 2>&1

:: Проверяем установку через реестр
reg query "HKCU\Software\nvm" >nul 2>&1
if %errorlevel%==0 (
    echo [OK] nvm-windows установлен
    set "NVM_INSTALLED=1"
   
    :: Добавляем путь nvm в PATH текущей сессии
    for /f "tokens=2*" %%A in ('reg query "HKCU\Software\nvm" /v root 2^>nul') do set "NVM_ROOT=%%B"
    if defined NVM_ROOT (
        set "PATH=%NVM_ROOT%;%PATH%"
    )
) else (
    :: Пробуем найти nvm в стандартных местах
    if exist "%APPDATA%\nvm\nvm.exe" (
        set "NVM_ROOT=%APPDATA%\nvm"
        set "PATH=%NVM_ROOT%;%PATH%"
        set "NVM_INSTALLED=1"
        echo [OK] nvm-windows найден в %NVM_ROOT%
    ) else if exist "%PROGRAMFILES%\nvm\nvm.exe" (
        set "NVM_ROOT=%PROGRAMFILES%\nvm"
        set "PATH=%NVM_ROOT%;%PATH%"
        set "NVM_INSTALLED=1"
        echo [OK] nvm-windows найден в %NVM_ROOT%
    ) else (
        echo [ОШИБКА] Не удалось найти установленный nvm-windows
        echo Возможно, требуется перезапуск командной строки или системы
        echo Пожалуйста, перезапустите этот скрипт после установки nvm-windows
        set "ERROR=1"
        goto :eof
    )
)

if %NVM_INSTALLED%==0 (
    echo [ОШИБКА] Не удалось установить или найти nvm-windows
    set "ERROR=1"
)
goto :eof

:: Установка Node.js через nvm
:install_node
echo.
echo [Шаг 2/2] Проверка Node.js через nvm...
echo ----------------------------------------

:: Используем nvm для проверки установленных версий
call nvm list >nul 2>&1
if errorlevel 1 (
    echo [ВНИМАНИЕ] Команда nvm не работает в текущей сессии
    echo Попытка обновления переменных окружения...
   
    :: Пробуем найти nvm в реестре и добавить в PATH
    for /f "tokens=2*" %%A in ('reg query "HKCU\Software\nvm" /v root 2^>nul') do set "NVM_ROOT=%%B"
    if defined NVM_ROOT (
        set "PATH=%NVM_ROOT%;%PATH%"
    )
   
    :: Пробуем использовать полный путь к nvm
    if exist "%APPDATA%\nvm\nvm.exe" (
        set "NVM_CMD=%APPDATA%\nvm\nvm.exe"
    ) else if exist "%PROGRAMFILES%\nvm\nvm.exe" (
        set "NVM_CMD=%PROGRAMFILES%\nvm\nvm.exe"
    ) else (
        set "NVM_CMD=nvm"
    )
) else (
    set "NVM_CMD=nvm"
)

:: Проверяем, установлена ли нужная версия Node.js
call %NVM_CMD% list | findstr /C:"%NODE_VERSION%" >nul
if %errorlevel%==0 (
    echo Версия Node.js %NODE_VERSION% уже установлена
    call %NVM_CMD% use %NODE_VERSION% >nul 2>&1
    if errorlevel 1 (
        echo [ВНИМАНИЕ] Не удалось переключиться на версию %NODE_VERSION%
        echo Попытка продолжения...
    ) else (
        echo [OK] Переключено на Node.js %NODE_VERSION%
        set "NODE_INSTALLED=1"
    )
) else (
    echo Установка Node.js %NODE_VERSION% через nvm...
    call %NVM_CMD% install %NODE_VERSION%
    if errorlevel 1 (
        echo [ОШИБКА] Не удалось установить Node.js %NODE_VERSION%
        set "ERROR=1"
        goto :eof
    )
   
    call %NVM_CMD% use %NODE_VERSION%
    if errorlevel 1 (
        echo [ОШИБКА] Не удалось переключиться на версию %NODE_VERSION%
        set "ERROR=1"
        goto :eof
    )
    echo [OK] Node.js %NODE_VERSION% установлен и активирован
    set "NODE_INSTALLED=1"
)

:: Проверяем, что Node.js доступен
where node >nul 2>&1
if %errorlevel%==0 (
    for /f "tokens=*" %%i in ('node --version') do set "CURRENT_NODE_VERSION=%%i"
    echo Текущая версия Node.js: %CURRENT_NODE_VERSION%
    echo [OK] Node.js готов к использованию
    set "NODE_INSTALLED=1"
) else (
    echo [ОШИБКА] Node.js не доступен после установки
    echo Возможно, требуется перезапуск командной строки
    set "ERROR=1"
    goto :eof
)

if %NODE_INSTALLED%==0 (
    echo [ОШИБКА] Не удалось установить или использовать Node.js
    set "ERROR=1"
)
goto :eof

:: Проверка наличия Node.js (для компиляции)
:check_nodejs
where node >nul 2>&1
if %errorlevel%==0 (
    for /f "tokens=*" %%i in ('node --version') do set "CURRENT_NODE_VERSION=%%i"
    echo [OK] Node.js найден: %CURRENT_NODE_VERSION%
    echo.
    goto :eof
)

echo [ОШИБКА] Node.js не найден
echo Пожалуйста, сначала установите Node.js (выберите пункт 1 в меню)
set "ERROR=1"
goto :eof

:: Компиляция src_client
:build_src_client
echo Компиляция src_client...
echo ----------------------------------------
cd src_client
if not exist "node_modules" (
    echo Установка зависимостей для src_client...
    call npm install
    if errorlevel 1 (
        echo [ОШИБКА] Не удалось установить зависимости для src_client
        set "ERROR=1"
        cd ..
        goto :eof
    )
)
call npm run build
if errorlevel 1 (
    echo [ОШИБКА] Компиляция src_client не удалась
    set "ERROR=1"
) else (
    echo [УСПЕХ] src_client скомпилирован успешно
)
cd ..
goto :eof

:: Компиляция src_cef
:build_src_cef
echo Компиляция src_cef...
echo ----------------------------------------
cd src_cef
if not exist "node_modules" (
    echo Установка зависимостей для src_cef...
    call npm install --legacy-peer-deps
    if errorlevel 1 (
        echo [ОШИБКА] Не удалось установить зависимости для src_cef
        set "ERROR=1"
        cd ..
        goto :eof
    )
)
call npm run build
if errorlevel 1 (
    echo [ОШИБКА] Компиляция src_cef не удалась
    set "ERROR=1"
) else (
    echo [УСПЕХ] src_cef скомпилирован успешно
)
cd ..
goto :eof

:: Проверка наличия .NET SDK
:check_dotnet_sdk
set "ERROR=0"
where dotnet >nul 2>&1
if %errorlevel%==0 (
    for /f "tokens=*" %%i in ('dotnet --version 2^>nul') do set "CURRENT_DOTNET_VERSION=%%i"
    echo [OK] .NET SDK найден: %CURRENT_DOTNET_VERSION%
   
    :: Проверяем, что установлена нужная версия или совместимая
    echo Проверка версии .NET SDK...
    dotnet --list-sdks | findstr /C:"%DOTNET_VERSION%" >nul
    if %errorlevel%==0 (
        echo [OK] .NET SDK %DOTNET_VERSION% установлен
        set "DOTNET_SDK_INSTALLED=1"
        set "ERROR=0"
        echo.
        goto :eof
    ) else (
        echo [ВНИМАНИЕ] .NET SDK %DOTNET_VERSION% не найден в списке установленных версий
        echo Установленные версии:
        dotnet --list-sdks
        echo.
        echo Продолжаем с текущей версией...
        set "DOTNET_SDK_INSTALLED=1"
        set "ERROR=0"
        echo.
        goto :eof
    )
)

echo [ОШИБКА] .NET SDK не найден
echo Пожалуйста, сначала установите .NET SDK (выберите пункт 5 в меню)
set "ERROR=1"
goto :eof

:: Установка .NET SDK
:install_dotnet_sdk
set "ERROR=0"
echo [Шаг 1/2] Определение архитектуры системы...
echo ----------------------------------------

:: Определяем архитектуру (x64 или x86)
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
    set "ARCH=x64"
) else if "%PROCESSOR_ARCHITECTURE%"=="x86" (
    set "ARCH=x86"
) else (
    set "ARCH=x64"
)

echo Архитектура: %ARCH%
echo.

echo [Шаг 2/2] Установка .NET SDK %DOTNET_VERSION%...
echo ----------------------------------------
echo ВНИМАНИЕ: Установка может потребовать прав администратора
echo Если появится запрос UAC, нажмите "Да"
echo.

:: Используем dotnet-install скрипт для установки
set "DOTNET_INSTALL_SCRIPT=%TEMP%\dotnet-install.ps1"
set "DOTNET_INSTALL_URL=https://dot.net/v1/dotnet-install.ps1"

echo Скачивание установщика .NET SDK...
powershell -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%DOTNET_INSTALL_URL%' -OutFile '%DOTNET_INSTALL_SCRIPT%' -UseBasicParsing}" >nul 2>&1

if not exist "%DOTNET_INSTALL_SCRIPT%" (
    echo [ОШИБКА] Не удалось скачать установщик .NET SDK
    echo Пожалуйста, скачайте и установите .NET SDK %DOTNET_VERSION% вручную:
    echo https://dotnet.microsoft.com/download/dotnet/%DOTNET_VERSION%
    set "ERROR=1"
    goto :eof
)

echo Установка .NET SDK %DOTNET_VERSION%...
powershell -ExecutionPolicy Bypass -Command "& '%DOTNET_INSTALL_SCRIPT%' -Channel %DOTNET_VERSION% -Architecture %ARCH% -InstallDir '%USERPROFILE%\.dotnet'"

if errorlevel 1 (
    echo [ОШИБКА] Не удалось установить .NET SDK %DOTNET_VERSION%
    echo Попробуйте установить вручную: https://dotnet.microsoft.com/download/dotnet/%DOTNET_VERSION%
    set "ERROR=1"
    goto :eof
)

:: Обновляем PATH для текущей сессии
set "DOTNET_ROOT=%USERPROFILE%\.dotnet"
if exist "%DOTNET_ROOT%\dotnet.exe" (
    set "PATH=%DOTNET_ROOT%;%PATH%"
)

:: Проверяем также стандартные места установки
if exist "%ProgramFiles%\dotnet\dotnet.exe" (
    set "PATH=%ProgramFiles%\dotnet;%PATH%"
)
if exist "%ProgramFiles(x86)%\dotnet\dotnet.exe" (
    set "PATH=%ProgramFiles(x86)%\dotnet;%PATH%"
)

:: Проверяем установку
timeout /t 3 /nobreak >nul
where dotnet >nul 2>&1
if %errorlevel%==0 (
    for /f "tokens=*" %%i in ('dotnet --version 2^>nul') do set "CURRENT_DOTNET_VERSION=%%i"
    echo [OK] .NET SDK установлен: %CURRENT_DOTNET_VERSION%
    set "DOTNET_SDK_INSTALLED=1"
    set "ERROR=0"
) else (
    echo [ВНИМАНИЕ] .NET SDK установлен, но не доступен в текущей сессии
    echo Возможно, требуется перезапуск командной строки
    echo Путь установки: %DOTNET_ROOT%
    echo.
    echo Попробуйте перезапустить командную строку и запустить скрипт снова
    echo Или установите .NET SDK вручную: https://dotnet.microsoft.com/download/dotnet/%DOTNET_VERSION%
    set "ERROR=1"
)
goto :eof

:: Компиляция .NET проекта
:build_dotnet_project
set "ERROR=0"
echo Компиляция .NET проекта (dotnet/resources)...
echo ----------------------------------------
cd dotnet\resources

if not exist "NeptuneEvo.sln" (
    echo [ОШИБКА] Файл NeptuneEvo.sln не найден
    set "ERROR=1"
    cd ..\..
    goto :eof
)

echo Восстановление зависимостей NuGet...
dotnet restore NeptuneEvo.sln
if errorlevel 1 (
    echo [ОШИБКА] Не удалось восстановить зависимости NuGet
    set "ERROR=1"
    cd ..\..
    goto :eof
)

echo Компиляция решения...
dotnet build NeptuneEvo.sln --configuration Release -p:Platform=x64
if errorlevel 1 (
    echo [ОШИБКА] Компиляция .NET проекта не удалась
    set "ERROR=1"
) else (
    echo [УСПЕХ] .NET проект скомпилирован успешно
)

cd ..\..
goto :eof
Теперь можно компилировать на выбор, так же доступна компиляция серверной части проекта, с установкой .NET если необходимо
 

NULMEKS

Высший разум
22 Сен 2023
820
514
143
28
Добро пошло
 

Sidney

Начинающий специалист
19 Апр 2024
349
68
70
Сделай выбор версии, Release или Debug для компиляции серверной части
 

NULMEKS

Высший разум
22 Сен 2023
820
514
143
28
Сделай выбор версии, Release или Debug для компиляции серверной части
Если у тебя мод, RedAge оригинальный то там нет в этом смысла.

Нужно переписать, настроить конфиги билда.
 

Sidney

Начинающий специалист
19 Апр 2024
349
68
70
Редага в дебаге билдится у него там релиз билдится, новички не будут понимать почему у них ничего не меняется на сервере, поэтому лучше сделать выбор debug или release
 

🐝 ubees

Гуру
11 Фев 2023
885
142
114
41
да новичкам debug или release вообще не о чём не говорит и они только путаться будут и забывать
 

NULMEKS

Высший разум
22 Сен 2023
820
514
143
28
Это я то понял, я огласил просто саму суть что это пустышка между двумя видами билда в оригинале. Так же Any там тем более лишнее.
 

NULMEKS

Высший разум
22 Сен 2023
820
514
143
28
Новичка
Новичкам вообще, не мешало бы сначала ознакомиться с базой перед тем как куда-то лезть. Или вообще не браться если нет желания чтоб не было куча глупых тем.

Потому что некоторые новички как то умеют гуглить и находить то что им надо, и хотя бы хоть как то ознакомиться с базой могут или найти что где надо.

А некоторые даже тему нормально не могут сформулировать. И по мимо всего по инструкции сделать.
 
Реакции: 🐝 ubees

vvrm7

Участник портала
Мошенник
21 Дек 2025
38
8
8
обновил код батника, подправил билд серверной части, теперь билдится debug, и все чик пук запускается после компилирования
 
Реакции: Sidney