NAME

Games::EverQuest::LogLineParser - Perl extension for parsing lines from the EverQuest log file.

SYNOPSIS

   use Games::EverQuest::LogLineParser;

   my $eqlog_file = 'c:/everquest/eqlog_Soandso_veeshan.txt';

   open(my $eq_log_fh, $eqlog_file) || die "$eqlog_file: $!";

   while (<$eq_log_fh>)
      {
      my $parsed_line = parse_eq_line($_);
      next unless $parsed_line;
      do_something($parsed_line);
      }

DESCRIPTION

Games::EverQuest::LogLineParser provides functions related to parsing the interesting bits from an EverQuest log file.

Functions

parse_eq_line($eq_line)

Returns a hash ref, containing variable keys depending on the determined line type of the given log line. If the line was not recognized, then false is returned.

Two keys that will always be present, if the line was recognized, are time_stamp and line_type. The first will contain the time string from the line, while the latter will be a string indicating how the line was classified. A given line_type hash ref, will always contain the same keys, though some of the values may be undef or empty.

For a list of line types (and associated keys) see the "LINE TYPES" section below.

parse_eq_line_type($line_type, $eq_line)

If you expect a line to be of a certain type, and want to test or parse it as that type, you can use this function. Call it with the expected line type and the log line to test or parse.

Returns a hash ref, containing variable keys depending on the type of line that was passed. If the line could not be parsed as the given line type, then false is returned.

Two keys that will always be present, if the line was recognized, are time_stamp and line_type. The first will contain the time string from the line, while the latter will be a string indicating how the line was classified. A given line_type hash ref, will always contain the same keys, though some of the values may be undef or empty.

For a list of line types (and associated keys) see the "LINE TYPES" section below.

parse_eq_time_stamp($parsed_line-{'time_stamp'})>

Given the time_stamp value from a parsed line, returns a hash ref with the following structure:

   ## sample input [Mon Oct 13 00:42:36 2003]
   {
    day   => 'Mon',
    month => 'Oct',
    date  => '13',
    hour  => '00',
    min   => '42',
    sec   => '36',
    year  => '2003',
   }
all_possible_line_types()

Returns a list of all possible line types for the hash refs that are returned by parse_eq_line().

all_possible_keys()

Returns a list of all possible keys for the hash refs that are returned by parse_eq_line().

EXPORT

By default the parse_eq_line, parse_eq_line_type, parse_eq_time_stamp, all_possible_line_types and all_possible_keys subroutines are exported.

SCRIPTS

Several scripts have been included as both tools and examples. All default to STDOUT for output, but accept an optional file name for the second argument as well.

eqlog2csv.pl <eqlog_file> [output_file]
   Converts an EverQuest log file into a CSV file (uses '|' character rather than commas).
eqlog_line_type_frequency.pl <eqlog_file> [output_file]
   Reports the frequency of all line types seen in the given EverQuest log file.
eqlog_unrecognized_lines.pl <eqlog_file> [output_file]
   Prints unrecognized lines from an EverQuest log file.

LINE TYPES

MELEE_DAMAGE
   input line:

      [Mon Oct 13 00:42:36 2003] You slash a Bloodguard crypt sentry for 88 points of damage.

   output hash ref:

      {
         line_type  => 'MELEE_DAMAGE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         attacker   => 'You',
         attack     => 'slash',
         attackee   => 'A Bloodguard crypt sentry',
         amount     => '88',
      };

   comments:

      none
YOU_MISS_MOB
   input line:

      [Mon Oct 13 00:42:36 2003] You try to kick a Bloodguard crypt sentry, but miss!

   output hash ref:

      {
         line_type  => 'YOU_MISS_MOB',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         attack     => 'slash',
         attackee   => 'A Bloodguard crypt sentry',
      };

   comments:

      none
OTHER_MISSES
   input line:

      [Mon Oct 13 00:42:36 2003] A Bloodguard crypt sentry tries to hit YOU, but misses!

   output hash ref:

      {
         line_type  => 'OTHER_MISSES',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         attacker   => 'A Bloodguard crypt sentry',
         attack     => 'hit',
         attackee   => 'YOU',
      };

   input line:

      [Mon Oct 13 00:42:36 2003] Soandso tries to slash a Bloodguard crypt sentry, but misses!

   output hash ref:

      {
         line_type  => 'OTHER_MISSES',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         attacker   => 'Soandso',
         attack     => 'slash',
         attackee   => 'a Bloodguard crypt sentry',
      };

   comments:

      none
