int32 Client::CalcBaseEndurance() { int32 base_end = 0; if(GetClientVersion() >= EQClientSoF && RuleB(Character, SoDClientUseSoDHPManaEnd)) { double heroic_stats = (GetHeroicSTR() + GetHeroicSTA() + GetHeroicDEX() + GetHeroicAGI()) / 4.0f; double stats = (GetSTR() + GetSTA() + GetDEX() + GetAGI()) / 4.0f; if(stats > 201.0f) { stats = 1.25f * (stats - 201.0f) + 352.5f; } else if(stats > 100.0f) { stats = 2.5f * (stats - 100.0f) + 100.0f; } auto base_data = database.GetBaseData(GetLevel(), GetClass()); if(base_data) { base_end = base_data->base_end + (heroic_stats * 10.0f) + (base_data->endurance_factor * static_cast<int>(stats)); } } else { int Stats = GetSTR()+GetSTA()+GetDEX()+GetAGI(); int LevelBase = GetLevel() * 15; int at_most_800 = Stats; if(at_most_800 > 800) at_most_800 = 800; int Bonus400to800 = 0; int HalfBonus400to800 = 0; int Bonus800plus = 0; int HalfBonus800plus = 0; int BonusUpto800 = int( at_most_800 / 4 ) ; if(Stats > 400) { Bonus400to800 = int( (at_most_800 - 400) / 4 ); HalfBonus400to800 = int( std::max( ( at_most_800 - 400 ), 0 ) / 8 ); if(Stats > 800) { Bonus800plus = int( (Stats - 800) / 8 ) * 2; HalfBonus800plus = int( (Stats - 800) / 16 ); } } int bonus_sum = BonusUpto800 + Bonus400to800 + HalfBonus400to800 + Bonus800plus + HalfBonus800plus; base_end = LevelBase; //take all of the sums from above, then multiply by level*0.075 base_end += ( bonus_sum * 3 * GetLevel() ) / 40; } return base_end; }
int32 Client::CalcBaseEndurance() { int32 base_end = 0; int Stats = GetSTR()+GetSTA()+GetDEX()+GetAGI(); int LevelBase = GetLevel() * 15; int at_most_800 = Stats; if(at_most_800 > 800) at_most_800 = 800; int Bonus400to800 = 0; int HalfBonus400to800 = 0; int Bonus800plus = 0; int HalfBonus800plus = 0; int BonusUpto800 = int( at_most_800 / 4 ) ; if(Stats > 400) { Bonus400to800 = int( (at_most_800 - 400) / 4 ); HalfBonus400to800 = int( std::max( ( at_most_800 - 400 ), 0 ) / 8 ); if(Stats > 800) { Bonus800plus = int( (Stats - 800) / 8 ) * 2; HalfBonus800plus = int( (Stats - 800) / 16 ); } } int bonus_sum = BonusUpto800 + Bonus400to800 + HalfBonus400to800 + Bonus800plus + HalfBonus800plus; base_end = LevelBase; //take all of the sums from above, then multiply by level*0.075 base_end += ( bonus_sum * 3 * GetLevel() ) / 40; return base_end; }
int32 Client::acmod() { int agility = GetAGI(); int level = GetLevel(); if(agility < 1 || level < 1) return(0); if (agility <=74){ if (agility == 1) return -24; else if (agility <=3) return -23; else if (agility == 4) return -22; else if (agility <=6) return -21; else if (agility <=8) return -20; else if (agility == 9) return -19; else if (agility <=11) return -18; else if (agility == 12) return -17; else if (agility <=14) return -16; else if (agility <=16) return -15; else if (agility == 17) return -14; else if (agility <=19) return -13; else if (agility == 20) return -12; else if (agility <=22) return -11; else if (agility <=24) return -10; else if (agility == 25) return -9; else if (agility <=27) return -8; else if (agility == 28) return -7; else if (agility <=30) return -6; else if (agility <=32) return -5; else if (agility == 33) return -4; else if (agility <=35) return -3; else if (agility == 36) return -2; else if (agility <=38) return -1; else if (agility <=65) return 0; else if (agility <=70) return 1; else if (agility <=74) return 5; } else if(agility <= 137) { if (agility == 75){ if (level <= 6) return 9; else if (level <= 19) return 23; else if (level <= 39) return 33; else return 39; } else if (agility >= 76 && agility <= 79){ if (level <= 6) return 10; else if (level <= 19) return 23; else if (level <= 39) return 33; else return 40; } else if (agility == 80){ if (level <= 6) return 11; else if (level <= 19) return 24; else if (level <= 39) return 34; else return 41; } else if (agility >= 81 && agility <= 85){ if (level <= 6) return 12; else if (level <= 19) return 25; else if (level <= 39) return 35; else return 42; } else if (agility >= 86 && agility <= 90){ if (level <= 6) return 12; else if (level <= 19) return 26; else if (level <= 39) return 36; else return 42; } else if (agility >= 91 && agility <= 95){ if (level <= 6) return 13; else if (level <= 19) return 26; else if (level <= 39) return 36; else return 43; } else if (agility >= 96 && agility <= 99){ if (level <= 6) return 14; else if (level <= 19) return 27; else if (level <= 39) return 37; else return 44; } else if (agility == 100 && level >= 7){ if (level <= 19) return 28; else if (level <= 39) return 38; else return 45; } else if (level <= 6) { return 15; } //level is >6 else if (agility >= 101 && agility <= 105){ if (level <= 19) return 29; else if (level <= 39) return 39;// not verified else return 45; } else if (agility >= 106 && agility <= 110){ if (level <= 19) return 29; else if (level <= 39) return 39;// not verified else return 46; } else if (agility >= 111 && agility <= 115){ if (level <= 19) return 30; else if (level <= 39) return 40;// not verified else return 47; } else if (agility >= 116 && agility <= 119){ if (level <= 19) return 31; else if (level <= 39) return 41; else return 47; } else if (level <= 19) { return 32; } //level is > 19 else if (agility == 120){ if (level <= 39) return 42; else return 48; } else if (agility <= 125){ if (level <= 39) return 42; else return 49; } else if (agility <= 135){ if (level <= 39) return 42; else return 50; } else { if (level <= 39) return 42; else return 51; } } else if(agility <= 300) { if(level <= 6) { if(agility <= 139) return(21); else if(agility == 140) return(22); else if(agility <= 145) return(23); else if(agility <= 150) return(23); else if(agility <= 155) return(24); else if(agility <= 159) return(25); else if(agility == 160) return(26); else if(agility <= 165) return(26); else if(agility <= 170) return(27); else if(agility <= 175) return(28); else if(agility <= 179) return(28); else if(agility == 180) return(29); else if(agility <= 185) return(30); else if(agility <= 190) return(31); else if(agility <= 195) return(31); else if(agility <= 199) return(32); else if(agility <= 219) return(33); else if(agility <= 239) return(34); else return(35); } else if(level <= 19) { if(agility <= 139) return(34); else if(agility == 140) return(35); else if(agility <= 145) return(36); else if(agility <= 150) return(37); else if(agility <= 155) return(37); else if(agility <= 159) return(38); else if(agility == 160) return(39); else if(agility <= 165) return(40); else if(agility <= 170) return(40); else if(agility <= 175) return(41); else if(agility <= 179) return(42); else if(agility == 180) return(43); else if(agility <= 185) return(43); else if(agility <= 190) return(44); else if(agility <= 195) return(45); else if(agility <= 199) return(45); else if(agility <= 219) return(46); else if(agility <= 239) return(47); else return(48); } else if(level <= 39) { if(agility <= 139) return(44); else if(agility == 140) return(45); else if(agility <= 145) return(46); else if(agility <= 150) return(47); else if(agility <= 155) return(47); else if(agility <= 159) return(48); else if(agility == 160) return(49); else if(agility <= 165) return(50); else if(agility <= 170) return(50); else if(agility <= 175) return(51); else if(agility <= 179) return(52); else if(agility == 180) return(53); else if(agility <= 185) return(53); else if(agility <= 190) return(54); else if(agility <= 195) return(55); else if(agility <= 199) return(55); else if(agility <= 219) return(56); else if(agility <= 239) return(57); else return(58); } else { //lvl >= 40 if(agility <= 139) return(51); else if(agility == 140) return(52); else if(agility <= 145) return(53); else if(agility <= 150) return(53); else if(agility <= 155) return(54); else if(agility <= 159) return(55); else if(agility == 160) return(56); else if(agility <= 165) return(56); else if(agility <= 170) return(57); else if(agility <= 175) return(58); else if(agility <= 179) return(58); else if(agility == 180) return(59); else if(agility <= 185) return(60); else if(agility <= 190) return(61); else if(agility <= 195) return(61); else if(agility <= 199) return(62); else if(agility <= 219) return(63); else if(agility <= 239) return(64); else return(65); } } else{ //seems about 21 agil per extra AC pt over 300... return (65 + ((agility-300) / 21)); } #if EQDEBUG >= 11 LogFile->write(EQEMuLog::Error, "Error in Client::acmod(): Agility: %i, Level: %i",agility,level); #endif return 0; };
int32 Client::CalcBaseEndurance() { int32 base_end = 0; int32 base_endurance = 0; int32 ConvertedStats = 0; int32 sta_end = 0; int Stats = 0; if(GetClientVersion() >= EQClientSoD && RuleB(Character, SoDClientUseSoDHPManaEnd)) { int HeroicStats = 0; Stats = ((GetSTR() + GetSTA() + GetDEX() + GetAGI()) / 4); HeroicStats = ((GetHeroicSTR() + GetHeroicSTA() + GetHeroicDEX() + GetHeroicAGI()) / 4); if (Stats > 100) { ConvertedStats = (((Stats - 100) * 5 / 2) + 100); if (Stats > 201) { ConvertedStats -= ((Stats - 201) * 5 / 4); } } else { ConvertedStats = Stats; } if (GetLevel() < 41) { sta_end = (GetLevel() * 75 * ConvertedStats / 1000); base_endurance = (GetLevel() * 15); } else if (GetLevel() < 81) { sta_end = ((3 * ConvertedStats) + ((GetLevel() - 40) * 15 * ConvertedStats / 100)); base_endurance = (600 + ((GetLevel() - 40) * 30)); } else { sta_end = (9 * ConvertedStats); base_endurance = (1800 + ((GetLevel() - 80) * 18)); } base_end = (base_endurance + sta_end + (HeroicStats * 10)); } else { Stats = GetSTR()+GetSTA()+GetDEX()+GetAGI(); int LevelBase = GetLevel() * 15; int at_most_800 = Stats; if(at_most_800 > 800) at_most_800 = 800; int Bonus400to800 = 0; int HalfBonus400to800 = 0; int Bonus800plus = 0; int HalfBonus800plus = 0; int BonusUpto800 = int( at_most_800 / 4 ) ; if(Stats > 400) { Bonus400to800 = int( (at_most_800 - 400) / 4 ); HalfBonus400to800 = int( max( ( at_most_800 - 400 ), 0 ) / 8 ); if(Stats > 800) { Bonus800plus = int( (Stats - 800) / 8 ) * 2; HalfBonus800plus = int( (Stats - 800) / 16 ); } } int bonus_sum = BonusUpto800 + Bonus400to800 + HalfBonus400to800 + Bonus800plus + HalfBonus800plus; base_end = LevelBase; //take all of the sums from above, then multiply by level*0.075 base_end += ( bonus_sum * 3 * GetLevel() ) / 40; } return base_end; }