|
|
@ -29,9 +29,9 @@ fn_gsm_requirements(){ |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# Create mods directory if it doesn't exist |
|
|
|
# Create mods files and directories if it doesn't exist |
|
|
|
# Assuming the game is already installed as mods_list.sh checked for it. |
|
|
|
fn_mods_dir(){ |
|
|
|
fn_mods_files(){ |
|
|
|
if [ ! -d "${modinstalldir}" ]; then |
|
|
|
fn_script_log_info "Creating mods directory: ${modinstalldir}" |
|
|
|
fn_print_dots "Creating mods directory" |
|
|
@ -40,6 +40,16 @@ fn_mods_dir(){ |
|
|
|
fn_print_ok "Created mods directory" |
|
|
|
sleep 0.5 |
|
|
|
fi |
|
|
|
# Create lgsm/data/mods 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 |
|
|
|
} |
|
|
|
|
|
|
|
# Clear mod download directory so that there is only one file in it since we don't the file name and extention |
|
|
@ -62,6 +72,7 @@ fn_mods_tmpdir(){ |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# Fetches mod URL |
|
|
|
fn_mod_dl(){ |
|
|
|
# fn_fetch_file "${fileurl}" "${filedir}" "${filename}" "${executecmd}" "${run}" "${force}" "${md5}" |
|
|
|
fileurl="${modurl}" |
|
|
@ -76,6 +87,7 @@ fn_mod_dl(){ |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# Extract the mod |
|
|
|
fn_mod_extract(){ |
|
|
|
# fn_dl_extract "${filedir}" "${filename}" "${extractdir}" |
|
|
|
filename="${modfilename}" |
|
|
@ -86,8 +98,8 @@ fn_mod_extract(){ |
|
|
|
fn_dl_extract "${filedir}" "${filename}" "${extractdir}" |
|
|
|
} |
|
|
|
|
|
|
|
# Convert mod files to lowercase if needed |
|
|
|
fn_mod_lowercase(){ |
|
|
|
# Converting files to lowercase |
|
|
|
if [ "${modlowercase}" == "LowercaseOn" ]; then |
|
|
|
fn_print_dots "Converting ${modprettyname} files to lowercase" |
|
|
|
sleep 0.5 |
|
|
@ -98,24 +110,24 @@ fn_mod_lowercase(){ |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# Don't overwrite specified files upon update (set by ${modkeepfiles}) |
|
|
|
# For that matter, remove cfg files after extraction before copying them to destination |
|
|
|
fn_remove_cfg_files(){ |
|
|
|
# Remove config file after extraction for updates set by ${modkeepfiles} |
|
|
|
if [ "${modkeepfiles}" != "OVERWRITE" ]&&[ "${modkeepfiles}" != "NOUPDATE" ]; then |
|
|
|
# Upon mods updates, config files should not be overwritten |
|
|
|
# We will just remove these files before copying the mod to the destination |
|
|
|
# Let's count how many files there are to remove |
|
|
|
fn_print_dots "Allow for preserving ${modprettyname} config files" |
|
|
|
fn_print_dots "Allow for not overwriting ${modprettyname} config files" |
|
|
|
fn_script_log "Allow for not overwriting ${modprettyname} config files" |
|
|
|
sleep 0.5 |
|
|
|
# Let's count how many files there are to remove |
|
|
|
removefilesamount="$(echo "${modkeepfiles}" | awk -F ';' '{ print NF }')" |
|
|
|
# Test all subvalue of "modgames" using the ";" separator |
|
|
|
# Test all subvalue of "modkeepfiles" using the ";" separator |
|
|
|
for ((removefilesindex=1; removefilesindex < ${removefilesamount}; removefilesindex++)); do |
|
|
|
# Put current file we're looking for into a variable |
|
|
|
filetoremove="$( echo "${modkeepfiles}" | awk -F ';' -v x=${removefilesindex} '{ print $x }' )" |
|
|
|
# If it matches an existing file that have been extracted |
|
|
|
if [ -f "${extractdir}/${filetoremove}" ]||[ -d "${extractdir}/${filetoremove}" ]; then |
|
|
|
# Then delete the file! |
|
|
|
rm -R "${extractdir}/${filetoremove}" |
|
|
|
# Write this file path in a tmp file, to rebuild a full file list |
|
|
|
rm -r "${extractdir}/${filetoremove}" |
|
|
|
# Write this file path in a tmp file, to rebuild a full file list since it is rebuilt upon update |
|
|
|
if [ ! -f "${modsdatadir}/.removedfiles.tmp" ]; then |
|
|
|
touch "${modsdatadir}/.removedfiles.tmp" |
|
|
|
fi |
|
|
@ -127,12 +139,8 @@ fn_remove_cfg_files(){ |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# Create ${modcommand}-files.list containing the full extracted file/directory list |
|
|
|
fn_mod_fileslist(){ |
|
|
|
# Create lgsm/data/mods directory |
|
|
|
if [ ! -d "${modsdatadir}" ]; then |
|
|
|
mkdir -p "${modsdatadir}" |
|
|
|
fn_script_log "Created ${modsdatadir}" |
|
|
|
fi |
|
|
|
fn_print_dots "Building ${modcommand}-files.list" |
|
|
|
fn_script_log "Building ${modcommand}-files.list" |
|
|
|
sleep 0.5 |
|
|
@ -147,8 +155,8 @@ fn_mod_fileslist(){ |
|
|
|
sleep 0.5 |
|
|
|
} |
|
|
|
|
|
|
|
# Copy the mod to the destination ${modinstalldir} |
|
|
|
fn_mod_copy_destination(){ |
|
|
|
# Destination directory: ${modinstalldir} |
|
|
|
fn_print_dots "Copying ${modprettyname} to ${modinstalldir}" |
|
|
|
fn_script_log "Copying ${modprettyname} to ${modinstalldir}" |
|
|
|
sleep 0.5 |
|
|
@ -160,7 +168,6 @@ fn_mod_copy_destination(){ |
|
|
|
# Check if the mod is already installed and warn the user |
|
|
|
fn_mod_already_installed(){ |
|
|
|
if [ -f "${modslockfilefullpath}" ]; then |
|
|
|
|
|
|
|
if [ -n "$(sed -n "/^${modcommand}$/p" "${modslockfilefullpath}")" ]; then |
|
|
|
fn_print_warning_nl "${modprettyname} has already been installed" |
|
|
|
sleep 1 |
|
|
@ -174,17 +181,7 @@ fn_mod_already_installed(){ |
|
|
|
|
|
|
|
# Add the mod to the installed mods list |
|
|
|
fn_mod_add_list(){ |
|
|
|
# Create lgsm/data/mods 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 |
|
|
|
# Append modname to lockfile if it's not already in it |
|
|
|
if [ ! -n "$(sed -n "/^${modcommand}$/p" "${modslockfilefullpath}")" ]; then |
|
|
|
echo "${modcommand}" >> "${modslockfilefullpath}" |
|
|
|
fn_script_log "${modcommand} added to ${modslockfile}" |
|
|
@ -213,15 +210,16 @@ fn_check_files_list(){ |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# Apply some postinstall fixes to make sure everything will be fine |
|
|
|
fn_postinstall_tasks(){ |
|
|
|
# Prevent addons folder from being removed by clearing them in: ${modsdatadir}/${modcommand}-files.list |
|
|
|
# Prevent sensitive directories from being erased upon uninstall by removing them them from: ${modsdatadir}/${modcommand}-files.list |
|
|
|
# Check file validity |
|
|
|
fn_check_files_list |
|
|
|
# Output to the user |
|
|
|
fn_print_dots "Rearranging ${modcommand}-files.list" |
|
|
|
sleep 0.5 |
|
|
|
fn_script_log_info "Rearranging ${modcommand}-files.list" |
|
|
|
# What lines/files to remove from file list |
|
|
|
# What lines/files to remove from file list (end var with a ";" separator) |
|
|
|
removefromlist="cfg;addons;" |
|
|
|
# Loop through files to remove from file list, |
|
|
|
# that way these files won't get removed upon uninstall |
|
|
@ -234,6 +232,7 @@ fn_postinstall_tasks(){ |
|
|
|
# Then delete matching line(s)! |
|
|
|
sed -i "/^${removefilevar}$/d" "${modsdatadir}/${modcommand}-files.list" |
|
|
|
done |
|
|
|
|
|
|
|
# Sourcemod fix |
|
|
|
# Remove metamod from sourcemod fileslist |
|
|
|
if [ "${modcommand}" == "sourcemod" ]; then |
|
|
@ -245,7 +244,11 @@ fn_postinstall_tasks(){ |
|
|
|
sleep 0.5 |
|
|
|
} |
|
|
|
|
|
|
|
## mods_list.sh arrays |
|
|
|
######################### |
|
|
|
## mods_list.sh arrays ## |
|
|
|
######################### |
|
|
|
|
|
|
|
## Define info for a mod |
|
|
|
|
|
|
|
# Define all variables from a mod at once when index is set to a separator |
|
|
|
fn_mod_info(){ |
|
|
@ -253,6 +256,7 @@ fn_mod_info(){ |
|
|
|
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" |
|
|
|
exitcode="1" |
|
|
|
core_exit.sh |
|
|
|
fi |
|
|
|
modcommand="${mods_global_array[index+1]}" |
|
|
@ -270,6 +274,7 @@ fi |
|
|
|
moddescription="${mods_global_array[index+13]}" |
|
|
|
} |
|
|
|
|
|
|
|
## Mod compatibility check |
|
|
|
|
|
|
|
# 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(){ |
|
|
|