FACTION_HIT
   input line:

      [Mon Oct 13 00:42:36 2003] Your faction standing with Loyals got worse.

   output hash ref:

      {
         line_type      => 'FACTION_HIT',
         time_stamp     => '[Mon Oct 13 00:42:36 2003] ',
         faction_group  => 'Loyals',
         faction_change => 'worse',
      };

   comments:

      none
YOU_REPEL_HIT
   input line:

      [Mon Oct 13 00:42:36 2003] A Bloodguard crypt sentry tries to hit YOU, but YOU parry!

   output hash ref:

      {
         line_type  => 'YOU_REPEL_HIT',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         attacker   => 'A Bloodguard crypt sentry',
         attack     => 'hit',
         repel      => 'parry',
      };

   comments:

      none
MOB_REPELS_HIT
   input line:

      [Mon Oct 13 00:42:36 2003] You try to slash a Bloodguard crypt sentry, but a Bloodguard crypt sentry ripostes!

   output hash ref:

      {
         line_type  => 'MOB_REPELS_HIT',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         attack     => 'slash',
         attackee   => 'A Bloodguard crypt sentry',
         repel      => 'riposte',
      };

   comments:

      none
SLAIN_BY_YOU
   input line:

      [Mon Oct 13 00:42:36 2003] You have slain a Bloodguard crypt sentry!

   output hash ref:

      {
         line_type  => 'SLAIN_BY_YOU',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         slayee     => 'A Bloodguard crypt sentry',
      };

   comments:

      none
SKILL_UP
   input line:

      [Mon Oct 13 00:42:36 2003] You have become better at Abjuration! (222)

   output hash ref:

      {
         line_type   => 'SKILL_UP',
         time_stamp  => '[Mon Oct 13 00:42:36 2003] ',
         skill_upped => 'Abjuration',
         skill_value => '222',
      };

   comments:

      none
SLAIN_BY_OTHER
   input line:

      [Mon Oct 13 00:42:36 2003] a Bloodguard crypt sentry has been slain by Soandso!

   output hash ref:

      {
         line_type  => 'SLAIN_BY_OTHER',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         slayee     => 'A Bloodguard crypt sentry',
         slayer     => 'Soandso',
      };

   comments:

      none
CORPSE_MONEY
   input line:

      [Mon Oct 13 00:42:36 2003] You receive 67 platinum, 16 gold, 20 silver and 36 copper from the corpse.

   output hash ref:

      {
         line_type  => 'CORPSE_MONEY',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         platinum   => '67',
         gold       => '16',
         silver     => '20',
         copper     => '36',
         value      => 68.8360,
      };

   comments:

      none
DAMAGE_SHIELD
   input line:

      [Mon Oct 13 00:42:36 2003] a Bloodguard crypt sentry was hit by non-melee for 8 points of damage.

   output hash ref:

      {
         line_type  => 'DAMAGE_SHIELD',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         attacker   => 'A Bloodguard crypt sentry',
         amount     => '8',
      };

   comments:

      none
DIRECT_DAMAGE
   input line:

      [Mon Oct 13 00:42:36 2003] Soandso hit a Bloodguard crypt sentry for 300 points of non-melee damage.

   output hash ref:

      {
         line_type  => 'DIRECT_DAMAGE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         attacker   => 'Soandso',
         attackee   => 'A Bloodguard crypt sentry',
         amount     => '300',
      };

   comments:

      none
DAMAGE_OVER_TIME
   input line:

      [Mon Oct 13 00:42:36 2003] A Bloodguard crypt sentry has taken 3 damage from your Flame Lick.

   output hash ref:

      {
         line_type  => 'DAMAGE_OVER_TIME',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         attackee   => 'A Bloodguard crypt sentry',
         amount     => '3',
         spell      => 'Flame Lick',
      };

   comments:

      none
