Archived

This topic is now archived and is closed to further replies.

Aldriana

Spreadsheets: Deep Space Nine

103 posts in this topic

I'm updating the architecture of the python library a bit, and tweaking some numbers for 5.x so we can start pushing some real modeling. Knowing that my different usernames have caused trouble in the past, I'm linking here my fork:

https://github.com/dazer/ShadowCraft-Engine.

Update: I posted an issue (https://github.com/Aldriana/ShadowCraft-Engine/issues/98) in the parent project to track things that need to be done for mists.

Share this post


Link to post
Share on other sites

Hey folks -- nextormento pointed me at this thread, and I wanted to address a few points.

1) Hosting. I'm happy to host it indefinitely; the 300x250 ad in the corner actually makes the site slightly profitable, so money isn't a concern (specifically, it's making ~$60/month right now, and the VM costs me $40/month, so after taxes it shakes out about right), and systems maintenance is still very much within the scope of my day job, so I'm happy to keep at it. As noted, I'm not playing WoW these days and so it's not really on my radar, but I do want to continue to support it, and may end up playing MoP so I'd need it anyhow :)

Hosting failures lately have primarily been due to logfiles filling up the disk (it's on a tiny little Linode VM), which makes everything puke all over itself. Fixing it is trivial, and last time it happened I set up logrotate to fix it for me. :)

2) I'd like to improve how changes could be pushed to the engine. This could be as easy as a github hook that deploys the engine when the master repo is updated, and then giving a trusted few commit access to that repo. In that vein, I'm happy to give sysadmin access on that box to folks like nextormento or Aldriana, if so desired. My eventual goal would be for it to mostly "run itself", and where it doesn't, for there to be multiple people that can fix issues, so that there's no single point of failure (like yours truly).

3) Languages; the Shadowcraft UI is about 90% Javascript and 10% Ruby. Mongo was chosen because the document database structure effectively lets me work directly with remote JSON endpoints, except it's all cached and indexed (which is awesome), but it wouldn't be hard to replace it with something else. Ruby was chosen because I'm Really Dang Fast at writing Rails apps, and it's utterly amazing at parsing some of the markup we have to parse. But, the app isn't married to it, and we could replace the Ruby and Mongo parts with Python and SQLite without too much fuss. At the end of the day, there just needs to be:

a) A way to get a character from the armory

b) A way to get item, gem, and enchant info from the armory and WoWHead

c) A way to generate the JSON datafiles like http://shadowcraft.mmo-mumble.com/items-rogue.js

If all that's in place, literally the entire rest of the app is Javascript, and as such, should run anywhere. A "user-installable" version shouldn't be too hard, with two caveats:

First, the engine has to be spun up. Maybe this is something that we could do with a batch file (spin up engine, spin up a lightweight HTTP server like whatever the Python equivalent of Webrick is, open browser).

Second, the reforge service is off-site. Tini runs and hosts that on AppEngine, and there are quota and pricing concerns there. His reforger is written in Java, which, while portable, requires the user to have a JVM handy, and there are some special considerations in Shadowcraft about how it talks to the reforger. This would need to be solved, and probably isn't trivial.

It's important to note that Shadowcraft as a whole was designed as a set of interoperable parts, with the intent that the parts could be replaced. The engine doesn't care what the UI looks like, and the UI doesn't care what the backend server looks like, as long as all the interfaces are consistent.

If I get some time, I'd like to see what I can do about moving the app off of Rails and maybe into Sinatra (which is a *ton* easier to self-deploy) or even Flask (which I'd have to learn, but I'm not worried about that), and off of Mongo and into SQLite (again, for self-deployment purposes). This should hopefully address the "I can't run my own fork" issues. As an alternative, a VM image would be trivial to create, though I don't know of people are thrilled at the idea of running a whole virtualized Linux distro just to be able to tweak their gear.

Just from a point of professional pride, I kind of want to rewrite the Javascript parts of the app now that I actually have a better idea of what the hell I'm doing, which should mean better organization and more maintainable code. Hopefully, adding things like gear upgrade planning or weight tweaking wouldn't be that hard.

Share this post


Link to post
Share on other sites

Are these changes we are talking about specific to the spreadsheet, or to change in the website as well?

