maps/brest/pshops/pshop_copier

100 lines
2.6 KiB
Bash
Executable File

#!/bin/bash
#
# creator: josh@woosworld.net
# Simple script to replicate changes made to pshop1
# to the rest of the pshops and keep the correct
# keys and exits working.
#
# Obviously this is based on some conventions I have
# don't use pshop1 anywhere else in the file etc...
#
#first rename the pshop1 dir so we don't erase it
mv pshop1 PSHOP
#then remove all the pshop files
rm -f pshop*/*
#copy PSHOP to all the pshop directories
for FILE in pshop*; do
if [[ -d "$FILE" ]]; then
#copy the files into the pshops directories
cp PSHOP/* "${FILE}/"
#go there
cd $FILE
#get the pshopnum
PSHOPNUM=$(cut -d p -f3 <<< "$FILE")
#for each file in the pshop directory
for MYFILE in *; do
#correct the key values on inventory checkers
sed "s/pshop1/${FILE}/;s/^name Private Shop 1,/name Private Shop ${PSHOPNUM},/" "$MYFILE" > "${MYFILE}_2"
rm -f $MYFILE
mv "${MYFILE}_2" $MYFILE
done
#calculate HP and SP based on pshopnum
if [[ $PSHOPNUM -lt 14 ]]; then
#top row of shops
SP="2"
HP=$(( PSHOPNUM * 3 + 1 ))
else
#bottom row of shops
SP="6"
MODPSHOPNUM=$(( PSHOPNUM - 14 ))
HP=$(( MODPSHOPNUM * 3 + 1 ))
fi
# Keep track of state when parsing.
# 0 Before/after exit, looking for slaying
# 1 During exit, looking for hp and sp
state=0
hadhp=0
hadsp=0
#fix the exit on gfloor
while read LINE; do
case $state in
0)
if [[ "$LINE" == "slaying ../pshops_main" ]]; then
state=1
fi
echo "$LINE" >> gfloor2
;;
1)
case $LINE in
"hp "*)
echo "hp $HP" >> gfloor2
hadhp=1
;;
"sp "*)
echo "sp $SP" >> gfloor2
hadsp=1
;;
*)
echo "$LINE" >> gfloor2
;;
esac
if [[ ( $hadhp == 1 ) && ( $hadsp == 1 ) ]]; then
state=0
fi
;;
esac
done < gfloor
#replace gfloor with gfloor2
rm -f gfloor
mv gfloor2 gfloor
#go back up
cd ..
fi
done
#put pshop1 back
mv PSHOP pshop1
#bye
exit 0