LOOT_ITEM
   input line:

      [Mon Oct 13 00:42:36 2003] --You have looted a Flawed Green Shard of Might.--

   output hash ref:

      {
         line_type  => 'LOOT_ITEM',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         looter     => 'You',
         item       => 'Flawed Green Shard of Might',
      };

   input line:

      [Mon Oct 13 00:42:36 2003] --Soandso has looted a Tears of Prexus.--

   output hash ref:

      {
         line_type  => 'LOOT_ITEM',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         looter     => 'Soandso',
         item       => 'Tears of Prexus',
      };

   comments:

      none
BUY_ITEM
   input line:

      [Mon Oct 13 00:42:36 2003] You give 1 gold 2 silver 5 copper to Cavalier Aodus.

   output hash ref:

      {
         line_type  => 'BUY_ITEM',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         platinum   => 0,
         gold       => '1',
         silver     => '2',
         copper     => '4',
         value      => 0.124,
         merchant   => 'Cavalier Aodus',
      };

   comments:

      none
ENTERED_ZONE
   input line:

      [Mon Oct 13 00:42:36 2003] You have entered The Greater Faydark.

   output hash ref:

      {
         line_type  => 'ENTERED_ZONE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         zone       => 'The Greater Faydark',
      };

   comments:

      none
SELL_ITEM
   input line:

      [Mon Oct 13 00:42:36 2003] You receive 120 platinum from Magus Delin for the Fire Emerald Ring(s).

   output hash ref:

      {
         line_type  => 'SELL_ITEM',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         platinum   => '120',
         gold       => 0,
         silver     => 0,
         copper     => 0,
         value      => 120.000,
         merchant   => 'Magus Delin',
         item       => 'Fire Emerald Ring',
      };

   comments:

      none
SPLIT_MONEY
   input line:

      [Mon Oct 13 00:42:36 2003] You receive 163 platinum, 30 gold, 25 silver and 33 copper as your split.

   output hash ref:

      {
         line_type  => 'SPLIT_MONEY',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         platinum   => '163',
         gold       => '30',
         silver     => '25',
         copper     => '33',
         value      => 166.2830,
      };

   comments:

      none
YOU_SLAIN
   input line:

      [Mon Oct 13 00:42:36 2003] You have been slain by a Bloodguard crypt sentry!

   output hash ref:

      {
         line_type  => 'YOU_SLAIN',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         slayer     => 'A Bloodguard crypt sentry',
      };

   comments:

      none
TRACKING_MOB
   input line:

      [Mon Oct 13 00:42:36 2003] You begin tracking a Bloodguard crypt sentry.

   output hash ref:

      {
         line_type  => 'TRACKING_MOB',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         trackee    => 'A Bloodguard crypt sentry',
      };

   comments:

      none
YOU_CAST
   input line:

      [Mon Oct 13 00:42:36 2003] You begin casting Ensnaring Roots.

   output hash ref:

      {
         line_type  => 'YOU_CAST',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         spell      => 'Ensnaring Roots',
      };

   comments:

      none
SPELL_RESISTED
   input line:

      [Mon Oct 13 00:42:36 2003] Your target resisted the Ensnaring Roots spell.

   output hash ref:

      {
         line_type  => 'SPELL_RESISTED',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         spell      => 'Ensnaring Roots',
      };

   comments:

      none
FORGET_SPELL
   input line:

      [Mon Oct 13 00:42:36 2003] You forget Ensnaring Roots.

   output hash ref:

      {
         line_type  => 'FORGET_SPELL',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         spell      => 'Ensnaring Roots',
      };

   comments:

      none
MEMORIZE_SPELL
   input line:

      [Mon Oct 13 00:42:36 2003] You have finished memorizing Ensnaring Roots.

   output hash ref:

      {
         line_type  => 'MEMORIZE_SPELL',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         spell      => 'Ensnaring Roots',
      };

   comments:

      none
YOU_FIZZLE
   input line:

      [Mon Oct 13 00:42:36 2003] Your spell fizzles!

   output hash ref:

      {
         line_type  => 'YOU_FIZZLE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
      };

   comments:

      none
LOCATION
   input line:

      [Mon Oct 13 00:42:36 2003] Your Location is -63.20, 3846.55, -42.76

   output hash ref:

      {
         line_type  => 'LOCATION',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         coord_1    => '-63.20',
         coord_2    => '3846.55',
         coord_3    => '-42.76',
      };

   comments:

      none
YOU_SAY
   input line:

      [Mon Oct 13 00:42:36 2003] You say, 'thanks!'

   output hash ref:

      {
         line_type  => 'YOU_SAY',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         spoken     => 'thanks!',
      };

   comments:

      none
