Skip to content
Maintankadin

PHP WoW Tanking Simulator

moduspwnens
Sat Aug 09, 2008 9:16 am

PHP WoW Tanking Simulator

PHP WoW Tanking Simulator
Want to host it on your fan or guild website? Download it here:
http://www.wowinterface.com/downloads/info10154-PHPPaladinTankSimulator.html

Intro
This tanking simulator lets you choose a tanking class, and then input:
    Avoidance %
    Passive Block % (Warrior and Paladin only)
    Holy Shield Charges (4, 6, 8, or 10) (Paladin only)
    Holy Shield Duration (8 or 10 seconds) (Paladin only)
    Libram of Repentance Equipped (Paladin only)
    Points in Redoubt (0-5) (Paladin only)
    Shield Block Style: TBC or WotLK (Warrior only)
    Points in Critical Block (0, 1, 2, or 3) (WotLK Warrior only)
    Crushing Blows (On or Off)
    Show Rolls (See the random numbers generated to ensure it is working properly)
    Show Time (Show at what time, in seconds, the mob attacks)
    Mobs
    Average Attack Speed
    Swings per Mob
And with that information, it simulates however many swings you specified.



How It Works
It's fairly simple, really. Any halfway experienced Prot Paladin can tell you how the attack table works. All I really had to do was explain it to the computer.[list]1. It takes the avoidance levels you gave it, then generates a roll table, like this:
    Miss: 0-5.
    Dodge:5.01-15.
    Parry: 15.01-30.
    Block: 30.01-50.
    Hit: 50.01-100.
2. Next, it modifies that roll table with any buffs you have. Holy Shield is automatically cast at the end of each duration (8 or 10 seconds), Shield Block works in a similar way, and Redoubt has its own system.
3. After that, it picks a random number between 1 and 10000, then multiplies it by 0.01 to make it set between 0.01 and 100.
4. It goes down the list, and wherever that random number lies is the outcome that is reached. Using the above roll table, a 17.38 would be a parry, and a 0.85 would be a miss.

For a Paladin -
5. If the result is a miss, dodge, or parry, the hit simulation ends. If it is a block, hit, or crushing blow, a number between 1 and 10 is generated. If the number is 1 (a 10% chance), the simulator says Redoubt has proc'd and sets the variable to modify the attack table for the next five blocks or 10 seconds.

For a Warrior -
5. If the shield block style is TBC, it works almost exactly like Holy Shield with different charges and duration. If it's like WotLK, though, it has no charges. However, it also increases block value by 100%. Since a block during Shield Block blocks for more than one without, another counter keeps track of it. Yet another task is to deal with Critical Blocks. Depending on how many talent points are entered, there is a 0%, 10%, 20%, or 30% chance that a block will be "critical" and count for double. So two more counters are added, one being for a critical passive block, and another being for a critical block during Shield Block. All the stats are reported at the end.

For a Druid or Death Knight -
5. Irrelevant stats are automatically entered as zeroes (neither can block, Druids can't parry), and that's about it. Druids don't have any avoidance or block-related tools like Holy Shield or Shield Block, and I don't know enough about Death Knights to add in theirs (if any exist).

And it's about as simple as that! It actually does a little more in respect to time (it keeps track, and removes buffs as they expire). It also keeps a running total of the outcomes, and returns them at the end (and their percentages of the total).


Why Use It
Using this, you can find out how much effective block % Holy Shield and Redoubt are worth in different instances of mobs, avoidance, and passive block. As a warrior, you can find out how many blocks either style of Shield Block is worth in different situations, and how many blocks can be expected to be "critical." The original idea was to find out how effective Redoubt is at Sunwell avoidance levels versus a single mob, but feeling diligent, I went ahead and made it work for as many mobs as you'd like, at any average attack speed. Some questions this simulator can answer:
    How much effective % block is Redoubt worth when not at 100% avoidance and block versus single mobs?
    How much effective % block is Holy Shield worth when AoE tanking 15 Ghouls in Hyjal?
    At what levels of avoidance, block, and number of mobs is Redoubt most effective?
    The WotLK style of a Warrior's Shield Block has no charges. How does that affect his mitigation?
...and any other questions you can think of. The simulator doesn't involve block value or swing damage for simplicity's sake, but obviously with the effective block %, this can be calculated rather easily.

Also, now in Version 1.3, a link is provided after each simulation that can be given to others to repeat it.
Version 1.5 added the capability of simulating with classes other than just Paladins, as well as some nice scriptaculous and images to make it look a little more professional.



Comments
It has a total swing limit of 5000 to make sure nothing crazy happens. I haven't yet done all the data validation, so if you type in something silly (like 100% miss, 1% dodge, 1% parry, and 1% block), it will still simulate it right, but the printed roll table might look a little weird (or try to divide by zero, etc.). I'll get to this in a future update. The source code will hopefully be available on WoWInterface soon.

If you want to see the rolls, check the "See Rolls" box before simulating, and it will show you every random number generated throughout the simulation, as well as the charges remaining on Holy Shield and Redoubt until they expire on each block. Using this, you can easily find any bugs (hopefully none) or odd happenings.

FAQ
Q: I can only simulate 5000 total swings at a time. Why?
A: PHP is a server-side language, so simulating a ton of swings would bog down my server. It's my personal website and I don't purchase additional bandwidth, so I don't want my bandwidth eaten too quickly (or my PHP server bugged). There is a way to disable the limit, though, PM me if you really want to do so.

Q: I saw something odd happen in the simulator. What should I do?
A: If it's not because you put something weird in the simulator (negative values, letters, etc.), post it up here and I'll take a look into it.
_________________
PLEASE HELP ME TEST THIS: PHP WoW Tanking Simulator
moduspwnens
Sat Aug 09, 2008 9:17 am
Offer your thoughts and feedback below. :)

One thing I'm looking into adding is a way of "bookmarking" situations. For example, you'd be able to link to:

index.php?miss_chance=5&dodge_chance=10&parry_chance=15&block_chance=20

to share what you've been trying with others that allows them to just click and see a new simulation without typing in all the values. This would also allow for a link to, say, average T4-geared tank, average T5-geared tank, etc. It wouldn't be too tough to do, if there's interest, I'll do it.
_________________
PLEASE HELP ME TEST THIS: PHP WoW Tanking Simulator
mikesoup
Sat Aug 09, 2008 10:13 am
holy shield not recasting at 1.5second attack speed?

mikesoup
Sat Aug 09, 2008 10:21 am
i was quite suprised when i saw:

_Chloe
Mon Aug 11, 2008 1:34 am
Under all the headers, ie Attack Table, Roll Table, miss needs to be on a new line. Also add a damage range per mob, able to be crit etc.
_________________


"We're not in Tempest Keep anymore..."
Tsurupettan
_Chloe
Mon Aug 11, 2008 5:55 pm
Drop <br /> after the closing legend bracket and should fix it for FF. Also grab the web developer plug-in.
_________________


"We're not in Tempest Keep anymore..."
Tsurupettan