166 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| SCRIPT_PATH=/users/psychonic/gdc
 | |
| 
 | |
| # with trailing slash or undefined for system default
 | |
| MONO_BIN_PATH=/apps/mono-2.10.9/bin/
 | |
| 
 | |
| DD_PATH=${SCRIPT_PATH}/dd
 | |
| ENGINE_PATH=${DD_PATH}/${ENGINE_PATH_FROM_DD}
 | |
| 
 | |
| SM_PATH=${SCRIPT_PATH}/sourcemod-central
 | |
| SMRCON_PATH=${SCRIPT_PATH}/SMRCon
 | |
| 
 | |
| # Do not run this file directly. It is meant to be called by other scripts
 | |
| 
 | |
| ENGINE_BIN=${ENGINE_PATH}/bin/engine
 | |
| GAME_BIN=${ENGINE_PATH}/${GAME_DIR}/bin/server
 | |
| STEAMINF=${ENGINE_PATH}/${GAME_DIR}/steam.inf
 | |
| 
 | |
| GDC_PATH=${SM_PATH}/tools/gdc-psyfork
 | |
| GDC_BIN=${GDC_PATH}/Release/gdc
 | |
| 
 | |
| if [ "${GAMEDATA_DIR}" == "" ] ; then
 | |
| 	GAMEDATA_DIR=${GAME_DIR}
 | |
| fi
 | |
| 
 | |
| if [ $MOD == 1 ] ; then
 | |
| 	BIN_EXT="_i486"
 | |
| fi
 | |
| 
 | |
| echo -e "Checking game ${GAME_DIR}...\n"
 | |
| 
 | |
| if [ $MOD == 0 ] && [ "$1" == "auto" ] ; then
 | |
| 	UPDATE_RES=`./updatecheck.pl "${STEAMINF}"`
 | |
| 	if [ $? -ne 0 ] ; then
 | |
| 		exit 1
 | |
| 	fi
 | |
| 	EXPECTED_VER=`echo ${UPDATE_RES} | egrep -o '([0-9]+)$'`
 | |
| 	echo Expecting version ${EXPECTED_VER}
 | |
| fi
 | |
| 
 | |
| export RDTSC_FREQUENCY="disabled"
 | |
| export LD_LIBRARY_PATH="${ENGINE_PATH}:${ENGINE_PATH}/bin:$LD_LIBRARY_PATH"
 | |
| 
 | |
| UPDATE=0
 | |
| if [ "$1" == "update" ] ; then
 | |
| 	UPDATE=1
 | |
| elif [ "$1" == "auto" ] ; then
 | |
| 	UPDATE=1
 | |
| fi
 | |
| 
 | |
| if [ ${UPDATE} -eq 1 ] ; then
 | |
| 	cd ${DD_PATH}
 | |
| 
 | |
| 	if [ "${DD_NEEDS_AUTH}" != "" ] ; then
 | |
| 		if [ "${DD_GAME}" != "" ] ; then
 | |
| 			DD_OPT_AUTH=`tr '\r\n' ' ' < dd-login-info.txt`
 | |
| 		elif [ "${DD_APP}" != "" ] ; then
 | |
| 			DD_OPT_AUTH=`tr '\r\n' ' ' < dd-login-info.txt`
 | |
| 		else
 | |
| 			echo "Error: neither DD_GAME nor DD_APP are set!"
 | |
| 			exit 1
 | |
| 		fi
 | |
| 	fi
 | |
| 
 | |
| 	if [ "${DD_BETA}" != "" ] ; then
 | |
| 		DD_OPT_BETA="-beta ${DD_BETA}"
 | |
| 		if [ "${DD_BETA_PASSWORD}" != "" ] ; then
 | |
| 			DD_OPT_BETA_PASSWORD="-betapassword ${DD_BETA_PASSWORD}"
 | |
| 		fi
 | |
| 	fi
 | |
| 
 | |
| 	for i in 1 2 3 4 5
 | |
| 	do
 | |
| 		if [ "${DD_GAME}" != "" ] ; then
 | |
| 			${MONO_BIN_PATH}mono DepotDownloader.exe     \
 | |
| 				-game "${DD_GAME}"   \
 | |
| 				-dir ${DD_DIR}       \
 | |
| 				-filelist server.txt \
 | |
| 				-all-platforms       \
 | |
