diff options
Diffstat (limited to 'share/hackvr/examples/hackvrd/hackvrd.sh')
-rwxr-xr-x | share/hackvr/examples/hackvrd/hackvrd.sh | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/share/hackvr/examples/hackvrd/hackvrd.sh b/share/hackvr/examples/hackvrd/hackvrd.sh new file mode 100755 index 0000000..39054a3 --- /dev/null +++ b/share/hackvr/examples/hackvrd/hackvrd.sh @@ -0,0 +1,112 @@ +#!/usr/bin/env bash + +OUR_HOST=$(/usr/local/libexec/sockip | head -n1) +THEIR_HOST=$(/usr/local/libexec/peerip | head -n1) +OUR_PORT=$(/usr/local/libexec/sockip | tail -n1) +THEIR_PORT=$(/usr/local/libexec/peerip | tail -n1) + +log=/var/log/log.hackvr + +# some hackvr scripts use USER for commanding the player +if USER=$(ident $OUR_HOST $THEIR_HOST 113 $THEIR_PORT $OUR_PORT);then + export USER +else + printf "%s does not have an ident daemon running.\n" "$THEIR_HOST" >> $log + exit 1 +fi + +if [ ! "$USER" ];then + exit 1 +fi +printf "%s@%s connected to hackvr\n" "$USER" "$THEIR_HOST" >> $log + +last_pong=$(date +%s) +wat=true + +while true;do + while read -t 10 group action target args;do + printf "hackvr line: %s\n" "$group $action $target" >> $log + if [ "$group" = "$USER" -a "$action" = "pong" ];then + printf '%s@%s ponged on hackvr\n' $USER $THEIR_HOST >> $log + last_pong="$(date +%s)" + fi + if [ "$group" = "$USER" -a "$action" = "quit" ];then + break + fi + if [ "$action" = "action" ];then + if [ "$target" = "/links" ];then + printf "%s deleteallexcept %s\n" "$USER" "$USER" + off=-10 + for link in gopher://thebackupbox.net/;do + off=$[$off + 10] + printf '<%s> addshape 4 3 0 0 0 0 8 0 8 0 0\n' "$link" + printf '%s' "$link" | makelabel.sh "<$link>" 8 0 0 + printf '<%s> move 0 %d 0\n' "$link" "$off" + done + target=/ + fi + if [ $target = "/radio" ];then + printf "$USER deleteallexcept $USER\n" + ./radio.sh + target=/ + fi + if [ $target = "/ttt" ];then + printf "$USER deleteallexcept $USER\n" + cd /usr/local/src/hackvr/share/hackvr/examples/tictactoe + ./game.sh 2>/dev/null + target=/ + fi + if grep "^/dun" <<< "$target" 2>&1 >/dev/null;then + printf "$USER deleteallexcept $USER\n" + export seed="$(printf "%s\n" "$target" | cut -d/ -f3)" + cd /usr/local/src/hackvr/share/hackvr/examples/dungen + ./dunexplore.sh 2>/dev/null + target=/ + fi + if [ $target = "/multi" ];then + /var/hackvr/multi.sh + target=/ + fi + if [ $target = "/map" ];then + printf "$USER deleteallexcept $USER\n" + cd /usr/local/src/hackvr/share/hackvr/examples/anonet_map + ./map 2>/dev/null + printf '/ addshape 4 3 0 0 0 0 8 0 8 0 0\n' + while read group action target args;do + if [ "$action" = "action" ];then + if [ "$target" = "/" ];then + break + fi + fi + done + target=/ + fi + if [ $target = "/" ];then + printf "%s deleteallexcept %s\n" "$USER" "$USER" + cd /usr/local/src/hackvr/share/hackvr/examples/hackvrd + off=-10 + for name in ttt dun map multi links radio;do + off=$[$off + 10] + printf '/%s addshape 4 3 0 0 0 0 8 0 8 0 0\n' "$name" + printf '/%s' "$name" | makelabel.sh "/$name" 8 0 0 + printf '/%s move 0 %d 0\n' $name $off + done + fi + else + if $wat;then + wat=false + printf '/ addshape 4 3 0 0 0 0 8 0 8 0 0\n' + printf 'welcome' | makelabel.sh / 8 0 0 + fi + fi + done + #printf "pinging... %s@%s\n" "$USER" "$THEIR_HOST" >> /var/log/hackvr.all + #printf "%s ping %s\n" "$USER" "thebackupbox.net" + #if [ $[$(date +%s) - $last_pong] -gt 30 ];then #they probably pinged out. + # printf '# you pinged out. gotta respond to those, dude.\n' + # printf "%s@%s pinged out from hackvr\n" "$USER" "$THEIR_HOST" >> /var/log/hackvr.all + # exit 1 + #fi +done + +printf "%s@%s disconnected from hackvr\n" "$USER" "$THEIR_HOST" >> $log |