YOU_OOC
   input line:

      [Mon Oct 13 00:42:36 2003] You say out of character, 'one potato, two potato'

   output hash ref:

      {
         line_type  => 'YOU_OOC',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         spoken     => 'one potato, two potato',
      };

   comments:

      none
YOU_SHOUT
   input line:

      [Mon Oct 13 00:42:36 2003] You shout, 'one potato, two potato'

   output hash ref:

      {
         line_type  => 'YOU_SHOUT',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         spoken     => 'one potato, two potato',
      };

   comments:

      none
YOU_AUCTION
   input line:

      [Mon Oct 13 00:42:36 2003] You auction, 'one potato, two potato'

   output hash ref:

      {
         line_type  => 'YOU_AUCTION',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         spoken     => 'one potato, two potato',
      };

   comments:

      none
OTHER_SAYS
   input line:

      [Mon Oct 13 00:42:36 2003] Soandso says, 'I aim to please :)'

   output hash ref:

      {
         line_type  => 'OTHER_SAYS',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         speaker    => 'Soandso',
         spoken     => 'I aim to please :)',
      };

   comments:

      none
YOU_TELL_OTHER
   input line:

      [Mon Oct 13 00:42:36 2003] You told Soandso, 'lol, i was waiting for that =)'

   output hash ref:

      {
         line_type  => 'YOU_TELL_OTHER',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         speakee    => 'Soandso',
         spoken     => 'lol, i was waiting for that =)',
      };

   comments:

      none
MERCHANT_TELLS_YOU
   input line:

      [Mon Oct 13 00:42:36 2003] Magus Delin tells you, 'I'll give you 3 gold 6 silver per Geode'

   output hash ref:

      {
         line_type  => 'MERCHANT_TELLS_YOU',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         platinum   => 0,
         gold       => '3',
         silver     => '6',
         copper     => 0,
         value      => 0.360,
         merchant   => 'Magus Delin',
         item       => 'Geode',
      };

   comments:

      none
MERCHANT_PRICE
   input line:

      [Mon Oct 13 00:42:36 2003] Gaelsori Heriseron tells you, 'That'll be 1 platinum 2 gold 5 silver 9 copper for the Leather Wristbands.'

   output hash ref:

      {
         line_type  => 'MERCHANT_PRICE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         platinum   => '1',
         gold       => '2',
         silver     => '5',
         copper     => '9',
         value      => 1.259,
         merchant   => 'Gaelsori Heriseron',
         item       => 'Leather Wristbands',
      };

   comments:

      none
OTHER_TELLS_YOU
   input line:

      [Mon Oct 13 00:42:36 2003] Soandso tells you, 'hows the adv?'

   output hash ref:

      {
         line_type  => 'OTHER_TELLS_YOU',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         speaker    => 'Soandso',
         spoken     => 'hows the adv?',
      };

   comments:

      none
YOU_TELL_GROUP
   input line:

      [Mon Oct 13 00:42:36 2003] You tell your party, 'will keep an eye out'

   output hash ref:

      {
         line_type  => 'YOU_TELL_GROUP',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         spoken     => 'will keep an eye out',
      };

   comments:

      none
OTHER_TELLS_GROUP
   input line:

      [Mon Oct 13 00:42:36 2003] Soandso tells the group, 'Didnt know that, thanks info'

   output hash ref:

      {
         line_type  => 'OTHER_TELLS_GROUP',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         speaker    => 'Soandso',
         spoken     => 'Didnt know that, thanks info',
      };

   comments:

      none
OTHER_CASTS
   input line:

      [Mon Oct 13 00:42:36 2003] Soandso begins to cast a spell.

   output hash ref:

      {
         line_type  => 'OTHER_CASTS',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         caster     => 'Soandso',
      };

   comments:

      none
CRITICAL_DAMAGE
   input line:

      [Mon Oct 13 00:42:36 2003] Soandso scores a critical hit! (126)

   output hash ref:

      {
         line_type  => 'CRITICAL_DAMAGE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         attacker   => 'Soandso',
         type       => 'hit',
         amount     => '126',
      };

   input line:

      [Mon Oct 13 00:42:36 2003] Soandso delivers a critical blast! (3526)

   output hash ref:

      {
         line_type  => 'CRITICAL_DAMAGE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         attacker   => 'Soandso',
         type       => 'blast',
         amount     => '3526',
      };

   comments:

      none
