So I tried it out and it looks cool. I know its not finished at all but I have a few comments.
- It used up most of my game's memory (my computer is pretty beef) how would this affect a user whos comp isnt so great?
- Name/Organize the Buffs. Battleshout/BOM etc.
- Take out the talents that don't modify DPS like Piercing Howl (something extra have to read through)
- Issue of trust. Can't see the code? Basically we have to have complete faith in DR Allcom's knowlege and programming skills.
Things I didn't see or aren't done
- No way to see stat weights
- Was not able to gem
- Race/racials
- I'm sure many more
I'm sure it can be a great in-game tool once its finished and complete but until then its just kind of meh. Going to take a lot more work. And even then, how do we know that the numbers are right? It just kind of spits a final DPS number at you.
Supposedly the unused Wounds are stuck into the new wounds 6 second duration.
So if you had 400 damage left from your old wounds, the new wounds would tick for normal damage +400/6 per tick
From a programmatical sense however, no DPS is lost from overlapping a DW, so you don't need to worry about it.
So basically every Crit produces it's own DW effect and they just didn't want ten debuff slots per warrior?
Originally Posted by landsoul
- It used up most of my game's memory (my computer is pretty beef) how would this affect a user whos comp isnt so great?
- Name/Organize the Buffs. Battleshout/BOM etc.
- Take out the talents that don't modify DPS like Piercing Howl (something extra have to read through)
- Issue of trust. Can't see the code? Basically we have to have complete faith in DR Allcom's knowlege and programming skills.
Things I didn't see or aren't done
- No way to see stat weights
- Was not able to gem
- Race/racials
- I'm sure many more
I'm sure it can be a great in-game tool once its finished and complete but until then its just kind of meh. Going to take a lot more work. And even then, how do we know that the numbers are right? It just kind of spits a final DPS number at you.
- Do you mean CPU time? I'd be really surprised if I managed to fill several gb of memory :P. It's bound to your FPS, so it will be choppy for everyone. I need about 10s for a useful result.
- I don't think I'm going to name them, but I'll write the effect next to them.
- Maybe I'll grey out the not implemented talents, but the tree stays like it is.
- The important code is in doc_warrior.lua. Lua is a very easy to read language and I even commented everything. Do you see the Excel sheet in the folder? I'm planning to put everything I assume in there (for now it's my old 2.4x one). Just believing in me also works!
- Stat weights aren't possible with a simulator (well, they are, but it would take hours). Do you really have to know them? It's a purely theoretical value, doesn't have much use.
- Greyed out stuff isn't in yet. Enchants/Gems/Races are mostly done. I want to do the main DPS skills first. Slam(-proc), Deep Wounds, Overpower, Rend.
Does anyone have wishes/ideas on how the statistics of the fight should be? You can go as crazy as you like, but I'd also like to hear about the simple things .
You have to know them for gems. Do you want to run the simulator 100+ different times to figure out what gem setup is best with guess and check? No, I want to know what is best the by at least the 5th time. But you said this was not possible in a sim. Just remind me again, are you running this timestamp/event based or purely frame by frame?
if hit=="mh_hit" then
r = 3.75*dmg/274.7+3.5*stats.mainHandSpeed/2
elseif hit=="mh_crit" then
r = 3.75*dmg/274.7+7*stats.mainHandSpeed/2
elseif hit=="oh_hit" then
r = 3.75*dmg/274.7+1.75*stats.offHandSpeed/2
elseif hit=="oh_crit" then
r = 3.75*dmg/274.7+3.5*stats.offHandSpeed/2
this is true for level 70. Where is > 70? Did they keep c @ 274.7 at and after 70?
-- Sword spec
if not extraAttack and random()<=0.05 then
should be 0.05 based if the player selects 5/5 sword spec.
-- What to do when the Global Cooldown is ready?
local function gcd()
warrior.gcd = 0
if not list.bt.timestamp then
bt()
elseif not list.ww.timestamp then
ww()
else
list.gcd.timestamp = nil
end
How are you determining BT or WW prioritization? I didn't see a comparison algorithm. You need to do this as WW is stronger for TG and 2/2 imp WW, might also be for non-TG to proc Deep wounds and higher damage in general.
stats.baseMiss = 0.29
0.28???
Buffs:
Might have forgotten stuff like imp moonkin aura (speed), heart of the crusader (crit), etc. There's a raid stacking post on EJ that's very informative and you can check on stuff there.
baseDodge = 0.05,
Correct 6.2-6.25 for bosses @70. Not certain for 80.
Your methodology of calling functions and programming style is very clean and pretty easy to read. Does doc_warrior call to any other files that I may read?
- Yeah it slowed down my FPS to about 4 fps.
- You have to know them for gems.
- Just remind me again, are you running this timestamp/event based or purely frame by frame?
- Where is > 70? Did they keep c @ 274.7 at and after 70?
- Sword spec
- What to do when the Global Cooldown is ready?
- stats.baseMiss = 0.29, baseDodge = 0.05
- Buffs etc.
- Does doc_warrior call to any other files that I may read?
- I had to more or less hack a way into it, so I can update the screen. Normally WoW would just lock up for that time .
- You just pick a gem and have to see for yourself. There are only like three real choices anyway, AP, Crit or Hit.
- Event based. Frame by frame would be a million times slower.
- Some things are not converted to 80 at the moment. Rage conversion would be ~320.
- Most talents are counted as fully specced at the moment. 4/5 Sword spec is kinda rare .
- Right now it just does whatever is possible in the given order, very basic. I don't know, if I let the user choose their preferences or just force a rotation for them.
- That's why I plan to include a document in real english .
- I took the buff list from blizz. Those you mentioned are in.
- The matching _data, but you've figured that out already . The rest has nothing to do with theorycrafting.
dr_AllCOM3, just wanted to let you know that the addon is looking really nice and the modeling seem to be correct from what I can see, looking forward to trying it. I'm not in Beta so I can't really give you any proper feedback yet. Will the addon work at all at lvl 70 (after patch)?
I was working on warrior DPS simulator for some time and finally decided it is in a shape that can be shown to others.
On this page you can find two links - one which leads to zip file with sources and second that leads to DPSSim.jar file. DPSSim is written in Java, hence jar file. If you have Java installed on your computer it should be enough to double click DPSSim.jar file after download to launch it.
Some info:
- main purpose for DPSSim was to allow check/comparision of different rotations and talents while maintaining easy to understand, debug and expand structure
- it is not optimized for speed
- it shows simulation with actual swings/abilities use/procs etc, so one can quickly check if calculations/implementation are correct
- it is standalone program, does not need WoW launched to run
- currently all values (ie. abilities damage) are set for level 70
Known issues:
- if you want to see all simulated events in program window better keep fight length not too big, as you can run out of memory. For really long fight you can save whole simulation to file.
- still some things I would like to implement in the future, Glyphs for example
- I was interested mainly in Arms warrior, so that part is most thoroughly tested - means you can expect some bugs in dualwield/fury rotations
- not quite sure if I've managed to simulate enchant procs good enough
- some parts of code are ugly :-(
Below you can find some screenshots.
Any feedback, new features proposals, bug reports etc are welcomed.
Show simulation has to be disabled at default or it will lock up.
Yeah, as mentioned in known issues it is because of how many events are shown/added in program window. For longer fights 'show simulation' should be turned off and writing to file enabled instead.
Nonetheless I've chenged default fight length to 3000s :-).
Predefined cycles are a nice idea, I'll take that one . You should define yours better.
What do you mean by "define better"? I understand you mean some more information about what takes priority and when? If yes, then yeah, I was thinking about something like this but it is still pretty low on my priority list.
I would just like to add that I'm working on a simulation as well. I already made a post in the [Warrior] WotLK talent Preview/Discussion that you can see here (because I was horrible and didn't notice this thread). I have a few things to my other post.
I don't think the code is complete enough to release yet, but I'd like to give some information just to give some basic idea of what I'm thinking of.
I'm using a very simple event-based implementation that is a loop that increments time by a global cool-down with a hefty set of if-then-else blocks in the loop. The code is very, very brute force in terms of writing. The worst part of this implementation is the weapon swing times that are obviously not on the global cool-down, and I've yet to find a precise way to account for swings.
After reading this thread I've seen a lot of people have made very similar simulations using more elegant coding and much smarter solutions for accounting for various events (especially those outside global cooldowns like ticks, procs, and swings). Mine seems to be a very simple, and probably erroneous, approach to simulating DPS but nevertheless runs at a decent speed. If I can get this version of a simulation working I'll post it as soon as I can with hopes of advice.
EDIT: Reread the thread (as per advice below), I'm very aware of the excellent simulators made and being made(that all look like they will work much better than mine will). I still want to try an event-based simulator for speed and laziness on my part. I've edited my post to make it more in line with this thread. Again, this is just throwing in my two-cents; I'm not trying to trump anyone else and am certainly not trying to ignore any of the excellent ideas that are out there. If I come off as presumptuous or naive then I apologize.
I would just like to add that I'm working on a simulation as well. I already made a post in the [Warrior] WotLK talent Preview/Discussion that you can see here (because I was horrible and didn't notice this thread). I have a few things to my other post.
I don't think the code is complete enough to release yet, but I'd like to give some information to see if anyone can provide some insight into some of the ideas and problems of the code.
I'm using a loop that increments by 1.5 (representing 1.5 seconds for the global cooldown). For each pass of the loop a long, long set of if-then-else statements are made to determine what ability is used at that point (if no ability is able to be used a counter makes note of that).
For weapon swings I'm slightly stumped. I'm currently just adding a swing in at the beginning of each pass if enough time has passed to do so. This leads to some problems. What if the warrior is rage-starved at the beginning of a global cool-down but gains rage from swing half a second later? The program as it stands will make the warrior wait 1.5 seconds instead to use the ability. This obviously leads to lower DPS than is possible for a warrior to output.
I've currently written the code for Titan's Grip spec at 70 (spefically this). Once I make the simulation accurately account for weapon swings I'll post the code.
No offense, but how about reading this thread, rethink what you've posted and then post again? Many of those things have already been talked about with promising results.
Doc's PvE Simulator : WoWInterface Downloads : WotLK Beta
Big update. Short: Usable now.
Long: All skill are included. Cycle is chosen automatically (offhand->Fury else Arms).
Code is easily readable, doc_warrior.lua is the interesting file. I'm not entirely sure about rend() and deepWounds(). The other skills should be fine. get_stats() is where the stats are calculated, a refuge for errors.
I'm currently at work and can't test this right now (I will be as soon as I can get back to WoW), but going off of your "Buffs" screenshot but I would recommend that you name the buffs with their actual name instead of their effect. Or perhaps some sort of hybrid naming. For example " [ ] Imp. Berzerker Stance (10% AP) " You have a lot of realestate on that screen, so you can be more descriptive and help people realize where one 5% Crit comes from verses the 10% Crit right below it.
Also does the Talent screen (shown on the last page) preselect some of these buffs for you or are these buffs and buffs only? The abiguity of 5% melee crit is throwing me off being that it could be LotP or Rampage. And I'm not sure what else would give a 10% AP bonus asside from Imp. Berzerker Stance, so if its passive, force it on if needed.
WoWInterface seems to be damn busy at the moment, I blame 3.0 .
Get it here for now, it's even a newer version: RapidShare: Easy Filehosting
As mentioned: All skill are included. Cycle is chosen automatically (offhand->Fury else Arms).
Code is easily readable, doc_warrior.lua is the interesting file. I'm not entirely sure about rend() and deepWounds(). The other skills should be fine. get_stats() is where the stats are calculated, a refuge for errors.