diff options
Diffstat (limited to 'src/game/SkillHandler.cpp')
| -rw-r--r-- | src/game/SkillHandler.cpp | 110 | 
1 files changed, 4 insertions, 106 deletions
diff --git a/src/game/SkillHandler.cpp b/src/game/SkillHandler.cpp index 973d0bf9c39..06a7317d09d 100644 --- a/src/game/SkillHandler.cpp +++ b/src/game/SkillHandler.cpp @@ -1,7 +1,7 @@  /* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> + * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>   * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> + * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/>   *   * This program is free software; you can redistribute it and/or modify   * it under the terms of the GNU General Public License as published by @@ -23,12 +23,10 @@  #include "Opcodes.h"  #include "Log.h"  #include "Player.h" -#include "World.h"  #include "WorldPacket.h"  #include "WorldSession.h"  #include "ObjectAccessor.h"  #include "UpdateMask.h" -#include "SpellAuras.h"  void WorldSession::HandleLearnTalentOpcode( WorldPacket & recv_data )  { @@ -37,107 +35,7 @@ void WorldSession::HandleLearnTalentOpcode( WorldPacket & recv_data )      uint32 talent_id, requested_rank;      recv_data >> talent_id >> requested_rank; -    uint32 CurTalentPoints =  GetPlayer()->GetFreeTalentPoints(); - -    if(CurTalentPoints == 0) -        return; - -    if (requested_rank > 4) -        return; - -    TalentEntry const *talentInfo = sTalentStore.LookupEntry( talent_id ); - -    if(!talentInfo) -        return; - -    TalentTabEntry const *talentTabInfo = sTalentTabStore.LookupEntry( talentInfo->TalentTab ); - -    if(!talentTabInfo) -        return; - -    Player * player = GetPlayer(); - -    // prevent learn talent for different class (cheating) -    if( (player->getClassMask() & talentTabInfo->ClassMask) == 0 ) -        return; - -    // prevent skip talent ranks (cheating) -    if(requested_rank > 0 && !player->HasSpell(talentInfo->RankID[requested_rank-1])) -        return; - -    // Check if it requires another talent -    if (talentInfo->DependsOn > 0) -    { -        if(TalentEntry const *depTalentInfo = sTalentStore.LookupEntry(talentInfo->DependsOn)) -        { -            bool hasEnoughRank = false; -            for (int i = talentInfo->DependsOnRank; i <= 4; i++) -            { -                if (depTalentInfo->RankID[i] != 0) -                    if (player->HasSpell(depTalentInfo->RankID[i])) -                        hasEnoughRank = true; -            } -            if (!hasEnoughRank) -                return; -        } -    } - -    // Check if it requires spell -    if( talentInfo->DependsOnSpell && !player->HasSpell(talentInfo->DependsOnSpell) ) -        return; - -    // Find out how many points we have in this field -    uint32 spentPoints = 0; - -    uint32 tTab = talentInfo->TalentTab; -    if (talentInfo->Row > 0) -    { -        unsigned int numRows = sTalentStore.GetNumRows(); -        for (unsigned int i = 0; i < numRows; i++)          // Loop through all talents. -        { -            // Someday, someone needs to revamp -            const TalentEntry *tmpTalent = sTalentStore.LookupEntry(i); -            if (tmpTalent)                                  // the way talents are tracked -            { -                if (tmpTalent->TalentTab == tTab) -                { -                    for (int j = 0; j <= 4; j++) -                    { -                        if (tmpTalent->RankID[j] != 0) -                        { -                            if (player->HasSpell(tmpTalent->RankID[j])) -                            { -                                spentPoints += j + 1; -                            } -                        } -                    } -                } -            } -        } -    } - -    // not have required min points spent in talent tree -    if(spentPoints < (talentInfo->Row * 5)) -        return; - -    // spell not set in talent.dbc -    uint32 spellid = talentInfo->RankID[requested_rank]; -    if( spellid == 0 ) -    { -        sLog.outError("Talent.dbc have for talent: %u Rank: %u spell id = 0", talent_id, requested_rank); -        return; -    } - -    // already known -    if(GetPlayer( )->HasSpell(spellid)) -        return; - -    // learn! (other talent ranks will unlearned at learning) -    GetPlayer( )->learnSpell(spellid); -    sLog.outDetail("TalentID: %u Rank: %u Spell: %u\n", talent_id, requested_rank, spellid); - -    // update free talent points -    GetPlayer()->SetFreeTalentPoints(CurTalentPoints - 1); +    _player->LearnTalent(talent_id, requested_rank);  }  void WorldSession::HandleTalentWipeOpcode( WorldPacket & recv_data ) @@ -157,7 +55,7 @@ void WorldSession::HandleTalentWipeOpcode( WorldPacket & recv_data )      // remove fake death      if(GetPlayer()->hasUnitState(UNIT_STAT_DIED)) -        GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH); +        GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);      if(!(_player->resetTalents()))      {  | 
