[9583] Fixed speed recalculation at remove .mod speed rate while mounted/etc.

This commit is contained in:
VladimirMangos 2010-03-14 20:24:19 +03:00
parent 547919e249
commit 996a523302
4 changed files with 33 additions and 38 deletions

View file

@ -1106,9 +1106,9 @@ bool ChatHandler::HandleModifyASpeedCommand(const char* args)
if (!*args) if (!*args)
return false; return false;
float ASpeed = (float)atof((char*)args); float modSpeed = (float)atof((char*)args);
if (ASpeed > 10 || ASpeed < 0.1) if (modSpeed > 10 || modSpeed < 0.1)
{ {
SendSysMessage(LANG_BAD_VALUE); SendSysMessage(LANG_BAD_VALUE);
SetSentErrorMessage(true); SetSentErrorMessage(true);
@ -1136,15 +1136,15 @@ bool ChatHandler::HandleModifyASpeedCommand(const char* args)
return false; return false;
} }
PSendSysMessage(LANG_YOU_CHANGE_ASPEED, ASpeed, chrNameLink.c_str()); PSendSysMessage(LANG_YOU_CHANGE_ASPEED, modSpeed, chrNameLink.c_str());
if (needReportToTarget(chr)) if (needReportToTarget(chr))
ChatHandler(chr).PSendSysMessage(LANG_YOURS_ASPEED_CHANGED, GetNameLink().c_str(), ASpeed); ChatHandler(chr).PSendSysMessage(LANG_YOURS_ASPEED_CHANGED, GetNameLink().c_str(), modSpeed);
chr->SetSpeedRate(MOVE_WALK, ASpeed,true); chr->UpdateSpeed(MOVE_WALK, true, modSpeed);
chr->SetSpeedRate(MOVE_RUN, ASpeed,true); chr->UpdateSpeed(MOVE_RUN, true, modSpeed);
chr->SetSpeedRate(MOVE_SWIM, ASpeed,true); chr->UpdateSpeed(MOVE_SWIM, true, modSpeed);
//chr->SetSpeed(MOVE_TURN, ASpeed,true); //chr->UpdateSpeed(MOVE_TURN, true, modSpeed);
chr->SetSpeedRate(MOVE_FLIGHT, ASpeed,true); chr->UpdateSpeed(MOVE_FLIGHT, true, modSpeed);
return true; return true;
} }
@ -1154,9 +1154,9 @@ bool ChatHandler::HandleModifySpeedCommand(const char* args)
if (!*args) if (!*args)
return false; return false;
float Speed = (float)atof((char*)args); float modSpeed = (float)atof((char*)args);
if (Speed > 10 || Speed < 0.1) if (modSpeed > 10 || modSpeed < 0.1)
{ {
SendSysMessage(LANG_BAD_VALUE); SendSysMessage(LANG_BAD_VALUE);
SetSentErrorMessage(true); SetSentErrorMessage(true);
@ -1184,11 +1184,11 @@ bool ChatHandler::HandleModifySpeedCommand(const char* args)
return false; return false;
} }
PSendSysMessage(LANG_YOU_CHANGE_SPEED, Speed, chrNameLink.c_str()); PSendSysMessage(LANG_YOU_CHANGE_SPEED, modSpeed, chrNameLink.c_str());
if (needReportToTarget(chr)) if (needReportToTarget(chr))
ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPEED_CHANGED, GetNameLink().c_str(), Speed); ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPEED_CHANGED, GetNameLink().c_str(), modSpeed);
chr->SetSpeedRate(MOVE_RUN,Speed,true); chr->UpdateSpeed(MOVE_RUN, true, modSpeed);
return true; return true;
} }
@ -1199,9 +1199,9 @@ bool ChatHandler::HandleModifySwimCommand(const char* args)
if (!*args) if (!*args)
return false; return false;
float Swim = (float)atof((char*)args); float modSpeed = (float)atof((char*)args);
if (Swim > 10.0f || Swim < 0.01f) if (modSpeed > 10.0f || modSpeed < 0.01f)
{ {
SendSysMessage(LANG_BAD_VALUE); SendSysMessage(LANG_BAD_VALUE);
SetSentErrorMessage(true); SetSentErrorMessage(true);
@ -1229,11 +1229,11 @@ bool ChatHandler::HandleModifySwimCommand(const char* args)
return false; return false;
} }
PSendSysMessage(LANG_YOU_CHANGE_SWIM_SPEED, Swim, chrNameLink.c_str()); PSendSysMessage(LANG_YOU_CHANGE_SWIM_SPEED, modSpeed, chrNameLink.c_str());
if (needReportToTarget(chr)) if (needReportToTarget(chr))
ChatHandler(chr).PSendSysMessage(LANG_YOURS_SWIM_SPEED_CHANGED, GetNameLink().c_str(), Swim); ChatHandler(chr).PSendSysMessage(LANG_YOURS_SWIM_SPEED_CHANGED, GetNameLink().c_str(), modSpeed);
chr->SetSpeedRate(MOVE_SWIM,Swim,true); chr->UpdateSpeed(MOVE_SWIM, true, modSpeed);
return true; return true;
} }
@ -1244,9 +1244,9 @@ bool ChatHandler::HandleModifyBWalkCommand(const char* args)
if (!*args) if (!*args)
return false; return false;
float BSpeed = (float)atof((char*)args); float modSpeed = (float)atof((char*)args);
if (BSpeed > 10.0f || BSpeed < 0.1f) if (modSpeed > 10.0f || modSpeed < 0.1f)
{ {
SendSysMessage(LANG_BAD_VALUE); SendSysMessage(LANG_BAD_VALUE);
SetSentErrorMessage(true); SetSentErrorMessage(true);
@ -1274,11 +1274,11 @@ bool ChatHandler::HandleModifyBWalkCommand(const char* args)
return false; return false;
} }
PSendSysMessage(LANG_YOU_CHANGE_BACK_SPEED, BSpeed, chrNameLink.c_str()); PSendSysMessage(LANG_YOU_CHANGE_BACK_SPEED, modSpeed, chrNameLink.c_str());
if (needReportToTarget(chr)) if (needReportToTarget(chr))
ChatHandler(chr).PSendSysMessage(LANG_YOURS_BACK_SPEED_CHANGED, GetNameLink().c_str(), BSpeed); ChatHandler(chr).PSendSysMessage(LANG_YOURS_BACK_SPEED_CHANGED, GetNameLink().c_str(), modSpeed);
chr->SetSpeedRate(MOVE_RUN_BACK,BSpeed,true); chr->UpdateSpeed(MOVE_RUN_BACK, true, modSpeed);
return true; return true;
} }
@ -1289,9 +1289,9 @@ bool ChatHandler::HandleModifyFlyCommand(const char* args)
if (!*args) if (!*args)
return false; return false;
float FSpeed = (float)atof((char*)args); float modSpeed = (float)atof((char*)args);
if (FSpeed > 10.0f || FSpeed < 0.1f) if (modSpeed > 10.0f || modSpeed < 0.1f)
{ {
SendSysMessage(LANG_BAD_VALUE); SendSysMessage(LANG_BAD_VALUE);
SetSentErrorMessage(true); SetSentErrorMessage(true);
@ -1310,11 +1310,11 @@ bool ChatHandler::HandleModifyFlyCommand(const char* args)
if (HasLowerSecurity(chr, 0)) if (HasLowerSecurity(chr, 0))
return false; return false;
PSendSysMessage(LANG_YOU_CHANGE_FLY_SPEED, FSpeed, GetNameLink(chr).c_str()); PSendSysMessage(LANG_YOU_CHANGE_FLY_SPEED, modSpeed, GetNameLink(chr).c_str());
if (needReportToTarget(chr)) if (needReportToTarget(chr))
ChatHandler(chr).PSendSysMessage(LANG_YOURS_FLY_SPEED_CHANGED, GetNameLink().c_str(), FSpeed); ChatHandler(chr).PSendSysMessage(LANG_YOURS_FLY_SPEED_CHANGED, GetNameLink().c_str(), modSpeed);
chr->SetSpeedRate(MOVE_FLIGHT,FSpeed,true); chr->UpdateSpeed(MOVE_FLIGHT, true, modSpeed);
return true; return true;
} }

