Fix UT/Ingvar the plunderer script.
Fixes issue #1034. - Remove setDisplayID hack and use UpdateEntry to fix Ingvar Kill Credit related achievements. - code style cleaning. Requires DB update to set loot from Ingvar Human (23954) to Undead (23980) (in normal and heroic). --HG-- branch : trunk
This commit is contained in:
@@ -26,7 +26,7 @@ EndScriptData */
|
|||||||
#include "ScriptedPch.h"
|
#include "ScriptedPch.h"
|
||||||
#include "utgarde_keep.h"
|
#include "utgarde_keep.h"
|
||||||
|
|
||||||
enum eEnums
|
enum Yells
|
||||||
{
|
{
|
||||||
//Yells Ingvar
|
//Yells Ingvar
|
||||||
YELL_AGGRO_1 = -1574005,
|
YELL_AGGRO_1 = -1574005,
|
||||||
@@ -37,9 +37,18 @@ enum eEnums
|
|||||||
|
|
||||||
YELL_KILL_1 = -1574009,
|
YELL_KILL_1 = -1574009,
|
||||||
YELL_KILL_2 = -1574010,
|
YELL_KILL_2 = -1574010,
|
||||||
|
};
|
||||||
|
|
||||||
//Ingvar Spells human form
|
enum Creatures
|
||||||
|
{
|
||||||
MOB_INGVAR_HUMAN = 23954,
|
MOB_INGVAR_HUMAN = 23954,
|
||||||
|
MOB_ANNHYLDE_THE_CALLER = 24068,
|
||||||
|
MOB_INGVAR_UNDEAD = 23980,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Spells
|
||||||
|
{
|
||||||
|
//Ingvar Spells human form
|
||||||
SPELL_CLEAVE = 42724,
|
SPELL_CLEAVE = 42724,
|
||||||
SPELL_SMASH = 42669,
|
SPELL_SMASH = 42669,
|
||||||
H_SPELL_SMASH = 59706,
|
H_SPELL_SMASH = 59706,
|
||||||
@@ -48,16 +57,11 @@ enum eEnums
|
|||||||
SPELL_ENRAGE = 42705,
|
SPELL_ENRAGE = 42705,
|
||||||
H_SPELL_ENRAGE = 59707,
|
H_SPELL_ENRAGE = 59707,
|
||||||
|
|
||||||
MOB_ANNHYLDE_THE_CALLER = 24068,
|
|
||||||
SPELL_INGVAR_FEIGN_DEATH = 42795,
|
SPELL_INGVAR_FEIGN_DEATH = 42795,
|
||||||
SPELL_SUMMON_BANSHEE = 42912,
|
SPELL_SUMMON_BANSHEE = 42912,
|
||||||
SPELL_SCOURG_RESURRECTION_EFFEKTSPAWN = 42863, //Spawn resurrecteffekt around Ingvar
|
SPELL_SCOURG_RESURRECTION = 42863, // Spawn resurrect effect around Ingvar
|
||||||
|
|
||||||
MODEL_INGVAR_UNDEAD = 26351,
|
//Ingvar Spells undead form
|
||||||
MODEL_INGVAR_HUMAN = 21953,
|
|
||||||
|
|
||||||
//Ingvar Spells undead form
|
|
||||||
MOB_INGVAR_UNDEAD = 23980,
|
|
||||||
SPELL_DARK_SMASH = 42723,
|
SPELL_DARK_SMASH = 42723,
|
||||||
SPELL_DREADFUL_ROAR = 42729,
|
SPELL_DREADFUL_ROAR = 42729,
|
||||||
H_SPELL_DREADFUL_ROAR = 59734,
|
H_SPELL_DREADFUL_ROAR = 59734,
|
||||||
@@ -77,35 +81,32 @@ struct boss_ingvar_the_plundererAI : public ScriptedAI
|
|||||||
|
|
||||||
ScriptedInstance* pInstance;
|
ScriptedInstance* pInstance;
|
||||||
|
|
||||||
bool undead;
|
bool bIsUndead;
|
||||||
bool event_inProgress;
|
bool bEventInProgress;
|
||||||
|
|
||||||
uint32 Cleave_Timer;
|
uint32 uiCleaveTimer;
|
||||||
uint32 Smash_Timer;
|
uint32 uiSmashTimer;
|
||||||
uint32 Enrage_Timer;
|
uint32 uiEnrageTimer;
|
||||||
uint32 Roar_Timer;
|
uint32 uiRoarTimer;
|
||||||
uint32 SpawnResTimer;
|
uint32 uiSpawnResTimer;
|
||||||
uint32 wait_Timer;
|
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
if (undead) // Visual Hack
|
if (bIsUndead)
|
||||||
m_creature->SetDisplayId(MODEL_INGVAR_HUMAN);
|
m_creature->UpdateEntry(MOB_INGVAR_HUMAN);
|
||||||
|
|
||||||
undead = false;
|
bIsUndead = false;
|
||||||
event_inProgress = false;
|
bEventInProgress = false;
|
||||||
|
|
||||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
||||||
m_creature->SetStandState(UNIT_STAND_STATE_STAND);
|
m_creature->SetStandState(UNIT_STAND_STATE_STAND);
|
||||||
|
|
||||||
Cleave_Timer = 2000;
|
uiCleaveTimer = 2000;
|
||||||
Smash_Timer = 5000;
|
uiSmashTimer = 5000;
|
||||||
Enrage_Timer = 10000;
|
uiEnrageTimer = 10000;
|
||||||
Roar_Timer = 15000;
|
uiRoarTimer = 15000;
|
||||||
|
|
||||||
SpawnResTimer = 3000;
|
uiSpawnResTimer = 3000;
|
||||||
|
|
||||||
wait_Timer = 0;
|
|
||||||
|
|
||||||
if (pInstance)
|
if (pInstance)
|
||||||
pInstance->SetData(DATA_INGVAR_EVENT, NOT_STARTED);
|
pInstance->SetData(DATA_INGVAR_EVENT, NOT_STARTED);
|
||||||
@@ -113,27 +114,26 @@ struct boss_ingvar_the_plundererAI : public ScriptedAI
|
|||||||
|
|
||||||
void DamageTaken(Unit *done_by, uint32 &damage)
|
void DamageTaken(Unit *done_by, uint32 &damage)
|
||||||
{
|
{
|
||||||
if (damage >= m_creature->GetHealth() && !undead)
|
if (damage >= m_creature->GetHealth() && !bIsUndead)
|
||||||
{
|
{
|
||||||
//DoCast(m_creature, SPELL_INGVAR_FEIGN_DEATH, true); // Dont work ???
|
//DoCast(m_creature, SPELL_INGVAR_FEIGN_DEATH, true); // Dont work ???
|
||||||
// visuel hack
|
// visuel hack
|
||||||
m_creature->SetHealth(0);
|
m_creature->SetHealth(0);
|
||||||
m_creature->InterruptNonMeleeSpells(true);
|
m_creature->InterruptNonMeleeSpells(true);
|
||||||
m_creature->RemoveAllAuras();
|
m_creature->RemoveAllAuras();
|
||||||
m_creature->SetDisplayId(MODEL_INGVAR_UNDEAD);
|
|
||||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
||||||
m_creature->GetMotionMaster()->MovementExpired(false);
|
m_creature->GetMotionMaster()->MovementExpired(false);
|
||||||
m_creature->GetMotionMaster()->MoveIdle();
|
m_creature->GetMotionMaster()->MoveIdle();
|
||||||
m_creature->SetStandState(UNIT_STAND_STATE_DEAD);
|
m_creature->SetStandState(UNIT_STAND_STATE_DEAD);
|
||||||
// visuel hack end
|
// visuel hack end
|
||||||
|
|
||||||
event_inProgress = true;
|
bEventInProgress = true;
|
||||||
undead = true;
|
bIsUndead = true;
|
||||||
|
|
||||||
DoScriptText(YELL_DEAD_1,m_creature);
|
DoScriptText(YELL_DEAD_1,m_creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event_inProgress)
|
if (bEventInProgress)
|
||||||
{
|
{
|
||||||
damage = 0;
|
damage = 0;
|
||||||
}
|
}
|
||||||
@@ -141,11 +141,12 @@ struct boss_ingvar_the_plundererAI : public ScriptedAI
|
|||||||
|
|
||||||
void StartZombiePhase()
|
void StartZombiePhase()
|
||||||
{
|
{
|
||||||
undead = true;
|
bIsUndead = true;
|
||||||
event_inProgress = false;
|
bEventInProgress = false;
|
||||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
||||||
|
m_creature->UpdateEntry(MOB_INGVAR_UNDEAD);
|
||||||
|
m_creature->SetInCombatWith(m_creature->getVictim());
|
||||||
m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());
|
m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());
|
||||||
m_creature->AI()->AttackStart(m_creature->getVictim());
|
|
||||||
|
|
||||||
DoScriptText(YELL_AGGRO_2,m_creature);
|
DoScriptText(YELL_AGGRO_2,m_creature);
|
||||||
}
|
}
|
||||||
@@ -168,8 +169,10 @@ struct boss_ingvar_the_plundererAI : public ScriptedAI
|
|||||||
|
|
||||||
void KilledUnit(Unit *victim)
|
void KilledUnit(Unit *victim)
|
||||||
{
|
{
|
||||||
if (undead) { DoScriptText(YELL_KILL_1,m_creature); }
|
if (bIsUndead)
|
||||||
else { DoScriptText(YELL_KILL_2,m_creature); }
|
DoScriptText(YELL_KILL_1,m_creature);
|
||||||
|
else
|
||||||
|
DoScriptText(YELL_KILL_2,m_creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
void UpdateAI(const uint32 diff)
|
||||||
@@ -177,66 +180,55 @@ struct boss_ingvar_the_plundererAI : public ScriptedAI
|
|||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (event_inProgress)
|
if (bEventInProgress)
|
||||||
{
|
{
|
||||||
if (SpawnResTimer)
|
if (uiSpawnResTimer)
|
||||||
if (SpawnResTimer <= diff)
|
if (uiSpawnResTimer <= diff)
|
||||||
{
|
{
|
||||||
DoCast(m_creature, SPELL_SUMMON_BANSHEE); // Summons direktly on caster position
|
DoCast(m_creature, SPELL_SUMMON_BANSHEE); // Summons directly on caster position
|
||||||
//DoCast(m_creature, SPELL_SCOURG_RESURRECTION_EFFEKTSPAWN); // Dont needet ?
|
// DoCast(m_creature, SPELL_SCOURG_RESURRECTION, true); // Not needed ?
|
||||||
SpawnResTimer = 0;
|
uiSpawnResTimer = 0;
|
||||||
} else SpawnResTimer -= diff;
|
} else uiSpawnResTimer -= diff;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is used for a spell queue ... the spells should not castet if one spell is already casting
|
if (uiCleaveTimer <= diff)
|
||||||
if (wait_Timer)
|
|
||||||
if (wait_Timer <= diff)
|
|
||||||
{
|
{
|
||||||
wait_Timer = 0;
|
if (!m_creature->hasUnitState(UNIT_STAT_CASTING))
|
||||||
} else wait_Timer -= diff;
|
|
||||||
|
|
||||||
if (Cleave_Timer <= diff)
|
|
||||||
{
|
{
|
||||||
if (!wait_Timer)
|
if (bIsUndead)
|
||||||
{
|
|
||||||
if (undead)
|
|
||||||
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_WOE_STRIKE, H_SPELL_WOE_STRIKE));
|
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_WOE_STRIKE, H_SPELL_WOE_STRIKE));
|
||||||
else
|
else
|
||||||
DoCast(m_creature->getVictim(), SPELL_CLEAVE);
|
DoCast(m_creature->getVictim(), SPELL_CLEAVE);
|
||||||
Cleave_Timer = rand()%5000 + 2000;
|
uiCleaveTimer = rand()%5000 + 2000;
|
||||||
|
|
||||||
wait_Timer = 1000;
|
|
||||||
}
|
}
|
||||||
} else Cleave_Timer -= diff;
|
} else uiCleaveTimer -= diff;
|
||||||
|
|
||||||
if (Smash_Timer <= diff)
|
if (uiSmashTimer <= diff)
|
||||||
{
|
{
|
||||||
if (!wait_Timer)
|
if (!m_creature->hasUnitState(UNIT_STAT_CASTING))
|
||||||
{
|
{
|
||||||
if (undead)
|
if (bIsUndead)
|
||||||
DoCast(m_creature->getVictim(), SPELL_DARK_SMASH);
|
DoCast(m_creature->getVictim(), SPELL_DARK_SMASH);
|
||||||
else
|
else
|
||||||
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SMASH, H_SPELL_SMASH));
|
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SMASH, H_SPELL_SMASH));
|
||||||
Smash_Timer = 10000;
|
uiSmashTimer = 10000;
|
||||||
|
|
||||||
wait_Timer = 5000;
|
|
||||||
}
|
}
|
||||||
} else Smash_Timer -= diff;
|
} else uiSmashTimer -= diff;
|
||||||
|
|
||||||
if (!undead)
|
if (!bIsUndead)
|
||||||
{
|
{
|
||||||
if (Enrage_Timer <= diff)
|
if (uiEnrageTimer <= diff)
|
||||||
{
|
{
|
||||||
DoCast(m_creature, DUNGEON_MODE(SPELL_ENRAGE, H_SPELL_ENRAGE));
|
DoCast(m_creature, DUNGEON_MODE(SPELL_ENRAGE, H_SPELL_ENRAGE));
|
||||||
Enrage_Timer = 10000;
|
uiEnrageTimer = 10000;
|
||||||
} else Enrage_Timer -= diff;
|
} else uiEnrageTimer -= diff;
|
||||||
} else // In Undead form used to summon weapon
|
} else // In Undead form used to summon weapon
|
||||||
{
|
{
|
||||||
if (Enrage_Timer <= diff)
|
if (uiEnrageTimer <= diff)
|
||||||
{
|
{
|
||||||
if (!wait_Timer)
|
if (!m_creature->hasUnitState(UNIT_STAT_CASTING))
|
||||||
{
|
{
|
||||||
// Spawn target for Axe
|
// Spawn target for Axe
|
||||||
Unit *pTarget = SelectUnit(SELECT_TARGET_TOPAGGRO, 1);
|
Unit *pTarget = SelectUnit(SELECT_TARGET_TOPAGGRO, 1);
|
||||||
@@ -246,24 +238,22 @@ struct boss_ingvar_the_plundererAI : public ScriptedAI
|
|||||||
|
|
||||||
DoCast(m_creature, SPELL_SHADOW_AXE_SUMMON);
|
DoCast(m_creature, SPELL_SHADOW_AXE_SUMMON);
|
||||||
}
|
}
|
||||||
Enrage_Timer = 30000;
|
uiEnrageTimer = 30000;
|
||||||
}
|
}
|
||||||
} else Enrage_Timer -= diff;
|
} else uiEnrageTimer -= diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Roar_Timer <= diff)
|
if (uiRoarTimer <= diff)
|
||||||
{
|
{
|
||||||
if (!wait_Timer)
|
if (!m_creature->hasUnitState(UNIT_STAT_CASTING))
|
||||||
{
|
{
|
||||||
if (undead)
|
if (bIsUndead)
|
||||||
DoCast(m_creature, DUNGEON_MODE(SPELL_DREADFUL_ROAR, H_SPELL_DREADFUL_ROAR));
|
DoCast(m_creature, DUNGEON_MODE(SPELL_DREADFUL_ROAR, H_SPELL_DREADFUL_ROAR));
|
||||||
else
|
else
|
||||||
DoCast(m_creature, DUNGEON_MODE(SPELL_STAGGERING_ROAR, H_SPELL_STAGGERING_ROAR));
|
DoCast(m_creature, DUNGEON_MODE(SPELL_STAGGERING_ROAR, H_SPELL_STAGGERING_ROAR));
|
||||||
Roar_Timer = 10000;
|
uiRoarTimer = 10000;
|
||||||
|
|
||||||
wait_Timer = 5000;
|
|
||||||
}
|
}
|
||||||
} else Roar_Timer -= diff;
|
} else uiRoarTimer -= diff;
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
@@ -271,7 +261,7 @@ struct boss_ingvar_the_plundererAI : public ScriptedAI
|
|||||||
|
|
||||||
CreatureAI* GetAI_boss_ingvar_the_plunderer(Creature* pCreature)
|
CreatureAI* GetAI_boss_ingvar_the_plunderer(Creature* pCreature)
|
||||||
{
|
{
|
||||||
return new boss_ingvar_the_plundererAI (pCreature);
|
return new boss_ingvar_the_plundererAI(pCreature);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum eSpells
|
enum eSpells
|
||||||
@@ -295,8 +285,8 @@ struct mob_annhylde_the_callerAI : public ScriptedAI
|
|||||||
|
|
||||||
float x,y,z;
|
float x,y,z;
|
||||||
ScriptedInstance* pInstance;
|
ScriptedInstance* pInstance;
|
||||||
uint32 Resurect_Timer;
|
uint32 uiResurectTimer;
|
||||||
uint32 Resurect_Phase;
|
uint32 uiResurectPhase;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
@@ -331,8 +321,8 @@ struct mob_annhylde_the_callerAI : public ScriptedAI
|
|||||||
ingvar->RemoveAura(SPELL_SUMMON_BANSHEE);
|
ingvar->RemoveAura(SPELL_SUMMON_BANSHEE);
|
||||||
ingvar->CastSpell(ingvar,SPELL_SCOURG_RESURRECTION_DUMMY,true);
|
ingvar->CastSpell(ingvar,SPELL_SCOURG_RESURRECTION_DUMMY,true);
|
||||||
DoCast(ingvar, SPELL_SCOURG_RESURRECTION_BEAM);
|
DoCast(ingvar, SPELL_SCOURG_RESURRECTION_BEAM);
|
||||||
Resurect_Timer = 8000;
|
uiResurectTimer = 8000;
|
||||||
Resurect_Phase = 1;
|
uiResurectPhase = 1;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
m_creature->SetVisibility(VISIBILITY_OFF);
|
m_creature->SetVisibility(VISIBILITY_OFF);
|
||||||
@@ -348,10 +338,10 @@ struct mob_annhylde_the_callerAI : public ScriptedAI
|
|||||||
void EnterCombat(Unit *who) {}
|
void EnterCombat(Unit *who) {}
|
||||||
void UpdateAI(const uint32 diff)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if (Resurect_Timer)
|
if (uiResurectTimer)
|
||||||
if (Resurect_Timer <= diff)
|
if (uiResurectTimer <= diff)
|
||||||
{
|
{
|
||||||
if (Resurect_Phase == 1)
|
if (uiResurectPhase == 1)
|
||||||
{
|
{
|
||||||
Unit* ingvar = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_INGVAR) : 0);
|
Unit* ingvar = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_INGVAR) : 0);
|
||||||
if (ingvar)
|
if (ingvar)
|
||||||
@@ -359,26 +349,25 @@ struct mob_annhylde_the_callerAI : public ScriptedAI
|
|||||||
ingvar->SetStandState(UNIT_STAND_STATE_STAND);
|
ingvar->SetStandState(UNIT_STAND_STATE_STAND);
|
||||||
ingvar->CastSpell(ingvar,SPELL_SCOURG_RESURRECTION_HEAL,false);
|
ingvar->CastSpell(ingvar,SPELL_SCOURG_RESURRECTION_HEAL,false);
|
||||||
}
|
}
|
||||||
Resurect_Timer = 3000;
|
uiResurectTimer = 3000;
|
||||||
Resurect_Phase = 2;
|
uiResurectPhase = 2;
|
||||||
} else if (Resurect_Phase == 2)
|
}
|
||||||
|
else if (uiResurectPhase == 2)
|
||||||
{
|
{
|
||||||
Creature* ingvar = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_INGVAR) : 0);
|
if (Creature* ingvar = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_INGVAR) : 0))
|
||||||
if (ingvar)
|
|
||||||
{
|
{
|
||||||
ingvar->RemoveAurasDueToSpell(SPELL_SCOURG_RESURRECTION_DUMMY);
|
ingvar->RemoveAurasDueToSpell(SPELL_SCOURG_RESURRECTION_DUMMY);
|
||||||
//ingvar->CastSpell(ingvar,SPELL_INGVAR_TRANSFORM,false);
|
|
||||||
//ingvar->SetDisplayId(MODEL_INGVAR_UNDEAD); // Visual Hack - when he dies he becomes human model -> wrong
|
|
||||||
Creature* c_ingvar = ingvar;
|
|
||||||
|
|
||||||
CAST_AI(boss_ingvar_the_plundererAI, (c_ingvar->AI()))->StartZombiePhase();
|
if (boss_ingvar_the_plundererAI* pAI = CAST_AI(boss_ingvar_the_plundererAI, ingvar->AI()))
|
||||||
|
pAI->StartZombiePhase();
|
||||||
|
|
||||||
m_creature->GetMotionMaster()->MovePoint(2,x+1,y,z+30);
|
m_creature->GetMotionMaster()->MovePoint(2,x+1,y,z+30);
|
||||||
++Resurect_Phase;
|
++uiResurectPhase;
|
||||||
|
uiResurectTimer = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else Resurect_Timer -= diff;
|
} else uiResurectTimer -= diff;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -399,7 +388,7 @@ struct mob_ingvar_throw_dummyAI : public ScriptedAI
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 Despawn_Timer;
|
uint32 uiDespawnTimer;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
@@ -411,19 +400,19 @@ struct mob_ingvar_throw_dummyAI : public ScriptedAI
|
|||||||
pTarget->GetPosition(x,y,z);
|
pTarget->GetPosition(x,y,z);
|
||||||
m_creature->GetMotionMaster()->MovePoint(0,x,y,z);
|
m_creature->GetMotionMaster()->MovePoint(0,x,y,z);
|
||||||
}
|
}
|
||||||
Despawn_Timer = 7000;
|
uiDespawnTimer = 7000;
|
||||||
}
|
}
|
||||||
void AttackStart(Unit* who) {}
|
void AttackStart(Unit* who) {}
|
||||||
void MoveInLineOfSight(Unit* who) {}
|
void MoveInLineOfSight(Unit* who) {}
|
||||||
void EnterCombat(Unit *who) {}
|
void EnterCombat(Unit *who) {}
|
||||||
void UpdateAI(const uint32 diff)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if (Despawn_Timer <= diff)
|
if (uiDespawnTimer <= diff)
|
||||||
{
|
{
|
||||||
m_creature->DealDamage(m_creature,m_creature->GetHealth());
|
m_creature->DealDamage(m_creature,m_creature->GetHealth());
|
||||||
m_creature->RemoveCorpse();
|
m_creature->RemoveCorpse();
|
||||||
Despawn_Timer = 0;
|
uiDespawnTimer = 0;
|
||||||
} else Despawn_Timer -= diff;
|
} else uiDespawnTimer -= diff;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user