mirror of
https://github.com/EQEmu/Server.git
synced 2026-03-03 07:02:30 +00:00
Fixed an issue that arose from 78ab3471
Reworked how Mob::_GetMovementSpeed worked to fix an issue of walking with a sufficiently high movemod. Added a rule Character:BaseRunSpeedCap (default 158) to control the cap on runspeed from buffs. Hardcapped to 225 for sanity's sake.
This commit is contained in:
parent
36233538fd
commit
09dd3c1b37
@ -1,5 +1,9 @@
|
|||||||
EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
||||||
-------------------------------------------------------
|
-------------------------------------------------------
|
||||||
|
== 11/17/2013 ==
|
||||||
|
demonstar55: Rewrote the Mob::_GetMovementSpeed fix an issue that arose from the change on 11/11
|
||||||
|
- Added the rule Character:BaseRunSpeedCap (default 158) so people can customize what their runspeed cap is. Hardcapped to 225 so stuff doesn't get too crazy.
|
||||||
|
|
||||||
== 11/16/2013 ==
|
== 11/16/2013 ==
|
||||||
Leere: Fixed the drinking message for auto-consume, it will again correctly show up for forced consumption instead.
|
Leere: Fixed the drinking message for auto-consume, it will again correctly show up for forced consumption instead.
|
||||||
demonstar55: Added Mob::DoCastingChecks() which will check for various fail conditions while the casting bar is up. This is called after Mob::DoCastSpell() starts the casting and before it returns.
|
demonstar55: Added Mob::DoCastingChecks() which will check for various fail conditions while the casting bar is up. This is called after Mob::DoCastSpell() starts the casting and before it returns.
|
||||||
|
|||||||
@ -98,6 +98,7 @@ RULE_BOOL ( Character, EnableXTargetting, true) // Enable Extended Targetting Wi
|
|||||||
RULE_BOOL ( Character, KeepLevelOverMax, false) // Don't delevel a character that has somehow gone over the level cap
|
RULE_BOOL ( Character, KeepLevelOverMax, false) // Don't delevel a character that has somehow gone over the level cap
|
||||||
RULE_INT ( Character, FoodLossPerUpdate, 35) // How much food/water you lose per stamina update
|
RULE_INT ( Character, FoodLossPerUpdate, 35) // How much food/water you lose per stamina update
|
||||||
RULE_INT ( Character, BaseInstrumentSoftCap, 36) // Softcap for instrument mods, 36 commonly referred to as "3.6" as well.
|
RULE_INT ( Character, BaseInstrumentSoftCap, 36) // Softcap for instrument mods, 36 commonly referred to as "3.6" as well.
|
||||||
|
RULE_INT ( Character, BaseRunSpeedCap, 158) // Base Run Speed Cap, on live it's 158% which will give you a runspeed of 1.580 hard capped to 225.
|
||||||
RULE_CATEGORY_END()
|
RULE_CATEGORY_END()
|
||||||
|
|
||||||
RULE_CATEGORY( Mercs )
|
RULE_CATEGORY( Mercs )
|
||||||
|
|||||||
93
zone/mob.cpp
93
zone/mob.cpp
@ -517,76 +517,75 @@ bool Mob::IsInvisible(Mob* other) const
|
|||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
float Mob::_GetMovementSpeed(int mod) const {
|
float Mob::_GetMovementSpeed(int mod) const
|
||||||
|
{
|
||||||
// List of movement speed modifiers, including AAs & spells:
|
// List of movement speed modifiers, including AAs & spells:
|
||||||
// http://everquest.allakhazam.com/db/item.html?item=1721;page=1;howmany=50#m10822246245352
|
// http://everquest.allakhazam.com/db/item.html?item=1721;page=1;howmany=50#m10822246245352
|
||||||
if (IsRooted())
|
if (IsRooted())
|
||||||
return 0.0f;
|
return 0.0f;
|
||||||
|
|
||||||
float aa_mod = 0.0f;
|
|
||||||
float speed_mod = runspeed;
|
float speed_mod = runspeed;
|
||||||
bool has_horse = false;
|
|
||||||
if (IsClient())
|
// These two cases ignore the cap, be wise in the DB for horses.
|
||||||
{
|
if (IsClient()) {
|
||||||
if(CastToClient()->GetGMSpeed())
|
if (CastToClient()->GetGMSpeed()) {
|
||||||
{
|
|
||||||
speed_mod = 3.125f;
|
speed_mod = 3.125f;
|
||||||
}
|
if (mod != 0)
|
||||||
else
|
speed_mod += speed_mod * static_cast<float>(mod) / 100.0f;
|
||||||
{
|
return speed_mod;
|
||||||
Mob* horse = entity_list.GetMob(CastToClient()->GetHorseId());
|
} else {
|
||||||
if(horse)
|
Mob *horse = entity_list.GetMob(CastToClient()->GetHorseId());
|
||||||
{
|
if (horse) {
|
||||||
speed_mod = horse->GetBaseRunspeed();
|
speed_mod = horse->GetBaseRunspeed();
|
||||||
has_horse = true;
|
if (mod != 0)
|
||||||
|
speed_mod += speed_mod * static_cast<float>(mod) / 100.0f;
|
||||||
|
return speed_mod;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
aa_mod += itembonuses.BaseMovementSpeed + spellbonuses.BaseMovementSpeed + aabonuses.BaseMovementSpeed;
|
int aa_mod = 0;
|
||||||
|
int spell_mod = 0;
|
||||||
int spell_mod = spellbonuses.movementspeed + itembonuses.movementspeed;
|
int runspeedcap = RuleI(Character,BaseRunSpeedCap);
|
||||||
int movemod = 0;
|
int movemod = 0;
|
||||||
|
float frunspeedcap = 0.0f;
|
||||||
|
|
||||||
if(spell_mod < 0)
|
runspeedcap += itembonuses.IncreaseRunSpeedCap + spellbonuses.IncreaseRunSpeedCap + aabonuses.IncreaseRunSpeedCap;
|
||||||
{
|
aa_mod += itembonuses.BaseMovementSpeed + spellbonuses.BaseMovementSpeed + aabonuses.BaseMovementSpeed;
|
||||||
|
spell_mod += spellbonuses.movementspeed + itembonuses.movementspeed;
|
||||||
|
|
||||||
|
// hard cap
|
||||||
|
if (runspeedcap > 225)
|
||||||
|
runspeedcap = 225;
|
||||||
|
|
||||||
|
if (spell_mod < 0)
|
||||||
movemod += spell_mod;
|
movemod += spell_mod;
|
||||||
}
|
else if (spell_mod > aa_mod)
|
||||||
else if(spell_mod > (aa_mod))
|
|
||||||
{
|
|
||||||
movemod = spell_mod;
|
movemod = spell_mod;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
movemod = aa_mod;
|
||||||
movemod = static_cast<int>(aa_mod);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(movemod < -85) //cap it at moving very very slow
|
// cap negative movemods from snares mostly
|
||||||
|
if (movemod < -85)
|
||||||
movemod = -85;
|
movemod = -85;
|
||||||
|
|
||||||
if(mod != 0) // passing -47 for walking shouldn't be effected by cap above
|
if (movemod != 0)
|
||||||
movemod += mod;
|
speed_mod += speed_mod * static_cast<float>(movemod) / 100.0f;
|
||||||
|
|
||||||
if (!has_horse && movemod != 0)
|
// runspeed caps
|
||||||
speed_mod += (speed_mod * float(movemod) / 100.0f);
|
frunspeedcap = static_cast<float>(runspeedcap) / 100.0f;
|
||||||
|
if (IsClient() && speed_mod > frunspeedcap)
|
||||||
|
speed_mod = frunspeedcap;
|
||||||
|
|
||||||
if(speed_mod <= 0.0f)
|
// apply final mod such as the -47 for walking
|
||||||
return (IsClient() ? 0.0001f : 0.0f);
|
// use runspeed since it should stack with snares
|
||||||
|
// and if we get here, we know runspeed was the initial
|
||||||
|
// value before we applied movemod.
|
||||||
|
if (mod != 0)
|
||||||
|
speed_mod += runspeed * static_cast<float>(mod) / 100.0f;
|
||||||
|
|
||||||
//runspeed cap.
|
if (speed_mod <= 0.0f)
|
||||||
if(IsClient())
|
speed_mod = IsClient() ? 0.0001f : 0.0f;
|
||||||
{
|
|
||||||
if (speed_mod > 1.58){
|
|
||||||
uint8 bonus_IncreaseRunSpeedCap = itembonuses.IncreaseRunSpeedCap + spellbonuses.IncreaseRunSpeedCap + aabonuses.IncreaseRunSpeedCap;
|
|
||||||
if (bonus_IncreaseRunSpeedCap){
|
|
||||||
speed_mod += float(bonus_IncreaseRunSpeedCap)/100.0f;
|
|
||||||
if(speed_mod > 1.74)
|
|
||||||
speed_mod = 1.74;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
speed_mod = 1.58;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return speed_mod;
|
return speed_mod;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user