Various fixes (#172)
* Add agility crit and dodge scaling from vmangos
Thanks to @killerwife
c458698327
* Safeguard entering pvp honor halls against pvp rank (need DB update)
This commit is contained in:
parent
89e63f3eee
commit
ac4039ddeb
@ -5412,64 +5412,94 @@ uint32 Player::GetShieldBlockValue() const
|
||||
|
||||
float Player::GetMeleeCritFromAgility()
|
||||
{
|
||||
// from mangos 3462 for 1.12
|
||||
float val = 0.0f, classrate = 0.0f, levelfactor = 0.0f, fg = 0.0f;
|
||||
|
||||
fg = (0.35f*(float) (getLevel())) + 5.55f;
|
||||
levelfactor = (106.20f / fg) - 3;
|
||||
float valLevel1 = 0.0f;
|
||||
float valLevel60 = 0.0f;
|
||||
|
||||
// critical
|
||||
switch (getClass())
|
||||
{
|
||||
case CLASS_PALADIN: classrate = 19.77f; break;
|
||||
case CLASS_SHAMAN: classrate = 19.7f; break;
|
||||
case CLASS_MAGE: classrate = 19.44f; break;
|
||||
case CLASS_ROGUE: classrate = 29.0f; break;
|
||||
case CLASS_HUNTER: classrate = 53.0f; break;
|
||||
case CLASS_PRIEST:
|
||||
case CLASS_WARLOCK:
|
||||
case CLASS_DRUID:
|
||||
case CLASS_WARRIOR:
|
||||
default: classrate = 20.0f; break;
|
||||
case CLASS_PALADIN:
|
||||
case CLASS_SHAMAN:
|
||||
case CLASS_DRUID:
|
||||
valLevel1 = 4.6f;
|
||||
valLevel60 = 20.0f;
|
||||
break;
|
||||
case CLASS_MAGE:
|
||||
valLevel1 = 12.9f;
|
||||
valLevel60 = 20.0f;
|
||||
break;
|
||||
case CLASS_ROGUE:
|
||||
valLevel1 = 2.2f;
|
||||
valLevel60 = 29.0f;
|
||||
break;
|
||||
case CLASS_HUNTER:
|
||||
valLevel1 = 3.5f;
|
||||
valLevel60 = 53.0f;
|
||||
break;
|
||||
case CLASS_PRIEST:
|
||||
valLevel1 = 11.0f;
|
||||
valLevel60 = 20.0f;
|
||||
break;
|
||||
case CLASS_WARLOCK:
|
||||
valLevel1 = 8.4f;
|
||||
valLevel60 = 20.0f;
|
||||
break;
|
||||
case CLASS_WARRIOR:
|
||||
valLevel1 = 3.9f;
|
||||
valLevel60 = 20.0f;
|
||||
break;
|
||||
default:
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
val = levelfactor * (GetStat(STAT_AGILITY) / classrate);
|
||||
return val;
|
||||
float classrate = valLevel1 * float(60.0f - getLevel()) / 59.0f + valLevel60 * float(getLevel() - 1.0f) / 59.0f;
|
||||
return GetStat(STAT_AGILITY) / classrate;
|
||||
}
|
||||
|
||||
float Player::GetDodgeFromAgility()
|
||||
{
|
||||
// from mangos 3462 for 1.12
|
||||
float val = 0, classrate = 0, levelrate = 0;
|
||||
float valLevel1 = 0.0f;
|
||||
float valLevel60 = 0.0f;
|
||||
|
||||
levelrate = ((16.225f/((0.45f*(float)(getLevel()))+2.5f))-0.1f)/0.42f;
|
||||
|
||||
// dodge
|
||||
// critical
|
||||
switch (getClass())
|
||||
{
|
||||
case CLASS_ROGUE: classrate = 14.5; break;
|
||||
case CLASS_HUNTER: classrate = 26.5f; break;
|
||||
case CLASS_PALADIN:
|
||||
case CLASS_SHAMAN:
|
||||
case CLASS_MAGE:
|
||||
case CLASS_PRIEST:
|
||||
case CLASS_WARLOCK:
|
||||
case CLASS_DRUID:
|
||||
valLevel1 = 4.6f;
|
||||
valLevel60 = 20.0f;
|
||||
break;
|
||||
case CLASS_MAGE:
|
||||
valLevel1 = 12.9f;
|
||||
valLevel60 = 20.0f;
|
||||
break;
|
||||
case CLASS_ROGUE:
|
||||
valLevel1 = 1.1f;
|
||||
valLevel60 = 14.5f;
|
||||
break;
|
||||
case CLASS_HUNTER:
|
||||
valLevel1 = 1.8f;
|
||||
valLevel60 = 26.5f;
|
||||
break;
|
||||
case CLASS_PRIEST:
|
||||
valLevel1 = 11.0f;
|
||||
valLevel60 = 20.0f;
|
||||
break;
|
||||
case CLASS_WARLOCK:
|
||||
valLevel1 = 8.4f;
|
||||
valLevel60 = 20.0f;
|
||||
break;
|
||||
case CLASS_WARRIOR:
|
||||
default: classrate = 20.0f; break;
|
||||
valLevel1 = 3.9f;
|
||||
valLevel60 = 20.0f;
|
||||
break;
|
||||
default:
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
///*+(Defense*0,04);
|
||||
if (getRace() == RACE_NIGHTELF)
|
||||
{
|
||||
val = (levelrate * (GetStat(STAT_AGILITY) / classrate)) + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
val = (levelrate * (GetStat(STAT_AGILITY) / classrate));
|
||||
}
|
||||
float classrate = valLevel1 * float(60.0f - getLevel()) / 59.0f + valLevel60 * float(getLevel() - 1.0f) / 59.0f;
|
||||
|
||||
return val;
|
||||
return GetStat(STAT_AGILITY) / classrate;
|
||||
}
|
||||
|
||||
float Player::GetSpellCritFromIntellect()
|
||||
@ -20999,6 +21029,23 @@ void Player::SendTransferAbortedByLockStatus(MapEntry const* mapEntry, AreaLockS
|
||||
case AREA_LOCKSTATUS_UNKNOWN_ERROR:
|
||||
// ToDo: SendAreaTriggerMessage or Transfer Abort for these cases!
|
||||
break;
|
||||
case AREA_LOCKSTATUS_PVP_RANK:
|
||||
{
|
||||
std::string msg = "You cannot enter this zone";
|
||||
switch (GetTeamId())
|
||||
{
|
||||
case TEAM_INDEX_ALLIANCE:
|
||||
msg = "You must be a Knight or higher rank in order to enter the Champions Hall.";
|
||||
break;
|
||||
case TEAM_INDEX_HORDE:
|
||||
msg = "You must be a Stone Guard or higher rank in order to enter the Hall of Legends.";
|
||||
break;
|
||||
}
|
||||
// TODO : Rely on a a status_failed_text that could be localized, need a DB structure rework for later.
|
||||
GetSession()->SendAreaTriggerMessage(msg.c_str());
|
||||
break;
|
||||
}
|
||||
|
||||
case AREA_LOCKSTATUS_OK:
|
||||
sLog.outError("SendTransferAbortedByLockStatus: LockAreaStatus AREA_LOCKSTATUS_OK received for %s (mapId %u)", GetGuidStr().c_str(), mapEntry->MapID);
|
||||
MANGOS_ASSERT(false);
|
||||
@ -23116,7 +23163,7 @@ AreaLockStatus Player::GetAreaTriggerLockStatus(AreaTrigger const* at, uint32& m
|
||||
case CONDITION_PVP_RANK:
|
||||
{
|
||||
miscRequirement = fault.param1;
|
||||
return AREA_LOCKSTATUS_NOT_ALLOWED;
|
||||
return AREA_LOCKSTATUS_PVP_RANK;
|
||||
}
|
||||
|
||||
default:
|
||||
|
@ -2533,6 +2533,7 @@ enum AreaLockStatus
|
||||
AREA_LOCKSTATUS_NOT_ALLOWED = 10,
|
||||
AREA_LOCKSTATUS_HAS_BIND = 11,
|
||||
AREA_LOCKSTATUS_WRONG_TEAM = 12,
|
||||
AREA_LOCKSTATUS_PVP_RANK = 100
|
||||
};
|
||||
|
||||
enum TrackedAuraType
|
||||
|
Loading…
x
Reference in New Issue
Block a user