I haven't read most of the comments, but these are things mainly for the website:

-Ability to manually alter stat and stat weights

-Rotation "guide" which will tell you if an ability is worth using with your current gear (i.e. rupture for combat -->a lot of rogues dropped as it became nominal)

-Ability to pick which foodbuff

-Test to see if using a foodbuff for hit/exp/haste/mast/crit would be better than using agility because of the reforging it would allow

-More rotation customization (I use this ability this many times, then do this, then this, etc) or at least an output of what rotation it is suggesting would result in the dps.

-The ability to change how often cooldowns are used. It seems there may be fights in MoP that we may want to hold our CD's for a short period to wait for a better time (this happens all the time actually). I would like to have a "Check here if you want to check cd's when not on normal CD schedule" that lets you enter the time in seconds between uses.

-Incorporate some kinda of Feint/other gcd abilites uptime check. "I use feint ever xxxx seconds" so we could see the effect on dps while using feint/other on cd.

-An expected energy capping meter. "We expect you to be energy capped for 5% of the fight (or 50 seconds of the 1000 second fight.

I think the gear/gem/enchant selection is where it needs to be.

Share this post


Link to post
Share on other sites

I'm one of those "doesn't raid" rogues. Actually, the first "progression" raiding I ever did was Raid Finder DS. Most of the time, I tried a raid when it was a couple of patches - or more likely an expansion - behind. Having said that, BiS gear, for me, used to be whatever I could get through Heroic drops as well as token gear. (Now, I've just moved up a step to RF.) So, having the ability to block out gear by source would be an awesome feature for me. Otherwise, I really liked ShadowCraft and would like to continue having it available.

In order to do that, I'm willing to chip in any way I can to help with the development and maintenance of it. While I'm not familiar particularly with MongoDB, Python, or Ruby, I am an intermediate-to-advanced .NET programmer and have a significant amount of experience with databases, especially MSSQL. So, while I may not be able to write the code in the languages chosen, I am fairly good at picking up on and following the logic in a piece of code and believe I may be able to help during debugging and/or feature design and spec. Also, for the most part, relational databases are relational databases, so I'm willing to help in any way I can with the database maintenance and management.

Let me know if I can be of any help to keep this awesome tool alive in Mists. I just pre-ordered my Collector's Edition, so I'm definitely all-in for this expansion.

Share this post


Link to post
Share on other sites

OK, first off I'm gonna start with a quick word of praise, from all the spreadsheets and dps simulators I've used over the years, Shadowcraft gave me the best results VS time spent calculating them. So, keep up the good work!

However, a fairly serious problem I found which I don't think has been mentioned here is how inflexible Shadowcraft was when it faced a brick wall. Classic example: progress Spine Sub spec. Shadowcraft wouldn't accept a sub spec with no serrated blades, so you had to work off the classic sub spec, which (naturally) generated rubbish results.

Share this post


Link to post
Share on other sites

Hi there,

IMHO, Shadowcraft is a magnificent tool as is, and helped me a lot.

It could have been better by:

- Setting a haste cap (I was totally energy capped and it kept stacking haste ^^)

- Suggesting items regarding your current gear, your actual EP values, and various filter (quest only, dungeons only, etc.). Or... having a lootrank link with EP filled in :D

- Having a way to evaluate the DPS loss of maintaining recuperate and/or feint.

So nothing important/critical ^^

Share this post


Link to post
Share on other sites

Not sure a haste cap is all that necessary; even with energy capping, increased attack speed still means more white damage, poison procs, mastery procs, etc--energy regen is only one facet of haste, albeit a decently important one.

Share this post


Link to post
Share on other sites

Being able to manually adjust values for stats would be helpful. Wowreforger is a good tool, but not nearly as efficient as ShadowCraft for swapping gear in and out. Spine comes to mind as a fight that I spent some time using wowreforger instead of ShadowCraft, because the fight required different values for stats than a standard Patchwerk style fight.

As far as ShadowCraft vs a spreadsheet, I prefer a ShadowCraft approach because it's more intuitive. (and cooler looking!)

Thanks for the hard work you all put into this, I'll be happy with whatever you decide to do.

Share this post


Link to post
Share on other sites

