Scripts/Icecrown Citadel: Corrected line of sight checks for Sindragosa's Ice Tombs

Closes #628
This commit is contained in:
Shauren
2011-02-16 19:10:08 +01:00
parent 21a9d90aa8
commit a6ffb3d7be
3 changed files with 16 additions and 8 deletions

View File

@@ -2018,6 +2018,7 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
( 72528, 'spell_sindragosa_collision_filter'),
( 72529, 'spell_sindragosa_collision_filter'),
( 72530, 'spell_sindragosa_collision_filter'),
( 70117, 'spell_sindragosa_collision_filter'),
( 70117, 'spell_sindragosa_icy_grip'),
-- Isle of Conquest
( 66630, 'spell_gen_gunship_portal'),

View File

@@ -0,0 +1,3 @@
DELETE FROM `spell_script_names` WHERE `spell_id`=70117 AND `ScriptName`='spell_sindragosa_collision_filter';
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
(70117,'spell_sindragosa_collision_filter');

View File

@@ -1166,14 +1166,14 @@ class spell_sindragosa_ice_tomb : public SpellScriptLoader
class FrostBombTargetSelector
{
public:
FrostBombTargetSelector(Unit* _caster, std::list<Unit*> const& _collisionList) : caster(_caster), collisionList(_collisionList) { }
FrostBombTargetSelector(Unit* _caster, std::list<Creature*> const& _collisionList) : caster(_caster), collisionList(_collisionList) { }
bool operator()(Unit* unit)
{
if (unit->HasAura(SPELL_ICE_TOMB_DAMAGE))
return true;
for (std::list<Unit*>::const_iterator itr = collisionList.begin(); itr != collisionList.end(); ++itr)
for (std::list<Creature*>::const_iterator itr = collisionList.begin(); itr != collisionList.end(); ++itr)
if ((*itr)->IsInBetween(caster, unit))
return true;
@@ -1181,7 +1181,7 @@ class FrostBombTargetSelector
}
Unit* caster;
std::list<Unit*> const& collisionList;
std::list<Creature*> const& collisionList;
};
class spell_sindragosa_collision_filter : public SpellScriptLoader
@@ -1193,13 +1193,17 @@ class spell_sindragosa_collision_filter : public SpellScriptLoader
{
PrepareSpellScript(spell_sindragosa_collision_filter_SpellScript);
bool Validate(SpellEntry const* /*spell*/)
{
if (!sSpellStore.LookupEntry(SPELL_ICE_TOMB_DAMAGE))
return false;
return true;
}
void FilterTargets(std::list<Unit*>& unitList)
{
std::list<Unit*> tombs;
for (std::list<Unit*>::const_iterator itr = unitList.begin(); itr != unitList.end(); ++itr)
if ((*itr)->HasAura(SPELL_ICE_TOMB_DAMAGE))
tombs.push_back(*itr);
std::list<Creature*> tombs;
GetCreatureListWithEntryInGrid(tombs, GetCaster(), NPC_ICE_TOMB, 200.0f);
unitList.remove_if(FrostBombTargetSelector(GetCaster(), tombs));
}