Monday, 2 July 2007

Introduction

Recently I reached level 70 on my Hunter character; with the ding was the usual “Your strength, agility, stamina, intellect & spirit have increased by 1” message. I realised that nothing ‘magic’ happened at level 70, my base stats went up by one but I was still wearing the mid-60’s quest items from the past week. I wanted a way to determine “my white-damage DPS is about average, my ranged attack power is below average” etc.

Last week wrote a simple program to automate armory data collection dubbed ‘ArmorySpider’. Basically it requests a character sheet (XML) and stores the whole thing in a database, along with some properties like level, class, faction etc. The idea being I can choose datasets from this database and run statistics on them at a later date.

Finding characters is the tricky part; I took the ‘Arena Ladder’ charts for 2v2, 3v3 & 5v5 teams in my ‘Misery’ battlegroup of 14 realms. For each team I retrieved the character sheet for each team member, then looked up and retrieved all the characters from their respective guilds. This approach has been pretty successful however it is limited in a number of ways:

1). only guilds where a member is part of an arena team are found
2). characters who are not guilded and not in an arena team are never found

Aside from that, in the past week it has found more than 40,000 character profiles through the 5v5 arena teams and is still ticking slowly through the 3v3 teams. Around 24,000 are level 70, and about 10% of them are Hunters.

To run queries on this data I wrote another program, I select a class ‘Hunter’ level-range ‘70’ and feed it XPath queries to run on the character sheet XML. Each XPath query results in a separate column in the output dataset. After a few seconds the query is spat out as a CSV file which I can manipulate in Excel/OpenOffice.

For example:

//ranged/damage/@dps

Returns the white-damage ranged DPS as a floating point number e.g. ‘311.5’

//faction[@key='thealdor']/@reputation

Returns the characters reputation as a value from -42000 (Hated) to 42000 (Exalted)

//talentSpec/@treeOne
//talentSpec/@treeTwo
//talentSpec/@treeThree

Returns how many points were spent in the each talent tree e.g. ‘41’, ‘20’, ‘0’

Over the next few weeks I will be posting some detailed stats (probably Hunter-centric) but I am open to suggestions for data you would like to see relevant to any class. For the moment the program itself will remain closed-source, it’s not particularly readable anyway. :)

2 comments:

Anonymous said...

Looks fantastic so far. Interesting information, while not "helpful" it is interesting. I'd be curious about different set gear worn, like S2 arena vs Tier 4 or 5, and % of level 70s wearing different sets.

Okoloth said...

Since adding the equipment / gem summaries in the last round of reports I can flag groups of item-id's (arena, dungeon, raid sets) and make reports on them. It's definately something i would like to publish soon.