I imagine some update on ShadowCraft development is due:

Most of the engine's architecture is updated to support 5.x mechanics. The models for assassination and combat are well advanced, but not yet at a stage where we can start pulling numbers; subtlety modeling has not started yet.

The front end, however, is not updated. Once 5.0.4 hits live, and we get the new talents/glyphs, the web app is unlikely to work properly: I expect it'll be able to use your cached characters, but once you try to update from the armory, it won't be able to undertand the new talent strings from the battlenet api (which, as far as I'm aware, we don't even know how will those look like). Even if it does work, and the (old) engine can make any sense of it, the results will not relate to the live game.

All in all, development is going noticeably slower than it did for 4.0. I'll be posting as we reach any significant milestone.

Share this post


Link to post
Share on other sites

PvP analysis would be a feature I would love to have. Meaning PvP Power and resilience included, players as targets, selectecable buffs/debuffs for players. Analyzing burst sequences for example.

Share this post


Link to post
Share on other sites

I could probably add backend support easily when I get back home, but I would need to know if pvp power and resil is additive or multiplicative. I'm assuming it's multiplicative and stacks with everything, but someone else would need to verify that for me. Implementing in a frontend will be another issue.

This probably won't change EP weights though (though, custom armor values should), and modelling specific PvP scenarios might be a stretch for us, but burst could be useful.

EDIT: This is for me, Antiarc, and whoever else will need to know the API: MoP Changes - Forums - World of Warcraft

calcTalent: "01.01."

Each character in calcTalent string is the talent selection for each row, 0 is when the left most option is chosen. "." is for no talent selected.

calcSpec: "b"

"a" for Assassination, "Z" for Combat, "b" for Subtlety. (For Druids, their 4th tree is "Y", if anyone was curious). It's always those letters, with "a" on the first tree, "Z" on the second, "b" on the third, no matter the class.

calcGlyph: "Vfp"

Each glyph seems to be mapped to a specific character. I see no pattern between capital letters and lowercase ones.

Creates: Talent Calculator - Game Guide - World of Warcraft

{

talents: [ ],

glyphs: {

major: [ ],

minor: [ ]

},

calcTalent: "",

calcSpec: "",

calcGlyph: ""

}

is for a completely empty spec.

More edits!: Here's the map of glyphs... Obviously it's from an outdated cache, but it should be mostly relevant.

Major Glyphs

Z - Ambush

Y - Blade Flurry

I - Blind

S - Cheap Shot

q - Cloak of Shadows

c - Crippling Poison

L - Deadly Momentum

W - Debilitation

d - Evasion

e - Expose Armor

V - Feint

f - Garrote

g - Gouge

r - Kick

X - Recuperate

i - Sap

a - Shadow Walk

j - Shiv

R - Sinister Strike

h - Smoke Bomb

Q - Sprint

o - Stealth

J - Vanish

n - Vendetta

Minor Glyphs

m - Blurred Speed

b - Decoy

U - Detection

K - Disguise

k - Distract

T - Hemorrhage

M - Killing Spree

P - Pick Lock

l - Pick Pocket

N - Poisons

O - Safe Fall

p - Tricks of the Trade

Share this post


Link to post
Share on other sites
I could probably add backend support easily when I get back home, but I would need to know if pvp power and resil is additive or multiplicative. I'm assuming it's multiplicative and stacks with everything, but someone else would need to verify that for me. Implementing in a frontend will be another issue.

This probably won't change EP weights though (though, custom armor values should), and modelling specific PvP scenarios might be a stretch for us, but burst could be useful.

Both resilience and pvp power have diminishing returns in their formula. I can collect data for both values and damage reduction and damage increase. How many values would be necessary to do the math?

What is the best way to verify if they stack additive or multiplicative?

Share this post


Link to post
Share on other sites

Ideally, someone has already figured this out on AJ or something. I want to emphasis that this won't really change the EP weights because they will still be based on sustained DPS, and all PvP power and Resil does is multiply the final damage (all damage) by some number greater than 1, and another by less than 1. %modifiers to total damage don't really change EP weights unless the stats somehow affect their uptime. Without going a few steps further, the only comparison we could really make is comparing PvP Power to a single point of AP.

