committed by
GitHub
1 changed files with 175 additions and 0 deletions
@ -0,0 +1,175 @@ |
|||||
|
#!/bin/bash |
||||
|
# LGSM command_mods_install.sh function |
||||
|
# Author: Daniel Gibbs |
||||
|
# Contributor: UltimateByte |
||||
|
# Website: https://gameservermanagers.com |
||||
|
# Description: List and installs available mods along with mods_list.sh. |
||||
|
|
||||
|
local commandname="MODS" |
||||
|
local commandaction="Mod Installation" |
||||
|
local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))" |
||||
|
|
||||
|
check.sh |
||||
|
mods_list.sh |
||||
|
|
||||
|
fn_mods_install_init(){ |
||||
|
fn_script_log "Entering mods & addons installation" |
||||
|
echo "=================================" |
||||
|
echo "${gamename} mods & addons installation" |
||||
|
echo "" |
||||
|
# Display available mods from mods_list.sh |
||||
|
fn_mods_show_available |
||||
|
echo "" |
||||
|
# Keep prompting as long as the user input doesn't correspond to an available mod |
||||
|
while [[ ! " ${availablemodscommands[@]} " =~ " ${usermodselect} " ]]; do |
||||
|
echo -en "Enter a \e[36mmod\e[0m to install (or exit to abort): " |
||||
|
read -r usermodselect |
||||
|
# Exit if user says exit or abort |
||||
|
if [ "${usermodselect}" == "exit" ]||[ "${usermodselect}" == "abort" ]; then |
||||
|
fn_script_log "User aborted." |
||||
|
echo "Aborted." |
||||
|
core_exit.sh |
||||
|
# Supplementary output upon invalid user input |
||||
|
elif [[ ! " ${availablemodscommands[@]} " =~ " ${usermodselect} " ]]; then |
||||
|
fn_print_error2_nl "${usermodselect} is not a valid mod." |
||||
|
echo " * Enter a valid mod or input exit to abort." |
||||
|
fi |
||||
|
done |
||||
|
# Gives a pretty name to the user and get all mod info |
||||
|
currentmod="${usermodselect}" |
||||
|
fn_mod_get_info_from_command |
||||
|
fn_print_dots "Installing ${modprettyname}" |
||||
|
sleep 1 |
||||
|
fn_script_log "Installing ${modprettyname}." |
||||
|
} |
||||
|
|
||||
|
# Create mods directory if it doesn't exist |
||||
|
# Assuming the game is already installed as mods_list.sh checked for it. |
||||
|
fn_mods_dir(){ |
||||
|
if [ ! -d "${modinstalldir}" ]; then |
||||
|
fn_script_log_info "Creating mods directory: ${modinstalldir}" |
||||
|
fn_print_dots "Creating mods directory" |
||||
|
sleep 1 |
||||
|
mkdir -p "${modinstalldir}" |
||||
|
fn_print_ok_nl "Created mods directory" |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
# Clear mod download directory so that there is only one file in it since we don't the file name and extention |
||||
|
fn_clear_tmp_mods(){ |
||||
|
if [ -d "${modstmpdir}" ]; then |
||||
|
rm -r "${modstmpdir}" |
||||
|
fn_script_log "Clearing temp mod download directory: ${modstmpdir}" |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
# Create tmp download mod directory |
||||
|
fn_mods_tmpdir(){ |
||||
|
if [ ! -d "${modstmpdir}" ]; then |
||||
|
mkdir -p "${modstmpdir}" |
||||
|
fn_script_log "Creating temp mod download directory: ${modstmpdir}" |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
fn_mod_dl(){ |
||||
|
# fn_fetch_file "${fileurl}" "${filedir}" "${filename}" "${executecmd}" "${run}" "${force}" "${md5}" |
||||
|
fileurl="${modurl}" |
||||
|
filedir="${modstmpdir}" |
||||
|
filename="${modfilename}" |
||||
|
fn_script_log "Downloading mods to ${modstmpdir}" |
||||
|
fn_fetch_file "${fileurl}" "${filedir}" "${filename}" |
||||
|
# Check if variable is valid checking if file has been downloaded and exists |
||||
|
if [ ! -f "${modstmpdir}/${modfilename}" ]; then |
||||
|
fn_print_fail "An issue occurred upon downloading ${modprettyname}" |
||||
|
core_exit.sh |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
fn_mod_extract(){ |
||||
|
# fn_dl_extract "${filedir}" "${filename}" "${extractdir}" |
||||
|
filename="${modfilename}" |
||||
|
extractdir="${modstmpdir}/extracted" |
||||
|
if [ ! -d "${extractdir}" ]; then |
||||
|
mkdir -p "${extractdir}" |
||||
|
fi |
||||
|
fn_script_log "Extracting ${modprettyname} to ${extractdir}" |
||||
|
fn_dl_extract "${filedir}" "${filename}" "${extractdir}" |
||||
|
} |
||||
|
|
||||
|
fn_mod_fileslist(){ |
||||
|
# ${modsdatadir}/${modcommand}-files.list |
||||
|
true; |
||||
|
} |
||||
|
|
||||
|
fn_mod_copy_destination(){ |
||||
|
# Destination directory: ${modinstalldir} |
||||
|
fn_script_log "Copying ${modprettyname} to ${modinstalldir}" |
||||
|
cp -Rf "${extractdir}/." "${modinstalldir}/" |
||||
|
} |
||||
|
|
||||
|
# Check if the mod is already installed and warn the user |
||||
|
fn_mod_already_installed(){ |
||||
|
if [ -f "${modslockfilefullpath}" ]; then |
||||
|
if [ -n "$(cat "${modslockfilefullpath}" | grep "${modcommand}")" ]; then |
||||
|
echo "" |
||||
|
fn_print_warning_nl "${modprettyname} has already been installed." |
||||
|
echo " * Mod files will be overwritten." |
||||
|
sleep 4 |
||||
|
fi |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
# Add the mod to the installed mods list |
||||
|
fn_mod_add_list(){ |
||||
|
# Create lgsm/data directory |
||||
|
if [ ! -d "${modsdatadir}" ]; then |
||||
|
mkdir -p "${modsdatadir}" |
||||
|
fn_script_log "Created ${modsdatadir}" |
||||
|
fi |
||||
|
# Create lgsm/data/${modslockfile} |
||||
|
if [ ! -f "${modslockfilefullpath}" ]; then |
||||
|
touch "${modslockfilefullpath}" |
||||
|
fn_script_log "Created ${modslockfilefullpath}" |
||||
|
fi |
||||
|
# Input mod name to lockfile |
||||
|
if [ ! -n "$(cat "${modslockfilefullpath}" | grep "${modcommand}")" ]; then |
||||
|
echo "${modcommand}" >> "${modslockfilefullpath}" |
||||
|
fn_script_log "${modcommand} added to ${modslockfile}" |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
# Run all required operation |
||||
|
fn_mod_installation(){ |
||||
|
# If a mod was selected |
||||
|
if [ -n "${currentmod}" ]; then |
||||
|
# Get mod info |
||||
|
fn_mod_get_info_from_command |
||||
|
# Check if mod is already installed |
||||
|
fn_mod_already_installed |
||||
|
# Check and create required directories |
||||
|
fn_mods_dir |
||||
|
# Clear lgsm/tmp/mods dir if exists then recreate it |
||||
|
fn_clear_tmp_mods |
||||
|
fn_mods_tmpdir |
||||
|
# Download mod |
||||
|
fn_mod_dl |
||||
|
# Extract the mod |
||||
|
fn_mod_extract |
||||
|
# Build a file list |
||||
|
fn_mod_fileslist |
||||
|
# Copying to destination |
||||
|
fn_mod_copy_destination |
||||
|
# Ending with installation routines |
||||
|
fn_mod_add_list |
||||
|
fn_clear_tmp_mods |
||||
|
fn_print_ok_nl "${modprettyname} installed." |
||||
|
fn_script_log "${modprettyname} installed." |
||||
|
else |
||||
|
fn_print_fail "No mod was selected." |
||||
|
core_exit.sh |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
fn_mods_install_checks |
||||
|
fn_mods_install_init |
||||
|
fn_mod_installation |
Loading…
Reference in new issue