Jump to content

Recommended Posts

WARNING : This is Alpha Code. Things will refuse to upload sometimes and sometimes things will be wrong


Ahem. Now we have that out of the way. I've spent the last few days working on a Java Parser for Log files and a simple webservice which lets you use it. You can find it here. 





1: Click "Choose File" and find your City of Heroes log file for a given day. Try and pick smaller files as at the moment the Uploader is a bit crap (working on it)

2: Click "Upload"

3: Wait a while. The tier of AWS I'm currently using seems a bit underpowered and slow and things take a while to upload.

4: Choose a Combat Session to parse

5: Browse the resulting JSON Object in the Viewer to see the various things harvested from your CombatLog.


You can also, if you copied it down, use the Retrieve by UUID to find a previous job and rerun Combat Sessions and download previously generated summaries. 


Remember you need to have logging switched on ingame (/logchat will stop/start it). Also go to your ingame Combat tab, right-click it and add all the Pet tabs in there. A lot of powers actually put things in Pet Channels rather than damage, healing etc. 


Known Issues.

  • The uploader seems slow to me. To the point that sometimes it craps out entirely. I'm working on various options. 
  • Figures may be all over the shop. Again I'm working on it. 
  • Index Page is NOT pretty. I was in a hurry to get a minimum viable up and running. Anyone with suggestions about easy to set up frontend frameworks which don't involve me learning a whole load of new crap, send them on. I went the route of HTML + Javascript + CSS just cos it's quick and dirty. 
  • DPS figures don't match Total / combatDuration for some reason. 
  • "Hits" in powers / subPowers is off. Since Power damage includes all subpowers then Hits should too (or the other way around)
  • Additional of new, initial session means there are very small "Unknown" combat session logs from between game start and the "Welcome to City of Heroes" being shown. 



How does it work?

The Logger has two phases. File Parsing and Combat Parsing. 