PLAYER_HEALED
   input line:

      [Mon Oct 13 00:42:36 2003] Soandso has healed you for 456 points of damage.

   output hash ref:

      {
         line_type  => 'PLAYER_HEALED',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         healer     => 'Soandso',
         healee     => 'you',
         amount     => '456',
      };

   comments:

      none
SAYS_OOC
   input line:

      [Mon Oct 13 00:42:36 2003] Soandso says out of character, 'Stop following me :oP'

   output hash ref:

      {
         line_type  => 'SAYS_OOC',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         speaker    => 'Soandso',
         spoken     => 'Stop following me :oP',
      };

   comments:

      none
OTHER_AUCTIONS
   input line:

      [Mon Oct 13 00:42:36 2003] Soandso auctions, 'WMBS - 4k OBO'

   output hash ref:

      {
         line_type  => 'OTHER_AUCTIONS',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         speaker    => 'Soandso',
         spoken     => 'WMBS - 4k OBO',
      };

   comments:

      none
OTHER_SHOUTS
   input line:

      [Mon Oct 13 00:42:36 2003] Soandso shouts, 'talk to vual stoutest'

   output hash ref:

      {
         line_type  => 'OTHER_SHOUTS',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         speaker    => 'Soandso',
         spoken     => 'talk to vual stoutest',
      };

   comments:

      none
PLAYER_LISTING
   input line:

      [Mon Oct 13 00:42:36 2003] [56 Outrider] Soandso (Half Elf) <The Foobles>

   output hash ref:

      {
         line_type  => 'PLAYER_LISTING',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         afk        => '',
         linkdead   => '',
         anon       => '',
         level      => '56',
         class      => 'Outrider',
         name       => 'Soandso',
         race       => 'Half Elf',
         guild      => 'The Foobles',
         zone       => '',
         lfg        => '',
      };

   input line:

      [Mon Oct 13 00:42:36 2003] [65 Deceiver] Soandso (Barbarian) <The Foobles> ZONE: potranquility

   output hash ref:

      {
         line_type  => 'PLAYER_LISTING',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         afk        => '',
         linkdead   => '',
         anon       => '',
         level      => '65',
         class      => 'Deceiver',
         name       => 'Soandso',
         race       => 'Barbarian',
         guild      => 'The Foobles',
         zone       => 'potranquility',
         lfg        => '',
      };

   comments:

      none
YOUR_SPELL_WEARS_OFF
   input line:

      [Mon Oct 13 00:42:36 2003] Your Flame Lick spell has worn off.

   output hash ref:

      {
         line_type  => 'YOUR_SPELL_WEARS_OFF',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         spell      => 'Flame Lick',
      };

   comments:

      none
WIN_ADVENTURE
   input line:

      [Mon Oct 13 00:42:36 2003] You have successfully completed your adventure.  You received 22 adventure points.  You have 30 minutes to exit this zone.

   output hash ref:

      {
         line_type  => 'WIN_ADVENTURE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         amount     => '22',
      };

   comments:

      none
SPEND_ADVENTURE_POINTS
   input line:

      [Mon Oct 13 00:42:36 2003] You have spent 40 adventure points.

   output hash ref:

      {
         line_type  => 'SPEND_ADVENTURE_POINTS',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         amount     => '40',
      };

   comments:

      none
GAIN_EXPERIENCE
   input line:

      [Mon Oct 13 00:42:36 2003] You gain party experience!!

   output hash ref:

      {
         line_type  => 'GAIN_EXPERIENCE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         gainer     => 'party',
      };

   input line:

      [Mon Oct 13 00:42:36 2003] You gain experience!!

   output hash ref:

      {
         line_type  => 'GAIN_EXPERIENCE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         gainer     => '',
      };

   comments:

      none
GAME_TIME
   input line:

      [Mon Oct 13 00:42:36 2003] Game Time: Thursday, April 05, 3176 - 6 PM

   output hash ref:

      {
         line_type  => 'GAME_TIME',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         time       => 'Game Time: Thursday, April 05, 3176 - 6 PM',
      };

   comments:

      none
