diff options
| author | megamage <none@none> | 2009-02-16 19:04:31 -0600 |
|---|---|---|
| committer | megamage <none@none> | 2009-02-16 19:04:31 -0600 |
| commit | 00ba699d6f391623db188cdcf183262369d38f31 (patch) | |
| tree | 5fdc1441dc3f71a5de985c9c176e32aa51c7cdc4 /src/bindings/scripts | |
| parent | 91e640d14e2332f0e1fc47780fc6278c02e47ee6 (diff) | |
| parent | 5ded6c8df4920acbc14b6b21dd2d68a54e99011a (diff) | |
*Merge.
--HG--
branch : trunk
Diffstat (limited to 'src/bindings/scripts')
4 files changed, 22 insertions, 10 deletions
diff --git a/src/bindings/scripts/include/sc_creature.cpp b/src/bindings/scripts/include/sc_creature.cpp index 932038a8194..2d767815dad 100644 --- a/src/bindings/scripts/include/sc_creature.cpp +++ b/src/bindings/scripts/include/sc_creature.cpp @@ -203,13 +203,21 @@ void ScriptedAI::DoStopAttack() void ScriptedAI::DoCast(Unit* victim, uint32 spellId, bool triggered) { - if (!victim || m_creature->hasUnitState(UNIT_STAT_CASTING)) + if (!victim || m_creature->hasUnitState(UNIT_STAT_CASTING) && !triggered) return; //m_creature->StopMoving(); m_creature->CastSpell(victim, spellId, triggered); } +void ScriptedAI::DoCastAOE(uint32 spellId, bool triggered) +{ + if(!triggered && m_creature->hasUnitState(UNIT_STAT_CASTING)) + return; + + m_creature->CastSpell((Unit*)NULL, spellId, triggered); +} + void ScriptedAI::DoCastSpell(Unit* who,SpellEntry const *spellInfo, bool triggered) { if (!who || m_creature->IsNonMeleeSpellCasted(false)) diff --git a/src/bindings/scripts/include/sc_creature.h b/src/bindings/scripts/include/sc_creature.h index f72278595c8..30769927501 100644 --- a/src/bindings/scripts/include/sc_creature.h +++ b/src/bindings/scripts/include/sc_creature.h @@ -121,6 +121,7 @@ struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI //Cast spell by Id void DoCast(Unit* victim, uint32 spellId, bool triggered = false); + void DoCastAOE(uint32 spellId, bool triggered = false); //Cast spell by spell info void DoCastSpell(Unit* who,SpellEntry const *spellInfo, bool triggered = false); diff --git a/src/bindings/scripts/scripts/creature/mob_event_ai.cpp b/src/bindings/scripts/scripts/creature/mob_event_ai.cpp index c7605f9adc4..93cb9aba376 100644 --- a/src/bindings/scripts/scripts/creature/mob_event_ai.cpp +++ b/src/bindings/scripts/scripts/creature/mob_event_ai.cpp @@ -1260,9 +1260,13 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI switch ((*i).Event.event_type) { case EVENT_T_RANGE: - float dist = m_creature->GetDistance(m_creature->getVictim()); - if (dist > (*i).Event.event_param1 && dist < (*i).Event.event_param2) - ProcessEvent(*i); + // in some cases this is called twice and victim may not exist in the second time + if(m_creature->getVictim()) + { + float dist = m_creature->GetDistance(m_creature->getVictim()); + if (dist > (*i).Event.event_param1 && dist < (*i).Event.event_param2) + ProcessEvent(*i); + } break; } } diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp index 6930602fc7a..0bf3ecfb4c9 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp @@ -586,32 +586,31 @@ void boss_kalecgosAI::UpdateAI(const uint32 diff) if(ArcaneBuffetTimer < diff) { - DoCast(m_creature->getVictim(), SPELL_ARCANE_BUFFET); + DoCastAOE(SPELL_ARCANE_BUFFET); ArcaneBuffetTimer = 8000; }else ArcaneBuffetTimer -= diff; if(FrostBreathTimer < diff) { - DoCast(m_creature->getVictim(), SPELL_FROST_BREATH); + DoCastAOE(SPELL_FROST_BREATH); FrostBreathTimer = 15000; }else FrostBreathTimer -= diff; if(TailLashTimer < diff) { - DoCast(m_creature->getVictim(), SPELL_TAIL_LASH); + DoCastAOE(SPELL_TAIL_LASH); TailLashTimer = 15000; }else TailLashTimer -= diff; if(WildMagicTimer < diff) { - Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0); - if(target && target->isAlive()) - DoCast(target, WildMagic[rand()%6]); + DoCastAOE(WildMagic[rand()%6]); WildMagicTimer = 20000; }else WildMagicTimer -= diff; if(SpectralBlastTimer < diff) { + //this is a hack. we need to find a victim without aura in core Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0); if( ( target != m_creature->getVictim() ) && target->isAlive() && !(target->HasAura(AURA_SPECTRAL_EXHAUSTION, 0)) ) { |
