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