@if defined WOWDIR if defined WOWVER if defined BASEDIR (if '%1'=='' EXIT /B 0) & if /I not '%1'=='create' goto CheckExe
@echo off
:: Для корректной работы набора скриптов wows-*.cmd
::   1) Должны запускаться по PATH программы  7z.exe, rar.exe, опционально arc.exe, tasklist.exe или tlist.exe, taskkill.exe или nircmdc.exe или nircmd.exe
::      Поддерживается управление под WinPE (от XP до 11x64), куда tasklist.exe и taskkill.exe интегрировать проблематично
::   2) Запуск .exe файлов различных версий сервера WoW может требовать установки в системе Microsoft Visual C++ runtime 2008 и 2010
:: Распаковка + восстановление последнего сохранённого состояния + запуск сервера и клиента + вход в игру:  wows-unpack.cmd + wows-restore.cmd + wows-run.cmd + авторизация в wow.exe (Login a, Password a)
:: Запуск клиента, если он не запущен:  wows-run.cmd (предварительно запускает wows-transmogrify.cmd, если он изменён)  или просто wow.exe
:: Сохранение:  выход в меню персонажей wow.exe (или в главное меню, или завершение wow.exe) + wows-save.cmd
:: Смена класса [и расы] персонажа:  выход в главное меню wow.exe (или завершение wow.exe) + wows-class.cmd имя класс [раса] + авторизация в wow.exe
:: Восстановление + перезапуск сервера, если он запущен:  wows-restore.cmd + авторизация в wow.exe
:: Остановка сервера WoW без остановки сервера БД:  wows-stop.cmd keepsql
:: Полная остановка сервера:  wows-stop.cmd
:: Просмотр/изменение базы данных:  wows-run.cmd sqlonly + работа с БД через интерфейс HeidiSQL Portable
:: Перезапуск сервера:  wows-run.cmd reload
:: Остановка + полная перезагрузка БД с учётом обновлённых repack\worldpatch-*.sql.7z и patch-*.php:  wows-patch.cmd

REM WOWDIR и WOWVER определяются из местоположения файла wows-where.cmd
REM WOWDIR не содержит слэша на конце
REM Вызовом файла wows-where.cmd автоматически выполняется переход в WOWDIR

for %%I IN ("%~dp0\.") DO set "WOWDIR=%%~fI"
cd /D "%WOWDIR%"& if errorlevel 1 echo ERROR! cannot chdir to WoW client directory "%WOWDIR%"...& pause>nul& EXIT /B 1

set WOWVER=
if exist "Data\world2.MPQ" (set WOWVER=4.3.4) else if exist "Data\expansion3.mpq" (set WOWVER=4.0.6a) else if exist "Data\lichking.MPQ" (set WOWVER=3.3.5a) else if exist "Data\expansion.MPQ" (set WOWVER=2.4.3) else if exist "Data\terrain.MPQ" (set WOWVER=1.12)
if not defined WOWVER echo ERROR! cannot recognize version of WoW client in "%WOWDIR%"...& pause>nul& EXIT /B 1

REM Определение базового маршрута BASEDIR, куда сервер распаковывается.
REM Список вариантов маршрутов и порядок их приоритета можно изменять.
REM ! Можно держать несколько распакованных директорий сборок (для одной и
REM той же версии WoW) и ставить атрибут Hidden на те из них, которые следует
REM игнорировать, т.е. можно обойтись без переименования директорий.
for %%I in ("Q:\" "B:\TEMP\" "C:\TEMP\" "C:\") DO (
 if /I _%1==_create (
    for /D %%J in ("%%~IWoW-%WOWVER%-*") DO if exist "%%~J\*.exe" set BASEDIR=nul& echo World of Warcraft %WOWVER% server seems to be already unpacked to "%%~fJ"& echo You can delete "%%~fJ" and run this script again ...& pause>nul& EXIT /B 1
    if exist "%%~I" set "BASEDIR=%%~I"& echo Found valid path for World of Warcraft %WOWVER% server: "%%~I"& shift /1 & goto CheckExe
 ) else (
    for /D %%J in ("%%~IWoW-%WOWVER%-*") DO set "BASEDIR=%%~fJ"& echo World of Warcraft at "%WOWDIR%", server at "%%~fJ"& goto CheckExe 
 )
)
if /I _%1==_create (
   echo ERROR! Cannot find valid path for World of Warcraft %WOWVER% server
) else (
   echo ERROR! Cannot find unpacked World of Warcraft %WOWVER% server
)
echo Check Path list in file "%~f0"
pause>nul
set BASEDIR=nul
EXIT /B 1

:CheckExe
set ERR=0
:NextExe
if '%1'=='return' exit /b %ERR%
if '%1'=='' (
   if "%ERR%"=="0" (if defined TMP set "TEMP=%TMP%") else echo ... Press a key to continue& pause>nul
   set ERR=& EXIT /B %ERR%
)
if not exist %1 if "%~$PATH:1%"=="" (
   (call)
   if '%1'=='tasklist.exe' call :CheckExe tlist.exe   return && set ERR=%ERR%
   if '%1'=='taskkill.exe' call :CheckExe nircmdc.exe return && set ERR=%ERR%
   if '%1'=='nircmdc.exe'  call :CheckExe nircmd.exe  return && set ERR=%ERR%
   if errorlevel 1 set ERR=1& echo ERROR! Required executable file %1 not found on PATH
   shift
   goto NextExe
)
if '%1'=='tasklist.exe' set FOR_TASKLIST=FOR /F "tokens=2,8,* delims=," %%J in ('tasklist /V /FO CSV /NH /FI "IMAGENAME EQ %%~nxI"')
if '%1'=='tlist.exe'    set FOR_TASKLIST=FOR /F "tokens=3,4,* delims= " %%J in ('tlist -m "%%~nxI"')&^
if exist "%SystemRoot%\SysWOW64\*.exe" set FOR_TASKLIST=FOR /F "tokens=1,2,* delims= " %%J in ('tlist "%%~nxI" ^^^|findstr /R /C:"^ *[1-9][0-9]*  *%%~nxI\>"')
if '%1'=='taskkill.exe' set TASKKILL_CLOSE_J=taskkill /PID %%~J&         set TASKKILL_FORCE=taskkill /F /IM
if '%1'=='nircmdc.exe'  set TASKKILL_CLOSE_J=nircmdc closeprocess /%%~J& set TASKKILL_FORCE=nircmdc killprocess
if '%1'=='nircmd.exe'   set TASKKILL_CLOSE_J=nircmd closeprocess /%%~J&  set TASKKILL_FORCE=nircmd killprocess
shift
goto NextExe