If the formula isn't out there, then I could probably do it myself. The more data points I have, the easier it is to figure it out (and the more accurate it is too!).

Share this post


Link to post
Share on other sites

Ok, basically you need resilience rating -> damage reduction percentage and pvp power -> damage reduction increase.

One point for pvp power is that it is possible to gem and enchant it, which means it needs an EP weight for PvP analysis. Especially as some comments I read talk about a break point where PvP Power is weaker than primary stats due to diminishing returns. Resilience is less important to implement, as it is simply a damage reduction that would not change cycles or EP weights. Will make an xls-sheet for you and send it as PM.

Edit: Send you the data as PM.

Share this post


Link to post
Share on other sites

I've started preliminary tests with IronPython. So far I can print the racials_by_race data. Next step is to see if it also runs in Mono. If that works, I'll try to build a UI in ASP.NET MVC.

Share this post


Link to post
Share on other sites
Ideally, someone has already figured this out on AJ or something. I want to emphasis that this won't really change the EP weights because they will still be based on sustained DPS, and all PvP power and Resil does is multiply the final damage (all damage) by some number greater than 1, and another by less than 1. %modifiers to total damage don't really change EP weights unless the stats somehow affect their uptime. Without going a few steps further, the only comparison we could really make is comparing PvP Power to a single point of AP.

If the formula isn't out there, then I could probably do it myself. The more data points I have, the easier it is to figure it out (and the more accurate it is too!).

You probably already saw this but there is an article on AJ about PVP Power & Resilience - Mists PvP Power and Resilience Guide - News - Arena Junkies

Share this post


Link to post
Share on other sites

Pathal actually figured it out about the same time as the article with the data I provided him, but that read is really good for anyone interested in the mechanics. I hope you guys integrate PvP Power into the tools. It would help the pvp community a lot.

Share this post


Link to post
Share on other sites

I believe I seen a Github comment somewhere that Aldriana may be working on an Android interface for Shadowcraft. I am starting an IOS implementation and will hopefully have it submitted to the AppStore(free of course) in a reasonable amount of time.

I will be incorporating IAd into it, so if there are any objections from the backend devs please shoot me a private message and we can discuss it.

Share this post


Link to post
Share on other sites

For the record: while I have heard of people working on an Android app for ShadowCraft:

1) I have absolutely nothing to do with it; I haven't made a commit to ShadowCraft in months, and have no immediate plans to do so, and

2) It was at least a year ago and I haven't heard any updates; as I recall it was bogged down to some extent by needing to rewrite the engine in something more Android-friendly than Python.

I will also note that while I can see the value of having a mobile-friendly version of ShadowCraft, its not immediately clear to me that the development effort wouldn't be better spent on a mobile-friendly version of the website rather than an app for each platform. However, as I'm not the one developing, you welcome to create whatever supplementary tools you like (within the confines of the licensing on existing components).

Share this post


Link to post
Share on other sites

Is the shadowcraft website currently broken? Every time I try to use it I get an unrecoverable error message.

Share this post


Link to post
Share on other sites

It's broken for level 90 characters because it hasn't been updated. Load up a level 85 and it works fine.

Share this post


Link to post
Share on other sites

If you're comfortable with python at all you can grab a copy of Shadowcraft-Engine to run for yourself. Just need to set up the scripts properly, and Pathal has a pretty straightforward guide to that in his signature on here.

That said, the inputs to the engine scripts are just raw stat values and a list of procs/enchants, so it is not at all friendly to quickly checking different gear setups. That's the part the UI really helped with.

Share this post


Link to post
Share on other sites

I started coding some quick and dirty character import for use with these command line scripts. It mostly works, but trinkets and weapon enchants are hardcoded now. It is trivial to fix, just I haven't found time to do it yet. It requires wowapi to work. You need to be comfortable with python to use it.

Here it is:

I am not sure what to do with imported attack power yet. Scripts in shadowcraft engine had it set to 250. I assume it is just base value and we don't count AP given by agility there. For now I just subtract 2*agility from imported value.

ps. Feel free to use and change the code. I will try to make it more usable, but I absolutely can't give any time estimate on it.

Share this post


Link to post
Share on other sites

  • Recently Browsing   0 members

    No registered users viewing this page.