View Single Post
  #27  
Old 11-06-2024, 10:31 PM
Jafir Jafir is offline
Orc


Join Date: Jan 2013
Posts: 41
Default

Classic/Kunark/Velious Agility gave both Avoidance and Mitigation AC. Whether or not the formula on P99 adheres to that, I do not know. Here is a reference to mid-Velious, which still had a hard cap on Mitigation AC:

defense_agility_bonus method
Code:
if GetAGI() < 40: # penalty
  return (25 * (GetAGI() - 40)) / 40

if GetAGI() <= 60:
  return 0

if GetAGI() <= 74:
  bonus = 28 - (200 - GetAGI()) / 5
  return 2 * bonus / 3

# so 75+
bonus = max(200 - GetAGI(), 0)
if GetLevel() >= 40:
  bonus = 80 - bonus / 5
elif GetLevel() >= 20:
  bonus = 70 - bonus / 5
elif GetLevel() >= 7:
  bonus = 55 - bonus / 5
else:
  bonus = 35 - bonus / 5
return 2 * bonus / 3
compute_defense method
Code:
skill = max(GetSkill(SkillDefense), 0)
bonus = 400 * skill / 225 + defense_agility_bonus()

if IsClient():
  drunk = float(GetIntoxication() / 2)
  if drunk > 20.0:
    redux = min((110.0 - drunk) * 0.01, 1.0)
    bonus = int(bonus * redux)

return max(bonus, 1)
ac method
Code:
item_ac = 0
for slot in range(0, 21):
  item = GetItemPossession(slot)
  if item.IsValid and item.GetItemClass() == ItemClassCommon:
    item_ac = item_ac + item.GetItemAC()

if not IsMage():
  bonus = 4 * item_ac / 3

if IsClient() and bonus > 6 * GetLevel() + 25:
  bonus = 6 * GetLevel() + 25

weight_hardcap = 30
weight_softcap = 14

if GetLevel() > 59:
  weight_hardcap = 45
  weight_softcap = 24
elif GetLevel() > 54:
  weight_hardcap = 40
  weight_softcap = 20
elif GetLevel() > 50:
  weight_hardcap = 38
  weight_softcap = 18
elif GetLevel() > 44:
  weight_hardcap = 36
  weight_softcap = 17
elif GetLevel() > 29:
  weight_hardcap = 34
  weight_softcap = 16
elif GetLevel() > 14:
  weight_hardcap = 32
  weight_softcap = 15

if GetClass() == MONK:
  weight = GetWeight()
  if weight < weight_hardcap - 1:
    weight_bonus = float(level + 5)
    if weight > weight_softcap:
      temp_mod = min(float(weight - weight_softcap) * 6.66667, 100.0)
      weight_bonus = max(0.0, weight_bonus * ((100.0 - temp_mod) * 0.01))
    bonus = bonus + int(weight_bonus * 11.0 * 0.1)

if bonus < 0:
  bonus = 0

if GetClass() == MONK:
  weight = GetWeight()
  if weight > weight_hardcap + 1:
    weight_penalty = level + 5
    temp_mod = min(1.0, (float(weight) - 20.0) * 0.01)
    bonus = bonus - int(temp_mod)

if GetClass() == ROGUE:
  agi = GetAGI()
  if agi > 75 and GetLevel() > 29:
    LevelScaler = GetLevel() - 26
    if agi >= 100:
      LevelScaler = LevelScaler * 5
    elif agi >= 90:
      LevelScaler = LevelScaler * 4
    elif agi >= 85:
      LevelScaler = LevelScaler * 3
    elif agi >= 80:
      LevelScaler = LevelScaler * 2
    tmp_bonus = LevelScaler / 4
    bonus = bonus + min(12, tmp_bonus)

if GetRace() == IKSAR:
  bonus = bonus + min(35, max(10, GetLevel())

if IsMage():
  bonus = bonus + GetSkill(SkillDefense) / 2
else:
  bonus = bonus + GetSkill(SkillDefense) / 3

if GetAGI() > 70:
  bonus = bonus + GetAGI() / 20

if IsMage():
  bonus = bonus + TotalEffect(SPA_AC) / 3
else:
  bonus = bonus + TotalEffect(SPA_AC) / 4

if bonus < 0:
  bonus = 0

if IsClient():
  hardcap = 350
  if GetClass() == WARRIOR and GetLevel() > 50:
    hardcap = 430
  if (GetClass() == PALADIN or GetClass() == SHADOWKNIGHT or GetClass() == BARD) and GetLevel() > 50
    hardcap = 403
  if (GetClass() == RANGER or GetClass() == ROGUE or GetClass() == MONK) and GetLevel() > 50
    hardcap = 375
  if bonus > hardcap:
    bonus = hardcap

return bonus
That means you could have 12.75 Mitigation AC and 53.33 Avoidance AC from 255 Agility. Compared to 75 Agility where you get 3.75 Mitigation AC and 36.67 Avoidance AC.
Last edited by Jafir; 11-06-2024 at 10:45 PM..
Reply With Quote