Forging/Forging Perl Script
Forging <
Jump to navigation
Jump to search
Title: | Forging Perl Script |
Author: | XYGON |
Compatibility: | #UNDEFINED# |
Used with scriptname.pl <CharacterName> Returns how many attempts were made to forge for each rank.
use strict; use warnings; use DBI; my(%previous_inventory); my(%current_inventory); parse_logs(); sub get_sorted_files { my $path = shift; opendir my($dir), $path or die "can't opendir $path: $!"; my %hash = map {$_ => (stat($_))[9] || undef} # avoid empty list map { "$path$_" } readdir $dir; closedir $dir; return %hash; } sub parse_logs { my($charname) = $ARGV[0]; # FOR NOW - delete all data prior to starting print "Parsing logs\n"; my @arRank; my $curRank = 1; my %files = get_sorted_files("./"); STDOUT->autoflush( 1 ); foreach my $filename (sort{$files{$a} <=> $files{$b}} keys %files) { next if ($filename !~ /$charname*/); open my $logfile, '<', $filename or die "Could not open '$filename' $!\n"; while (my $line = <$logfile>) { chomp $line; if ($line =~ /180 sec/) { # print "\nInventory update - $filename\t", scalar localtime($files{$filename}), "\n"; $arRank[$curRank] += 1; } elsif ($line =~ /Aha, you learned something that time./) { $curRank += 1; } } } use Text::ASCIITable; my($t) = Text::ASCIITable->new({ headingText => 'Attempts Per Rank' }); if ($curRank > 1000) { $t->setCols('Rank','ToNext','TotalAtt','ToNext','TotalAtt','ToNext','TotalAtt'); } elsif ($curRank > 500) { $t->setCols('Rank','ToNext','TotalAtt','ToNext','TotalAtt'); } elsif ($curRank <= 500) { $t->setCols('Rank','ToNext','TotalAtt'); } my(@arSum) = (); for (my $i=1; $i <= $curRank; $i++) { if ($i + 1000 <= $curRank) { $arSum[2] += $arRank[$i+1000]; $arSum[1] += $arRank[$i+500]; $arSum[0] += $arRank[$i]; $t->addRow($i,$arRank[$i],$arSum[0],$arRank[$i+500],$arSum[1],$arRank[$i+1000],$arSum[2]); } elsif ($i + 500 <= $curRank) { $arSum[1] += $arRank[$i+500]; $arSum[0] += $arRank[$i]; $t->addRow($i,$arRank[$i],$arSum[0],$arRank[$i+500],$arSum[1]); } else { $arSum[0] += $arRank[$i]; $t->addRow($i,$arRank[$i],$arSum[0]); } if ($i == 499) { $curRank = 0; } } print $t; }