From d9de56ed2c989b1fdacbfa7c2f7493ff8d0bbbe7 Mon Sep 17 00:00:00 2001 From: hunuza Date: Fri, 12 Dec 2008 22:50:57 +0100 Subject: [PATCH 1/3] [6903] Avoid DB access on player invite to channel. --- src/game/Channel.cpp | 9 ++------- src/game/Channel.h | 2 +- src/shared/revision_nr.h | 2 +- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/game/Channel.cpp b/src/game/Channel.cpp index 22c1a5b1a..d1dee730c 100644 --- a/src/game/Channel.cpp +++ b/src/game/Channel.cpp @@ -626,7 +626,7 @@ void Channel::Invite(uint64 p, const char *newname) SendToOne(&data, newp->GetGUID()); data.clear(); } - MakePlayerInvited(&data, newp->GetGUID()); + MakePlayerInvited(&data, newp->GetName()); SendToOne(&data, p); } @@ -916,13 +916,8 @@ void Channel::MakeNotModerated(WorldPacket *data) } // done 0x1D -void Channel::MakePlayerInvited(WorldPacket *data, uint64 guid) +void Channel::MakePlayerInvited(WorldPacket *data, const std::string& name) { - std::string name; - - if(!objmgr.GetPlayerNameByGUID(guid, name) || name.empty()) - return; // player name not found - MakeNotifyPacket(data, CHAT_PLAYER_INVITED_NOTICE); *data << name; } diff --git a/src/game/Channel.h b/src/game/Channel.h index c3214f824..55ebf57ea 100644 --- a/src/game/Channel.h +++ b/src/game/Channel.h @@ -190,7 +190,7 @@ class Channel void MakeWrongFaction(WorldPacket *data); //? 0x1A void MakeInvalidName(WorldPacket *data); //? 0x1B void MakeNotModerated(WorldPacket *data); //? 0x1C - void MakePlayerInvited(WorldPacket *data, uint64 guid); //+ 0x1D + void MakePlayerInvited(WorldPacket *data, const std::string& name); //+ 0x1D void MakePlayerInviteBanned(WorldPacket *data, uint64 guid); //? 0x1E void MakeThrottled(WorldPacket *data); //? 0x1F void MakeNotInArea(WorldPacket *data); //? 0x20 diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index f3c8a6fdf..747b67a5e 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 "6902" + #define REVISION_NR "6903" #endif // __REVISION_NR_H__ From fc5e12c828c81e51d9a04d846aa0adf1df3d800e Mon Sep 17 00:00:00 2001 From: derex Date: Sat, 13 Dec 2008 19:04:02 +0200 Subject: [PATCH 2/3] [6904] Fix possible crash by client sending several times CMSG_PLAYER_LOGIN. --- src/game/CharacterHandler.cpp | 6 ++++++ src/shared/revision_nr.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp index 8880a7b2e..920bc8b76 100644 --- a/src/game/CharacterHandler.cpp +++ b/src/game/CharacterHandler.cpp @@ -453,6 +453,12 @@ void WorldSession::HandlePlayerLoginOpcode( WorldPacket & recv_data ) { CHECK_PACKET_SIZE(recv_data,8); + if(PlayerLoading() || GetPlayer() != NULL) + { + sLog.outError("Player tryes to login again, AccountId = %d",GetAccountId()); + return; + } + m_playerLoading = true; uint64 playerGuid = 0; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 747b67a5e..372a42dfa 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 "6903" + #define REVISION_NR "6904" #endif // __REVISION_NR_H__ From d97a8d33b975e047b3031b1bf779065b61a74810 Mon Sep 17 00:00:00 2001 From: arrai Date: Sat, 13 Dec 2008 18:59:37 +0100 Subject: [PATCH 3/3] [6905] Fixed items with both healing and energizing effects Store fall information also at MSG_MOVE_FALL_LAND --- src/game/MovementHandler.cpp | 2 +- src/game/Spell.cpp | 32 ++++++++++++++++++++++++++++---- src/shared/revision_nr.h | 2 +- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp index 922b39e50..372818072 100644 --- a/src/game/MovementHandler.cpp +++ b/src/game/MovementHandler.cpp @@ -362,7 +362,7 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data ) GetPlayer()->SetPosition(movementInfo.x, movementInfo.y, movementInfo.z, movementInfo.o); GetPlayer()->m_movementInfo = movementInfo; - if (GetPlayer()->m_lastFallTime >= movementInfo.fallTime || GetPlayer()->m_lastFallZ <=movementInfo.z) + if (GetPlayer()->m_lastFallTime >= movementInfo.fallTime || GetPlayer()->m_lastFallZ <=movementInfo.z || recv_data.GetOpcode() == MSG_MOVE_FALL_LAND) GetPlayer()->SetFallInformation(movementInfo.fallTime, movementInfo.z); if(GetPlayer()->isMovingOrTurning()) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 458fa8af6..831c1a17d 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -4405,6 +4405,8 @@ uint8 Spell::CheckItems() uint32 ItemClass = proto->Class; if (ItemClass == ITEM_CLASS_CONSUMABLE && m_targets.getUnitTarget()) { + // such items should only fail if there is no suitable effect at all - see Rejuvenation Potions for example + uint8 failReason = 0; for (int i = 0; i < 3; i++) { // skip check, pet not required like checks, and for TARGET_PET m_targets.getUnitTarget() is not the real target but the caster @@ -4412,21 +4414,43 @@ uint8 Spell::CheckItems() continue; if (m_spellInfo->Effect[i] == SPELL_EFFECT_HEAL) + { if (m_targets.getUnitTarget()->GetHealth() == m_targets.getUnitTarget()->GetMaxHealth()) - return (uint8)SPELL_FAILED_ALREADY_AT_FULL_HEALTH; + { + failReason = (uint8)SPELL_FAILED_ALREADY_AT_FULL_HEALTH; + continue; + } + else + { + failReason = 0; + break; + } + } // Mana Potion, Rage Potion, Thistle Tea(Rogue), ... if (m_spellInfo->Effect[i] == SPELL_EFFECT_ENERGIZE) { if(m_spellInfo->EffectMiscValue[i] < 0 || m_spellInfo->EffectMiscValue[i] >= MAX_POWERS) - return (uint8)SPELL_FAILED_ALREADY_AT_FULL_POWER; + { + failReason = (uint8)SPELL_FAILED_ALREADY_AT_FULL_POWER; + continue; + } Powers power = Powers(m_spellInfo->EffectMiscValue[i]); - if (m_targets.getUnitTarget()->GetPower(power) == m_targets.getUnitTarget()->GetMaxPower(power)) - return (uint8)SPELL_FAILED_ALREADY_AT_FULL_POWER; + { + failReason = (uint8)SPELL_FAILED_ALREADY_AT_FULL_POWER; + continue; + } + else + { + failReason = 0; + break; + } } } + if (failReason) + return failReason; } } } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 372a42dfa..756f31327 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 "6904" + #define REVISION_NR "6905" #endif // __REVISION_NR_H__