thegroxempire / tbc_dps_warrior_sim Goto Github PK
View Code? Open in Web Editor NEWThis project forked from albinoyoda/albinoyoda.github.io
Fury warrior C++ based WoW Classic simulator ported into TBC Classic.
This project forked from albinoyoda/albinoyoda.github.io
Fury warrior C++ based WoW Classic simulator ported into TBC Classic.
Can update this sword [Quickening Blade of the Prince] from Phase 5 for kebab warriors?
Dodges and parries on white hits generate rage exactly as if they were regular hits (same "rage range"). The sim is using a 75% multiplier.
Hello I'm currently sim between 1h Swards and 1h Axe DW Arms specc.
Unfortunate it seems the tool doesn't consider the 5% Crit if I'm selecting poleaxe specialization.
I have an increase of ~20DPS Switching from 2x Spiteblade to The Decapitator + Gladiators Cleaver. (considering as well the switch from sword to axe specialization)
Wondering if it's correct or just an displayed error ?
Thank you for checking.
The flurry_haste_factor_
is calculated as (config.talents.flurry > 0) ? 0.05 + 0.05 * config.talents.flurry : 0.0;
; it should just be 0.05 * config.talents.flurry
.
Number of Missing enchants on the simulator currently
+15 STR to gloves
+10 hit rating to boots
Mongoose on offhand
Cats Swiftness (+6agi/Minor speed) to boots
Will update as I find more
The Unbreakable Will from Hyjal is missing from the one handed swords category.
Link to the item: https://tbc.wowhead.com/item=30874/the-unbreakable-will
Didn't get much time tonight to test PPM for these two weapons (30 min of only auto-attacks) but both appear to be lower than 1 PPM. Although it shouldn't matter much with new content around the corner.
KC test one 14/ 717 (not logged)
Despair test one 11/336 (not logged)
KC test two 18/605 (log attached)
Despair test two 13/559 (log attached)
prelim KC PPM = 32/1322 = 2.4% per swing
prelim despair PPM = 24/895 = 2.7% per swing
Despair.txt
KhoriumChampion.txt
Namely, Blessing of Might (220 AP -> 264 AP) and Gift of the Wild (14 Agi/Str -> 18.9 Agi/Str) are using talented values, while Battle Shout (306 AP -> 382.5 AP) and all Shaman totems (WF 445 AP -> 578.5 AP; 86 Str -> 98.9 Str; 77 Agi -> 88.55 Agi) are using untalented values.
Looks like Trousers of the Scryers' Retainer is not part of the item list for the sim yet
swing_weapon()
is used for regular weapon swings and for extra attacks from Windfury and other weapon procs.
Among other things, it may convert white attacks into HS/Cleave, then re-queue them if sufficient rage is available. Afterwards, it handles the various "hit effects", and if any of them grant extra attacks, those are converted into HS/Cleave, again. This is generally impossible to do in-game.
Hi.
Please add dagger (Blade of the Unrequited) https://tbc.wowhead.com/item=28572/blade-of-the-unrequited to weapon list.
Thanks.
Hello, Developers
It has been while and website is still on old standard talents and had me to check other resourves website to provide my needs and it is hard to locate one with the princeples as your website has.
TManythanks,
happens when it's not my initial load
when I load my dual wield config, it works when I load the file initially after first visiting the website or reloading the website etc
however when I change it to two hand and run simulations and then load the file, it will change everything but the dual wield - two hand setting
It's calculated as (base_miss_chance * 0.8 + 20.0)
instead of (base_miss_chance + 19.0)
.
Any chance you can add an option that prevents WW or MS being used within 1.5 seconds of your next auto attack. Sometimes the Sim will use WW or MS as soon as it comes off cooldown just before your next AA, and it clips what would have been the next Slam cast.
In Combat_simulator.cpp, lines 1137-1176, unless in "compute_dpr" mode for cleave or heroic strike, rage_generation()
is called irrespective of hit_result, so misses and dodges add rage for a 0-damage hit (3.5 * swing_speed / 2
or 1.75 * swing_speed / 2
).
These items are still included in the item suggestions for offhands, but are main hand only similar to BS weapons and The Decapitator.
https://tbc.wowhead.com/item=28584/big-bad-wolfs-paw
https://tbc.wowhead.com/item=29348/the-bladefist
rage_generation()
is using the same "hit_factor" for hits and crits (3.5 for MH / 1.75 for OH). It should use 7 for MH / 3.5 for OH on crits.
Sword spec extra attacks are using sword_spec_hit()
instead of weapon_swing()
to model their extra attack, which basically omits Heroic Strike/Cleave handling. In-game, such extra attacks can be converted into Heroic Strike/Cleave, see magey/tbc-warrior#5.
glancing penalty is calculated as glancing_penalty = 25.0 - (15.0 - level_difference * 5)
vs. 73/72/71 mobs, resulting in 25/20/15%. it's actually 25/15/5%.
Hello,
is it possible to add The Decapitator as an option for the off-hand.
The weapon was changed from main hand to one hand in the Zul Aman patch.
Thank you !
The quick select option should be updated to include P2 gear:
https://tbc.wowhead.com/guides/arms-warrior-dps-tk-ssc-phase-2-best-in-slot-gear-burning-crusade
Is there no way to force bloodlust to be cast at the start of the fight instead of the end or am I missing the option? I see the option for extra bloodlusts being cast at the start, but I don't want to add extra bloodlusts, only 1 bloodlust for the whole fight.
The swing timer is only updated in swing_weapon() (Combat_simulator.cpp:1087), so Flurry gains are only applied on the next MH or OH swing, effectively hasting first one, then the other. If Flurry fades, the haste loss is handled in the same way.
In game, both gaining or losing Flurry immediately updates the swing timers for both weapons, e.g. for a 2.6 speed MH, if WW procs Flurry exactly mid-swing, the next MH hit is 1.3 + 1.3 / 125% = 2.34 seconds after the first. If Flurry faded 0.8 seconds after a swing, the next MH hit would be 0.8 + (2.6 / 125% - 0.8) * 125% = 2.4 seconds later.
There's quite a bit of complexity to support the DPR mode for all abilities, and I believe the resulting DPR values aren't any more meaningful than those calculated by simpler methods:
a) statistical calculation, essentially average damage / average rage cost. For HS, Cleave, and Slam, this typically includes the hidden rage and damage costs of lost MH swing time, and the rage and damage gains from a queued OH swing. Execute also needs additional averaging. Most procs or external buffs are ignored.
b) sim with auto attacks only, and calculate damage (d0), rage gained (rg0), and rage spent (rs0); then, to find a "second order" DPR value for an ability, sim again with only auto attacks and that ability enabled, calculating damage (d), rage gained (rg), and rage spent (rs). DPR value is (d - d0) / ((rg - rs) - (rg0 - rs0)). It includes all procs or external buffs, e.g. higher Flurry uptime, extra attacks, Deep Wound damage.
I'm actually leaning towards a), since that's already enough to establish ability priorities, which is - as far as I know - the primary use of the DPR metric. Having those values upfront might also - one day ;) - allow to cut down the rotation configuration.
Can I manually add more?
If the "Suggest Armor Upgrades" feature is running, and the loop in Armory.cpp::item_upgrades
ever switches away from Braided Eternium Chain, all subsequent Neck slot items it hits will have their DPS overestimated, because the Braided Eternium Chain buff will stay active even with different Neck slot items.
This is because we are automatically adding the braided_eternium_chain buff as a convenience factor here:
if (character.has_item("braided_eternium_chain") && !character.has_buff(buffs.braided_eternium_chain))
{
character.add_buff(buffs.braided_eternium_chain);
}
but never removing the buff if that condition becomes false on an item switch. I'm not sure exactly how to fix this because new code that removes the buff on an item switch needs to only do so if the manual "Braided Eternium Change" checkbox in settings isn't checked. I didn't see a way for the Armory.cpp code to access that.
For normal operation this doesn't happen when a different neck is selected, because Braided Eternium Chain is typically removed ahead of time by the optimizer. It will happen if Braided Eternium Chain is itself selected.
For the gear set used to produce this, Natasha's Choker is actually ~8dps less than Braided Eternium Chain, but shows as ~3dps more in the Suggestions tool.
I wanted to look which weapon is strongest for my fury warrior and noticed that "The Decapitator" from Prince Malchezzar in Karazhan seems to be missing.
I'd propose something along
interface Buff {
ApplyOrRefresh(duration, simTime, simState)
MaybeRemove(simTime, simState)
}
interface Proc {
OnHit(hitState, simTime, simState)
}
with the various supported procs and buffs/debuffs being simple script-like implementations. This allows to remove a ton of global or near global ("manager") state, keeps the various "swing()"-like methods clean, and removes the runtime overhead of perpetually checking for non-existing procs or buffs.
I've noticed through sim logs that the base arpen mitigation factor is:
Target armor: 3690. Mitigation factor: 25.899%.
This is 7700 armor - sunder - faerie fire - curse of reck
Following the established formula of DR% = Armor / (Armor - 22167.5 + 467.5 * MobLevel) we should see that the mitigation at 3690 armor isn't 25.89% but 23.57%
When adding 700 arpen worth of items we get:
Target armor: 2990. Mitigation factor: 22.070%.
This should be 20.0% instead.
Looking at source code like the formula the sim is using is
return 10557.5 / (10557.5 + target_armor)
But it should be using
return 1 - (target_armor/ (target_armor- 22167.5 + 467.5 * target_level))
My brain isn't big enough to say whether or not this is affecting the accelerating returns on arpen instead of diminishing, but even the baseline value being off means that arpen as a whole is being undervalued on the sim.
Current Helmet: warbringer_battle-helm
Upgrade: coif_of_alleria ( +39 ± 2.1 DPS).
Upgrade: cursed_vision_of_sargeras ( +45 ± 2.1 DPS).
Upgrade: mayhem_projection_goggles ( +47 ± 2.1 DPS).
Upgrade: surestrike_goggles_v3.0 ( +43 ± 2.1 DPS).
Upgrade: helm_of_the_illidari_shatterer ( +34 ± 2.1 DPS).
Current Neck: adamantite_chain_of_the_unbroken
Upgrade: choker_of_endless_nightmare ( +26 ± 2.1 DPS).
Upgrade: pendant_of_the_perilous ( +6.9 ± 1.9 DPS).
Upgrade: shattered_sun_pendant_of_might_aldor ( +9.8 ± 2.1 DPS).
Upgrade: shattered_sun_pendant_of_might_scryer ( +5.8 ± 2.1 DPS).
Other slots appear to be phase 1 appropriate
Hello,
I was simming some different weapon types and got results inconsistent with my hypothesis. So I started looking into your source code. I failed to find where you calculate attack power normalization given weapon type.
Are you doing that, if so how?
Ty for your tool.
armor_mitigation() is called using the target's level (e.g. 73), not the attacker's level (70).
The sim calculates it as (2 + crit_damage_bonus) * (1 + bonus_crit_multiplier)
, where e.g. crit_damage_bonus is 20% for 2/2 Impale, and bonus_crit_multiplier is 3% for RED.
It's actually (and weirdly) calculated as '1 + (1 + crit_damage_bonus) * (2 * (1 + bonus_crit_multiplier) - 1)`. For warriors, the difference is rather miniscule (e.g. 2.266 vs. 2.272), for casters with 100% crit_damage_bonus, it's 2.06 vs 2.09.
Dragonstrike and precursors are selectable, please add the Axesmith variants
Issue #35 still persists exactly as described - flurry haste is still only recalculated in swing_weapon()
, at end of swing, for each weapon individually. It should be recalculated mid-swing, for both weapons at once.
In a similar vein, calculating flurry uptime via mh_hits_w_flurry
and oh_hits_w_flurry
doesn't make much sense, since swings may be partially hasted.
World Breaker sims far better than it probably should, it seems that it is modeled as a stat boost with 4 seconds duration and 1 charge, however I could not find anywhere where we remove charges for this buff like we do for windfury_attack, so instead of it applying only to the next attack it applies to all attacks made in the 4 second period.
Tooltip: "Chance on hit: Increases the critical strike rating of your next attack made within 4 seconds by 900."
Ran into bug after sim not wanting to run a 2h arms bug was persisting. Clearing cookies somehow made it run with a 2h, tested with bare hands (ran), dual wield (ran), and a non proc effect 2h (failed to run).
Ran sims with config files with various different trinkets in either trinket slot, each ran outside of when badge of the swarmguard was in either trinket slot, also tested badge with both on use trinkets and static stat trinkets.
Ran on chrome browser on a pc.
Hey,
I would like to know if it's worth to enchant Direbrew's Shanker with Mungo.
Can you please add this item into the Sim?:
https://tbc.wowhead.com/item=37597/direbrews-shanker
Best regards and keep up the great work. :-)
Was hoping Chain of Unleashed Rage could be added so the no 100 Deaths gang can see whether it's an upgrade on Red Belt of Battle.
This is most obvious when comparing two items that have nearly identical stats without including gems, such as Vengeance Wrap (https://tbc.wowhead.com/item=24259/vengeance-wrap) and Cloak of the Pit Stalker (https://tbc.wowhead.com/item=28777/cloak-of-the-pit-stalker)
Current Back: vengeance_wrap
Upgrade: black_iron_battlecloak ( +11 ± 2.1 DPS).
Upgrade: cloak_of_the_pit_stalker ( +3.4 ± 1.5 DPS).
With the addition of T6/S3 weapons the results view is starting to get less relevant for players that are still in the prebis, t4 and even (to some extent) T5.
If I am running Karazhan on an alt and want to know what rings to get I am fed with results from late T5 or T6 which may not be relevant for this character. As such, adding a phase property to items and a checkbox in the interface would present more relevant results for those users.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.