View file

@ -8641,11 +8641,6 @@ void Unit::SetPet(Pet* pet)
if(pet && GetTypeId() == TYPEID_PLAYER) if(pet && GetTypeId() == TYPEID_PLAYER)
((Player*)this)->SendPetGUIDs(); ((Player*)this)->SendPetGUIDs();
// FIXME: hack, speed must be set only at follow
if(pet && GetTypeId()==TYPEID_PLAYER)
for(int i = 0; i < MAX_MOVE_TYPE; ++i)
pet->SetSpeedRate(UnitMoveType(i), m_speed_rate[i], true);
} }
void Unit::SetCharm(Unit* pet) void Unit::SetCharm(Unit* pet)
@ -10727,7 +10722,7 @@ void Unit::UpdateWalkMode(Unit* source, bool self)
CallForAllControlledUnits(UpdateWalkModeHelper(source), false, true, true); CallForAllControlledUnits(UpdateWalkModeHelper(source), false, true, true);
} }
void Unit::UpdateSpeed(UnitMoveType mtype, bool forced) void Unit::UpdateSpeed(UnitMoveType mtype, bool forced, float ratio)
{ {
// not in combat pet have same speed as owner // not in combat pet have same speed as owner
switch(mtype) switch(mtype)
@ -10837,7 +10832,7 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
if (speed < min_speed) if (speed < min_speed)
speed = min_speed; speed = min_speed;
} }
SetSpeedRate(mtype, speed, forced); SetSpeedRate(mtype, speed * ratio, forced);
} }
float Unit::GetSpeed( UnitMoveType mtype ) const float Unit::GetSpeed( UnitMoveType mtype ) const

View file

@ -1739,7 +1739,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
void CalcAbsorbResist(Unit *pVictim, SpellSchoolMask schoolMask, DamageEffectType damagetype, const uint32 damage, uint32 *absorb, uint32 *resist, bool canReflect = false); void CalcAbsorbResist(Unit *pVictim, SpellSchoolMask schoolMask, DamageEffectType damagetype, const uint32 damage, uint32 *absorb, uint32 *resist, bool canReflect = false);
void UpdateWalkMode(Unit* source, bool self = true); void UpdateWalkMode(Unit* source, bool self = true);
void UpdateSpeed(UnitMoveType mtype, bool forced); void UpdateSpeed(UnitMoveType mtype, bool forced, float ratio = 1.0f);
float GetSpeed( UnitMoveType mtype ) const; float GetSpeed( UnitMoveType mtype ) const;
float GetSpeedRate( UnitMoveType mtype ) const { return m_speed_rate[mtype]; } float GetSpeedRate( UnitMoveType mtype ) const { return m_speed_rate[mtype]; }
void SetSpeedRate(UnitMoveType mtype, float rate, bool forced = false); void SetSpeedRate(UnitMoveType mtype, float rate, bool forced = false);

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "9582" #define REVISION_NR "9583"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__