![]() |
|
#1
|
|||
|
![]() 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?
| ||
|
#2
|
|||
|
![]() Wouldn't it be possible to just look at the eqemu source to see how the calculation is done?
| ||
|
#3
|
||||
|
![]() Quote:
| |||
|
#4
|
|||
|
![]() You know how you know someone is an engineer?
They'll tell you!
__________________
Realtime auction logger: http://ahungry.com/eqauctions/
| ||
|
#5
|
|||
|
![]() 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; } | ||
|
#6
|
||||
|
![]() Quote:
__________________
[52 Disciple] Downgrade (Human) <Azure Guard>
[31 Druid] Edarg (Halfling) | |||
|
#7
|
|||
|
![]() 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.
| ||
|
#8
|
|||
|
![]() Ok, so if I read this code right, then your percentage of landing blows is between 65% to 75% if you are >= target level.
And between 50% to 75% if your < target level. So the most you will ever hit a mob is 75% no matter what you do, and this is only based on level (and skill level which is based on level). | ||
|
#9
|
|||
|
![]() Don't want to post all the code, but if you want to look...
https://github.com/EQEmu/Server/blob...one/attack.cpp | ||
|
#10
|
||||
|
![]() Quote:
You are thinking of ATK as just one thing. There are two components to ATK (chance to hit and how hard I hit), just as there are two components to AC. The two values combined is your displayed ATK, just as the two combined AC components equal your displayed AC value. | |||
|
![]() |
|
|