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
 |