From 4e117d1ee8964d9c9497542e136f3badf47145fb Mon Sep 17 00:00:00 2001 From: Velvet Date: Wed, 18 Jul 2012 14:56:42 +0200 Subject: [PATCH] [12056] Fix a bug of [11825] that causes wrong offhand attack times for players. Thx to fr1nge for reporting the bug. Problem spotting and patch by vovk Additional cleanup by fr1nge Signed-off-by: Schmoozerd --- src/game/Player.cpp | 87 ++++++++++++++++++---------------------- src/shared/revision_nr.h | 2 +- 2 files changed, 41 insertions(+), 48 deletions(-) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index be898f47e..6580e41c9 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -1160,16 +1160,16 @@ void Player::SetDrunkValue(uint16 newDrunkenValue, uint32 itemId) SendMessageToSet(&data, true); } -void Player::Update( uint32 update_diff, uint32 p_time ) +void Player::Update(uint32 update_diff, uint32 p_time) { - if(!IsInWorld()) + if (!IsInWorld()) return; - // remove failed timed Achievements + // Remove failed timed Achievements GetAchievementMgr().DoFailedTimedAchievementCriterias(); - // undelivered mail - if(m_nextMailDelivereTime && m_nextMailDelivereTime <= time(NULL)) + // Undelivered mail + if (m_nextMailDelivereTime && m_nextMailDelivereTime <= time(NULL)) { SendNewMail(); ++unReadMails; @@ -1178,23 +1178,16 @@ void Player::Update( uint32 update_diff, uint32 p_time ) m_nextMailDelivereTime = 0; } - //used to implement delayed far teleports + // Used to implement delayed far teleports SetCanDelayTeleport(true); - Unit::Update( update_diff, p_time ); + Unit::Update(update_diff, p_time); SetCanDelayTeleport(false); - // update player only attacks - if(uint32 ranged_att = getAttackTimer(RANGED_ATTACK)) - { - setAttackTimer(RANGED_ATTACK, (update_diff >= ranged_att ? 0 : ranged_att - update_diff) ); - } + // Update player only attacks + if (uint32 ranged_att = getAttackTimer(RANGED_ATTACK)) + setAttackTimer(RANGED_ATTACK, (update_diff >= ranged_att ? 0 : ranged_att - update_diff)); - if(uint32 off_att = getAttackTimer(OFF_ATTACK)) - { - setAttackTimer(OFF_ATTACK, (update_diff >= off_att ? 0 : off_att - update_diff) ); - } - - time_t now = time (NULL); + time_t now = time(NULL); UpdatePvPFlag(now); @@ -1207,8 +1200,8 @@ void Player::Update( uint32 update_diff, uint32 p_time ) UpdateAfkReport(now); // Update items that have just a limited lifetime - if (now>m_Last_tick) - UpdateItemDuration(uint32(now- m_Last_tick)); + if (now > m_Last_tick) + UpdateItemDuration(uint32(now - m_Last_tick)); if (!m_timedquests.empty()) { @@ -1216,10 +1209,10 @@ void Player::Update( uint32 update_diff, uint32 p_time ) while (iter != m_timedquests.end()) { QuestStatusData& q_status = mQuestStatus[*iter]; - if( q_status.m_timer <= update_diff ) + if (q_status.m_timer <= update_diff) { uint32 quest_id = *iter; - ++iter; // current iter will be removed in FailQuest + ++iter; // Current iter will be removed in FailQuest FailQuest(quest_id); } else @@ -1235,10 +1228,10 @@ void Player::Update( uint32 update_diff, uint32 p_time ) { UpdateMeleeAttackingState(); - Unit *pVictim = getVictim(); + Unit* pVictim = getVictim(); if (pVictim && !IsNonMeleeSpellCasted(false)) { - Player *vOwner = pVictim->GetCharmerOrOwnerPlayerOrPlayerItself(); + Player* vOwner = pVictim->GetCharmerOrOwnerPlayerOrPlayerItself(); if (vOwner && vOwner->IsPvP() && !IsInDuelWith(vOwner)) { UpdatePvP(true); @@ -1249,14 +1242,14 @@ void Player::Update( uint32 update_diff, uint32 p_time ) if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING)) { - if (roll_chance_i(3) && GetTimeInnEnter() > 0) //freeze update + if (roll_chance_i(3) && GetTimeInnEnter() > 0) // Freeze update { - time_t time_inn = time(NULL)-GetTimeInnEnter(); - if (time_inn >= 10) //freeze update + time_t time_inn = time(NULL) - GetTimeInnEnter(); + if (time_inn >= 10) // Freeze update { - float bubble = 0.125f*sWorld.getConfig(CONFIG_FLOAT_RATE_REST_INGAME); - //speed collect rest bonus (section/in hour) - SetRestBonus( float(GetRestBonus()+ time_inn*(GetUInt32Value(PLAYER_NEXT_LEVEL_XP)/72000)*bubble )); + float bubble = 0.125f * sWorld.getConfig(CONFIG_FLOAT_RATE_REST_INGAME); + // Speed collect rest bonus (section/in hour) + SetRestBonus(float(GetRestBonus() + time_inn * (GetUInt32Value(PLAYER_NEXT_LEVEL_XP) / 72000) * bubble)); UpdateInnerTime(time(NULL)); } } @@ -1264,7 +1257,7 @@ void Player::Update( uint32 update_diff, uint32 p_time ) if (m_regenTimer) { - if(update_diff >= m_regenTimer) + if (update_diff >= m_regenTimer) m_regenTimer = 0; else m_regenTimer -= update_diff; @@ -1280,18 +1273,18 @@ void Player::Update( uint32 update_diff, uint32 p_time ) if (m_zoneUpdateTimer > 0) { - if(update_diff >= m_zoneUpdateTimer) + if (update_diff >= m_zoneUpdateTimer) { uint32 newzone, newarea; - GetZoneAndAreaId(newzone,newarea); + GetZoneAndAreaId(newzone, newarea); - if( m_zoneUpdateId != newzone ) - UpdateZone(newzone,newarea); // also update area + if (m_zoneUpdateId != newzone) + UpdateZone(newzone, newarea); // Also update area else { - // use area updates as well - // needed for free far all arenas for example - if( m_areaUpdateId != newarea ) + // Use area updates as well + // Needed for free for all arenas for example + if (m_areaUpdateId != newarea) UpdateArea(newarea); m_zoneUpdateTimer = ZONE_UPDATE_INTERVAL; @@ -1303,7 +1296,7 @@ void Player::Update( uint32 update_diff, uint32 p_time ) if (m_timeSyncTimer > 0) { - if(update_diff >= m_timeSyncTimer) + if (update_diff >= m_timeSyncTimer) SendTimeSync(); else m_timeSyncTimer -= update_diff; @@ -1322,9 +1315,9 @@ void Player::Update( uint32 update_diff, uint32 p_time ) if (m_deathState == JUST_DIED) KillPlayer(); - if(m_nextSave > 0) + if (m_nextSave > 0) { - if(update_diff >= m_nextSave) + if (update_diff >= m_nextSave) { // m_nextSave reseted in SaveToDB call SaveToDB(); @@ -1334,10 +1327,10 @@ void Player::Update( uint32 update_diff, uint32 p_time ) m_nextSave -= update_diff; } - //Handle Water/drowning + // Handle Water/drowning HandleDrowning(update_diff); - //Handle detect stealth players + // Handle detect stealth players if (m_DetectInvTimer > 0) { if (update_diff >= m_DetectInvTimer) @@ -1366,10 +1359,10 @@ void Player::Update( uint32 update_diff, uint32 p_time ) HandleSobering(); } - // not auto-free ghost from body in instances - if(m_deathTimer > 0 && !GetMap()->Instanceable()) + // Not auto-free ghost from body in instances + if (m_deathTimer > 0 && !GetMap()->Instanceable()) { - if(p_time >= m_deathTimer) + if (p_time >= m_deathTimer) { m_deathTimer = 0; BuildPlayerRepop(); @@ -1382,7 +1375,7 @@ void Player::Update( uint32 update_diff, uint32 p_time ) UpdateEnchantTime(update_diff); UpdateHomebindTime(update_diff); - // group update + // Group update SendUpdateToOutOfRangeGroupMembers(); Pet* pet = GetPet(); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 9d20fd781..dfccecccc 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "12055" + #define REVISION_NR "12056" #endif // __REVISION_NR_H__