![]() |
|
#1
|
|||
|
![]() (I did a search and could not find anything, so please don't yell at me).
I'm trying to understand the exact implications of strength and attack on my damage (sorry, I'm an engineer, I need transparency). I was looking at Yaolin's monk/warrior weapon dps charts. He mentions that: "DMG ratio" = (dmg*2+Bonus)/delay & "Max Hit" =(((OFFENSE+STR)/100)*DMG)+DMG BONUS And I'm good with all that, it makes sense. Every 10 strength or 10 "offense" increases your max hit by one point of damage. But what I can't find is how attack rating impacts how often you hit in the higher end of your range. Obviously, more weapon skill and strength = more attack rating which means you will hit for your max (or near your max) more often. I understand it also depends on monster AC. Does anyone have the formula for calculating effective DPS, taking into account attack rating? Please don't tell me to parse it, I've already looked at several parses. I'm interested in a formula. I like being able to calculate the exact dps increase I will get from buying a hero bracer, because I'm a nerd and it's fun to me. Thanks. | ||
|
#2
|
|||
|
![]() STR is not ATK.
Dont confuse them. | ||
|
#3
|
|||
|
![]() It would seem as if OP is doing an extraordinary job of *not* confusing them. Would you happen to know the answer to his question?
| ||
|
#4
|
|||
|
![]() Wouldn't it be possible to just look at the eqemu source to see how the calculation is done?
| ||
|
#5
|
||||
|
![]() Quote:
| |||
|
#6
|
|||
|
![]() You know how you know someone is an engineer?
They'll tell you!
__________________
Realtime auction logger: http://ahungry.com/eqauctions/
| ||
|
#7
|
|||
|
![]() Code:
//o-------------------------------------------------------------- //| GetHitChance; Yeahlight, Nov 24, 2008 //o-------------------------------------------------------------- //| Returns the chance to hit between attacker and defender //o-------------------------------------------------------------- int16 Mob::GetHitChance(Mob* attacker, Mob* defender, int skill_num) { bool debugFlag = true; //Yeahlight: If the target is sitting, the chance to hit them is 100% if(defender->GetAppearance() == SittingAppearance) return 999; sint16 ATKadjustment = (attacker->GetLevel() - defender->GetLevel()) * 3; sint16 hitRateAdjustment = (attacker->GetLevel() - defender->GetLevel()); int16 hitChance = 70; int16 weaponSkill = 0; if(ATKadjustment < 0) ATKadjustment = 0; if(attacker->IsClient()) weaponSkill = attacker->CastToClient()->GetSkill(skill_num); else weaponSkill = attacker->GetSkill(skill_num); int16 accuracyATK = (int)((float)weaponSkill * 2.70f) + 5 + ATKadjustment; if(accuracyATK == 0) accuracyATK = 1; int16 avoidanceAC = defender->GetAvoidanceAC(); //Yeahlight: 5% bonus evasion for defensive monks if(defender->GetClass() == MONK || defender->GetClass() == MONKGM) hitChance = hitChance - 5; //Yeahlight: 5% bonus accuracy for offensive rogues if(attacker->GetClass() == ROGUE || attacker->GetClass() == ROGUEGM) hitChance = hitChance + 5; //Yeahlight: As the attacker falls further under the level of the defender, it becomes harder to land a hit // Note: This will become a major tweak for class balancing! We must keep this on par with spell casting level penalties if(hitRateAdjustment < 0) { hitRateAdjustment = abs(hitRateAdjustment); if(hitRateAdjustment > 15) hitRateAdjustment = 15; float tempAdjustment = (float)hitRateAdjustment * 2.00f / 3.00f; hitRateAdjustment = (int)tempAdjustment; hitChance = hitChance - hitRateAdjustment; } //Yeahlight: Adjust hit rate based on the gap between accuracy and avoidance AC sint16 gapPercent = (sint16)(((float)(accuracyATK - avoidanceAC) / (float)(accuracyATK)) * 100.00f); sint16 gapAdjustment = ((float)gapPercent / 5.00f); if(gapAdjustment > 5) gapAdjustment = 5; else if(gapAdjustment < -5) gapAdjustment = -5; hitChance = hitChance + gapAdjustment; //Yeahlight: Debug messages if(debugFlag && defender->IsClient() && defender->CastToClient()->GetDebugMe()) defender->Message(LIGHTEN_BLUE, "Debug: %s's ATK accuracy: %i; Your AC evasion: %i; Hit rate: %i%s", attacker->GetName(), accuracyATK, avoidanceAC, hitChance, "%"); if(debugFlag && attacker->IsClient() && attacker->CastToClient()->GetDebugMe()) attacker->Message(LIGHTEN_BLUE, "Debug: Your ATK accuracy: %i; %s's AC evasion: %i; Hit rate: %i%s", accuracyATK, defender->GetName(), avoidanceAC, hitChance, "%"); CAST_CLIENT_DEBUG_PTR(attacker)->Log(CP_ATTACK, "Mob::GetHitChance: Your hit chance: %f", hitChance); CAST_CLIENT_DEBUG_PTR(defender)->Log(CP_ATTACK, "Mob::GetHitChance: %s's hit chance: %f", attacker->GetName(), hitChance); return hitChance; } | ||
|
#8
|
||||
|
![]() Quote:
__________________
[52 Disciple] Downgrade (Human) <Azure Guard>
[31 Druid] Edarg (Halfling) | |||
|
#9
|
|||
|
![]() Interesting code snippet. However, that doesn't tell us how ATK functions(in the eq sense uses it). The code you posted looks to be for hit rate %, which ATK doesn't affect.
| ||
|
#10
|
|||
|
![]() I believe here...
https://code.google.com/p/projecteqemu/source/browse/ I am going to dig around and see if I can find the calc. | ||
|
![]() |
|
|