File Parsing takes one Log file and splits it into Global Channel and Combat Session logs on my server. I then delete the Global ones (cos I don't care about those). 


Combat Parsing takes a Combat Session log file and generates a summary JSON object from it by whizzing through it, capturing various types of lines, like Damage Dealt, pulling out interesting bits from each line (like what Power did it, what Type it was and how much it was for) and storing them inside objects. Once complete the Object generates some summaries and then writes the entire object to a summary file to view / download. 


What the hell is a "Combat Session"?

A combat session is just a subsection of the full log file. The system starts one for every new Character log in (based on the "Welcome to City of Heroes" message it shows as you load in). 


You can also control sessions by saying things in the Local channel ingame


/local STARTPARSE $name

will make the Parser split into a new session when it reads this



Will stop parsing until a new Start condition is hit (you alt or you do a /local STARTPARSE).


These let you control exactly when to stop / start logging. 


I downloaded one and it's bloody huge. What gives?

Downloaded summary_*.json files are more verbose than the Displayed version (because the Browser Viewer was struggling). They include Instance nodes for each time a power triggers, inside the Powers section. They also include a second by second breakdown of DPS at that point in time inside the DPS section. 


Your figures are arseways and you should feel bad.

Very likely. This was written over the last 4 days, and for periods of those days I was full of various intoxicants (Bank Holiday Weekend and all). At least some of the parser part was written while 3 Rums in. 


But the point of releasing this is so people can tell me what's arseways and (hopefully) why. 


How do we know you're not harvesting ChatLogs for evil?

Well it'll only parse what you send. I am storing the chatlogs on the server but I don't care about them and will start deleting them in the next release. Like anything on d'internet don't send anything if you're not sure. 


Why is it online? 

I'm mainly a backend and web Java developer. I don't do Client stuff and I don't like Java on clients anyway given their patch record. The Parser code is on GitHub so if you want to see how that part works you can download it, build it and run it locally on your machine. The "FileMain" class parses an entire City of Heroes log into seperate summaries for you. 




This is also why there is a CombatParser project / jar and a seperate one for my webservices. 


There's nothing showing me XP or Inf or Drops

That'll be in the next version. Those aren't too difficult to monitor overall so it shouldn't take long. 


What's next

For the moment I'll be working on the backend. Improving the infrastructure, making it quicker to upload files and improving the parser. 


The webpage provided is just a proof of concept. In theory a frontend developer could write their own which just calls my services and shows pretty things like graphs etc. My main initial focus is finishing off these parts, adding new Services like "retrieval one of my older uploads based on a UUID or my history". Ideally we'd end up with something where you could just ping someone a link so they could see the parsed data. 


I'd also love to have the ability to link with other CoH Tools and Utilities and maybe even a thin desktop client eventually but baby steps. 



  • 05/04/2021 : Added Total XP and Inf tracking. Added pseudopet healing. Added CombatStart and CombatEnd. Normalized some fieldnames and removed some additional unneeded output. 
  • 06/04/2021 : Added DamageOverTime, totalDamage. Added Pseudopet Hit, Miss and Damage Over Time. Refactored filenames so they sort naturally and allow full names again. Added "Unknown" combat sessions for when we can't see a "start session" string. 



Edited by Carnifax
  • Like 7
  • Thanks 1
Link to post
Share on other sites
Posted (edited)

Updated again. 

  • I'd managed to miss DoT effects which I only noticed when Frost and Freezing Touch were strangely missing from the Damage section of a parse of my Ice Scrapper. Those are there now. 
  • All Data sections now split Damage into damageTotal, damage and damageOverTime. damageTotal = damage + damageOverTime. I thought this was neat because it gives you a breakdown of "immediate" damage versus damage over time. Thinking about storing "Activations" in the JSON, then you could figure out a powers average damage per activation and tell how much DoT a power "wastes" on dead things. 
  • Added CombatStart and CombatEnd. I've defined those as "the first time I did damage" and "the last time I did damage". Calculating combatDuration (in seconds) based off those
  • Added totalInf, totalXP and quick and dirty calculates for damagePerCombatSecond, infPerCombatSecond and xpPerCombatSecond. 
  • Removed the dps node entirely from the in-browser view cos the figures don't make a lot of sense. However they (and Power Instance nodes) are available if you download a summary. 


And again

  • Added Pseudopet Hit, Miss and Damage Over Time. Refactored filenames so they sort naturally and allow full names again. Added "Unknown" combat sessions for when we can't see a "start session" string. 


This last change involved refactoring filenames so older uploads were deleted on the server. 

Edited by Carnifax
  • Like 1
Link to post
Share on other sites
3 minutes ago, Carnifax said:

You're very welcome. Thank *you* for the Brunker builds. I love my Fire/Claws Giant Flaming Chicken. 


Spin is a silly power on Tanks.


Spin is. Martial Arts may be the better all rounded combo but nothing beats that *crunch* sound of Spin doing a super hero landing and HP bars depleting all around me.

@sovera in Everlasting - I love teaming up so hit me up.


Simple guide for newcomers. - Money making included among other things.


Fire Armor/Martial Arts: the Brunker - Altitis cure.

Link to post
Share on other sites

Small update. Thanks to @Handmixer we realised that /local STARTPARSE said by someone else would cause YOUR log to split. 


To solve this you now have to put your own name after the STARTPARSE so the parser can confirm you said it. 


In other words : 



Or, if you just want Macros to do it for you


/macro STA "local STARTPARSE $name"

/macro END "local ENDPARSE $name"

  • Like 2
Link to post
Share on other sites
  • 3 weeks later
Link to post
Share on other sites

And for all the Controllers (except Elec cos you've weird powers I'm still looking at) a very general update for recording Mezzing (including normal knockbacks). Again since they belong to the same internal class used for both the Char and Powers you'll see them at both levels)


As you can see in the Mez section there may be some false positives because the pattern I'm using is very broad. I'll look into those (what's matching those 3 "reduce" hits?)



Elec Control > Static Field and Chain Confuse thing are logged weirdly, so I'll need to look at those individually. Earth Control and Dark Control might also have weird powers. 

Link to post
Share on other sites

Pretty visuals update. Reworked the DPS section and have added some graphs based on the imcoming data. I've put them at the bottom, under the CombatLog viewer section (cos it's collapsable). I've omitted legends because they're interactive anyway. 


Also, @GM Impervium / @Jimmy, I can has sticky?



Link to post
Share on other sites
  • Jimmy pinned this topic

First of all, thanks for creating this! I was just looking for a combat log analyzer, but I was actually hoping to find one that analyzed damage taken. I think that would be helpful for examining the survivability of a given build. Is that functionality on your radar and/or is parsing that accurately even possible?


Also, would you be willing to add a pie graph that displayed skills by DPA (damage per activation)?

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Create New...