sourcemod/tools/gdc-psyfork/example-scripts/gdc_core.sh

166 lines
3.8 KiB
Bash
Raw Normal View History

#!/bin/bash
2013-04-30 02:51:54 +02:00
SCRIPT_PATH=/users/psychonic/gdc
# with trailing slash or undefined for system default
MONO_BIN_PATH=/apps/mono-2.10.9/bin/
2013-04-30 02:51:54 +02:00
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"
2013-04-30 02:51:54 +02:00
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}
2013-04-30 02:51:54 +02:00
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
2013-04-30 02:51:54 +02:00
${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
2013-04-30 02:51:54 +02:00
${MONO_BIN_PATH}mono DepotDownloader.exe \
-app "${DD_APP}" \
-dir ${DD_DIR} \
-filelist server.txt \
-all-platforms \
-no-exclude \
${DD_OPT_CELL} \
2013-04-30 02:51:54 +02:00
${DD_OPT_AUTH} \
${DD_OPT_BETA} \
${DD_OPT_BETA_PASSWORD}
fi
2013-04-30 02:51:54 +02:00
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
2013-04-30 02:51:54 +02:00
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