Skip to content

Instantly share code, notes, and snippets.

@cosote
Last active November 9, 2015 10:17
Show Gist options
  • Save cosote/fb353940e8aa8656983d to your computer and use it in GitHub Desktop.
Save cosote/fb353940e8aa8656983d to your computer and use it in GitHub Desktop.
Install or uninstall any Clash of Clans Mod in BlueStacks
@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
@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