diff options
author | Shauren <shauren.trinity@gmail.com> | 2013-06-08 23:11:18 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2013-06-08 23:11:18 +0200 |
commit | f8d9a8d2e91bedbf05ea8d3515b20411c7ac53a3 (patch) | |
tree | bed86b4e8882b6ff6da8164efbb347c82cdf4208 /src | |
parent | cd24f8521c24932f6a1896926bd24408dcaac837 (diff) |
Core/Spells: Fixed fishing broken in a recent commit
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 21 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 18 |
2 files changed, 21 insertions, 18 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 2cbbde67e6a..e7f7ea69611 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1414,7 +1414,26 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici float x, y, z, angle; angle = (float)rand_norm() * static_cast<float>(M_PI * 35.0f / 180.0f) - static_cast<float>(M_PI * 17.5f / 180.0f); m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE, dis, angle); - m_targets.SetDst(x, y, z, m_caster->GetOrientation()); + + float ground = z; + float liquidLevel = m_caster->GetMap()->GetWaterOrGroundLevel(x, y, z, &ground); + if (liquidLevel <= ground) // When there is no liquid Map::GetWaterOrGroundLevel returns ground level + { + SendCastResult(SPELL_FAILED_NOT_HERE); + SendChannelUpdate(0); + finish(false); + return; + } + + if (ground + 0.75 > liquidLevel) + { + SendCastResult(SPELL_FAILED_TOO_SHALLOW); + SendChannelUpdate(0); + finish(false); + return; + } + + m_targets.SetDst(x, y, liquidLevel, m_caster->GetOrientation()); return; } default: diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 64a538dce86..fa82b6436d3 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -5290,25 +5290,9 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) } Map* cMap = m_caster->GetMap(); - if (goinfo->type == GAMEOBJECT_TYPE_FISHINGNODE || goinfo->type == GAMEOBJECT_TYPE_FISHINGHOLE) - { - LiquidData liqData; - if (!cMap->IsInWater(fx, fy, fz + 1.f/* -0.5f */, &liqData)) // Hack to prevent fishing bobber from failing to land on fishing hole - { // but this is not proper, we really need to ignore not materialized objects - SendCastResult(SPELL_FAILED_NOT_HERE); - SendChannelUpdate(0); - return; - } - - // replace by water level in this case - //fz = cMap->GetWaterLevel(fx, fy); - fz = liqData.level; - } // if gameobject is summoning object, it should be spawned right on caster's position - else if (goinfo->type == GAMEOBJECT_TYPE_SUMMONING_RITUAL) - { + if (goinfo->type == GAMEOBJECT_TYPE_SUMMONING_RITUAL) m_caster->GetPosition(fx, fy, fz); - } GameObject* pGameObj = new GameObject; |