gameservergame-servergame-servershacktoberfestdedicated-game-serversgamelinuxgsmserverbashgaminglinuxmultiplayer-game-servershell
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
4.3 KiB
135 lines
4.3 KiB
#!/bin/bash
|
|
# LinuxGSM command_mods_install.sh module
|
|
# Author: Daniel Gibbs
|
|
# Contributors: http://linuxgsm.com/contrib
|
|
# Website: https://linuxgsm.com
|
|
# Description: List and installs available mods along with mods_list.sh and mods_core.sh.
|
|
|
|
commandname="MODS-INSTALL"
|
|
commandaction="Installing mods"
|
|
functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
|
|
fn_firstcommand_set
|
|
|
|
check.sh
|
|
mods_core.sh
|
|
|
|
fn_print_header
|
|
|
|
# Displays a list of installed mods.
|
|
fn_mods_installed_list
|
|
if [ "${installedmodscount}" -gt "0" ]; then
|
|
echo -e "Installed addons/mods"
|
|
echo -e "================================="
|
|
# Go through all available commands, get details and display them to the user.
|
|
for ((llindex = 0; llindex < ${#installedmodslist[@]}; llindex++)); do
|
|
# Current mod is the "llindex" value of the array we're going through.
|
|
currentmod="${installedmodslist[llindex]}"
|
|
fn_mod_get_info
|
|
# Display mod info to the user.
|
|
echo -e " * ${green}${modcommand}${default}${default}"
|
|
done
|
|
echo -e ""
|
|
fi
|
|
|
|
echo -e "Available addons/mods"
|
|
echo -e "================================="
|
|
# Display available mods from mods_list.sh.
|
|
# Set and reset vars
|
|
compatiblemodslistindex=0
|
|
# 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 "${displayedmodname} - ${displayedmoddescription} - ${displayedmodsite}"
|
|
echo -e " * ${cyan}${displayedmodcommand}${default}"
|
|
# Increment index from the amount of values we just displayed.
|
|
let "compatiblemodslistindex+=4"
|
|
((totalmodsavailable++))
|
|
done
|
|
|
|
# If no mods are available for a specific game.
|
|
if [ -z "${compatiblemodslist}" ]; then
|
|
fn_print_fail_nl "No mods are currently available for ${gamename}."
|
|
fn_script_log_info "No mods are currently available for ${gamename}."
|
|
core_exit.sh
|
|
fi
|
|
fn_script_log_info "${totalmodsavailable} addons/mods are available for install"
|
|
|
|
## User selects a mod.
|
|
echo -e ""
|
|
while [[ ! " ${availablemodscommands[@]} " =~ " ${usermodselect} " ]]; do
|
|
echo -en "Enter an ${cyan}addon/mod${default} to ${green}install${default} (or exit to abort): "
|
|
read -r usermodselect
|
|
# Exit if user says exit or abort.
|
|
if [ "${usermodselect}" == "exit" ] || [ "${usermodselect}" == "abort" ]; then
|
|
core_exit.sh
|
|
# Supplementary output upon invalid user input.
|
|
elif [[ ! " ${availablemodscommands[@]} " =~ " ${usermodselect} " ]]; then
|
|
fn_print_error2_nl "${usermodselect} is not a valid addon/mod."
|
|
fi
|
|
done
|
|
# Get mod info.
|
|
currentmod="${usermodselect}"
|
|
fn_mod_get_info
|
|
|
|
echo -e ""
|
|
echo -e "Installing ${modprettyname}"
|
|
echo -e "================================="
|
|
fn_script_log_info "${modprettyname} selected for install"
|
|
|
|
# Check if the mod is already installed and warn the user.
|
|
if [ -f "${modsinstalledlistfullpath}" ]; then
|
|
if [ "$(sed -n "/^${modcommand}$/p" "${modsinstalledlistfullpath}")" ]; then
|
|
fn_print_warning_nl "${modprettyname} is already installed"
|
|
fn_script_log_warn "${modprettyname} is already installed"
|
|
echo -e " * Any configs may be overwritten."
|
|
if ! fn_prompt_yn "Continue?" Y; then
|
|
core_exit.sh
|
|
fi
|
|
fn_script_log_info "User selected to continue"
|
|
fi
|
|
fi
|
|
|
|
## Installation.
|
|
# If amxmodx check if metamod exists first
|
|
if [ "${modcommand}" == "amxmodx" ]; then
|
|
fn_mod_exist "metamod"
|
|
fi
|
|
|
|
if [ "${modcommand}" == "amxmodxcs" ] \
|
|
|| [ "${modcommand}" == "amxmodxdod" ] \
|
|
|| [ "${modcommand}" == "amxmodxtfc" ] \
|
|
|| [ "${modcommand}" == "amxmodxns" ] \
|
|
|| [ "${modcommand}" == "amxmodxts" ]; then
|
|
fn_mod_exist "amxmodx"
|
|
fi
|
|
|
|
fn_create_mods_dir
|
|
fn_mods_clear_tmp_dir
|
|
fn_mods_create_tmp_dir
|
|
fn_mod_install_files
|
|
fn_mod_lowercase
|
|
fn_mod_create_filelist
|
|
fn_mod_copy_destination
|
|
fn_mod_add_list
|
|
fn_mod_tidy_files_list
|
|
fn_mods_clear_tmp_dir
|
|
|
|
# Create/modify existing liblist.gam file for Metamod
|
|
if [ "${modcommand}" == "metamod" ]; then
|
|
fn_mod_install_liblist_gam_file
|
|
fi
|
|
|
|
# Create/modify plugins.ini file for Metamod
|
|
if [ "${modcommand}" == "amxmodx" ]; then
|
|
fn_mod_install_amxmodx_file
|
|
fi
|
|
|
|
echo -e "${modprettyname} installed"
|
|
fn_script_log_pass "${modprettyname} installed."
|
|
|
|
core_exit.sh
|
|
|