Updated Log Parser

Discussion in 'Berserker' started by ARCHIVED-Rigz, Nov 26, 2004.

  1. ARCHIVED-Zzik Guest

    Your e-mail only shows up when you view your own profile, I sent you a PM but the log is too big. Shoot me a PM with your e-mail and I'll get it to you.
  2. ARCHIVED-Faeye Guest

    What version of Visual Studio are you using? .NET?
  3. ARCHIVED-Rigz Guest

    It's VB.net 2003
  4. ARCHIVED-Zarath Guest

    downloaded the parser today so I could see what my dps is, i can't find an autolog in the EQ2 folder. What is the command to start/stop a log manually ingame? and if you stop it while questing and restart it, that a new log or same log appended?
  5. ARCHIVED-Rigz Guest

    To record a log, the command is /log, and you can find in the logs folder of EQ2 directory.

    I made a quick udpate, thanks to Zzik and Agathorn for their logs. I fixed a bug where if you start logging in the middle of a fight it screws up the stats which was what was happeneing to Zzik. Also, if you start fighting within 5secs of a previous fight, it is now added to the same fight which should help solo Scout stats. Idealy there should be a setting where you can adjust this...maybe next update :)
  6. ARCHIVED-Verba Guest

    Bug: Crashes if you click cancel on File Open dialog.

    Fix:
    Old Code Snippet

    LoadFile.Filter = "Text Files (*.txt)|*.txt"
    LoadFile.ShowDialog()
    LogFile = LoadFile.FileName

    LogStream = File.OpenText(LogFile)

    Me.Log.Text = LogStream.ReadToEnd()
    Me.LoadProgress.Maximum = 0

    LogStream.Close()

    If LogFile <> "" Then



    New Code Snippet

    LoadFile.Filter = "Text Files (*.txt)|*.txt"
    LoadFile.ShowDialog()
    LogFile = LoadFile.FileName
    + If (LogFile == "") Then Exit Sub
    LogStream = File.OpenText(LogFile)

    Me.Log.Text = LogStream.ReadToEnd()
    Me.LoadProgress.Maximum = 0

    LogStream.Close()

    - If LogFile <> "" Then



    Don't have VB.net or I'd correct it in the project :)
  7. ARCHIVED-Verba Guest

    Also, you said fights within 5 seconds would be counted, but the line contains:

    If CurrentLogTime(LogLine) - Fight.EndofFight >= 5 Then


    To actually count within 5 seconds, it needs to be

    If CurrentLogTime(LogLine) - Fight.EndofFight > 5 Then
  8. ARCHIVED-Rigz Guest

    Thanks. Updated :)
  9. ARCHIVED-Sandheaver Guest

    I just wrote a small parser in Perl and from your log I got this:

    You damaged an Oakmyst royal defender 26 times; total: 519, avg: 19.

    Your poison hit 16 times; total: 220, avg: 13.
    Your Quick Flurry hit 2 times; total: 39, avg: 19.
    Your Ambush hit 1 times; total: 28, avg: 28.
    Your Ringing Blow hit 3 times; total: 180, avg: 60.
    Your Quick Strike hit 4 times; total: 52, avg: 13.

    You used poison damage 16 times; total: 220, avg: 13.
    You used piercing damage 10 times; total: 299, avg: 29.
    I spent about 15 minutes writing this, and it parsed through my 21k line log in less than a second. it only looks for damage that you deal out. This includes damage over time. I have not yet done a damage per second calculation, but this would not be hard at all. I'll edit this post with the updated code after I get that working if anyone is interested.

    here is the source, in Perl, if anyone is curious:

    #!/usr/local/bin/perl

    use warnings;
    use strict;

    my %damagetype;
    my %damagetype_damage;
    my %mobs;
    my %mobs_damage;
    my %attacks;
    my %attacks_damage;

    if (!($ARGV[0])) { print "usage: perl parser.pl logfile.txt\n"; exit; }

    my $logfile = $ARGV[0];

    open(LOGFILE, "
    while ( <LOGFILE> ) {
    if (m/YOUR (.*?) hits (.*?) for (\d*) points of (.*?) damage./) {
    $attacks{$1}++;
    $attacks_damage{$1} += $3;
    $mobs{$2}++;
    $mobs_damage{$2} += $3;
    $damagetype{$4}++;
    $damagetype_damage{$4} += $3;
    }
    }

    close LOGFILE;

    while ( my ($targets, $hits) = each(%mobs) ) {
    print "You damaged $targets $hits times; total: $mobs_damage{$targets}, avg: ". int($mobs_damage{$targets}/$hits) .".\n";
    }
    print "\n";
    while ( my ($attack, $uses) = each(%attacks) ) {
    print "Your $attack hit $uses times; total: $attacks_damage{$attack}, avg: ".int($attacks_damage{$attack}/$uses).".\n";
    }
    print "\n";
    while ( my ($type, $blasts) = each(%damagetype) ) {
    print "You used $type damage $blasts times; total: $damagetype_damage{$type}, avg: ".int($damagetype_damage{$type}/$blasts).".\n";
    }
  10. ARCHIVED-Sandheaver Guest

    Actually, my log doesn't show "you start fighting" or "you stop fighting" anywhere.... Perhaps because I'm a sorcerer? I don't ever push the '2' key to initiate melee combat when i fight, and i think that is what adds those messages.

    i can make it work, but only for battles that give experience.
  11. ARCHIVED-Drazhul Guest

    First of all, great work. Thanks for sharing.

    I have one suggestion though, would it be fairly easy to differentiate between different types of melee damage like slashing, crushing, piercing?

    It would make it easier to compare duel wielding weps of different dmg. type.

    If you ever update to include this, Thank you so much in advance.
  12. ARCHIVED-Sandheaver Guest

    it should do this now - it just parses each line and looks for each damage type, I don't have to code them in.

    send me a log with that kind of damage and I'll see what it looks like.
  13. ARCHIVED-Verba Guest

    I think he meant the original poster :)

    If your PERL parser had DPS, I'd think it would be pretty complete.
  14. ARCHIVED-Sandheaver Guest

    send me a good melee combat log and i'll put DPS in.

    also coming soon are % of attacks blocked, listed per attack, and per enemy, so you can spot trends in which mobs block certain attacks more than others, if such a trend exists. the same for you too, you'll see which mob hits you hardest, and which you resist most.

    If anyone has a good combat log from a fighter or scout (or subclasses) please send it to me: naikrovek@yahoo.com. I'll have a DPS parser out soon after.
  15. ARCHIVED-Arrpo Guest

    Hey guys, this is a great parser. I have a question though, is there any way you can get it to accept your group member's damage as well? I am trying to figure out which classes to highest dps, and this is the only parser I have seen that works. Everyone thinks the assasin or ranger does the highest dps, but I think swashbucklers/bandits do more dps. I would also like to see how I rate compared to a wizard, or conjurer, or such. BTW, at level 23, and attacking a giant from behind, I do around 42 damage per second.
  16. ARCHIVED-Sandheaver Guest

    Why stop with just group members? I can make mine fairly easily parse everyone's damage... but probably not DPS unless they stay close through an entire battle.

    as I've said before, my parser needs the "you start/stop fighting" messages to accurately count DPS.

    Here's what I get for the small Oakmyst Defender log, above:

    D:\>parser.pl log.txt
    You damaged an Oakmyst royal defender 65 times; total: 665, avg: 10.
    Your Quick Strike hit 4 times; total: 52, avg: 13.
    Your poison hit 16 times; total: 220, avg: 13.
    Your hit hit 39 times; total: 146, avg: 3.
    Your Quick Flurry hit 2 times; total: 39, avg: 19.
    Your Ringing Blow hit 3 times; total: 180, avg: 60.
    Your Ambush hit 1 times; total: 28, avg: 28.
    You used poison damage 16 times; total: 220, avg: 13.
    You used piercing damage 49 times; total: 445, avg: 9.
    You dealt the deathblow 1 times on an Oakmyst royal defender.
    1 deathblows total.
    you fought in 2 battles for a total of 38 seconds,
    dealing 652 damage in that time.
    your average DPS is: 17.1578947368421.

    As I said before, there needs to be the start/stop fighting messages, so if they're not present, damage is not counted towards your DPS. meaning that if you're a sorcerer, this DPS calculation won't do much for you, unless you are sure to toggle the melee attack button at the appropriate times. It will work great for berserkers though. Since this is the Berserker forum, that seems appropriate.

    The current Perl source code for this parser is right here.
    EDIT: there was a bug in my DPS calculations. Fixed it. I updated the output of the log above.
    Message Edited by Sandheaver on 12-16-2004 11:46 AM
  17. ARCHIVED-Arrpo Guest

    Well, if need be, I can manually figure out dps easily. All I have to do is look to see when the battle started, an when it ended, and i know the persons dps. I maonly want this to see which classes do more dps.
  18. ARCHIVED-megatraum Guest

    hello there. Rigz could you please give me a little install help? i see no instructions included. when i run the exe inside your zip i get an application error. in your folder structure you have this exe in about 3 other places. when i try to run them all i get the same error. can ya help me out? would like to get your app working if i can
  19. ARCHIVED-Rigz Guest

  20. ARCHIVED-Goodwill Guest


    From where did you get that amazing sig :D