diff -ur irpgbot.v3.1.2/bot.v3.1.2.pl irpgbot.v3.1.2+johm+chschu/bot.v3.1.2.pl
--- irpgbot.v3.1.2/bot.v3.1.2.pl	2004-06-07 16:06:06.000000000 +0200
+++ irpgbot.v3.1.2+johm+chschu/bot.v3.1.2.pl	2004-06-17 00:31:21.000000000 +0200
@@ -404,6 +404,7 @@
         else { chanmsg("0 users qualified for auto login."); }
         undef(%prev_online);
         undef(%auto_login);
+        loadquestfile();
     }
     elsif ($arg[1] eq '005') {
         if ("@arg" =~ /MODES=(\d+)/) { $opts{modesperline}=$1; }
@@ -1166,6 +1167,7 @@
             }
             undef(@{$quest{questers}});
             $quest{qtime} = time() + 21600;
+            writequestfile();
         }
         # quest type 2 awards are handled in moveplayers()
     }
@@ -1946,6 +1948,8 @@
             }
             undef(@{$quest{questers}});
             $quest{qtime} = time() + 43200; # 12 hours
+            writequestfile();
+            last;
         }
     }
 }
@@ -2174,6 +2178,45 @@
     close(QF);
 }
 
+sub loadquestfile {
+    return unless ($opts{writequestfile} && -e $opts{questfilename});
+    open(QF,$opts{questfilename}) or do {
+        chanmsg("Error: Cannot open $opts{questfilename}: $!");
+        return;
+    };
+
+    my %questdata = ();
+    while (my $line = <QF>) {
+        chomp $line;
+        my ($tag,$data) = split(/ /,$line,2);
+        $questdata{$tag} = $data;
+    }
+    return unless defined($questdata{Y});
+
+    $quest{text} = $questdata{T};
+    $quest{type} = $questdata{Y};
+    if ($quest{type} == 1) {
+        $quest{qtime} = $questdata{S};
+    }
+    else {
+        $quest{stage} = $questdata{S};
+        my ($p1x,$p1y,$p2x,$p2y) = split(/ /,$questdata{P});
+        $quest{p1}->[0] = $p1x;
+        $quest{p1}->[1] = $p1y;
+        $quest{p2}->[0] = $p2x;
+        $quest{p2}->[1] = $p2y;
+    }
+    for my $i (0..3) {
+        ($quest{questers}->[$i],) = split(/ /,$questdata{'P'.($i+1)},2);
+        if (!$rps{$quest{questers}->[$i]}{online}) {
+            undef(@{$quest{questers}});
+            last;
+        }
+    }
+    close(QF);
+    writequestfile();
+}
+
 sub goodness {
     my @players = grep { $rps{$_}{alignment} eq "g" &&
                          $rps{$_}{online} } keys(%rps);
