aboutsummaryrefslogtreecommitdiff
path: root/src/bindings/scripts
diff options
context:
space:
mode:
authormegamage <none@none>2009-02-16 19:04:31 -0600
committermegamage <none@none>2009-02-16 19:04:31 -0600
commit00ba699d6f391623db188cdcf183262369d38f31 (patch)
tree5fdc1441dc3f71a5de985c9c176e32aa51c7cdc4 /src/bindings/scripts
parent91e640d14e2332f0e1fc47780fc6278c02e47ee6 (diff)
parent5ded6c8df4920acbc14b6b21dd2d68a54e99011a (diff)
*Merge.
--HG-- branch : trunk
Diffstat (limited to 'src/bindings/scripts')
-rw-r--r--src/bindings/scripts/include/sc_creature.cpp10
-rw-r--r--src/bindings/scripts/include/sc_creature.h1
-rw-r--r--src/bindings/scripts/scripts/creature/mob_event_ai.cpp10
-rw-r--r--src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp11
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)) )
{