|
|
@ -77,201 +77,4 @@ fn_mods_scrape_urls(){ |
|
|
|
sourcemodurl="${sourcemodfasterurl}/${sourcemodlatestfile}" |
|
|
|
} |
|
|
|
|
|
|
|
# Sets some gsm requirements |
|
|
|
fn_gsm_requirements(){ |
|
|
|
# If tmpdir variable doesn't exist, LGSM is too old |
|
|
|
if [ -z "${tmpdir}" ]||[ -z "${lgsmdir}" ]; then |
|
|
|
fn_print_fail "Your LGSM version is too old." |
|
|
|
echo " * Please do a full update, including ${selfname} script." |
|
|
|
core_exit.sh |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# Define all variables from a mod at once when index is set to a separator |
|
|
|
fn_mod_info(){ |
|
|
|
# If for some reason no index is set, none of this can work |
|
|
|
if [ -z "$index" ]; then |
|
|
|
fn_print_error "index variable not set. Please report an issue to LGSM Team." |
|
|
|
echo "* https://github.com/GameServerManagers/LinuxGSM/issues" |
|
|
|
core_exit.sh |
|
|
|
fi |
|
|
|
modcommand="${mods_global_array[index+1]}" |
|
|
|
modprettyname="${mods_global_array[index+2]}" |
|
|
|
modurl="${mods_global_array[index+3]}" |
|
|
|
modfilename="${mods_global_array[index+4]}" |
|
|
|
modsubdirs="${mods_global_array[index+5]}" |
|
|
|
modlowercase="${mods_global_array[index+6]}" |
|
|
|
modinstalldir="${mods_global_array[index+7]}" |
|
|
|
modkeepfiles="${mods_global_array[index+8]}" |
|
|
|
modengines="${mods_global_array[index+9]}" |
|
|
|
modgames="${mods_global_array[index+10]}" |
|
|
|
modexcludegames="${mods_global_array[index+11]}" |
|
|
|
modsite="${mods_global_array[index+12]}" |
|
|
|
moddescription="${mods_global_array[index+13]}" |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
# Find out if a game is compatible with a mod from a modgames (list of games supported by a mod) variable |
|
|
|
fn_compatible_mod_games(){ |
|
|
|
# Reset test value |
|
|
|
modcompatiblegame="0" |
|
|
|
# If value is set to GAMES (ignore) |
|
|
|
if [ "${modgames}" != "GAMES" ]; then |
|
|
|
# How many games we need to test |
|
|
|
gamesamount="$(echo "${modgames}" | awk -F ';' '{ print NF }')" |
|
|
|
# Test all subvalue of "modgames" using the ";" separator |
|
|
|
for ((gamevarindex=1; gamevarindex < ${gamesamount}; gamevarindex++)); do |
|
|
|
# Put current game name into modtest variable |
|
|
|
gamemodtest="$( echo "${modgames}" | awk -F ';' -v x=${gamevarindex} '{ print $x }' )" |
|
|
|
# If game name matches |
|
|
|
if [ "${gamemodtest}" == "${gamename}" ]; then |
|
|
|
# Mod is compatible ! |
|
|
|
modcompatiblegame="1" |
|
|
|
fi |
|
|
|
done |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# Find out if an engine is compatible with a mod from a modengines (list of engines supported by a mod) variable |
|
|
|
fn_compatible_mod_engines(){ |
|
|
|
# Reset test value |
|
|
|
modcompatibleengine="0" |
|
|
|
# If value is set to ENGINES (ignore) |
|
|
|
if [ "${modengines}" != "ENGINES" ]; then |
|
|
|
# How many engines we need to test |
|
|
|
enginesamount="$(echo "${modengines}" | awk -F ';' '{ print NF }')" |
|
|
|
# Test all subvalue of "modengines" using the ";" separator |
|
|
|
for ((gamevarindex=1; gamevarindex < ${enginesamount}; gamevarindex++)); do |
|
|
|
# Put current engine name into modtest variable |
|
|
|
enginemodtest="$( echo "${modengines}" | awk -F ';' -v x=${gamevarindex} '{ print $x }' )" |
|
|
|
# If engine name matches |
|
|
|
if [ "${enginemodtest}" == "${engine}" ]; then |
|
|
|
# Mod is compatible ! |
|
|
|
modcompatibleengine="1" |
|
|
|
fi |
|
|
|
done |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# Find out if a game is not compatible with a mod from a modnotgames (list of games not supported by a mod) variable |
|
|
|
fn_not_compatible_mod_games(){ |
|
|
|
# Reset test value |
|
|
|
modeincompatiblegame="0" |
|
|
|
# If value is set to NOTGAMES (ignore) |
|
|
|
if [ "${modexcludegames}" != "NOTGAMES" ]; then |
|
|
|
# How many engines we need to test |
|
|
|
excludegamesamount="$(echo "${modexcludegames}" | awk -F ';' '{ print NF }')" |
|
|
|
# Test all subvalue of "modexcludegames" using the ";" separator |
|
|
|
for ((gamevarindex=1; gamevarindex < ${excludegamesamount}; gamevarindex++)); do |
|
|
|
# Put current engine name into modtest variable |
|
|
|
excludegamemodtest="$( echo "${modexcludegames}" | awk -F ';' -v x=${gamevarindex} '{ print $x }' )" |
|
|
|
# If engine name matches |
|
|
|
if [ "${excludegamemodtest}" == "${gamename}" ]; then |
|
|
|
# Mod is compatible ! |
|
|
|
modeincompatiblegame="1" |
|
|
|
fi |
|
|
|
done |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# Sums up if a mod is compatible or not with modcompatibility=0/1 |
|
|
|
fn_mod_compatible_test(){ |
|
|
|
# Test game and engine compatibility |
|
|
|
fn_compatible_mod_games |
|
|
|
fn_compatible_mod_engines |
|
|
|
fn_not_compatible_mod_games |
|
|
|
if [ "${modeincompatiblegame}" == "1" ]; then |
|
|
|
modcompatibility="0" |
|
|
|
elif [ "${modcompatibleengine}" == "1" ]||[ "${modcompatiblegame}" == "1" ]; then |
|
|
|
modcompatibility="1" |
|
|
|
else |
|
|
|
modcompatibility="0" |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# Checks if a mod is compatibile for installation |
|
|
|
# Provides available mods for installation |
|
|
|
# Provides commands for mods installation |
|
|
|
fn_mods_available(){ |
|
|
|
# First, reset variables |
|
|
|
compatiblemodslist=() |
|
|
|
availablemodscommands=() |
|
|
|
modprettynamemaxlength="0" |
|
|
|
modsitemaxlength="0" |
|
|
|
moddescriptionmaxlength="0" |
|
|
|
modcommandmaxlength="0" |
|
|
|
# Find compatible games |
|
|
|
# Find separators through the global array |
|
|
|
for ((index="0"; index <= ${#mods_global_array[@]}; index++)); do |
|
|
|
# If current value is a separator; then |
|
|
|
if [ "${mods_global_array[index]}" == "${modseparator}" ]; then |
|
|
|
# Set mod variables |
|
|
|
fn_mod_info |
|
|
|
# Test if game is compatible |
|
|
|
fn_mod_compatible_test |
|
|
|
# If game is compatible |
|
|
|
if [ "${modcompatibility}" == "1" ]; then |
|
|
|
# Put it into the list to display to the user |
|
|
|
compatiblemodslist+=( "${modprettyname}" "${modcommand}" "${modsite}" "${moddescription}" ) |
|
|
|
# Keep available commands in an array |
|
|
|
availablemodscommands+=( "${modcommand}" ) |
|
|
|
fi |
|
|
|
fi |
|
|
|
done |
|
|
|
} |
|
|
|
|
|
|
|
# Output available mods in a nice way to the user |
|
|
|
fn_mods_show_available(){ |
|
|
|
# Set and reset vars |
|
|
|
compatiblemodslistindex=0 |
|
|
|
spaces=" " |
|
|
|
# As long as we're within index values |
|
|
|
while [ "${compatiblemodslistindex}" -lt "${#compatiblemodslist[@]}" ]; do |
|
|
|
# Set values for convenience |
|
|
|
displayedmodname="${compatiblemodslist[compatiblemodslistindex]}" |
|
|
|
displayedmodcommand="${compatiblemodslist[compatiblemodslistindex+1]}" |
|
|
|
displayedmodsite="${compatiblemodslist[compatiblemodslistindex+2]}" |
|
|
|
displayedmoddescription="${compatiblemodslist[compatiblemodslistindex+3]}" |
|
|
|
# Output mods to the user |
|
|
|
echo -e "\e[1m${displayedmodname}\e[0m - ${displayedmoddescription} - ${displayedmodsite}" |
|
|
|
echo -e " * \e[36m${displayedmodcommand}\e[0m" |
|
|
|
# Increment index from the amount of values we just displayed |
|
|
|
let "compatiblemodslistindex+=4" |
|
|
|
done |
|
|
|
# If no mods are found |
|
|
|
if [ -z "${compatiblemodslist}" ]; then |
|
|
|
fn_print_fail "No mods are currently available for ${gamename}." |
|
|
|
core_exit.sh |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# Get details of a mod any (relevant and unique, such as full mod name or install command) value |
|
|
|
fn_mod_get_info_from_command(){ |
|
|
|
# Variable to know when job is done |
|
|
|
modinfocommand="0" |
|
|
|
# Find entry in global array |
|
|
|
for ((index=0; index <= ${#mods_global_array[@]}; index++)); do |
|
|
|
# When entry is found |
|
|
|
if [ "${mods_global_array[index]}" == "${currentmod}" ]; then |
|
|
|
# Go back to the previous "MOD" separator |
|
|
|
for ((index=index; index <= ${#mods_global_array[@]}; index--)); do |
|
|
|
# When "MOD" is found |
|
|
|
if [ "${mods_global_array[index]}" == "MOD" ]; then |
|
|
|
# Get info |
|
|
|
fn_mod_info |
|
|
|
modinfocommand="1" |
|
|
|
break |
|
|
|
fi |
|
|
|
done |
|
|
|
fi |
|
|
|
# Exit the loop if job is done |
|
|
|
if [ "${modinfocommand}" == "1" ]; then |
|
|
|
break |
|
|
|
fi |
|
|
|
done |
|
|
|
} |
|
|
|
|
|
|
|
fn_gsm_requirements |
|
|
|
fn_mods_scrape_urls |
|
|
|
fn_mods_info |
|
|
|
fn_mods_available |
|
|
|