EARTH_TIME
   input line:

      [Mon Oct 13 00:42:36 2003] Earth Time: Thursday, April 05, 2003 19:25:47

   output hash ref:

      {
         line_type  => 'EARTH_TIME',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         time       => 'Earth Time: Thursday, April 05, 2003 19:25:47',
      };

   comments:

      none
MAGIC_DIE
   input line:

      [Mon Oct 13 00:42:36 2003] **A Magic Die is rolled by Soandso.

   output hash ref:

      {
         line_type  => 'MAGIC_DIE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         roller     => 'Soandso',
      };

   comments:

      none
ROLL_RESULT
   input line:

      [Mon Oct 13 00:42:36 2003] **It could have been any number from 0 to 550, but this time it turned up a 492.

   output hash ref:

      {
         line_type  => 'ROLL_RESULT',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         min        => '0',
         max        => '550',
         amount     => '492',
      };

   comments:

      none
BEGIN_MEMORIZE_SPELL
   input line:

      [Mon Oct 13 00:42:36 2003] Beginning to memorize Call of Sky...

   output hash ref:

      {
         line_type  => 'BEGIN_MEMORIZE_SPELL',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         min        => '0',
         max        => '550',
         amount     => '492',
      };

   comments:

      none
SPELL_INTERRUPTED
   input line:

      [Mon Oct 13 00:42:36 2003] a Bloodguard caretaker's casting is interrupted!

   output hash ref:

      {
         line_type  => 'SPELL_INTERRUPTED',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         caster     => 'a Bloodguard caretaker',
      };

   input line:

      [Mon Oct 13 00:42:36 2003] Your spell is interrupted.

   output hash ref:

      {
         line_type  => 'SPELL_INTERRUPTED',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         caster     => 'You',
      };

   comments:

      none
SPELL_NO_HOLD
   input line:

      [Mon Oct 13 00:42:36 2003] Your spell would not have taken hold on your target.

   output hash ref:

      {
         line_type  => 'SPELL_NO_HOLD',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
      };

   comments:

      none
LEVEL_GAIN
   input line:

      [Mon Oct 13 00:42:36 2003] You have gained a level! Welcome to level 42!

   output hash ref:

      {
         line_type  => 'LEVEL_GAIN',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         level      => '42',
      };

   comments:

      none
BAZAAR_TRADER_MODE
   input line:

      [Mon Oct 13 00:42:36 2003] Bazaar Trader Mode *ON*

   output hash ref:

      {
         line_type  => 'BAZAAR_TRADER_MODE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         status     => 1,
      };

   comments:

      status will be '0' for OFF, and '1' for ON.
BAZAAR_TRADER_PRICE
   input line:

      [Mon Oct 13 00:42:36 2003]  18.) Bone Chips (Price  2g 5s).

   output hash ref:

      {
         line_type  => 'BAZAAR_TRADER_PRICE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         item       => 'Bone Chips',
         platinum   => '0',
         gold       => '2',
         silver     => '5',
         copper     => '0',
         value      => 0.250,
      };

   comments:

      none
BAZAAR_SALE
   input line:

      [Mon Oct 13 00:42:36 2003] Letsmekkadyl purchased 17 Bone Chips for ( 3p 2g 3s).

   output hash ref:

      {
         line_type  => 'BAZAAR_SALE',
         time_stamp => '[Mon Oct 13 00:42:36 2003] ',
         buyer      => 'Letsmekkadyl',
         item       => 'Leather Wristbands',
         quantity   => 17,
         platinum   => '3',
         gold       => '2',
         silver     => '3',
         copper     => '0',
         value      => 3.230,
      };

   comments:

      none

AUTHOR

Dan Boorstein, <danboo@cpan.org>

Mainted by Paul Fenwick, <pjf@cpan.org>

BUGS

I imagine the primary source of faults in this module will be in which line types it understands, and how well it can distinguish them. If you come across lines in you log files that I haven't handled (see eqlog_unrecognized_lines.pl), or that are handled incorrectly, please send the line to me, with an explanation of why it was not parsed in accordance with your expectations. If you're up to it, a patch (test suite too please) for handling the offending line would be great.

TO DO

- add unrecognized yet useful lines
   MOTD, GUILD_MOTD, BEGIN_MEMORIZE
- optimize ordering of @line_types

SEE ALSO