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()
|
float Player::GetMeleeCritFromAgility()
|
||||||
{
|
{
|
||||||
// from mangos 3462 for 1.12
|
float valLevel1 = 0.0f;
|
||||||
float val = 0.0f, classrate = 0.0f, levelfactor = 0.0f, fg = 0.0f;
|
float valLevel60 = 0.0f;
|
||||||
|
|
||||||
fg = (0.35f*(float) (getLevel())) + 5.55f;
|
|
||||||
levelfactor = (106.20f / fg) - 3;
|
|
||||||
|
|
||||||
// critical
|
// critical
|
||||||
switch (getClass())
|
switch (getClass())
|
||||||
{
|
{
|
||||||
case CLASS_PALADIN: classrate = 19.77f; break;
|
case CLASS_PALADIN:
|
||||||
case CLASS_SHAMAN: classrate = 19.7f; break;
|
case CLASS_SHAMAN:
|
||||||
case CLASS_MAGE: classrate = 19.44f; break;
|
case CLASS_DRUID:
|
||||||
case CLASS_ROGUE: classrate = 29.0f; break;
|
valLevel1 = 4.6f;
|
||||||
case CLASS_HUNTER: classrate = 53.0f; break;
|
valLevel60 = 20.0f;
|
||||||
case CLASS_PRIEST:
|
break;
|
||||||
case CLASS_WARLOCK:
|
case CLASS_MAGE:
|
||||||
case CLASS_DRUID:
|
valLevel1 = 12.9f;
|
||||||
case CLASS_WARRIOR:
|
valLevel60 = 20.0f;
|
||||||
default: classrate = 20.0f; break;
|
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;
|
||||||
}
|
}
|
||||||
|
float classrate = valLevel1 * float(60.0f - getLevel()) / 59.0f + valLevel60 * float(getLevel() - 1.0f) / 59.0f;
|
||||||
val = levelfactor * (GetStat(STAT_AGILITY) / classrate);
|
return GetStat(STAT_AGILITY) / classrate;
|
||||||
return val;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float Player::GetDodgeFromAgility()
|
float Player::GetDodgeFromAgility()
|
||||||
{
|
{
|
||||||
// from mangos 3462 for 1.12
|
float valLevel1 = 0.0f;
|
||||||
float val = 0, classrate = 0, levelrate = 0;
|
float valLevel60 = 0.0f;
|
||||||
|
|
||||||
levelrate = ((16.225f/((0.45f*(float)(getLevel()))+2.5f))-0.1f)/0.42f;
|
// critical
|
||||||
|
|
||||||
// dodge
|
|
||||||
switch (getClass())
|
switch (getClass())
|
||||||
{
|
{
|
||||||
case CLASS_ROGUE: classrate = 14.5; break;
|
|
||||||
case CLASS_HUNTER: classrate = 26.5f; break;
|
|
||||||
case CLASS_PALADIN:
|
case CLASS_PALADIN:
|
||||||
case CLASS_SHAMAN:
|
case CLASS_SHAMAN:
|
||||||
case CLASS_MAGE:
|
|
||||||
case CLASS_PRIEST:
|
|
||||||
case CLASS_WARLOCK:
|
|
||||||
case CLASS_DRUID:
|
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:
|
case CLASS_WARRIOR:
|
||||||
default: classrate = 20.0f; break;
|
valLevel1 = 3.9f;
|
||||||
|
valLevel60 = 20.0f;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
///*+(Defense*0,04);
|
float classrate = valLevel1 * float(60.0f - getLevel()) / 59.0f + valLevel60 * float(getLevel() - 1.0f) / 59.0f;
|
||||||
if (getRace() == RACE_NIGHTELF)
|
|
||||||
{
|
|
||||||
val = (levelrate * (GetStat(STAT_AGILITY) / classrate)) + 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
val = (levelrate * (GetStat(STAT_AGILITY) / classrate));
|
|
||||||
}
|
|
||||||
|
|
||||||
return val;
|
return GetStat(STAT_AGILITY) / classrate;
|
||||||
}
|
}
|
||||||
|
|
||||||
float Player::GetSpellCritFromIntellect()
|
float Player::GetSpellCritFromIntellect()
|
||||||
@ -20999,6 +21029,23 @@ void Player::SendTransferAbortedByLockStatus(MapEntry const* mapEntry, AreaLockS
|
|||||||
case AREA_LOCKSTATUS_UNKNOWN_ERROR:
|
case AREA_LOCKSTATUS_UNKNOWN_ERROR:
|
||||||
// ToDo: SendAreaTriggerMessage or Transfer Abort for these cases!
|
// ToDo: SendAreaTriggerMessage or Transfer Abort for these cases!
|
||||||
break;
|
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:
|
case AREA_LOCKSTATUS_OK:
|
||||||
sLog.outError("SendTransferAbortedByLockStatus: LockAreaStatus AREA_LOCKSTATUS_OK received for %s (mapId %u)", GetGuidStr().c_str(), mapEntry->MapID);
|
sLog.outError("SendTransferAbortedByLockStatus: LockAreaStatus AREA_LOCKSTATUS_OK received for %s (mapId %u)", GetGuidStr().c_str(), mapEntry->MapID);
|
||||||
MANGOS_ASSERT(false);
|
MANGOS_ASSERT(false);
|
||||||
@ -23116,7 +23163,7 @@ AreaLockStatus Player::GetAreaTriggerLockStatus(AreaTrigger const* at, uint32& m
|
|||||||
case CONDITION_PVP_RANK:
|
case CONDITION_PVP_RANK:
|
||||||
{
|
{
|
||||||
miscRequirement = fault.param1;
|
miscRequirement = fault.param1;
|
||||||
return AREA_LOCKSTATUS_NOT_ALLOWED;
|
return AREA_LOCKSTATUS_PVP_RANK;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -2533,6 +2533,7 @@ enum AreaLockStatus
|
|||||||
AREA_LOCKSTATUS_NOT_ALLOWED = 10,
|
AREA_LOCKSTATUS_NOT_ALLOWED = 10,
|
||||||
AREA_LOCKSTATUS_HAS_BIND = 11,
|
AREA_LOCKSTATUS_HAS_BIND = 11,
|
||||||
AREA_LOCKSTATUS_WRONG_TEAM = 12,
|
AREA_LOCKSTATUS_WRONG_TEAM = 12,
|
||||||
|
AREA_LOCKSTATUS_PVP_RANK = 100
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TrackedAuraType
|
enum TrackedAuraType
|
||||||
|
Loading…
x
Reference in New Issue
Block a user