Add support for staging mods

This commit is contained in:
Ben Peddell 2017-02-15 05:56:33 +10:00
parent 2ea3a5fc93
commit ccf03c2c92

View File

@ -1975,8 +1975,13 @@ doExtractMod(){
local modid=$1
local modsrcdir="$steamcmdroot/steamapps/workshop/content/$mod_appid/$modid"
local moddestdir="$arkserverroot/ShooterGame/Content/Mods/$modid"
local modextractdir="$moddestdir"
local modbranch="${mod_branch:-Windows}"
if [[ -n "$arkStagingDir" && -d "$arkStagingDir" ]]; then
modextractdir="$arkStagingDir/Mods/$modid"
fi
# Bypass the 111111111 modid used by Primitive+
if [ "$modid" = "111111111" ]; then
return 0
@ -1992,45 +1997,45 @@ doExtractMod(){
fi
done
if [ -f "$moddestdir/.modbranch" ]; then
mv "$moddestdir/.modbranch" "$moddestdir/__arkmanager_modbranch__.info"
if [ -f "$modextractdir/.modbranch" ]; then
mv "$modextractdir/.modbranch" "$modextractdir/__arkmanager_modbranch__.info"
fi
if [ \( ! -f "$moddestdir/__arkmanager_modbranch__.info" \) ] || [ "$(<"$moddestdir/__arkmanager_modbranch__.info")" != "$modbranch" ]; then
rm -rf "$moddestdir"
if [ \( ! -f "$modextractdir/__arkmanager_modbranch__.info" \) ] || [ "$(<"$modextractdir/__arkmanager_modbranch__.info")" != "$modbranch" ]; then
rm -rf "$modextractdir"
fi
if [ -f "$modsrcdir/mod.info" ]; then
echo "Copying files to $moddestdir"
echo "Copying files to $modextractdir"
if [ -f "$modsrcdir/${modbranch}NoEditor/mod.info" ]; then
modsrcdir="$modsrcdir/${modbranch}NoEditor"
fi
find "$modsrcdir" -type d -printf "$moddestdir/%P\0" | xargs -0 -r mkdir -p
find "$modsrcdir" -type d -printf "$modextractdir/%P\0" | xargs -0 -r mkdir -p
find "$moddestdir" -type f ! -name '.*' -printf "%P\n" | while read f; do
find "$modextractdir" -type f ! -name '.*' -printf "%P\n" | while read f; do
if [ \( ! -f "$modsrcdir/$f" \) -a \( ! -f "$modsrcdir/${f}.z" \) ]; then
rm "$moddestdir/$f"
rm "$modextractdir/$f"
fi
done
find "$moddestdir" -depth -type d -printf "%P\n" | while read d; do
find "$modextractdir" -depth -type d -printf "%P\n" | while read d; do
if [ ! -d "$modsrcdir/$d" ]; then
rmdir "$moddestdir/$d"
rmdir "$modextractdir/$d"
fi
done
find "$modsrcdir" -type f ! \( -name '*.z' -or -name '*.z.uncompressed_size' \) -printf "%P\n" | while read f; do
if [ \( ! -f "$moddestdir/$f" \) -o "$modsrcdir/$f" -nt "$moddestdir/$f" ]; then
if [ \( ! -f "$modextractdir/$f" \) -o "$modsrcdir/$f" -nt "$modextractdir/$f" ]; then
printf "%10d %s " "`stat -c '%s' "$modsrcdir/$f"`" "$f"
cp "$modsrcdir/$f" "$moddestdir/$f"
cp "$modsrcdir/$f" "$modextractdir/$f"
echo -ne "\r\\033[K"
fi
done
find "$modsrcdir" -type f -name '*.z' -printf "%P\n" | while read f; do
if [ \( ! -f "$moddestdir/${f%.z}" \) -o "$modsrcdir/$f" -nt "$moddestdir/${f%.z}" ]; then
if [ \( ! -f "$modextractdir/${f%.z}" \) -o "$modsrcdir/$f" -nt "$modextractdir/${f%.z}" ]; then
printf "%10d %s " "`stat -c '%s' "$modsrcdir/$f"`" "${f%.z}"
perl -M'Compress::Raw::Zlib' -e '
my $sig;
@ -2065,16 +2070,16 @@ doExtractMod(){
}
print $output;
}
' <"$modsrcdir/$f" >"$moddestdir/${f%.z}"
touch -c -r "$modsrcdir/$f" "$moddestdir/${f%.z}"
' <"$modsrcdir/$f" >"$modextractdir/${f%.z}"
touch -c -r "$modsrcdir/$f" "$modextractdir/${f%.z}"
echo -ne "\r\\033[K"
fi
done
modname="$(curl -s "http://steamcommunity.com/sharedfiles/filedetails/?id=${modid}" | sed -n 's|^.*<div class="workshopItemTitle">\([^<]*\)</div>.*|\1|p')"
if [ -f "${moddestdir}/.mod" ]; then
rm "${moddestdir}/.mod"
if [ -f "${modextractdir}/.mod" ]; then
rm "${modextractdir}/.mod"
fi
perl -e '
@ -2098,15 +2103,30 @@ doExtractMod(){
$pos = $pos + 4 + $mapfilelen;
}
print "\x33\xFF\x22\xFF\x02\x00\x00\x00\x01";
' $modid "$modname" <"$moddestdir/mod.info" >"${moddestdir}.mod"
' $modid "$modname" <"$modextractdir/mod.info" >"${modextractdir}.mod"
if [ -f "$moddestdir/modmeta.info" ]; then
cat "$moddestdir/modmeta.info" >>"${moddestdir}.mod"
if [ -f "$modextractdir/modmeta.info" ]; then
cat "$modextractdir/modmeta.info" >>"${modextractdir}.mod"
else
echo -ne '\x01\x00\x00\x00\x08\x00\x00\x00ModType\x00\x02\x00\x00\x001\x00' >>"${moddestdir}.mod"
echo -ne '\x01\x00\x00\x00\x08\x00\x00\x00ModType\x00\x02\x00\x00\x001\x00' >>"${modextractdir}.mod"
fi
echo "$modbranch" >"$moddestdir/__arkmanager_modbranch__.info"
echo "$modbranch" >"$modextractdir/__arkmanager_modbranch__.info"
if [[ "$modextractdir" != "$moddestdir" ]]; then
cp -alu "${modextractdir}/." "${moddestdir}"
find "${moddestdir}" -type f ! -name '.*' -printf "%P\n" | while read f; do
if [ ! -f "${modextractdir}/${f}" ]; then
rm "${moddestdir}/${f}"
fi
done
find "$modextractdir" -depth -type d -printf "%P\n" | while read d; do
if [ ! -d "$modsrcdir/$d" ]; then
rmdir "$modextractdir/$d"
fi
done
cp "${modextractdir}.mod" "${moddestdir}.mod"
fi
fi
}