| 				-no-exclude          \
 | |
| 				${DD_OPT_CELL}       \
 | |
| 				${DD_OPT_AUTH}
 | |
| 		else
 | |
| 			${MONO_BIN_PATH}mono DepotDownloader.exe     \
 | |
| 				-app "${DD_APP}"     \
 | |
| 				-dir ${DD_DIR}       \
 | |
| 				-filelist server.txt \
 | |
| 				-all-platforms       \
 | |
| 				-no-exclude          \
 | |
| 				${DD_OPT_CELL}       \
 | |
| 				${DD_OPT_AUTH}       \
 | |
| 				${DD_OPT_BETA}       \
 | |
| 				${DD_OPT_BETA_PASSWORD}
 | |
| 		fi
 | |
| 
 | |
| 		echo
 | |
| 
 | |
| 		if [ $? == 0 ] ; then
 | |
| 			break
 | |
| 		elif [ $i == 5 ] ; then
 | |
| 			echo Update failed five times; welp
 | |
| 			break
 | |
| 		fi
 | |
| 
 | |
| 		echo -e "Update failed. Trying again in 30 seconds...\n"
 | |
| 		sleep 30
 | |
| 	done
 | |
| fi
 | |
| 
 | |
| if [ "$1" == "auto" ] ; then
 | |
| 	DOWNLOADED_VER=`grep -E "^(Patch)?Version=(([0-9]\.?)+)" ${STEAMINF} | grep -Eo "([0-9]\.?)+" | sed s/[^0-9]//g`
 | |
| 
 | |
| 	if [ ${DOWNLOADED_VER} != ${EXPECTED_VER} ] ; then
 | |
| 		echo Download resulted with version ${DOWNLOADED_VER}, but expected ${EXPECTED_VER}. Exiting.
 | |
| 		exit 1
 | |
| 	fi
 | |
| fi
 | |
| 
 | |
| # update game-specific
 | |
| cd ${SCRIPT_PATH}
 | |
| GAME_SCRIPT_NAME=`echo $0 | sed s/\.sh$//`
 | |
| echo checking to see if  ${GAME_SCRIPT_NAME}_repos.sh  exists
 | |
| if [ -e ${GAME_SCRIPT_NAME}_repos.sh ] ; then
 | |
| 	./${GAME_SCRIPT_NAME}_repos.sh
 | |
| fi
 | |
| 
 | |
| # update sourcemod
 | |
| echo Updating SourceMod repo
 | |
| cd ${SM_PATH}
 | |
| hg pull -u
 | |
| 
 | |
| echo -e "\n"
 | |
| 
 | |
| cd ${ENGINE_PATH}
 | |
| 
 | |
| for i in "${gamedata_files[@]}"
 | |
| do
 | |
| 	NO_SYMTABLE=
 | |
| 
 | |
| 	readelf --sections ${GAME_BIN}${BIN_EXT}.so | grep --quiet .symtab
 | |
| 	if [ "${PIPESTATUS[1]}" != "0" ] ; then
 | |
| 		NO_SYMTABLE=" -n"
 | |
| 	fi
 | |
| 
 | |
| 	readelf --sections ${GAME_BIN}${BIN_EXT}.so | grep --quiet .strtab
 | |
| 	if [ "${PIPESTATUS[1]}" != "0" ] ; then
 | |
| 			NO_SYMTABLE=" -n"
 | |
| 	fi
 | |
| 
 | |
| 	# having an issue upon exit after loading some source2007 server bins, invalid free in sendtable dtor, idk. suppress.
 | |
| 	MALLOC_CHECK_=0 ${GDC_BIN} \
 | |
| 		-g ${GAMEDATA_DIR} \
 | |
| 		-e ${ENGINE_NAME} \
 | |
| 		-f ${SM_PATH}/gamedata/$i \
 | |
| 		-b ${GAME_BIN}${BIN_EXT}.so \
 | |
| 		-x ${ENGINE_BIN}${BIN_EXT}.so \
 | |
| 		-w ${GAME_BIN}.dll \
 | |
| 		-y ${ENGINE_BIN}.dll \
 | |
| 		-s ${GDC_PATH}/symbols.txt \
 | |
| 		${NO_SYMTABLE}
 | |
| 	echo -e "------------------------------------------------------\n"
 | |
| done
 | |
| 
 | |
| exit 0
 |