Last active
November 9, 2015 10:17
-
-
Save cosote/fb353940e8aa8656983d to your computer and use it in GitHub Desktop.
Install or uninstall any Clash of Clans Mod in BlueStacks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@echo off | |
:: | |
:: ModCOC install.bat script to copy all sub-folder to Clash of Clans update folder. | |
:: Please please this file in ModCOC folder (where csv, logic (and sc) folders are located). | |
:: | |
Setlocal EnableDelayedExpansion | |
set "esc=^" | |
set "log=%~0.log" | |
set "src=%~dp0" | |
set "src=%src:~0,-1%" | |
set "retry=yes" | |
set "programfolder=" | |
if exist "%ProgramFiles%\BlueStacks\HD-RunApp.exe" set "programfolder=%ProgramFiles%" | |
if exist "%ProgramFiles(x86)%\BlueStacks\HD-RunApp.exe" set "programfolder=%ProgramFiles(x86)%" | |
set "expected_folder=csv;logic" | |
set "accepted_folder=;!expected_folder!;sc;" | |
set "missing_folder=" | |
:: init log | |
del "!log!" >nul 2>&1 | |
call :log ModCOC install.bat v 0.1>nul | |
call :log https://gist.github.com/cosote/fb353940e8aa8656983d>nul | |
call :log !date! !time! Script: %~0>nul | |
call :log Variables:>nul | |
call :log programfolder=!programfolder!>nul | |
call :log log=!log!>nul | |
call :log src=!src!>nul | |
call :log retry=!retry!>nul | |
call :log expected_folder=!expected_folder!>nul | |
call :log accepted_folder=!accepted_folder!>nul | |
:: find BlueStacks | |
if "!programfolder!" equ "" ( | |
call :log BlueStacks not found! | |
goto :exit | |
) | |
:: pint BlueStacks version | |
for /f "usebackq tokens=3*" %%a in (`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\BlueStacks" /v "Version"^|find "Version"`) do call :log Found BlueStacks Version %%a | |
:: check if csv and logic folder exist | |
call :log Checking for ModCOC folders... | |
for %%a in (!expected_folder!) do ( | |
if exist "!src!\%%a" ( | |
call :log '%%a': Found | |
) else ( | |
set "missing_folder=!missing_folder!;%%a" | |
call :log '%%a': NOT FOUND ! ! ! | |
call :log Missing folder '!src!\%%a' | |
) | |
) | |
call :log. | |
if "!missing_folder!" neq "" ( | |
call :log Required ModCOC folder missing. | |
call :log Exit now. | |
goto :exit | |
) | |
:retry | |
call :log Ensure that BlueStacks is running... | |
net start BstHdAndroidSvc 2>nul | |
call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" start-server | |
call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" connect localhost | |
call :log Waiting for BlueStacks (that can take some time)... | |
call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" wait-for-device | |
call :check_error | |
if "!check_error_continue!" neq "ok" goto !check_error_continue! | |
:: Clean-up tmp | |
call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" shell "rm -r '/data/local/tmp/ModCOC'">nul | |
:: get user and group from destination folder to change ownership of files after push | |
call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" shell su -c "stat -c %%%%u:%%%%g '/data/data/com.supercell.clashofclans'">nul | |
set /p user_group=<"!log!.exec.log" | |
for /d %%d in ("%src%\*") do ( | |
call :log. | |
set "n=%%~nd%%~xd" | |
set "skip_push=no" | |
for /f "delims=" %%a in ("!n!") do set "test_folder=!accepted_folder:%%a=!" | |
if "!test_folder!" equ "!accepted_folder!" ( | |
set "skip_push=yes" | |
call :log '!n!' is not an expected ModCOC folder. | |
call :log Unexpected folder '%%d'>nul | |
choice /C YN /m "Do you really want to push folder '!n!' to BlueStacks" | |
if !errorlevel! equ 1 set "skip_push=no" | |
) | |
if "!skip_push!" equ "no" ( | |
call :log Create folder '/data/local/tmp/ModCOC/!n!' in BlueStacks... | |
call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" shell "mkdir -p /data/local/tmp/ModCOC/!n!" | |
call :check_error | |
if "!check_error_continue!" neq "ok" goto !check_error_continue! | |
:: Change folder owner | |
call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" shell su -c "chown !user_group! '/data/local/tmp/ModCOC/!n!'">nul | |
call :log Push files to BlueStacks... | |
::call :push_files "!src!" "!n!" | |
for %%f in ("!src!\!n!\*") do ( | |
call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" push "%%f" "/data/local/tmp/ModCOC/!n!" | |
call :check_error | |
if "!check_error_continue!" neq "ok" goto !check_error_continue! | |
:: Change file owner | |
call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" shell su -c "chown !user_group! '/data/local/tmp/ModCOC/!n!/%%~nf%%~xf'">nul | |
) | |
:: Delete folder if it exists | |
call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" shell su -c "rm -r '/data/data/com.supercell.clashofclans/update/!n!'">nul | |
call :log Move folder '!n!' to /data/data/com.supercell.clashofclans/update/ | |
call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" shell su -c "mv '/data/local/tmp/ModCOC/!n!' '/data/data/com.supercell.clashofclans/update/'" | |
) | |
) | |
call :log. | |
call :log Change file permission... | |
::"!ProgramFolder!\BlueStacks\HD-Adb.exe" shell su -c "chmod -R 777 /data/data/com.supercell.clashofclans/update/" | |
::echo #!/bin/bash>"%src%\update_perm.sh" | |
::echo echo hello>>"%src%\update_perm.sh" | |
::echo su -c "find /data/data/com.supercell.clashofclans/update -print0|xargs -0 chown `stat -t '/data/data/com.supercell.clashofclans'|cut -d ' ' -f 5`:`stat -t '/data/data/com.supercell.clashofclans'|cut -d ' ' -f 6`">>"%src%\update_perm.sh" | |
::call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" push "%src%\update_perm.sh" "/data/local/tmp/ModCOC" | |
::call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" shell su -c "chmod 777 '/data/local/tmp/ModCOC/update_perm.sh'" | |
:: set owner of '/data/data/com.supercell.clashofclans/update' to its parent folder owner | |
"!ProgramFolder!\BlueStacks\HD-Adb.exe" shell su -c "find '/data/data/com.supercell.clashofclans/update' -print0|xargs -0 chown $(stat -t '/data/data/com.supercell.clashofclans'|cut -d ' ' -f 5):$(stat -t '/data/data/com.supercell.clashofclans'|cut -d ' ' -f 6)">>"!log!" 2>&1 | |
::call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" shell su -c "find /data/data/com.supercell.clashofclans/update -print0|xargs -0 chown `stat -c %u:%g '/data/data/com.supercell.clashofclans'`" | |
::call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" shell su -c /data/local/tmp/ModCOC/update_perm.sh | |
:: change permissions to 0770 | |
call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" shell su -c "chmod -R 0770 '/data/data/com.supercell.clashofclans/update'" | |
:: Clean-up tmp | |
call :exec "!ProgramFolder!\BlueStacks\HD-Adb.exe" shell "rm -r '/data/local/tmp/ModCOC'">nul | |
:exit | |
del "!log!.exec.log" >nul 2>&1 | |
call :log. | |
pause | |
if "!check_error_continue!" equ "exit" exit /b 1 | |
exit /b | |
:check_error | |
set check_error_continue=ok | |
if !errorlevel! equ 0 exit /b 0 | |
if !retry! equ yes ( | |
set retry=no | |
call :log. | |
call :log Some problem occurred, stop BlueStacks service... | |
call :exec net stop BstHdAndroidSvc | |
set check_error_continue=retry | |
) else ( | |
call :log. | |
call :log Cannot communicate with BlueStacks. | |
call :log Exit now. | |
set check_error_continue=exit | |
) | |
exit /b | |
:exec execute_string | |
del "!log!.exec.log" >nul 2>&1 | |
set "es=%*" | |
echo !es!>>"!log!" | |
!es! >"!log!.exec.log" 2>&1 | |
set "exec_errorlevel=!errorlevel!" | |
echo ERRORLEVEL: !exec_errorlevel!>>"!log!" | |
type "!log!.exec.log" | |
type "!log!.exec.log">>"!log!" | |
exit /b !exec_errorlevel! | |
:log text | |
echo %* | |
if "!log!" neq "" echo %*>>"!log!" | |
exit /b | |
:log. | |
echo. | |
if "!log!" neq "" echo.>>"!log!" | |
exit /b |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@echo off | |
:: | |
:: ModCOC uninstall.bat script to remove Clash of Clans update sub-folders. | |
:: Any sub-folder where this script is located will be removed in BlueStacks under /data/data/com.supercell.clashofclans/update/. | |
:: Please please this file in ModCOC folder (where csv, logic (and sc) folders are located). | |
:: | |
Setlocal EnableDelayedExpansion | |
set "src=%~dp0" | |
set "src=%src:~0,-1%" | |
set retry=yes | |
:: find BlueStacks | |
set "programfolder=" | |
if exist "%ProgramFiles%\BlueStacks\HD-RunApp.exe" set "programfolder=%ProgramFiles%" | |
if exist "%ProgramFiles(x86)%\BlueStacks\HD-RunApp.exe" set "programfolder=%ProgramFiles(x86)%" | |
if "!programfolder!" equ "" ( | |
echo BlueStacks not found! | |
goto :exit | |
) | |
:retry | |
echo Ensure that BlueStacks is running... | |
net start BstHdAndroidSvc 2>nul | |
"!ProgramFolder!\BlueStacks\HD-Adb.exe" start-server | |
"!ProgramFolder!\BlueStacks\HD-Adb.exe" connect localhost | |
echo Waiting for BlueStacks (that can take some time)... | |
"!ProgramFolder!\BlueStacks\HD-Adb.exe" wait-for-device | |
call :check_error | |
if "!check_error_continue!" neq "ok" goto !check_error_continue! | |
for /d %%d in ("%src%\*") do ( | |
echo. | |
set n=%%~nd%%~xd | |
echo Delete BlueStacks folder /data/data/com.supercell.clashofclans/update/!n! | |
"!ProgramFolder!\BlueStacks\HD-Adb.exe" shell su -c "rm -r /data/data/com.supercell.clashofclans/update/!n!" | |
call :check_error | |
if "!check_error_continue!" neq "ok" goto !check_error_continue! | |
) | |
:exit | |
echo. | |
pause | |
if "!check_error_continue!" equ "exit" exit /b 1 | |
exit /b | |
:check_error | |
set check_error_continue=ok | |
if !errorlevel! equ 0 exit /b 0 | |
if !retry! equ yes ( | |
set retry=no | |
echo. | |
echo Some problem occurred, stop BlueStacks service... | |
net stop BstHdAndroidSvc | |
set check_error_continue=retry | |
) else ( | |
echo. | |
echo Cannot communicate with BlueStacks. | |
echo Exit now! | |
set check_error_continue=exit | |
) | |
exit /b |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment