diff options
-rw-r--r-- | sql/updates/world/2014_07_12_00_world_misc.sql | 14 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 170 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 16 | ||||
-rw-r--r-- | src/server/game/Guilds/Guild.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/NPCHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Movement/PathGenerator.cpp | 26 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_learn.cpp | 18 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_reset.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_item.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/World/npc_professions.cpp | 128 |
14 files changed, 213 insertions, 182 deletions
diff --git a/sql/updates/world/2014_07_12_00_world_misc.sql b/sql/updates/world/2014_07_12_00_world_misc.sql new file mode 100644 index 00000000000..18de044cf2e --- /dev/null +++ b/sql/updates/world/2014_07_12_00_world_misc.sql @@ -0,0 +1,14 @@ +-- +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=24992; +INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES +(24992, 45008, 0, 0); + +UPDATE `creature_template` SET `npcflag`=16777216 WHERE `entry`=24992; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=45008; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 45008, 0, 0, 31, 0, 3, 24914, 0, 0, 0, 0, '', 'Spell Cannon Assault targets Sorlof'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceGroup`=24992; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(18, 24992, 45008, 0, 0, 9, 0, 11529, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick'); diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 45f71b096f8..020727970ff 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2282,6 +2282,7 @@ void Creature::AllLootRemovedFromCorpse() SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); time_t now = time(NULL); + // Do not reset corpse remove time if corpse is already removed if (m_corpseRemoveTime <= now) return; @@ -2289,7 +2290,7 @@ void Creature::AllLootRemovedFromCorpse() // corpse skinnable, but without skinning flag, and then skinned, corpse will despawn next update if (loot.loot_type == LOOT_SKINNING) - m_corpseRemoveTime = time(NULL); + m_corpseRemoveTime = now; else m_corpseRemoveTime = now + m_corpseDelay * decayRate; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 18ab42f541f..b866dcc7a67 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3596,7 +3596,7 @@ bool Player::AddTalent(uint32 spellId, uint8 spec, bool learning) return false; } -bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading /*= false*/) +bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading /*= false*/, bool fromSkill /*= false*/) { SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); if (!spellInfo) @@ -3759,7 +3759,7 @@ bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent if (!rankSpellId || rankSpellId == spellId) continue; - removeSpell(rankSpellId, false, false); + RemoveSpell(rankSpellId, false, false); } } } @@ -3767,9 +3767,9 @@ bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent else if (uint32 prev_spell = sSpellMgr->GetPrevSpellInChain(spellId)) { if (!IsInWorld() || disabled) // at spells loading, no output, but allow save - addSpell(prev_spell, active, true, true, disabled); + AddSpell(prev_spell, active, true, true, disabled, false, fromSkill); else // at normal learning - learnSpell(prev_spell, true); + LearnSpell(prev_spell, true, fromSkill); } PlayerSpell* newspell = new PlayerSpell; @@ -3867,41 +3867,39 @@ bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent if (spellInfo->IsPrimaryProfessionFirstRank()) SetFreePrimaryProfessions(freeProfs-1); } - - // add dependent skills - uint16 maxskill = GetMaxSkillValueForLevel(); - - SpellLearnSkillNode const* spellLearnSkill = sSpellMgr->GetSpellLearnSkill(spellId); - + SkillLineAbilityMapBounds skill_bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellId); - if (spellLearnSkill) + // add dependent skills if this spell is not learned from adding skill already + if (!fromSkill) { - uint32 skill_value = GetPureSkillValue(spellLearnSkill->skill); - uint32 skill_max_value = GetPureMaxSkillValue(spellLearnSkill->skill); - - if (skill_value < spellLearnSkill->value) - skill_value = spellLearnSkill->value; + if (SpellLearnSkillNode const* spellLearnSkill = sSpellMgr->GetSpellLearnSkill(spellId)) + { + uint32 skill_value = GetPureSkillValue(spellLearnSkill->skill); + uint32 skill_max_value = GetPureMaxSkillValue(spellLearnSkill->skill); - uint32 new_skill_max_value = spellLearnSkill->maxvalue == 0 ? maxskill : spellLearnSkill->maxvalue; + if (skill_value < spellLearnSkill->value) + skill_value = spellLearnSkill->value; - if (skill_max_value < new_skill_max_value) - skill_max_value = new_skill_max_value; + uint32 new_skill_max_value = spellLearnSkill->maxvalue == 0 ? GetMaxSkillValueForLevel() : spellLearnSkill->maxvalue; - SetSkill(spellLearnSkill->skill, spellLearnSkill->step, skill_value, skill_max_value); - } + if (skill_max_value < new_skill_max_value) + skill_max_value = new_skill_max_value; - else - { - // not ranked skills - for (SkillLineAbilityMap::const_iterator _spell_idx = skill_bounds.first; _spell_idx != skill_bounds.second; ++_spell_idx) + SetSkill(spellLearnSkill->skill, spellLearnSkill->step, skill_value, skill_max_value); + } + else { - SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId); - if (!pSkill) - continue; + // not ranked skills + for (SkillLineAbilityMap::const_iterator _spell_idx = skill_bounds.first; _spell_idx != skill_bounds.second; ++_spell_idx) + { + SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId); + if (!pSkill) + continue; - if (!HasSkill(pSkill->id)) - LearnDefaultSkill(pSkill->id, 0); + if (_spell_idx->second->AutolearnType == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN && !HasSkill(pSkill->id)) + LearnDefaultSkill(pSkill->id, 0); + } } } @@ -3913,9 +3911,9 @@ bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent if (!itr2->second.autoLearned) { if (!IsInWorld() || !itr2->second.active) // at spells loading, no output, but allow save - addSpell(itr2->second.spell, itr2->second.active, true, true, false); + AddSpell(itr2->second.spell, itr2->second.active, true, true, false); else // at normal learning - learnSpell(itr2->second.spell, true); + LearnSpell(itr2->second.spell, true); } } @@ -3985,14 +3983,14 @@ bool Player::IsCurrentSpecMasterySpell(SpellInfo const* spellInfo) const return false; } -void Player::learnSpell(uint32 spell_id, bool dependent) +void Player::LearnSpell(uint32 spell_id, bool dependent, bool fromSkill /*= false*/) { PlayerSpellMap::iterator itr = m_spells.find(spell_id); bool disabled = (itr != m_spells.end()) ? itr->second->disabled : false; bool active = disabled ? itr->second->active : true; - bool learning = addSpell(spell_id, active, true, dependent, false); + bool learning = AddSpell(spell_id, active, true, dependent, false, false, fromSkill); // prevent duplicated entires in spell book, also not send if not in world (loading) if (learning && IsInWorld()) @@ -4010,7 +4008,7 @@ void Player::learnSpell(uint32 spell_id, bool dependent) { PlayerSpellMap::iterator iter = m_spells.find(nextSpell); if (iter != m_spells.end() && iter->second->disabled) - learnSpell(nextSpell, false); + LearnSpell(nextSpell, false, fromSkill); } SpellsRequiringSpellMapBounds spellsRequiringSpell = sSpellMgr->GetSpellsRequiringSpellBounds(spell_id); @@ -4018,12 +4016,12 @@ void Player::learnSpell(uint32 spell_id, bool dependent) { PlayerSpellMap::iterator iter2 = m_spells.find(itr2->second); if (iter2 != m_spells.end() && iter2->second->disabled) - learnSpell(itr2->second, false); + LearnSpell(itr2->second, false, fromSkill); } } } -void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank) +void Player::RemoveSpell(uint32 spell_id, bool disabled, bool learn_low_rank) { PlayerSpellMap::iterator itr = m_spells.find(spell_id); if (itr == m_spells.end()) @@ -4036,12 +4034,12 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank) if (uint32 nextSpell = sSpellMgr->GetNextSpellInChain(spell_id)) { if (HasSpell(nextSpell) && !GetTalentSpellPos(nextSpell)) - removeSpell(nextSpell, disabled, false); + RemoveSpell(nextSpell, disabled, false); } //unlearn spells dependent from recently removed spells SpellsRequiringSpellMapBounds spellsRequiringSpell = sSpellMgr->GetSpellsRequiringSpellBounds(spell_id); for (SpellsRequiringSpellMap::const_iterator itr2 = spellsRequiringSpell.first; itr2 != spellsRequiringSpell.second; ++itr2) - removeSpell(itr2->second, disabled); + RemoveSpell(itr2->second, disabled); // re-search, it can be corrupted in prev loop itr = m_spells.find(spell_id); @@ -4137,7 +4135,7 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank) SpellLearnSpellMapBounds spell_bounds = sSpellMgr->GetSpellLearnSpellMapBounds(spell_id); for (SpellLearnSpellMap::const_iterator itr2 = spell_bounds.first; itr2 != spell_bounds.second; ++itr2) - removeSpell(itr2->second.spell, disabled); + RemoveSpell(itr2->second.spell, disabled); // activate lesser rank in spellbook/action bar, and cast it if need bool prev_activate = false; @@ -4169,7 +4167,7 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank) // now re-learn if need re-activate if (cur_active && !prev_itr->second->active && learn_low_rank) { - if (addSpell(prev_id, true, false, prev_itr->second->dependent, prev_itr->second->disabled)) + if (AddSpell(prev_id, true, false, prev_itr->second->dependent, prev_itr->second->disabled)) { // downgrade spell ranks in spellbook and action bar WorldPacket data(SMSG_SUPERCEDED_SPELL, 4 + 4); @@ -4449,11 +4447,11 @@ bool Player::ResetTalents(bool no_cost) const SpellInfo* _spellEntry = sSpellMgr->GetSpellInfo(talentInfo->RankID[rank]); if (!_spellEntry) continue; - removeSpell(talentInfo->RankID[rank], true); + RemoveSpell(talentInfo->RankID[rank], true); // search for spells that the talent teaches and unlearn them for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) if (_spellEntry->Effects[i].TriggerSpell > 0 && _spellEntry->Effects[i].Effect == SPELL_EFFECT_LEARN_SPELL) - removeSpell(_spellEntry->Effects[i].TriggerSpell, true); + RemoveSpell(_spellEntry->Effects[i].TriggerSpell, true); // if this talent rank can be found in the PlayerTalentMap, mark the talent as removed so it gets deleted PlayerTalentMap::iterator plrTalent = GetTalentMap(GetActiveSpec())->find(talentInfo->RankID[rank]); if (plrTalent != GetTalentMap(GetActiveSpec())->end()) @@ -4467,7 +4465,7 @@ bool Player::ResetTalents(bool no_cost) { if (std::vector<uint32> const* specSpells = GetTalentTreePrimarySpells(talentTabs[i])) for (size_t j = 0; j < specSpells->size(); ++j) - removeSpell(specSpells->at(j), true); + RemoveSpell(specSpells->at(j), true); TalentTabEntry const* talentTabInfo = sTalentTabStore.LookupEntry(talentTabs[i]); for (uint32 j = 0; j < MAX_MASTERY_SPELLS; ++j) @@ -6074,7 +6072,7 @@ bool Player::UpdateCraftSkill(uint32 spellid) if (spellEntry && spellEntry->Mechanic == MECHANIC_DISCOVERY) { if (uint32 discoveredSpell = GetSkillDiscoverySpell(_spell_idx->second->skillId, spellid, this)) - learnSpell(discoveredSpell, false); + LearnSpell(discoveredSpell, false); } uint32 craft_skill_gain = sWorld->getIntConfig(CONFIG_SKILL_GAIN_CRAFTING); @@ -6180,7 +6178,7 @@ bool Player::UpdateSkillPro(uint16 skillId, int32 chance, uint32 step) uint32 bsl = bonusSkillLevels[i]; if (value < bsl && new_value >= bsl) { - learnSkillRewardedSpells(skillId, new_value); + LearnSkillRewardedSpells(skillId, new_value); break; } } @@ -6306,7 +6304,7 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) if (itr->second.uState != SKILL_NEW) itr->second.uState = SKILL_CHANGED; - learnSkillRewardedSpells(id, newVal); + LearnSkillRewardedSpells(id, newVal); // if skill value is going up, update enchantments after setting the new value if (newVal > currVal) UpdateSkillEnchantments(id, currVal, newVal); @@ -6336,7 +6334,7 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j) if (SkillLineAbilityEntry const* pAbility = sSkillLineAbilityStore.LookupEntry(j)) if (pAbility->skillId == id) - removeSpell(sSpellMgr->GetFirstSpellInChain(pAbility->spellId)); + RemoveSpell(sSpellMgr->GetFirstSpellInChain(pAbility->spellId)); // Clear profession lines if (GetUInt32Value(PLAYER_PROFESSION_SKILL_LINE_1) == id) @@ -6391,7 +6389,6 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) // apply skill bonuses SetUInt16Value(PLAYER_SKILL_MODIFIER_0 + field, offset, 0); SetUInt16Value(PLAYER_SKILL_TALENT_0 + field, offset, 0); - // temporary bonuses AuraEffectList const& mModSkill = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL); for (AuraEffectList::const_iterator j = mModSkill.begin(); j != mModSkill.end(); ++j) @@ -6405,7 +6402,7 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true); // Learn all spells for skill - learnSkillRewardedSpells(id, newVal); + LearnSkillRewardedSpells(id, newVal); return; } } @@ -9946,7 +9943,7 @@ void Player::SetBindPoint(uint64 guid) void Player::SendTalentWipeConfirm(uint64 guid) { - WorldPacket data(MSG_TALENT_WIPE_CONFIRM, (8+4)); + WorldPacket data(MSG_TALENT_WIPE_CONFIRM, 8 + 4); data << uint64(guid); uint32 cost = sWorld->getBoolConfig(CONFIG_NO_RESET_TALENT_COST) ? 0 : GetNextResetTalentsCost(); data << cost; @@ -18661,7 +18658,7 @@ void Player::_LoadQuestStatusRewarded(PreparedQueryResult result) if (quest) { // learn rewarded spell if unknown - learnQuestRewardedSpells(quest); + LearnQuestRewardedSpells(quest); // set rewarded title if any if (quest->GetCharTitleId()) @@ -18809,7 +18806,7 @@ void Player::_LoadSpells(PreparedQueryResult result) if (result) { do - addSpell((*result)[0].GetUInt32(), (*result)[1].GetBool(), false, false, (*result)[2].GetBool(), true); + AddSpell((*result)[0].GetUInt32(), (*result)[1].GetBool(), false, false, (*result)[2].GetBool(), true); while (result->NextRow()); } } @@ -23556,7 +23553,7 @@ void Player::ApplyEquipCooldown(Item* pItem) } } -void Player::resetSpells(bool myClassOnly) +void Player::ResetSpells(bool myClassOnly) { // not need after this call if (HasAtLoginFlag(AT_LOGIN_RESET_SPELLS)) @@ -23605,11 +23602,11 @@ void Player::resetSpells(bool myClassOnly) } else for (PlayerSpellMap::const_iterator iter = smap.begin(); iter != smap.end(); ++iter) - removeSpell(iter->first, false, false); // only iter->first can be accessed, object by iter->second can be deleted already + RemoveSpell(iter->first, false, false); // only iter->first can be accessed, object by iter->second can be deleted already LearnDefaultSkills(); LearnCustomSpells(); - learnQuestRewardedSpells(); + LearnQuestRewardedSpells(); } void Player::LearnCustomSpells() @@ -23624,9 +23621,9 @@ void Player::LearnCustomSpells() uint32 tspell = *itr; TC_LOG_DEBUG("entities.player.loading", "PLAYER (Class: %u Race: %u): Adding initial spell, id = %u", uint32(getClass()), uint32(getRace()), tspell); if (!IsInWorld()) // will send in INITIAL_SPELLS in list anyway at map add - addSpell(tspell, true, true, true, false); + AddSpell(tspell, true, true, true, false); else // but send in normal spell in game learn case - learnSpell(tspell, true); + LearnSpell(tspell, true); } } @@ -23692,7 +23689,7 @@ void Player::LearnDefaultSkill(uint32 skillId, uint16 rank) } } -void Player::learnQuestRewardedSpells(Quest const* quest) +void Player::LearnQuestRewardedSpells(Quest const* quest) { int32 spell_id = quest->GetRewSpellCast(); uint32 src_spell_id = quest->GetSrcSpell(); @@ -23772,7 +23769,7 @@ void Player::learnQuestRewardedSpells(Quest const* quest) CastSpell(this, spell_id, true); } -void Player::learnQuestRewardedSpells() +void Player::LearnQuestRewardedSpells() { // learn spells received from quest completing for (RewardedQuestSet::const_iterator itr = m_RewardedQuests.begin(); itr != m_RewardedQuests.end(); ++itr) @@ -23781,43 +23778,42 @@ void Player::learnQuestRewardedSpells() if (!quest) continue; - learnQuestRewardedSpells(quest); + LearnQuestRewardedSpells(quest); } } -void Player::learnSkillRewardedSpells(uint32 skill_id, uint32 skill_value) +void Player::LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue) { uint32 raceMask = getRaceMask(); uint32 classMask = getClassMask(); for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j) { - SkillLineAbilityEntry const* pAbility = sSkillLineAbilityStore.LookupEntry(j); - if (!pAbility || pAbility->skillId != skill_id) + SkillLineAbilityEntry const* ability = sSkillLineAbilityStore.LookupEntry(j); + if (!ability || ability->skillId != skillId) continue; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(pAbility->spellId); - if (!spellInfo) + if (!sSpellMgr->GetSpellInfo(ability->spellId)) continue; - if (pAbility->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE && pAbility->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN) + if (ability->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE && ability->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN) continue; // Check race if set - if (pAbility->racemask && !(pAbility->racemask & raceMask)) + if (ability->racemask && !(ability->racemask & raceMask)) continue; // Check class if set - if (pAbility->classmask && !(pAbility->classmask & classMask)) + if (ability->classmask && !(ability->classmask & classMask)) continue; // need unlearn spell - if (skill_value < pAbility->req_skill_value && pAbility->AutolearnType == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE) - removeSpell(pAbility->spellId); + if (skillValue < ability->req_skill_value && ability->AutolearnType == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE) + RemoveSpell(ability->spellId); // need learn else if (!IsInWorld()) - addSpell(pAbility->spellId, true, true, true, false); + AddSpell(ability->spellId, true, true, true, false, false, true); else - learnSpell(pAbility->spellId, true); + LearnSpell(ability->spellId, true, true); } } @@ -25524,12 +25520,12 @@ bool Player::IsKnowHowFlyIn(uint32 mapid, uint32 zone) const return v_map != 571 || HasSpell(54197); // Cold Weather Flying } -void Player::learnSpellHighRank(uint32 spellid) +void Player::LearnSpellHighestRank(uint32 spellid) { - learnSpell(spellid, false); + LearnSpell(spellid, false); if (uint32 next = sSpellMgr->GetNextSpellInChain(spellid)) - learnSpellHighRank(next); + LearnSpellHighestRank(next); } void Player::_LoadSkills(PreparedQueryResult result) @@ -25553,6 +25549,8 @@ void Player::_LoadSkills(PreparedQueryResult result) { TC_LOG_ERROR("entities.player", "Character: %s (GUID: %u Race: %u Class: %u) has skill %u not allowed for his race/class combination", GetName().c_str(), GetGUIDLow(), uint32(getRace()), uint32(getClass()), skill); + + mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(0, SKILL_DELETED))); continue; } @@ -25614,7 +25612,7 @@ void Player::_LoadSkills(PreparedQueryResult result) mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(count, SKILL_UNCHANGED))); - learnSkillRewardedSpells(skill, value); + LearnSkillRewardedSpells(skill, value); ++count; @@ -25927,7 +25925,7 @@ bool Player::LearnTalent(uint32 talentId, uint32 talentRank) return false; // learn! (other talent ranks will unlearned at learning) - learnSpell(spellid, false); + LearnSpell(spellid, false); AddTalent(spellid, GetActiveSpec(), true); TC_LOG_INFO("misc", "TalentID: %u Rank: %u Spell: %u Spec: %u\n", talentId, talentRank, spellid, GetActiveSpec()); @@ -25939,7 +25937,7 @@ bool Player::LearnTalent(uint32 talentId, uint32 talentRank) std::vector<uint32> const* specSpells = GetTalentTreePrimarySpells(talentInfo->TalentTab); if (specSpells) for (size_t i = 0; i < specSpells->size(); ++i) - learnSpell(specSpells->at(i), false); + LearnSpell(specSpells->at(i), false); if (CanUseMastery()) for (uint32 i = 0; i < MAX_MASTERY_SPELLS; ++i) @@ -26784,11 +26782,11 @@ void Player::ActivateSpec(uint8 spec) // skip non-existant talent ranks if (talentInfo->RankID[rank] == 0) continue; - removeSpell(talentInfo->RankID[rank], true); // removes the talent, and all dependant, learned, and chained spells.. + RemoveSpell(talentInfo->RankID[rank], true); // removes the talent, and all dependant, learned, and chained spells.. if (const SpellInfo* _spellEntry = sSpellMgr->GetSpellInfo(talentInfo->RankID[rank])) for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) // search through the SpellInfo for valid trigger spells if (_spellEntry->Effects[i].TriggerSpell > 0 && _spellEntry->Effects[i].Effect == SPELL_EFFECT_LEARN_SPELL) - removeSpell(_spellEntry->Effects[i].TriggerSpell, true); // and remove any spells that the talent teaches + RemoveSpell(_spellEntry->Effects[i].TriggerSpell, true); // and remove any spells that the talent teaches // if this talent rank can be found in the PlayerTalentMap, mark the talent as removed so it gets deleted //PlayerTalentMap::iterator plrTalent = m_talents[m_activeSpec]->find(talentInfo->RankID[rank]); //if (plrTalent != m_talents[m_activeSpec]->end()) @@ -26803,12 +26801,12 @@ void Player::ActivateSpec(uint8 spec) std::vector<uint32> const* specSpells = GetTalentTreePrimarySpells(talentTabs[i]); if (specSpells) for (size_t i = 0; i < specSpells->size(); ++i) - removeSpell(specSpells->at(i), true); + RemoveSpell(specSpells->at(i), true); TalentTabEntry const* talentTabInfo = sTalentTabStore.LookupEntry(talentTabs[i]); for (uint32 i = 0; i < MAX_MASTERY_SPELLS; ++i) if (uint32 mastery = talentTabInfo->MasterySpellId[i]) - removeSpell(mastery, true); + RemoveSpell(mastery, true); } // set glyphs @@ -26846,7 +26844,7 @@ void Player::ActivateSpec(uint8 spec) // if the talent can be found in the newly activated PlayerTalentMap if (HasTalent(talentInfo->RankID[rank], GetActiveSpec())) { - learnSpell(talentInfo->RankID[rank], false); // add the talent to the PlayerSpellMap + LearnSpell(talentInfo->RankID[rank], false); // add the talent to the PlayerSpellMap spentTalents += (rank + 1); // increment the spentTalents count } } @@ -26855,13 +26853,13 @@ void Player::ActivateSpec(uint8 spec) std::vector<uint32> const* specSpells = GetTalentTreePrimarySpells(GetPrimaryTalentTree(GetActiveSpec())); if (specSpells) for (size_t i = 0; i < specSpells->size(); ++i) - learnSpell(specSpells->at(i), false); + LearnSpell(specSpells->at(i), false); if (CanUseMastery()) if (TalentTabEntry const* talentTabInfo = sTalentTabStore.LookupEntry(GetPrimaryTalentTree(GetActiveSpec()))) for (uint32 i = 0; i < MAX_MASTERY_SPELLS; ++i) if (uint32 mastery = talentTabInfo->MasterySpellId[i]) - learnSpell(mastery, false); + LearnSpell(mastery, false); // set glyphs for (uint8 slot = 0; slot < MAX_GLYPH_SLOT_INDEX; ++slot) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index ca3b0ddd695..cdf5d1f277d 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1766,16 +1766,16 @@ class Player : public Unit, public GridObject<Player> void SendProficiency(ItemClass itemClass, uint32 itemSubclassMask); void SendInitialSpells(); - bool addSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading = false); - void learnSpell(uint32 spell_id, bool dependent); - void removeSpell(uint32 spell_id, bool disabled = false, bool learn_low_rank = true); - void resetSpells(bool myClassOnly = false); + bool AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading = false, bool fromSkill = false); + void LearnSpell(uint32 spell_id, bool dependent, bool fromSkill = false); + void RemoveSpell(uint32 spell_id, bool disabled = false, bool learn_low_rank = true); + void ResetSpells(bool myClassOnly = false); void LearnCustomSpells(); void LearnDefaultSkills(); void LearnDefaultSkill(uint32 skillId, uint16 rank); - void learnQuestRewardedSpells(); - void learnQuestRewardedSpells(Quest const* quest); - void learnSpellHighRank(uint32 spellid); + void LearnQuestRewardedSpells(); + void LearnQuestRewardedSpells(Quest const* quest); + void LearnSpellHighestRank(uint32 spellid); void AddTemporarySpell(uint32 spellId); void RemoveTemporarySpell(uint32 spellId); void SetReputation(uint32 factionentry, uint32 value); @@ -2099,7 +2099,7 @@ class Player : public Unit, public GridObject<Player> int16 GetSkillTempBonusValue(uint32 skill) const; uint16 GetSkillStep(uint16 skill) const; // 0...6 bool HasSkill(uint32 skill) const; - void learnSkillRewardedSpells(uint32 id, uint32 value); + void LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue); WorldLocation& GetTeleportDest() { return m_teleport_dest; } bool IsBeingTeleported() const { return mSemaphoreTeleport_Near || mSemaphoreTeleport_Far; } diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 2c6e2253494..2df57099c99 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -2324,7 +2324,7 @@ void Guild::SendLoginInfo(WorldSession* session) for (uint32 i = 0; i < sGuildPerkSpellsStore.GetNumRows(); ++i) if (GuildPerkSpellsEntry const* entry = sGuildPerkSpellsStore.LookupEntry(i)) if (entry->Level <= GetLevel()) - player->learnSpell(entry->SpellId, true); + player->LearnSpell(entry->SpellId, true); SendGuildReputationWeeklyCap(session, member->GetWeekReputation()); @@ -2772,7 +2772,7 @@ void Guild::DeleteMember(uint64 guid, bool isDisbanding, bool isKicked, bool can for (uint32 i = 0; i < sGuildPerkSpellsStore.GetNumRows(); ++i) if (GuildPerkSpellsEntry const* entry = sGuildPerkSpellsStore.LookupEntry(i)) if (entry->Level <= GetLevel()) - player->removeSpell(entry->SpellId, false, false); + player->RemoveSpell(entry->SpellId, false, false); } _DeleteMemberFromDB(lowguid); @@ -3540,7 +3540,7 @@ void Guild::GiveXP(uint32 xp, Player* source) { player->SetGuildLevel(GetLevel()); for (size_t i = 0; i < perksToLearn.size(); ++i) - player->learnSpell(perksToLearn[i], true); + player->LearnSpell(perksToLearn[i], true); } } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 31e46d5abc8..dd4d9c9bc9f 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1094,7 +1094,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) // Apply at_login requests if (pCurrChar->HasAtLoginFlag(AT_LOGIN_RESET_SPELLS)) { - pCurrChar->resetSpells(); + pCurrChar->ResetSpells(); SendNotification(LANG_RESET_SPELLS); } diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index 58f7951bb9d..1ce1197c3db 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -297,7 +297,7 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket& recvData) if (trainer_spell->IsCastable()) _player->CastSpell(_player, trainer_spell->spell, true); else - _player->learnSpell(spellId, false); + _player->LearnSpell(spellId, false); WorldPacket data(SMSG_TRAINER_BUY_SUCCEEDED, 12); data << uint64(guid); diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index c554efdbcf1..d9b9b88d3dd 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -479,11 +479,29 @@ void PathGenerator::BuildPointPath(const float *startPoint, const float *endPoin dtStatus dtResult = DT_FAILURE; if (_straightLine) { - // if the path is a straight line then start and end position are enough dtResult = DT_SUCCESS; - pointCount = 2; - memcpy(&pathPoints[0], startPoint, sizeof(float)* 3); - memcpy(&pathPoints[3], endPoint, sizeof(float)* 3); + pointCount = 1; + memcpy(&pathPoints[VERTEX_SIZE * 0], startPoint, sizeof(float)* 3); // first point + + // path has to be split into polygons with dist SMOOTH_PATH_STEP_SIZE between them + G3D::Vector3 startVec = G3D::Vector3(startPoint[0], startPoint[1], startPoint[2]); + G3D::Vector3 endVec = G3D::Vector3(endPoint[0], endPoint[1], endPoint[2]); + G3D::Vector3 diffVec = (endVec - startVec); + G3D::Vector3 prevVec = startVec; + float len = diffVec.length(); + diffVec *= SMOOTH_PATH_STEP_SIZE / len; + while (len > SMOOTH_PATH_STEP_SIZE) + { + len -= SMOOTH_PATH_STEP_SIZE; + prevVec += diffVec; + pathPoints[VERTEX_SIZE * pointCount + 0] = prevVec.x; + pathPoints[VERTEX_SIZE * pointCount + 1] = prevVec.y; + pathPoints[VERTEX_SIZE * pointCount + 2] = prevVec.z; + ++pointCount; + } + + memcpy(&pathPoints[VERTEX_SIZE * pointCount], endPoint, sizeof(float)* 3); // last point + ++pointCount; } else if (_useStraightPath) { diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index c5737bc4230..301f33646dd 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1094,7 +1094,7 @@ void Spell::EffectUnlearnSpecialization(SpellEffIndex effIndex) Player* player = unitTarget->ToPlayer(); uint32 spellToUnlearn = m_spellInfo->Effects[effIndex].TriggerSpell; - player->removeSpell(spellToUnlearn); + player->RemoveSpell(spellToUnlearn); TC_LOG_DEBUG("spells", "Spell: Player %u has unlearned spell %u from NpcGUID: %u", player->GetGUIDLow(), spellToUnlearn, m_caster->GetGUIDLow()); } @@ -2210,7 +2210,7 @@ void Spell::EffectLearnSpell(SpellEffIndex effIndex) Player* player = unitTarget->ToPlayer(); uint32 spellToLearn = (m_spellInfo->Id == 483 || m_spellInfo->Id == 55884) ? damage : m_spellInfo->Effects[effIndex].TriggerSpell; - player->learnSpell(spellToLearn, false); + player->LearnSpell(spellToLearn, false); TC_LOG_DEBUG("spells", "Spell: Player %u has learned spell %u from NpcGUID=%u", player->GetGUIDLow(), spellToLearn, m_caster->GetGUIDLow()); } diff --git a/src/server/scripts/Commands/cs_learn.cpp b/src/server/scripts/Commands/cs_learn.cpp index 3cb0d4c7d3f..60523428e6f 100644 --- a/src/server/scripts/Commands/cs_learn.cpp +++ b/src/server/scripts/Commands/cs_learn.cpp @@ -112,9 +112,9 @@ public: } if (allRanks) - targetPlayer->learnSpellHighRank(spell); + targetPlayer->LearnSpellHighestRank(spell); else - targetPlayer->learnSpell(spell, false); + targetPlayer->LearnSpell(spell, false); if (GetTalentSpellCost(spellInfo->GetFirstRankSpell()->Id)) targetPlayer->SendTalentsInfoData(false); @@ -133,7 +133,7 @@ public: if (!spellInfo->IsAbilityOfSkillType(SKILL_INTERNAL)) continue; - handler->GetSession()->GetPlayer()->learnSpell(i, false); + handler->GetSession()->GetPlayer()->LearnSpell(i, false); } handler->SendSysMessage(LANG_LEARNING_GM_SKILLS); @@ -184,7 +184,7 @@ public: if (!SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer(), false)) continue; - handler->GetSession()->GetPlayer()->learnSpell(spellInfo->Id, false); + handler->GetSession()->GetPlayer()->LearnSpell(spellInfo->Id, false); } handler->SendSysMessage(LANG_COMMAND_LEARN_CLASS_SPELLS); @@ -228,7 +228,7 @@ public: continue; // learn highest rank of talent and learn all non-talent spell ranks (recursive by tree) - player->learnSpellHighRank(spellId); + player->LearnSpellHighestRank(spellId); player->AddTalent(spellId, player->GetActiveSpec(), true); } @@ -320,7 +320,7 @@ public: { // skipping UNIVERSAL language (0) for (uint8 i = 1; i < LANGUAGES_COUNT; ++i) - handler->GetSession()->GetPlayer()->learnSpell(lang_description[i].spell_id, false); + handler->GetSession()->GetPlayer()->LearnSpell(lang_description[i].spell_id, false); handler->SendSysMessage(LANG_COMMAND_LEARN_ALL_LANG); return true; @@ -334,7 +334,7 @@ public: target->LearnDefaultSkills(); target->LearnCustomSpells(); - target->learnQuestRewardedSpells(); + target->LearnQuestRewardedSpells(); handler->PSendSysMessage(LANG_COMMAND_LEARN_ALL_DEFAULT_AND_QUEST, handler->GetNameLink(target).c_str()); return true; @@ -451,7 +451,7 @@ public: if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo, player, false)) continue; - player->learnSpell(skillLine->spellId, false); + player->LearnSpell(skillLine->spellId, false); } } @@ -480,7 +480,7 @@ public: spellId = sSpellMgr->GetFirstSpellInChain(spellId); if (target->HasSpell(spellId)) - target->removeSpell(spellId, false, !allRanks); + target->RemoveSpell(spellId, false, !allRanks); else handler->SendSysMessage(LANG_FORGET_SPELL); diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp index e23a9d81787..de0fd21d139 100644 --- a/src/server/scripts/Commands/cs_reset.cpp +++ b/src/server/scripts/Commands/cs_reset.cpp @@ -162,7 +162,7 @@ public: if (target) { - target->resetSpells(/* bool myClassOnly */); + target->ResetSpells(/* bool myClassOnly */); ChatHandler(target->GetSession()).SendSysMessage(LANG_RESET_SPELLS); if (!handler->GetSession() || handler->GetSession()->GetPlayer() != target) diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index ebbe88f4a37..30e794579e8 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -2745,7 +2745,7 @@ class spell_gen_profession_research : public SpellScriptLoader // learn random explicit discovery recipe (if any) if (uint32 discoveredSpellId = GetExplicitDiscoverySpell(spellId, caster)) - caster->learnSpell(discoveredSpellId, false); + caster->LearnSpell(discoveredSpellId, false); caster->UpdateCraftSkill(spellId); } diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index f8c68f99270..f2d206e50e6 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -1452,7 +1452,7 @@ class spell_item_book_of_glyph_mastery : public SpellScriptLoader // learn random explicit discovery recipe (if any) if (uint32 discoveredSpellId = GetExplicitDiscoverySpell(spellId, caster)) - caster->learnSpell(discoveredSpellId, false); + caster->LearnSpell(discoveredSpellId, false); } void Register() override diff --git a/src/server/scripts/World/npc_professions.cpp b/src/server/scripts/World/npc_professions.cpp index 08bc408f114..17c37c7eba0 100644 --- a/src/server/scripts/World/npc_professions.cpp +++ b/src/server/scripts/World/npc_professions.cpp @@ -260,90 +260,90 @@ void ProfessionUnlearnSpells(Player* player, uint32 type) switch (type) { case S_UNLEARN_WEAPON: // S_UNLEARN_WEAPON - player->removeSpell(36125); // Light Earthforged Blade - player->removeSpell(36128); // Light Emberforged Hammer - player->removeSpell(36126); // Light Skyforged Axe + player->RemoveSpell(36125); // Light Earthforged Blade + player->RemoveSpell(36128); // Light Emberforged Hammer + player->RemoveSpell(36126); // Light Skyforged Axe break; case S_UNLEARN_ARMOR: // S_UNLEARN_ARMOR - player->removeSpell(36122); // Earthforged Leggings - player->removeSpell(36129); // Heavy Earthforged Breastplate - player->removeSpell(36130); // Stormforged Hauberk - player->removeSpell(34533); // Breastplate of Kings - player->removeSpell(34529); // Nether Chain Shirt - player->removeSpell(34534); // Bulwark of Kings - player->removeSpell(36257); // Bulwark of the Ancient Kings - player->removeSpell(36256); // Embrace of the Twisting Nether - player->removeSpell(34530); // Twisting Nether Chain Shirt - player->removeSpell(36124); // Windforged Leggings + player->RemoveSpell(36122); // Earthforged Leggings + player->RemoveSpell(36129); // Heavy Earthforged Breastplate + player->RemoveSpell(36130); // Stormforged Hauberk + player->RemoveSpell(34533); // Breastplate of Kings + player->RemoveSpell(34529); // Nether Chain Shirt + player->RemoveSpell(34534); // Bulwark of Kings + player->RemoveSpell(36257); // Bulwark of the Ancient Kings + player->RemoveSpell(36256); // Embrace of the Twisting Nether + player->RemoveSpell(34530); // Twisting Nether Chain Shirt + player->RemoveSpell(36124); // Windforged Leggings break; case S_UNLEARN_HAMMER: // S_UNLEARN_HAMMER - player->removeSpell(36262); // Dragonstrike - player->removeSpell(34546); // Dragonmaw - player->removeSpell(34545); // Drakefist Hammer - player->removeSpell(36136); // Lavaforged Warhammer - player->removeSpell(34547); // Thunder - player->removeSpell(34567); // Deep Thunder - player->removeSpell(36263); // Stormherald - player->removeSpell(36137); // Great Earthforged Hammer + player->RemoveSpell(36262); // Dragonstrike + player->RemoveSpell(34546); // Dragonmaw + player->RemoveSpell(34545); // Drakefist Hammer + player->RemoveSpell(36136); // Lavaforged Warhammer + player->RemoveSpell(34547); // Thunder + player->RemoveSpell(34567); // Deep Thunder + player->RemoveSpell(36263); // Stormherald + player->RemoveSpell(36137); // Great Earthforged Hammer break; case S_UNLEARN_AXE: // S_UNLEARN_AXE - player->removeSpell(36260); // Wicked Edge of the Planes - player->removeSpell(34562); // Black Planar Edge - player->removeSpell(34541); // The Planar Edge - player->removeSpell(36134); // Stormforged Axe - player->removeSpell(36135); // Skyforged Great Axe - player->removeSpell(36261); // Bloodmoon - player->removeSpell(34543); // Lunar Crescent - player->removeSpell(34544); // Mooncleaver + player->RemoveSpell(36260); // Wicked Edge of the Planes + player->RemoveSpell(34562); // Black Planar Edge + player->RemoveSpell(34541); // The Planar Edge + player->RemoveSpell(36134); // Stormforged Axe + player->RemoveSpell(36135); // Skyforged Great Axe + player->RemoveSpell(36261); // Bloodmoon + player->RemoveSpell(34543); // Lunar Crescent + player->RemoveSpell(34544); // Mooncleaver break; case S_UNLEARN_SWORD: // S_UNLEARN_SWORD - player->removeSpell(36258); // Blazefury - player->removeSpell(34537); // Blazeguard - player->removeSpell(34535); // Fireguard - player->removeSpell(36131); // Windforged Rapier - player->removeSpell(36133); // Stoneforged Claymore - player->removeSpell(34538); // Lionheart Blade - player->removeSpell(34540); // Lionheart Champion - player->removeSpell(36259); // Lionheart Executioner + player->RemoveSpell(36258); // Blazefury + player->RemoveSpell(34537); // Blazeguard + player->RemoveSpell(34535); // Fireguard + player->RemoveSpell(36131); // Windforged Rapier + player->RemoveSpell(36133); // Stoneforged Claymore + player->RemoveSpell(34538); // Lionheart Blade + player->RemoveSpell(34540); // Lionheart Champion + player->RemoveSpell(36259); // Lionheart Executioner break; case S_UNLEARN_DRAGON: // S_UNLEARN_DRAGON - player->removeSpell(36076); // Dragonstrike Leggings - player->removeSpell(36079); // Golden Dragonstrike Breastplate - player->removeSpell(35576); // Ebon Netherscale Belt - player->removeSpell(35577); // Ebon Netherscale Bracers - player->removeSpell(35575); // Ebon Netherscale Breastplate - player->removeSpell(35582); // Netherstrike Belt - player->removeSpell(35584); // Netherstrike Bracers - player->removeSpell(35580); // Netherstrike Breastplate + player->RemoveSpell(36076); // Dragonstrike Leggings + player->RemoveSpell(36079); // Golden Dragonstrike Breastplate + player->RemoveSpell(35576); // Ebon Netherscale Belt + player->RemoveSpell(35577); // Ebon Netherscale Bracers + player->RemoveSpell(35575); // Ebon Netherscale Breastplate + player->RemoveSpell(35582); // Netherstrike Belt + player->RemoveSpell(35584); // Netherstrike Bracers + player->RemoveSpell(35580); // Netherstrike Breastplate break; case S_UNLEARN_ELEMENTAL: // S_UNLEARN_ELEMENTAL - player->removeSpell(36074); // Blackstorm Leggings - player->removeSpell(36077); // Primalstorm Breastplate - player->removeSpell(35590); // Primalstrike Belt - player->removeSpell(35591); // Primalstrike Bracers - player->removeSpell(35589); // Primalstrike Vest + player->RemoveSpell(36074); // Blackstorm Leggings + player->RemoveSpell(36077); // Primalstorm Breastplate + player->RemoveSpell(35590); // Primalstrike Belt + player->RemoveSpell(35591); // Primalstrike Bracers + player->RemoveSpell(35589); // Primalstrike Vest break; case S_UNLEARN_TRIBAL: // S_UNLEARN_TRIBAL - player->removeSpell(35585); // Windhawk Hauberk - player->removeSpell(35587); // Windhawk Belt - player->removeSpell(35588); // Windhawk Bracers - player->removeSpell(36075); // Wildfeather Leggings - player->removeSpell(36078); // Living Crystal Breastplate + player->RemoveSpell(35585); // Windhawk Hauberk + player->RemoveSpell(35587); // Windhawk Belt + player->RemoveSpell(35588); // Windhawk Bracers + player->RemoveSpell(36075); // Wildfeather Leggings + player->RemoveSpell(36078); // Living Crystal Breastplate break; case S_UNLEARN_SPELLFIRE: // S_UNLEARN_SPELLFIRE - player->removeSpell(26752); // Spellfire Belt - player->removeSpell(26753); // Spellfire Gloves - player->removeSpell(26754); // Spellfire Robe + player->RemoveSpell(26752); // Spellfire Belt + player->RemoveSpell(26753); // Spellfire Gloves + player->RemoveSpell(26754); // Spellfire Robe break; case S_UNLEARN_MOONCLOTH: // S_UNLEARN_MOONCLOTH - player->removeSpell(26760); // Primal Mooncloth Belt - player->removeSpell(26761); // Primal Mooncloth Shoulders - player->removeSpell(26762); // Primal Mooncloth Robe + player->RemoveSpell(26760); // Primal Mooncloth Belt + player->RemoveSpell(26761); // Primal Mooncloth Shoulders + player->RemoveSpell(26762); // Primal Mooncloth Robe break; case S_UNLEARN_SHADOWEAVE: // S_UNLEARN_SHADOWEAVE - player->removeSpell(26756); // Frozen Shadoweave Shoulders - player->removeSpell(26757); // Frozen Shadoweave Boots - player->removeSpell(26758); // Frozen Shadoweave Robe + player->RemoveSpell(26756); // Frozen Shadoweave Shoulders + player->RemoveSpell(26757); // Frozen Shadoweave Boots + player->RemoveSpell(26758); // Frozen Shadoweave Robe break; } } |