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 = ) { + 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);