diff options
author | megamage <none@none> | 2009-08-27 20:27:55 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-08-27 20:27:55 -0500 |
commit | dd72b5524c01ef081e1a35f65a3967652a314e5f (patch) | |
tree | fa7c95cd02aa983f70ab0f983d1fc305cfa1e3e1 | |
parent | eeb18e51bb7a539116e0a92f1db557f8727042ff (diff) |
[8426] Use upper/lower iterator pairs as result instead 2 function calls. Author: VladimirMangos
--HG--
branch : trunk
-rw-r--r-- | src/game/AchievementMgr.cpp | 34 | ||||
-rw-r--r-- | src/game/Chat.cpp | 50 | ||||
-rw-r--r-- | src/game/ObjectMgr.cpp | 6 | ||||
-rw-r--r-- | src/game/Player.cpp | 98 | ||||
-rw-r--r-- | src/game/SkillDiscovery.cpp | 22 | ||||
-rw-r--r-- | src/game/Spell.cpp | 40 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 35 | ||||
-rw-r--r-- | src/game/SpellMgr.h | 37 |
8 files changed, 141 insertions, 181 deletions
diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 6eb9a195f01..6d1a245d670 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -1210,18 +1210,18 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui } case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM: // miscvalue1 = item_id - if(!miscvalue1) + if (!miscvalue1) continue; - if(miscvalue1 != achievementCriteria->equip_item.itemID) + if (miscvalue1 != achievementCriteria->equip_item.itemID) continue; SetCriteriaProgress(achievementCriteria, 1); break; case ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT: // miscvalue1 = go entry - if(!miscvalue1) + if (!miscvalue1) continue; - if(miscvalue1 != achievementCriteria->use_gameobject.goEntry) + if (miscvalue1 != achievementCriteria->use_gameobject.goEntry) continue; SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE); @@ -1236,7 +1236,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui break; case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS: { - if(miscvalue1 && miscvalue1 != achievementCriteria->learn_skillline_spell.skillLine) + if (miscvalue1 && miscvalue1 != achievementCriteria->learn_skillline_spell.skillLine) continue; uint32 spellCount = 0; @@ -1244,9 +1244,8 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui spellIter != GetPlayer()->GetSpellMap().end(); ++spellIter) { - for(SkillLineAbilityMap::const_iterator skillIter = spellmgr.GetBeginSkillLineAbilityMap(spellIter->first); - skillIter != spellmgr.GetEndSkillLineAbilityMap(spellIter->first); - ++skillIter) + SkillLineAbilityMapBounds bounds = spellmgr.GetSkillLineAbilityMapBounds(spellIter->first); + for(SkillLineAbilityMap::const_iterator skillIter = bounds.first; skillIter != bounds.second; ++skillIter) { if(skillIter->second->skillId == achievementCriteria->learn_skillline_spell.skillLine) spellCount++; @@ -1257,17 +1256,17 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui } case ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL: // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case - if(!miscvalue1) + if (!miscvalue1) continue; - if(achievementCriteria->win_duel.duelCount) + if (achievementCriteria->win_duel.duelCount) { // those requirements couldn't be found in the dbc AchievementCriteriaDataSet const* data = achievementmgr.GetCriteriaDataSet(achievementCriteria); - if(!data) + if (!data) continue; - if(!data->Meets(GetPlayer(),unit)) + if (!data->Meets(GetPlayer(),unit)) continue; } @@ -1303,7 +1302,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui } case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE: { - if(miscvalue1 && miscvalue1 != achievementCriteria->learn_skill_line.skillLine) + if (miscvalue1 && miscvalue1 != achievementCriteria->learn_skill_line.skillLine) continue; uint32 spellCount = 0; @@ -1311,13 +1310,10 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui spellIter != GetPlayer()->GetSpellMap().end(); ++spellIter) { - for(SkillLineAbilityMap::const_iterator skillIter = spellmgr.GetBeginSkillLineAbilityMap(spellIter->first); - skillIter != spellmgr.GetEndSkillLineAbilityMap(spellIter->first); - ++skillIter) - { - if(skillIter->second->skillId == achievementCriteria->learn_skill_line.skillLine) + SkillLineAbilityMapBounds bounds = spellmgr.GetSkillLineAbilityMapBounds(spellIter->first); + for(SkillLineAbilityMap::const_iterator skillIter = bounds.first; skillIter != bounds.second; ++skillIter) + if (skillIter->second->skillId == achievementCriteria->learn_skill_line.skillLine) spellCount++; - } } SetCriteriaProgress(achievementCriteria, spellCount); break; diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index 6e391cca247..1b39c49fb90 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -1428,12 +1428,12 @@ valid examples: c = reader.peek(); } GlyphPropertiesEntry const* glyph = sGlyphPropertiesStore.LookupEntry(glyphId); - if(!glyph) + if (!glyph) return false; linkedSpell = sSpellStore.LookupEntry(glyph->SpellId); - if(!linkedSpell) + if (!linkedSpell) return false; } else @@ -1446,10 +1446,10 @@ valid examples: break; case 'h': // if h is next element in sequence, this one must contain the linked text :) - if(*validSequenceIterator == 'h') + if (*validSequenceIterator == 'h') { // links start with '[' - if(reader.get() != '[') + if (reader.get() != '[') { #ifdef MANGOS_DEBUG sLog.outBasic("ChatHandler::isValidChatMessage link caption doesn't start with '['"); @@ -1462,18 +1462,16 @@ valid examples: if (linkedSpell) { // spells with that flag have a prefix of "$PROFESSION: " - if(linkedSpell->Attributes & SPELL_ATTR_TRADESPELL) + if (linkedSpell->Attributes & SPELL_ATTR_TRADESPELL) { // lookup skillid - SkillLineAbilityMap::const_iterator lower = spellmgr.GetBeginSkillLineAbilityMap(linkedSpell->Id); - SkillLineAbilityMap::const_iterator upper = spellmgr.GetEndSkillLineAbilityMap(linkedSpell->Id); - - if(lower == upper) + SkillLineAbilityMapBounds bounds = spellmgr.GetSkillLineAbilityMapBounds(linkedSpell->Id); + if (bounds.first == bounds.second) { return false; } - SkillLineAbilityEntry const *skillInfo = lower->second; + SkillLineAbilityEntry const *skillInfo = bounds.first->second; if (!skillInfo) { @@ -1481,7 +1479,7 @@ valid examples: } SkillLineEntry const *skillLine = sSkillLineStore.LookupEntry(skillInfo->skillId); - if(!skillLine) + if (!skillLine) { return false; } @@ -1489,7 +1487,7 @@ valid examples: for(uint8 i=0; i<MAX_LOCALE; ++i) { uint32 skillLineNameLength = strlen(skillLine->name[i]); - if(skillLineNameLength > 0 && strncmp(skillLine->name[i], buffer, skillLineNameLength) == 0) + if (skillLineNameLength > 0 && strncmp(skillLine->name[i], buffer, skillLineNameLength) == 0) { // found the prefix, remove it to perform spellname validation below // -2 = strlen(": ") @@ -1501,22 +1499,22 @@ valid examples: bool foundName = false; for(uint8 i=0; i<MAX_LOCALE; ++i) { - if(*linkedSpell->SpellName[i] && strcmp(linkedSpell->SpellName[i], buffer) == 0) + if (*linkedSpell->SpellName[i] && strcmp(linkedSpell->SpellName[i], buffer) == 0) { foundName = true; break; } } - if(!foundName) + if (!foundName) return false; } - else if(linkedQuest) + else if (linkedQuest) { if (linkedQuest->GetTitle() != buffer) { QuestLocale const *ql = objmgr.GetQuestLocale(linkedQuest->GetQuestId()); - if(!ql) + if (!ql) { #ifdef MANOGS_DEBUG sLog.outBasic("ChatHandler::isValidChatMessage default questname didn't match and there is no locale"); @@ -1527,13 +1525,13 @@ valid examples: bool foundName = false; for(uint8 i=0; i<ql->Title.size(); i++) { - if(ql->Title[i] == buffer) + if (ql->Title[i] == buffer) { foundName = true; break; } } - if(!foundName) + if (!foundName) { #ifdef MANOGS_DEBUG sLog.outBasic("ChatHandler::isValidChatMessage no quest locale title matched") @@ -1544,11 +1542,11 @@ valid examples: } else if(linkedItem) { - if(strcmp(linkedItem->Name1, buffer) != 0) + if (strcmp(linkedItem->Name1, buffer) != 0) { ItemLocale const *il = objmgr.GetItemLocale(linkedItem->ItemId); - if(!il) + if (!il) { #ifdef MANGOS_DEBUG sLog.outBasic("ChatHandler::isValidChatMessage linked item name doesn't is wrong and there is no localization"); @@ -1559,13 +1557,13 @@ valid examples: bool foundName = false; for(uint8 i=0; i<il->Name.size(); ++i) { - if(il->Name[i] == buffer) + if (il->Name[i] == buffer) { foundName = true; break; } } - if(!foundName) + if (!foundName) { #ifdef MANGOS_DEBUG sLog.outBasic("ChatHandler::isValidChatMessage linked item name wasn't found in any localization"); @@ -1574,18 +1572,18 @@ valid examples: } } } - else if(linkedAchievement) + else if (linkedAchievement) { bool foundName = false; for(uint8 i=0; i<MAX_LOCALE; ++i) { - if(*linkedAchievement->name[i], strcmp(linkedAchievement->name[i], buffer) == 0) + if (*linkedAchievement->name[i], strcmp(linkedAchievement->name[i], buffer) == 0) { foundName = true; break; } } - if(!foundName) + if (!foundName) return false; } // that place should never be reached - if nothing linked has been set in |H @@ -2370,4 +2368,4 @@ LocaleConstant CliHandler::GetSessionDbcLocale() const int CliHandler::GetSessionDbLocaleIndex() const { return objmgr.GetDBCLocaleIndex(); -} +}
\ No newline at end of file diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 8d00b604236..7b97db2eac4 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -2371,10 +2371,8 @@ void ObjectMgr::LoadItemRequiredTarget() if (pItemProto->Spells[i].SpellTrigger == ITEM_SPELLTRIGGER_ON_USE || pItemProto->Spells[i].SpellTrigger == ITEM_SPELLTRIGGER_ON_NO_DELAY_USE) { - SpellScriptTarget::const_iterator lower = spellmgr.GetBeginSpellScriptTarget(pSpellInfo->Id); - SpellScriptTarget::const_iterator upper = spellmgr.GetEndSpellScriptTarget(pSpellInfo->Id); - - if (lower != upper) + SpellScriptTargetBounds bounds = spellmgr.GetSpellScriptTargetBounds(pSpellInfo->Id); + if (bounds.first != bounds.second) break; for (int j = 0; j < 3; ++j) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 61e3895cbb0..eaf5d9ecb02 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -3171,7 +3171,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen // cast talents with SPELL_EFFECT_LEARN_SPELL (other dependent spells will learned later as not auto-learned) // note: all spells with SPELL_EFFECT_LEARN_SPELL isn't passive - if( talentCost > 0 && IsSpellHaveEffect(spellInfo,SPELL_EFFECT_LEARN_SPELL) ) + if (talentCost > 0 && IsSpellHaveEffect(spellInfo,SPELL_EFFECT_LEARN_SPELL)) { // ignore stance requirement for talent learn spell (stance set for spell only for client spell description show) CastSpell(this, spell_id, true); @@ -3179,10 +3179,10 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen // also cast passive spells (including all talents without SPELL_EFFECT_LEARN_SPELL) with additional checks else if (IsPassiveSpell(spell_id)) { - if(IsNeedCastPassiveSpellAtLearn(spellInfo)) + if (IsNeedCastPassiveSpellAtLearn(spellInfo)) CastSpell(this, spell_id, true); } - else if( IsSpellHaveEffect(spellInfo,SPELL_EFFECT_SKILL_STEP) ) + else if (IsSpellHaveEffect(spellInfo,SPELL_EFFECT_SKILL_STEP)) { CastSpell(this, spell_id, true); return false; @@ -3192,7 +3192,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen m_usedTalentCount += talentCost; // update free primary prof.points (if any, can be none in case GM .learn prof. learning) - if(uint32 freeProfs = GetFreePrimaryProfessionPoints()) + if (uint32 freeProfs = GetFreePrimaryProfessionPoints()) { if(spellmgr.IsPrimaryProfessionFirstRankSpell(spell_id)) SetFreePrimaryProfessions(freeProfs-1); @@ -3203,20 +3203,19 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen SpellLearnSkillNode const* spellLearnSkill = spellmgr.GetSpellLearnSkill(spell_id); - SkillLineAbilityMap::const_iterator lower = spellmgr.GetBeginSkillLineAbilityMap(spell_id); - SkillLineAbilityMap::const_iterator upper = spellmgr.GetEndSkillLineAbilityMap(spell_id); + SkillLineAbilityMapBounds skill_bounds = spellmgr.GetSkillLineAbilityMapBounds(spell_id); - if(spellLearnSkill) + if (spellLearnSkill) { uint32 skill_value = GetPureSkillValue(spellLearnSkill->skill); uint32 skill_max_value = GetPureMaxSkillValue(spellLearnSkill->skill); - if(skill_value < spellLearnSkill->value) + if (skill_value < spellLearnSkill->value) skill_value = spellLearnSkill->value; uint32 new_skill_max_value = spellLearnSkill->maxvalue == 0 ? maxskill : spellLearnSkill->maxvalue; - if(skill_max_value < new_skill_max_value) + if (skill_max_value < new_skill_max_value) skill_max_value = new_skill_max_value; SetSkill(spellLearnSkill->skill,skill_value,skill_max_value); @@ -3224,16 +3223,16 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen else { // not ranked skills - for(SkillLineAbilityMap::const_iterator _spell_idx = lower; _spell_idx != upper; ++_spell_idx) + 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) + if (!pSkill) continue; - if(HasSkill(pSkill->id)) + if (HasSkill(pSkill->id)) continue; - if(_spell_idx->second->learnOnGetSkill == ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL || + if (_spell_idx->second->learnOnGetSkill == ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL || // lockpicking/runeforging special case, not have ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL (pSkill->id==SKILL_LOCKPICKING || pSkill->id==SKILL_RUNEFORGING) && _spell_idx->second->max_value==0 ) { @@ -3256,24 +3255,23 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen } // learn dependent spells - SpellLearnSpellMap::const_iterator spell_begin = spellmgr.GetBeginSpellLearnSpell(spell_id); - SpellLearnSpellMap::const_iterator spell_end = spellmgr.GetEndSpellLearnSpell(spell_id); + SpellLearnSpellMapBounds spell_bounds = spellmgr.GetSpellLearnSpellMapBounds(spell_id); - for(SpellLearnSpellMap::const_iterator itr2 = spell_begin; itr2 != spell_end; ++itr2) + for(SpellLearnSpellMap::const_iterator itr2 = spell_bounds.first; itr2 != spell_bounds.second; ++itr2) { - if(!itr2->second.autoLearned) + if (!itr2->second.autoLearned) { - if(!IsInWorld() || !itr2->second.active) // at spells loading, no output, but allow save + if (!IsInWorld() || !itr2->second.active) // at spells loading, no output, but allow save addSpell(itr2->second.spell,itr2->second.active,true,true,false); else // at normal learning learnSpell(itr2->second.spell,true); } } - if(!GetSession()->PlayerLoading()) + if (!GetSession()->PlayerLoading()) { // not ranked skills - for(SkillLineAbilityMap::const_iterator _spell_idx = lower; _spell_idx != upper; ++_spell_idx) + for(SkillLineAbilityMap::const_iterator _spell_idx = skill_bounds.first; _spell_idx != skill_bounds.second; ++_spell_idx) { GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE,_spell_idx->second->skillId); GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS,_spell_idx->second->skillId); @@ -3442,19 +3440,19 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank) prevSkill = spellmgr.GetSpellLearnSkill(spellmgr.GetFirstSpellInChain(prev_spell)); } - if(!prevSkill) // not found prev skill setting, remove skill + if (!prevSkill) // not found prev skill setting, remove skill SetSkill(spellLearnSkill->skill,0,0); else // set to prev. skill setting values { uint32 skill_value = GetPureSkillValue(prevSkill->skill); uint32 skill_max_value = GetPureMaxSkillValue(prevSkill->skill); - if(skill_value > prevSkill->value) + if (skill_value > prevSkill->value) skill_value = prevSkill->value; uint32 new_skill_max_value = prevSkill->maxvalue == 0 ? GetMaxSkillValueForLevel() : prevSkill->maxvalue; - if(skill_max_value > new_skill_max_value) + if (skill_max_value > new_skill_max_value) skill_max_value = new_skill_max_value; SetSkill(prevSkill->skill,skill_value,skill_max_value); @@ -3465,22 +3463,21 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank) else { // not ranked skills - SkillLineAbilityMap::const_iterator lower = spellmgr.GetBeginSkillLineAbilityMap(spell_id); - SkillLineAbilityMap::const_iterator upper = spellmgr.GetEndSkillLineAbilityMap(spell_id); + SkillLineAbilityMapBounds bounds = spellmgr.GetSkillLineAbilityMapBounds(spell_id); - for(SkillLineAbilityMap::const_iterator _spell_idx = lower; _spell_idx != upper; ++_spell_idx) + for(SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) { SkillLineEntry const *pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId); - if(!pSkill) + if (!pSkill) continue; - if(_spell_idx->second->learnOnGetSkill == ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL || + if (_spell_idx->second->learnOnGetSkill == ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL || // lockpicking/runeforging special case, not have ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL (pSkill->id==SKILL_LOCKPICKING || pSkill->id==SKILL_RUNEFORGING) && _spell_idx->second->max_value==0 ) { // not reset skills for professions and racial abilities - if( (pSkill->categoryId==SKILL_CATEGORY_SECONDARY || pSkill->categoryId==SKILL_CATEGORY_PROFESSION) && - (IsProfessionSkill(pSkill->id) || _spell_idx->second->racemask!=0) ) + if ((pSkill->categoryId==SKILL_CATEGORY_SECONDARY || pSkill->categoryId==SKILL_CATEGORY_PROFESSION) && + (IsProfessionSkill(pSkill->id) || _spell_idx->second->racemask!=0)) continue; SetSkill(pSkill->id, 0, 0 ); @@ -3489,44 +3486,43 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank) } // remove dependent spells - SpellLearnSpellMap::const_iterator spell_begin = spellmgr.GetBeginSpellLearnSpell(spell_id); - SpellLearnSpellMap::const_iterator spell_end = spellmgr.GetEndSpellLearnSpell(spell_id); + SpellLearnSpellMapBounds spell_bounds = spellmgr.GetSpellLearnSpellMapBounds(spell_id); - for(SpellLearnSpellMap::const_iterator itr2 = spell_begin; itr2 != spell_end; ++itr2) + for(SpellLearnSpellMap::const_iterator itr2 = spell_bounds.first; itr2 != spell_bounds.second; ++itr2) removeSpell(itr2->second.spell, disabled); // activate lesser rank in spellbook/action bar, and cast it if need bool prev_activate = false; - if(uint32 prev_id = spellmgr.GetPrevSpellInChain (spell_id)) + if (uint32 prev_id = spellmgr.GetPrevSpellInChain (spell_id)) { SpellEntry const *spellInfo = sSpellStore.LookupEntry(spell_id); // if talent then lesser rank also talent and need learn - if(talentCosts) + if (talentCosts) { // I cannot see why mangos has these lines. //if(learn_low_rank) // learnSpell (prev_id,false); } // if ranked non-stackable spell: need activate lesser rank and update dendence state - else if(cur_active && !SpellMgr::canStackSpellRanks(spellInfo) && spellmgr.GetSpellRank(spellInfo->Id) != 0) + else if (cur_active && !SpellMgr::canStackSpellRanks(spellInfo) && spellmgr.GetSpellRank(spellInfo->Id) != 0) { // need manually update dependence state (learn spell ignore like attempts) PlayerSpellMap::iterator prev_itr = m_spells.find(prev_id); if (prev_itr != m_spells.end()) { - if(prev_itr->second->dependent != cur_dependent) + if (prev_itr->second->dependent != cur_dependent) { prev_itr->second->dependent = cur_dependent; - if(prev_itr->second->state != PLAYERSPELL_NEW) + if (prev_itr->second->state != PLAYERSPELL_NEW) prev_itr->second->state = PLAYERSPELL_CHANGED; } // now re-learn if need re-activate - if(cur_active && !prev_itr->second->active && learn_low_rank) + 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); @@ -5276,20 +5272,19 @@ bool Player::UpdateCraftSkill(uint32 spellid) { sLog.outDebug("UpdateCraftSkill spellid %d", spellid); - SkillLineAbilityMap::const_iterator lower = spellmgr.GetBeginSkillLineAbilityMap(spellid); - SkillLineAbilityMap::const_iterator upper = spellmgr.GetEndSkillLineAbilityMap(spellid); + SkillLineAbilityMapBounds bounds = spellmgr.GetSkillLineAbilityMapBounds(spellid); - for(SkillLineAbilityMap::const_iterator _spell_idx = lower; _spell_idx != upper; ++_spell_idx) + for(SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) { - if(_spell_idx->second->skillId) + if (_spell_idx->second->skillId) { uint32 SkillValue = GetPureSkillValue(_spell_idx->second->skillId); // Alchemy Discoveries here SpellEntry const* spellEntry = sSpellStore.LookupEntry(spellid); - if(spellEntry && spellEntry->Mechanic==MECHANIC_DISCOVERY) + if (spellEntry && spellEntry->Mechanic==MECHANIC_DISCOVERY) { - if(uint32 discoveredSpell = GetSkillDiscoverySpell(_spell_idx->second->skillId, spellid, this)) + if (uint32 discoveredSpell = GetSkillDiscoverySpell(_spell_idx->second->skillId, spellid, this)) learnSpell(discoveredSpell,false); } @@ -19668,19 +19663,18 @@ bool Player::IsSpellFitByClassAndRace( uint32 spell_id ) const uint32 racemask = getRaceMask(); uint32 classmask = getClassMask(); - SkillLineAbilityMap::const_iterator lower = spellmgr.GetBeginSkillLineAbilityMap(spell_id); - SkillLineAbilityMap::const_iterator upper = spellmgr.GetEndSkillLineAbilityMap(spell_id); - if(lower==upper) + SkillLineAbilityMapBounds bounds = spellmgr.GetSkillLineAbilityMapBounds(spell_id); + if (bounds.first==bounds.second) return true; - for(SkillLineAbilityMap::const_iterator _spell_idx = lower; _spell_idx != upper; ++_spell_idx) + for(SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) { // skip wrong race skills - if( _spell_idx->second->racemask && (_spell_idx->second->racemask & racemask) == 0) + if (_spell_idx->second->racemask && (_spell_idx->second->racemask & racemask) == 0) continue; // skip wrong class skills - if( _spell_idx->second->classmask && (_spell_idx->second->classmask & classmask) == 0) + if (_spell_idx->second->classmask && (_spell_idx->second->classmask & classmask) == 0) continue; return true; diff --git a/src/game/SkillDiscovery.cpp b/src/game/SkillDiscovery.cpp index 686fcf889b9..b1e16897b18 100644 --- a/src/game/SkillDiscovery.cpp +++ b/src/game/SkillDiscovery.cpp @@ -116,21 +116,18 @@ void LoadSkillDiscoveryTable() SkillDiscoveryStore[reqSkillOrSpell].push_back( SkillDiscoveryEntry(spellId, reqSkillValue, chance) ); } - else if( reqSkillOrSpell == 0 ) // skill case + else if (reqSkillOrSpell == 0) // skill case { - SkillLineAbilityMap::const_iterator lower = spellmgr.GetBeginSkillLineAbilityMap(spellId); - SkillLineAbilityMap::const_iterator upper = spellmgr.GetEndSkillLineAbilityMap(spellId); + SkillLineAbilityMapBounds bounds = spellmgr.GetSkillLineAbilityMapBounds(spellId); - if(lower==upper) + if (bounds.first==bounds.second) { sLog.outErrorDb("Spell (ID: %u) not listed in `SkillLineAbility.dbc` but listed with `reqSpell`=0 in `skill_discovery_template` table",spellId); continue; } - for(SkillLineAbilityMap::const_iterator _spell_idx = lower; _spell_idx != upper; ++_spell_idx) - { + for(SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) SkillDiscoveryStore[-int32(_spell_idx->second->skillId)].push_back( SkillDiscoveryEntry(spellId, reqSkillValue, chance) ); - } } else { @@ -145,21 +142,21 @@ void LoadSkillDiscoveryTable() sLog.outString(); sLog.outString( ">> Loaded %u skill discovery definitions", count ); - if(!ssNonDiscoverableEntries.str().empty()) + if (!ssNonDiscoverableEntries.str().empty()) sLog.outErrorDb("Some items can't be successfully discovered: have in chance field value < 0.000001 in `skill_discovery_template` DB table . List:\n%s",ssNonDiscoverableEntries.str().c_str()); // report about empty data for explicit discovery spells for(uint32 spell_id = 1; spell_id < sSpellStore.GetNumRows(); ++spell_id) { SpellEntry const* spellEntry = sSpellStore.LookupEntry(spell_id); - if(!spellEntry) + if (!spellEntry) continue; // skip not explicit discovery spells if (!IsExplicitDiscoverySpell(spellEntry)) continue; - if(SkillDiscoveryStore.find(spell_id)==SkillDiscoveryStore.end()) + if (SkillDiscoveryStore.find(spell_id)==SkillDiscoveryStore.end()) sLog.outErrorDb("Spell (ID: %u) is 100%% chance random discovery ability but not have data in `skill_discovery_template` table",spell_id); } } @@ -172,9 +169,8 @@ uint32 GetExplicitDiscoverySpell(uint32 spellId, Player* player) if (tab == SkillDiscoveryStore.end()) return 0; - SkillLineAbilityMap::const_iterator lower = spellmgr.GetBeginSkillLineAbilityMap(spellId); - SkillLineAbilityMap::const_iterator upper = spellmgr.GetEndSkillLineAbilityMap(spellId); - uint32 skillvalue = lower != upper ? player->GetSkillValue(lower->second->skillId) : 0; + SkillLineAbilityMapBounds bounds = spellmgr.GetSkillLineAbilityMapBounds(spellId); + uint32 skillvalue = bounds.first != bounds.second ? player->GetSkillValue(bounds.first->second->skillId) : 0; float full_chance = 0; for(SkillDiscoveryList::const_iterator item_iter = tab->second.begin(); item_iter != tab->second.end(); ++item_iter) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index e48251347b2..e2adba9043a 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -1735,9 +1735,8 @@ WorldObject* Spell::SearchNearbyTarget(float range, SpellTargets TargetType) { case SPELL_TARGETS_ENTRY: { - SpellScriptTarget::const_iterator lower = spellmgr.GetBeginSpellScriptTarget(m_spellInfo->Id); - SpellScriptTarget::const_iterator upper = spellmgr.GetEndSpellScriptTarget(m_spellInfo->Id); - if(lower == upper) + SpellScriptTargetBounds bounds = spellmgr.GetSpellScriptTargetBounds(m_spellInfo->Id); + if(bounds.first==bounds.second) { sLog.outDebug("Spell (ID: %u) (caster Entry: %u) does not have record in `spell_script_target`", m_spellInfo->Id, m_caster->GetEntry()); if(IsPositiveSpell(m_spellInfo->Id)) @@ -1749,7 +1748,7 @@ WorldObject* Spell::SearchNearbyTarget(float range, SpellTargets TargetType) Creature* creatureScriptTarget = NULL; GameObject* goScriptTarget = NULL; - for(SpellScriptTarget::const_iterator i_spellST = lower; i_spellST != upper; ++i_spellST) + for(SpellScriptTarget::const_iterator i_spellST = bounds.first; i_spellST != bounds.second; ++i_spellST) { switch(i_spellST->second.type) { @@ -2285,9 +2284,8 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur) std::list<Unit*> unitList; if(targetType == SPELL_TARGETS_ENTRY) { - SpellScriptTarget::const_iterator lower = spellmgr.GetBeginSpellScriptTarget(m_spellInfo->Id); - SpellScriptTarget::const_iterator upper = spellmgr.GetEndSpellScriptTarget(m_spellInfo->Id); - if(lower == upper) + SpellScriptTargetBounds bounds = spellmgr.GetSpellScriptTargetBounds(m_spellInfo->Id); + if(bounds.first==bounds.second) { // Custom entries // TODO: move these to sql @@ -2360,7 +2358,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur) // let it be done in one check? else { - for(SpellScriptTarget::const_iterator i_spellST = lower; i_spellST != upper; ++i_spellST) + for(SpellScriptTarget::const_iterator i_spellST = bounds.first; i_spellST != bounds.second; ++i_spellST) { if(i_spellST->second.type == SPELL_TARGET_TYPE_CREATURE) SearchAreaTarget(unitList, radius, pushType, SPELL_TARGETS_ENTRY, i_spellST->second.targetEntry); @@ -4566,15 +4564,15 @@ SpellCastResult Spell::CheckCast(bool strict) } // Spell casted only on battleground - if((m_spellInfo->AttributesEx3 & SPELL_ATTR_EX3_BATTLEGROUND) && m_caster->GetTypeId() == TYPEID_PLAYER) + if ((m_spellInfo->AttributesEx3 & SPELL_ATTR_EX3_BATTLEGROUND) && m_caster->GetTypeId() == TYPEID_PLAYER) if(!((Player*)m_caster)->InBattleGround()) return SPELL_FAILED_ONLY_BATTLEGROUNDS; // do not allow spells to be cast in arenas // - with greater than 15 min CD without SPELL_ATTR_EX4_USABLE_IN_ARENA flag // - with SPELL_ATTR_EX4_NOT_USABLE_IN_ARENA flag - if( (m_spellInfo->AttributesEx4 & SPELL_ATTR_EX4_NOT_USABLE_IN_ARENA) || - GetSpellRecoveryTime(m_spellInfo) > 15 * MINUTE * IN_MILISECONDS && !(m_spellInfo->AttributesEx4 & SPELL_ATTR_EX4_USABLE_IN_ARENA) ) + if ((m_spellInfo->AttributesEx4 & SPELL_ATTR_EX4_NOT_USABLE_IN_ARENA) || + GetSpellRecoveryTime(m_spellInfo) > 15 * MINUTE * IN_MILISECONDS && !(m_spellInfo->AttributesEx4 & SPELL_ATTR_EX4_USABLE_IN_ARENA)) if(MapEntry const* mapEntry = sMapStore.LookupEntry(m_caster->GetMapId())) if(mapEntry->IsBattleArena()) return SPELL_FAILED_NOT_IN_ARENA; @@ -4592,17 +4590,17 @@ SpellCastResult Spell::CheckCast(bool strict) } // not let players cast spells at mount (and let do it to creatures) - if( m_caster->IsMounted() && m_caster->GetTypeId()==TYPEID_PLAYER && !m_IsTriggeredSpell && - !IsPassiveSpell(m_spellInfo->Id) && !(m_spellInfo->Attributes & SPELL_ATTR_CASTABLE_WHILE_MOUNTED) ) + if (m_caster->IsMounted() && m_caster->GetTypeId()==TYPEID_PLAYER && !m_IsTriggeredSpell && + !IsPassiveSpell(m_spellInfo->Id) && !(m_spellInfo->Attributes & SPELL_ATTR_CASTABLE_WHILE_MOUNTED)) { - if(m_caster->isInFlight()) + if (m_caster->isInFlight()) return SPELL_FAILED_NOT_FLYING; else return SPELL_FAILED_NOT_MOUNTED; } // always (except passive spells) check items (focus object can be required for any type casts) - if(!IsPassiveSpell(m_spellInfo->Id)) + if (!IsPassiveSpell(m_spellInfo->Id)) { SpellCastResult castResult = CheckItems(); if(castResult != SPELL_CAST_OK) @@ -4630,7 +4628,7 @@ SpellCastResult Spell::CheckCast(bool strict) Creature* creatureScriptTarget = NULL; GameObject* goScriptTarget = NULL; - for(SpellScriptTarget::const_iterator i_spellST = lower; i_spellST != upper; ++i_spellST) + for(SpellScriptTarget::const_iterator i_spellST = bounds.first; i_spellST != bounds.second; ++i_spellST) { switch(i_spellST->second.type) { @@ -4638,7 +4636,7 @@ SpellCastResult Spell::CheckCast(bool strict) { GameObject* p_GameObject = NULL; - if(i_spellST->second.targetEntry) + if (i_spellST->second.targetEntry) { CellPair p(MaNGOS::ComputeCellPair(m_caster->GetPositionX(), m_caster->GetPositionY())); Cell cell(p); @@ -4651,7 +4649,7 @@ SpellCastResult Spell::CheckCast(bool strict) CellLock<GridReadGuard> cell_lock(cell, p); cell_lock->Visit(cell_lock, object_checker, *m_caster->GetMap()); - if(p_GameObject) + if (p_GameObject) { // remember found target and range, next attempt will find more near target with another entry creatureScriptTarget = NULL; @@ -4659,10 +4657,10 @@ SpellCastResult Spell::CheckCast(bool strict) range = go_check.GetLastRange(); } } - else if( focusObject ) // Focus Object + else if (focusObject) // Focus Object { float frange = m_caster->GetDistance(focusObject); - if(range >= frange) + if (range >= frange) { creatureScriptTarget = NULL; goScriptTarget = focusObject; @@ -6793,4 +6791,4 @@ void Spell::FillRaidOrPartyHealthPriorityTargets( UnitList &TagUnitMap, Unit* ta TagUnitMap.push_back(healthQueue.top().getUnit()); healthQueue.pop(); } -} +}
\ No newline at end of file diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index d34f611b7a7..1b7b5065af2 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -1233,9 +1233,7 @@ void SpellMgr::LoadSpellTargetPositions() } if(found) { - SpellScriptTarget::const_iterator lower = spellmgr.GetBeginSpellScriptTarget(i); - SpellScriptTarget::const_iterator upper = spellmgr.GetEndSpellScriptTarget(i); - if(lower == upper) + if(!spellmgr.GetSpellTargetPosition(i)) sLog.outDetail("Spell (ID: %u) does not have record in `spell_target_position`", i); } } @@ -1704,10 +1702,9 @@ bool SpellMgr::IsPrimaryProfessionFirstRankSpell(uint32 spellId) const bool SpellMgr::IsSkillBonusSpell(uint32 spellId) const { - SkillLineAbilityMap::const_iterator lower = GetBeginSkillLineAbilityMap(spellId); - SkillLineAbilityMap::const_iterator upper = GetEndSkillLineAbilityMap(spellId); + SkillLineAbilityMapBounds bounds = GetSkillLineAbilityMapBounds(spellId); - for(SkillLineAbilityMap::const_iterator _spell_idx = lower; _spell_idx != upper; ++_spell_idx) + for(SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) { SkillLineAbilityEntry const *pAbility = _spell_idx->second; if (!pAbility || pAbility->learnOnGetSkill != ABILITY_LEARNED_ON_GET_PROFESSION_SKILL) @@ -1885,11 +1882,10 @@ void SpellMgr::LoadSpellLearnSpells() // other required explicit dependent learning dbc_node.autoLearned = entry->EffectImplicitTargetA[i] == TARGET_UNIT_PET || GetTalentSpellCost(spell) > 0 || IsPassiveSpell(spell) || IsSpellHaveEffect(entry,SPELL_EFFECT_SKILL_STEP); - SpellLearnSpellMap::const_iterator db_node_begin = GetBeginSpellLearnSpell(spell); - SpellLearnSpellMap::const_iterator db_node_end = GetEndSpellLearnSpell(spell); + SpellLearnSpellMapBounds db_node_bounds = GetSpellLearnSpellMapBounds(spell); bool found = false; - for(SpellLearnSpellMap::const_iterator itr = db_node_begin; itr != db_node_end; ++itr) + for(SpellLearnSpellMap::const_iterator itr = db_node_bounds.first; itr != db_node_bounds.second; ++itr) { if(itr->second.spell == dbc_node.spell) { @@ -2060,9 +2056,8 @@ void SpellMgr::LoadSpellScriptTarget() } if(found) { - SpellScriptTarget::const_iterator lower = spellmgr.GetBeginSpellScriptTarget(i); - SpellScriptTarget::const_iterator upper = spellmgr.GetEndSpellScriptTarget(i); - if(lower == upper) + SpellScriptTargetBounds bounds = spellmgr.GetSpellScriptTargetBounds(i); + if(bounds.first==bounds.second) sLog.outDetail("Spell (ID: %u) does not have record in `spell_script_target`", i); } } @@ -3852,13 +3847,12 @@ void SpellMgr::LoadEnchantCustomAttr() bool SpellMgr::IsSkillTypeSpell(uint32 spellId, SkillType type) const { - SkillLineAbilityMap::const_iterator lower = GetBeginSkillLineAbilityMap(spellId); - SkillLineAbilityMap::const_iterator upper = GetEndSkillLineAbilityMap(spellId); - for (;lower!=upper;++lower) - { - if (lower->second->skillId==type) + SkillLineAbilityMapBounds bounds = GetSkillLineAbilityMapBounds(spellId); + + for(SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) + if (_spell_idx->second->skillId == type) return true; - } + return false; } @@ -3937,9 +3931,8 @@ void SpellMgr::LoadSpellLinked() bool SpellMgr::CheckDB() const { - SpellScriptTarget::const_iterator lower = GetBeginSpellScriptTarget(30531); - SpellScriptTarget::const_iterator upper = GetEndSpellScriptTarget(30531); - if(lower == upper || lower->second.targetEntry != 17256) + SpellScriptTargetBounds bounds = spellmgr.GetSpellScriptTargetBounds(30531); + if(bounds.first == bounds.second || bounds.first->second.targetEntry != 17256) return false; return true; diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 934f63a1684..f9ec824e668 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -612,6 +612,7 @@ struct SpellTargetEntry }; typedef std::multimap<uint32,SpellTargetEntry> SpellScriptTarget; +typedef std::pair<SpellScriptTarget::const_iterator,SpellScriptTarget::const_iterator> SpellScriptTargetBounds; // coordinates for spells (accessed using SpellMgr functions) struct SpellTargetPosition @@ -734,8 +735,10 @@ struct SpellLearnSpellNode }; typedef std::multimap<uint32, SpellLearnSpellNode> SpellLearnSpellMap; +typedef std::pair<SpellLearnSpellMap::const_iterator,SpellLearnSpellMap::const_iterator> SpellLearnSpellMapBounds; typedef std::multimap<uint32, SkillLineAbilityEntry const*> SkillLineAbilityMap; +typedef std::pair<SkillLineAbilityMap::const_iterator,SkillLineAbilityMap::const_iterator> SkillLineAbilityMapBounds; typedef std::multimap<uint32, uint32> PetLevelupSpellSet; typedef std::map<uint32, PetLevelupSpellSet> PetLevelupSpellMap; @@ -1000,22 +1003,16 @@ class SpellMgr return mSpellLearnSpells.find(spell_id) != mSpellLearnSpells.end(); } - SpellLearnSpellMap::const_iterator GetBeginSpellLearnSpell(uint32 spell_id) const + SpellLearnSpellMapBounds GetSpellLearnSpellMapBounds(uint32 spell_id) const { - return mSpellLearnSpells.lower_bound(spell_id); - } - - SpellLearnSpellMap::const_iterator GetEndSpellLearnSpell(uint32 spell_id) const - { - return mSpellLearnSpells.upper_bound(spell_id); + return SpellLearnSpellMapBounds(mSpellLearnSpells.lower_bound(spell_id),mSpellLearnSpells.upper_bound(spell_id)); } bool IsSpellLearnToSpell(uint32 spell_id1,uint32 spell_id2) const { - SpellLearnSpellMap::const_iterator b = GetBeginSpellLearnSpell(spell_id1); - SpellLearnSpellMap::const_iterator e = GetEndSpellLearnSpell(spell_id1); - for(SpellLearnSpellMap::const_iterator i = b; i != e; ++i) - if(i->second.spell==spell_id2) + SpellLearnSpellMapBounds bounds = GetSpellLearnSpellMapBounds(spell_id1); + for(SpellLearnSpellMap::const_iterator i = bounds.first; i != bounds.second; ++i) + if (i->second.spell==spell_id2) return true; return false; } @@ -1030,27 +1027,17 @@ class SpellMgr // Spell script targets - SpellScriptTarget::const_iterator GetBeginSpellScriptTarget(uint32 spell_id) const + SpellScriptTargetBounds GetSpellScriptTargetBounds(uint32 spell_id) const { - return mSpellScriptTarget.lower_bound(spell_id); - } - - SpellScriptTarget::const_iterator GetEndSpellScriptTarget(uint32 spell_id) const - { - return mSpellScriptTarget.upper_bound(spell_id); + return SpellScriptTargetBounds(mSpellScriptTarget.lower_bound(spell_id),mSpellScriptTarget.upper_bound(spell_id)); } // Spell correctess for client using static bool IsSpellValid(SpellEntry const * spellInfo, Player* pl = NULL, bool msg = true); - SkillLineAbilityMap::const_iterator GetBeginSkillLineAbilityMap(uint32 spell_id) const - { - return mSkillLineAbilityMap.lower_bound(spell_id); - } - - SkillLineAbilityMap::const_iterator GetEndSkillLineAbilityMap(uint32 spell_id) const + SkillLineAbilityMapBounds GetSkillLineAbilityMapBounds(uint32 spell_id) const { - return mSkillLineAbilityMap.upper_bound(spell_id); + return SkillLineAbilityMapBounds(mSkillLineAbilityMap.lower_bound(spell_id),mSkillLineAbilityMap.upper_bound(spell_id)); } PetAura const* GetPetAura(uint32 spell_id, uint8 eff) |