Bläddra i källkod

Mods install command

UltimateByte 9 år sedan
förälder
incheckning
4cca1e82df
1 ändrade filer med 175 tillägg och 0 borttagningar
  1. 175 0
      lgsm/functions/command_mods_install.sh

+ 175 - 0
lgsm/functions/command_mods_install.sh

@@ -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