aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormegamage <none@none>2009-08-27 20:27:55 -0500
committermegamage <none@none>2009-08-27 20:27:55 -0500
commitdd72b5524c01ef081e1a35f65a3967652a314e5f (patch)
treefa7c95cd02aa983f70ab0f983d1fc305cfa1e3e1
parenteeb18e51bb7a539116e0a92f1db557f8727042ff (diff)
[8426] Use upper/lower iterator pairs as result instead 2 function calls. Author: VladimirMangos
--HG-- branch : trunk
-rw-r--r--src/game/AchievementMgr.cpp34
-rw-r--r--src/game/Chat.cpp50
-rw-r--r--src/game/ObjectMgr.cpp6
-rw-r--r--src/game/Player.cpp98
-rw-r--r--src/game/SkillDiscovery.cpp22
-rw-r--r--src/game/Spell.cpp40
-rw-r--r--src/game/SpellMgr.cpp35
-rw-r--r--src/game/SpellMgr.h37
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)