diff options
author | Spp <spp@jorge.gr> | 2013-05-21 09:41:13 +0200 |
---|---|---|
committer | Spp <spp@jorge.gr> | 2013-05-21 09:41:13 +0200 |
commit | 1b6fb2b6959f504d9e33d2326691cf43a04690d2 (patch) | |
tree | 31671ddd62612c27e1e821408956b9a8ff52a0ab /src/server/game/Spells/SpellMgr.cpp | |
parent | 82dc639882d2d51a8bde9bcd47b773be435a5a12 (diff) | |
parent | 243c325ca4323feb4f7f80c0ecd3873c78cbf887 (diff) |
Merge branch 'master' into 4.3.4 [NOTE: There are parts of code marked as "REVIEW - MERGE" That needs some review)
Conflicts:
src/server/game/DataStores/DBCStores.cpp
src/server/game/DataStores/DBCStores.h
src/server/game/DataStores/DBCfmt.h
src/server/game/Entities/Unit/Unit.cpp
src/server/game/Entities/Unit/Unit.h
src/server/game/Handlers/AuctionHouseHandler.cpp
src/server/game/Handlers/GroupHandler.cpp
src/server/game/Movement/Spline/MovementTypedefs.h
src/server/game/Spells/Auras/SpellAuraEffects.cpp
src/server/game/Spells/SpellInfo.cpp
src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
src/server/scripts/Spells/spell_generic.cpp
Diffstat (limited to 'src/server/game/Spells/SpellMgr.cpp')
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 52 |
1 files changed, 18 insertions, 34 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 9ae8e7ec8f7..7da054b4f7a 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -620,9 +620,9 @@ bool SpellMgr::IsSpellLearnToSpell(uint32 spell_id1, uint32 spell_id2) const return false; } -SpellTargetPosition const* SpellMgr::GetSpellTargetPosition(uint32 spell_id) const +SpellTargetPosition const* SpellMgr::GetSpellTargetPosition(uint32 spell_id, SpellEffIndex effIndex) const { - SpellTargetPositionMap::const_iterator itr = mSpellTargetPositions.find(spell_id); + SpellTargetPositionMap::const_iterator itr = mSpellTargetPositions.find(std::make_pair(spell_id, effIndex)); if (itr != mSpellTargetPositions.end()) return &itr->second; return NULL; @@ -1554,8 +1554,8 @@ void SpellMgr::LoadSpellTargetPositions() mSpellTargetPositions.clear(); // need for reload case - // 0 1 2 3 4 5 - QueryResult result = WorldDatabase.Query("SELECT id, target_map, target_position_x, target_position_y, target_position_z, target_orientation FROM spell_target_position"); + // 0 1 2 3 4 5 6 + QueryResult result = WorldDatabase.Query("SELECT id, effIndex, target_map, target_position_x, target_position_y, target_position_z, target_orientation FROM spell_target_position"); if (!result) { sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 spell target coordinates. DB table `spell_target_position` is empty."); @@ -1568,25 +1568,26 @@ void SpellMgr::LoadSpellTargetPositions() Field* fields = result->Fetch(); uint32 Spell_ID = fields[0].GetUInt32(); + SpellEffIndex effIndex = SpellEffIndex(fields[1].GetUInt8()); SpellTargetPosition st; - st.target_mapId = fields[1].GetUInt16(); - st.target_X = fields[2].GetFloat(); - st.target_Y = fields[3].GetFloat(); - st.target_Z = fields[4].GetFloat(); - st.target_Orientation = fields[5].GetFloat(); + st.target_mapId = fields[2].GetUInt16(); + st.target_X = fields[3].GetFloat(); + st.target_Y = fields[4].GetFloat(); + st.target_Z = fields[5].GetFloat(); + st.target_Orientation = fields[6].GetFloat(); MapEntry const* mapEntry = sMapStore.LookupEntry(st.target_mapId); if (!mapEntry) { - sLog->outError(LOG_FILTER_SQL, "Spell (ID:%u) target map (ID: %u) does not exist in `Map.dbc`.", Spell_ID, st.target_mapId); + sLog->outError(LOG_FILTER_SQL, "Spell (Id: %u, effIndex: %u) target map (ID: %u) does not exist in `Map.dbc`.", Spell_ID, effIndex, st.target_mapId); continue; } if (st.target_X==0 && st.target_Y==0 && st.target_Z==0) { - sLog->outError(LOG_FILTER_SQL, "Spell (ID:%u) target coordinates not provided.", Spell_ID); + sLog->outError(LOG_FILTER_SQL, "Spell (Id: %u, effIndex: %u) target coordinates not provided.", Spell_ID, effIndex); continue; } @@ -1597,35 +1598,18 @@ void SpellMgr::LoadSpellTargetPositions() continue; } - bool found = false; - for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) + if (spellInfo->Effects[effIndex].TargetA.GetTarget() == TARGET_DEST_DB || spellInfo->Effects[effIndex].TargetB.GetTarget() == TARGET_DEST_DB) { - if (spellInfo->Effects[i].TargetA.GetTarget() == TARGET_DEST_DB || spellInfo->Effects[i].TargetB.GetTarget() == TARGET_DEST_DB) - { - // additional requirements - if (spellInfo->Effects[i].Effect == SPELL_EFFECT_BIND && spellInfo->Effects[i].MiscValue) - { - uint32 area_id = sMapMgr->GetAreaId(st.target_mapId, st.target_X, st.target_Y, st.target_Z); - if (area_id != uint32(spellInfo->Effects[i].MiscValue)) - { - sLog->outError(LOG_FILTER_SQL, "Spell (Id: %u) listed in `spell_target_position` expected point to zone %u bit point to zone %u.", Spell_ID, spellInfo->Effects[i].MiscValue, area_id); - break; - } - } - - found = true; - break; - } + std::pair<uint32, SpellEffIndex> key = std::make_pair(Spell_ID, effIndex); + mSpellTargetPositions[key] = st; + ++count; } - if (!found) + else { - sLog->outError(LOG_FILTER_SQL, "Spell (Id: %u) listed in `spell_target_position` does not have target TARGET_DEST_DB (17).", Spell_ID); + sLog->outError(LOG_FILTER_SQL, "Spell (Id: %u, effIndex: %u) listed in `spell_target_position` does not have target TARGET_DEST_DB (17).", Spell_ID, effIndex); continue; } - mSpellTargetPositions[Spell_ID] = st; - ++count; - } while (result->NextRow()); /* |