<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://gswiki-archive.gs-game.uk/index.php?action=history&amp;feed=atom&amp;title=Forging%2FForging_Perl_Script</id>
	<title>Forging/Forging Perl Script - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://gswiki-archive.gs-game.uk/index.php?action=history&amp;feed=atom&amp;title=Forging%2FForging_Perl_Script"/>
	<link rel="alternate" type="text/html" href="https://gswiki-archive.gs-game.uk/index.php?title=Forging/Forging_Perl_Script&amp;action=history"/>
	<updated>2026-11-11T21:35:20Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://gswiki-archive.gs-game.uk/index.php?title=Forging/Forging_Perl_Script&amp;diff=7255&amp;oldid=prev</id>
		<title>imported&gt;XYGON at 04:47, 15 July 2015</title>
		<link rel="alternate" type="text/html" href="https://gswiki-archive.gs-game.uk/index.php?title=Forging/Forging_Perl_Script&amp;diff=7255&amp;oldid=prev"/>
		<updated>2015-07-15T04:47:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{script&lt;br /&gt;
 | title = Forging Log Parsing Script&lt;br /&gt;
 | author = XYGON&lt;br /&gt;
 | compat = N/A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Used with scriptname.pl &amp;lt;CharacterName&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Returns how many attempts were made to forge for each rank.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#-----------------------------------------------------------------------------&lt;br /&gt;
# Gemstone IV - Log Parser for Forging Ranks&lt;br /&gt;
#  by Xygon Arden&lt;br /&gt;
#&lt;br /&gt;
# Usage: forgestats.pl &amp;lt;CharName&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Returns: Table view of average attempts to each rank (total), &lt;br /&gt;
#                        actual attempts per rank&lt;br /&gt;
#                        running total of attempts&lt;br /&gt;
#&lt;br /&gt;
# Updates: &lt;br /&gt;
#   20150714 - Added comments, added statistical average running total&lt;br /&gt;
#   20150706 - Added tabled output for multiple ranks visibility&lt;br /&gt;
#   20150703 - Released to gswiki.play.net      &lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
parse_logs();&lt;br /&gt;
&lt;br /&gt;
sub get_sorted_files {&lt;br /&gt;
   # Sorts all of the files by file date&lt;br /&gt;
   my $path = shift;&lt;br /&gt;
   opendir my($dir), $path or die &amp;quot;can&amp;#039;t opendir $path: $!&amp;quot;;&lt;br /&gt;
   my %hash = map {$_ =&amp;gt; (stat($_))[9] || undef} # avoid empty list&lt;br /&gt;
           map  { &amp;quot;$path$_&amp;quot; }&lt;br /&gt;
           readdir $dir;&lt;br /&gt;
   closedir $dir;&lt;br /&gt;
   return %hash;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub parse_logs {&lt;br /&gt;
  my($charname) = $ARGV[0];&lt;br /&gt;
&lt;br /&gt;
  print &amp;quot;Parsing logs...\n&amp;quot;;   # Used to have status dots, but the screenwrite slows down&lt;br /&gt;
  my @arRank;                  # the log processing, so this has been removed&lt;br /&gt;
  my $curRank = 1;&lt;br /&gt;
  &lt;br /&gt;
  my %files = get_sorted_files(&amp;quot;./&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  foreach my $filename (sort{$files{$a} &amp;lt;=&amp;gt; $files{$b}} keys %files) {&lt;br /&gt;
    # Only 2nd argument&amp;#039;s logs&lt;br /&gt;
    next if ($filename !~ /$charname*/);&lt;br /&gt;
&lt;br /&gt;
    # Go through each log, grabbing each &amp;quot;get tongs&amp;quot; via the RT, and &amp;quot;Aha&amp;quot;&lt;br /&gt;
    open my $logfile, &amp;#039;&amp;lt;&amp;#039;, $filename or die &amp;quot;Could not open &amp;#039;$filename&amp;#039; $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    while (my $line = &amp;lt;$logfile&amp;gt;) {&lt;br /&gt;
      if ($line =~ /180 sec/) {&lt;br /&gt;
        # Assumed forge attempt &lt;br /&gt;
        $arRank[$curRank] += 1;&lt;br /&gt;
        # Gained a Rank&lt;br /&gt;
      } elsif ($line =~ /Aha, you learned something that time./) {&lt;br /&gt;
        $curRank += 1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  # Format for cmd line output&lt;br /&gt;
  use Text::ASCIITable;&lt;br /&gt;
  my($t) = Text::ASCIITable-&amp;gt;new({ headingText =&amp;gt; &amp;#039;Attempts Per Rank&amp;#039; });&lt;br /&gt;
  # Tracks up to three ranks, assumes worked on each till completion with no switching&lt;br /&gt;
  if ($curRank &amp;gt; 1000) {&lt;br /&gt;
    $t-&amp;gt;setCols(&amp;#039;Rank&amp;#039;,&amp;#039;Stat&amp;#039;,&amp;#039;ToNext&amp;#039;,&amp;#039;TotalAtt&amp;#039;,&amp;#039;ToNext&amp;#039;,&amp;#039;TotalAtt&amp;#039;,&amp;#039;ToNext&amp;#039;,&amp;#039;TotalAtt&amp;#039;);&lt;br /&gt;
  } elsif ($curRank &amp;gt; 500) {&lt;br /&gt;
    $t-&amp;gt;setCols(&amp;#039;Rank&amp;#039;,&amp;#039;Stat&amp;#039;,&amp;#039;ToNext&amp;#039;,&amp;#039;TotalAtt&amp;#039;,&amp;#039;ToNext&amp;#039;,&amp;#039;TotalAtt&amp;#039;);&lt;br /&gt;
  } elsif ($curRank &amp;lt;= 500) {&lt;br /&gt;
    $t-&amp;gt;setCols(&amp;#039;Rank&amp;#039;,&amp;#039;Stat&amp;#039;,&amp;#039;ToNext&amp;#039;,&amp;#039;TotalAtt&amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  # Currently assumes you have the full logic bonus (+2)&lt;br /&gt;
  my(@arSum) = ();&lt;br /&gt;
  my($aveRank) = 0.002;        # If you have 0 or +1 bonus, change this to 0&lt;br /&gt;
  for (my $i=1; $i &amp;lt;= $curRank; $i++) {&lt;br /&gt;
    $aveRank += 500/(502-$i);  # If you have +1 bonus, change 502 to 501, or 500 for no bonus&lt;br /&gt;
    &lt;br /&gt;
    if ($i + 1000 &amp;lt;= $curRank) {     &lt;br /&gt;
      $arSum[2] += $arRank[$i+1000];&lt;br /&gt;
      $arSum[1] += $arRank[$i+500];&lt;br /&gt;
      $arSum[0] += $arRank[$i];&lt;br /&gt;
      $t-&amp;gt;addRow($i,int($aveRank),$arRank[$i],$arSum[0],$arRank[$i+500],$arSum[1],$arRank[$i+1000],$arSum[2]);&lt;br /&gt;
    } elsif ($i + 500 &amp;lt;= $curRank) {&lt;br /&gt;
      $arSum[1] += $arRank[$i+500];&lt;br /&gt;
      $arSum[0] += $arRank[$i];&lt;br /&gt;
      $t-&amp;gt;addRow($i,int($aveRank),$arRank[$i],$arSum[0],$arRank[$i+500],$arSum[1]);&lt;br /&gt;
    } else {&lt;br /&gt;
      $arSum[0] += $arRank[$i];&lt;br /&gt;
      $t-&amp;gt;addRow($i,int($aveRank),$arRank[$i],$arSum[0]);&lt;br /&gt;
    }&lt;br /&gt;
    if ($i == 499) { $curRank = 0; }&lt;br /&gt;
  }&lt;br /&gt;
  print $t;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;XYGON</name></author>
	</entry>
</feed>