Skip to content

Commit

Permalink
[7165] More strict checking for client casted spells.
Browse files Browse the repository at this point in the history
Allow explictly cast character spell from client only if it non-passive and show in spellbook/etc base at server data.
  • Loading branch information
VladimirMangos committed Jan 24, 2009
1 parent 8bde5de commit d31d5f2
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 4 deletions.
10 changes: 9 additions & 1 deletion src/game/Player.cpp
Expand Up @@ -3560,7 +3560,15 @@ void Player::DestroyForPlayer( Player *target ) const
bool Player::HasSpell(uint32 spell) const
{
PlayerSpellMap::const_iterator itr = m_spells.find(spell);
return (itr != m_spells.end() && itr->second->state != PLAYERSPELL_REMOVED && !itr->second->disabled);
return (itr != m_spells.end() && itr->second->state != PLAYERSPELL_REMOVED &&
!itr->second->disabled);
}

bool Player::HasActiveSpell(uint32 spell) const
{
PlayerSpellMap::const_iterator itr = m_spells.find(spell);
return (itr != m_spells.end() && itr->second->state != PLAYERSPELL_REMOVED &&
itr->second->active && !itr->second->disabled);
}

TrainerSpellState Player::GetTrainerSpellState(TrainerSpell const* trainer_spell) const
Expand Down
1 change: 1 addition & 0 deletions src/game/Player.h
Expand Up @@ -1476,6 +1476,7 @@ class MANGOS_DLL_SPEC Player : public Unit
void CharmSpellInitialize();
void PossessSpellInitialize();
bool HasSpell(uint32 spell) const;
bool HasActiveSpell(uint32 spell) const; // show in spellbook
TrainerSpellState GetTrainerSpellState(TrainerSpell const* trainer_spell) const;
bool IsSpellFitByClassAndRace( uint32 spell_id ) const;
bool IsNeedCastPassiveSpellAtLearn(SpellEntry const* spellInfo) const;
Expand Down
4 changes: 2 additions & 2 deletions src/game/SpellHandler.cpp
Expand Up @@ -261,8 +261,8 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket)
return;
}

// not have spell or spell passive and not casted by client
if ( !_player->HasSpell (spellId) || IsPassiveSpell(spellId) )
// not have spell in spellbook or spell passive and not casted by client
if ( !_player->HasActiveSpell (spellId) || IsPassiveSpell(spellId) )
{
//cheater? kick? ban?
return;
Expand Down
2 changes: 1 addition & 1 deletion src/shared/revision_nr.h
@@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "7164"
#define REVISION_NR "7165"
#endif // __REVISION_NR_H__

0 comments on commit d31d5f2

Please sign in to comment.