*Cleanup in Kael'thas script
--HG-- branch : trunk
This commit is contained in:
@@ -270,7 +270,7 @@ struct TRINITY_DLL_DECL advisorbase_ai : public ScriptedAI
|
|||||||
//Kael'thas AI
|
//Kael'thas AI
|
||||||
struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_kaelthasAI(Creature *c) : ScriptedAI(c), Summons(m_creature)
|
boss_kaelthasAI(Creature *c) : ScriptedAI(c)
|
||||||
{
|
{
|
||||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||||
AdvisorGuid[0] = 0;
|
AdvisorGuid[0] = 0;
|
||||||
@@ -281,7 +281,8 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
ScriptedInstance* pInstance;
|
ScriptedInstance* pInstance;
|
||||||
SummonList Summons;
|
|
||||||
|
std::list<uint64> Phoenix;
|
||||||
|
|
||||||
uint32 Fireball_Timer;
|
uint32 Fireball_Timer;
|
||||||
uint32 ArcaneDisruption_Timer;
|
uint32 ArcaneDisruption_Timer;
|
||||||
@@ -333,6 +334,31 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CleanPhoenix()
|
||||||
|
{
|
||||||
|
CellPair pair(Trinity::ComputeCellPair(m_creature->GetPositionX(), m_creature->GetPositionY()));
|
||||||
|
Cell cell(pair);
|
||||||
|
cell.data.Part.reserved = ALL_DISTRICT;
|
||||||
|
cell.SetNoCreate();
|
||||||
|
|
||||||
|
std::list<Creature*> PhoenixList;
|
||||||
|
|
||||||
|
Trinity::AllCreaturesOfEntryInRange check(m_creature, PHOENIX, 50);
|
||||||
|
Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(PhoenixList, check);
|
||||||
|
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> visitor(searcher);
|
||||||
|
|
||||||
|
CellLock<GridReadGuard> cell_lock(cell, pair);
|
||||||
|
cell_lock->Visit(cell_lock, visitor, *(m_creature->GetMap()));
|
||||||
|
|
||||||
|
if(!PhoenixList.empty())
|
||||||
|
{
|
||||||
|
for(std::list<Creature*>::iterator itr = PhoenixList.begin(); itr != PhoenixList.end(); ++itr)
|
||||||
|
{
|
||||||
|
(*itr)->RemoveFromWorld();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
Fireball_Timer = 5000+rand()%10000;
|
Fireball_Timer = 5000+rand()%10000;
|
||||||
@@ -354,7 +380,9 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
|
|
||||||
if(InCombat)
|
if(InCombat)
|
||||||
PrepareAdvisors();
|
PrepareAdvisors();
|
||||||
|
|
||||||
DeleteLegs();
|
DeleteLegs();
|
||||||
|
CleanPhoenix();
|
||||||
|
|
||||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||||
@@ -364,14 +392,12 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
|
|
||||||
if(pInstance)
|
if(pInstance)
|
||||||
pInstance->SetData(DATA_KAELTHASEVENT, NOT_STARTED);
|
pInstance->SetData(DATA_KAELTHASEVENT, NOT_STARTED);
|
||||||
|
|
||||||
Summons.DespawnEntry(PHOENIX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrepareAdvisors()
|
void PrepareAdvisors()
|
||||||
{
|
{
|
||||||
Creature *pCreature;
|
Creature *pCreature;
|
||||||
for(uint8 i = 0; i < 4; i++)
|
for(uint8 i = 0; i < 4; ++i)
|
||||||
{
|
{
|
||||||
pCreature = (Creature*)(Unit::GetUnit((*m_creature), AdvisorGuid[i]));
|
pCreature = (Creature*)(Unit::GetUnit((*m_creature), AdvisorGuid[i]));
|
||||||
if(pCreature)
|
if(pCreature)
|
||||||
@@ -445,7 +471,6 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
summoned->setFaction(m_creature->getFaction());
|
summoned->setFaction(m_creature->getFaction());
|
||||||
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||||
summoned->AI()->AttackStart(target);
|
summoned->AI()->AttackStart(target);
|
||||||
Summons.Summon(summoned);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -462,7 +487,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
pInstance->SetData(DATA_KAELTHASEVENT, DONE);
|
pInstance->SetData(DATA_KAELTHASEVENT, DONE);
|
||||||
|
|
||||||
Creature *pCreature;
|
Creature *pCreature;
|
||||||
for(uint8 i = 0; i < 4; i++)
|
for(uint8 i = 0; i < 4; ++i)
|
||||||
{
|
{
|
||||||
pCreature = (Creature*)(Unit::GetUnit((*m_creature), AdvisorGuid[i]));
|
pCreature = (Creature*)(Unit::GetUnit((*m_creature), AdvisorGuid[i]));
|
||||||
if(pCreature)
|
if(pCreature)
|
||||||
@@ -488,7 +513,6 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
float attackRadius = m_creature->GetAttackDistance(who);
|
float attackRadius = m_creature->GetAttackDistance(who);
|
||||||
if (Phase >= 4 && m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who))
|
if (Phase >= 4 && m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who))
|
||||||
{
|
{
|
||||||
//who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
|
|
||||||
AttackStart(who);
|
AttackStart(who);
|
||||||
}
|
}
|
||||||
else if(who->isAlive())
|
else if(who->isAlive())
|
||||||
@@ -524,7 +548,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
//start advisor within 7 seconds
|
//start advisor within 7 seconds
|
||||||
Phase_Timer = 7000;
|
Phase_Timer = 7000;
|
||||||
|
|
||||||
PhaseSubphase++;
|
++PhaseSubphase;
|
||||||
}else Phase_Timer -= diff;
|
}else Phase_Timer -= diff;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -544,7 +568,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
Advisor->AI()->AttackStart(target);
|
Advisor->AI()->AttackStart(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhaseSubphase++;
|
++PhaseSubphase;
|
||||||
}else Phase_Timer -= diff;
|
}else Phase_Timer -= diff;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -558,7 +582,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
//start advisor within 12.5 seconds
|
//start advisor within 12.5 seconds
|
||||||
Phase_Timer = 12500;
|
Phase_Timer = 12500;
|
||||||
|
|
||||||
PhaseSubphase++;
|
++PhaseSubphase;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -578,7 +602,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
Advisor->AI()->AttackStart(target);
|
Advisor->AI()->AttackStart(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhaseSubphase++;
|
++PhaseSubphase;
|
||||||
}else Phase_Timer -= diff;
|
}else Phase_Timer -= diff;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -592,7 +616,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
//start advisor within 7 seconds
|
//start advisor within 7 seconds
|
||||||
Phase_Timer = 7000;
|
Phase_Timer = 7000;
|
||||||
|
|
||||||
PhaseSubphase++;
|
++PhaseSubphase;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -612,7 +636,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
Advisor->AI()->AttackStart(target);
|
Advisor->AI()->AttackStart(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhaseSubphase++;
|
++PhaseSubphase;
|
||||||
}else Phase_Timer -= diff;
|
}else Phase_Timer -= diff;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -626,7 +650,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
//start advisor within 8.4 seconds
|
//start advisor within 8.4 seconds
|
||||||
Phase_Timer = 8400;
|
Phase_Timer = 8400;
|
||||||
|
|
||||||
PhaseSubphase++;
|
++PhaseSubphase;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -648,7 +672,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
|
|
||||||
Phase_Timer = 3000;
|
Phase_Timer = 3000;
|
||||||
|
|
||||||
PhaseSubphase++;
|
++PhaseSubphase;
|
||||||
}else Phase_Timer -= diff;
|
}else Phase_Timer -= diff;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -683,13 +707,13 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
if (PhaseSubphase == 1)
|
if (PhaseSubphase == 1)
|
||||||
{
|
{
|
||||||
Creature* Weapon;
|
Creature* Weapon;
|
||||||
for (uint32 i = 0; i < 7; i++)
|
for (uint32 i = 0; i < 7; ++i)
|
||||||
{
|
{
|
||||||
Unit* Target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
Unit* Target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||||
Weapon = m_creature->SummonCreature(((uint32)KaelthasWeapons[i][0]),KaelthasWeapons[i][1],KaelthasWeapons[i][2],KaelthasWeapons[i][3],0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000);
|
Weapon = m_creature->SummonCreature(((uint32)KaelthasWeapons[i][0]),KaelthasWeapons[i][1],KaelthasWeapons[i][2],KaelthasWeapons[i][3],0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000);
|
||||||
|
|
||||||
if (!Weapon)
|
if (!Weapon)
|
||||||
error_log("SD2: Kael'thas weapon %i could not be spawned", i);
|
error_log("STSCR: Kael'thas weapon %i could not be spawned", i);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Weapon->setFaction(m_creature->getFaction());
|
Weapon->setFaction(m_creature->getFaction());
|
||||||
@@ -722,11 +746,11 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
Unit* Target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
Unit* Target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||||
|
|
||||||
Creature* Advisor;
|
Creature* Advisor;
|
||||||
for (uint32 i = 0; i < 4; i++)
|
for (uint32 i = 0; i < 4; ++i)
|
||||||
{
|
{
|
||||||
Advisor = (Creature*)(Unit::GetUnit((*m_creature), AdvisorGuid[i]));
|
Advisor = (Creature*)(Unit::GetUnit((*m_creature), AdvisorGuid[i]));
|
||||||
if (!Advisor)
|
if (!Advisor)
|
||||||
error_log("SD2: Kael'Thas Advisor %u does not exist. Possibly despawned? Incorrectly Killed?", i);
|
error_log("TSCR: Kael'Thas Advisor %u does not exist. Possibly despawned? Incorrectly Killed?", i);
|
||||||
else ((advisorbase_ai*)Advisor->AI())->Revive(Target);
|
else ((advisorbase_ai*)Advisor->AI())->Revive(Target);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -811,7 +835,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
|
|
||||||
Unit* target =SelectUnit(SELECT_TARGET_RANDOM, 1, 70, true);
|
Unit* target =SelectUnit(SELECT_TARGET_RANDOM, 1, 70, true);
|
||||||
if(!target) target = m_creature->getVictim();
|
if(!target) target = m_creature->getVictim();
|
||||||
debug_log("SD2: Kael'Thas mind control not supported.");
|
debug_log("TSCR: Kael'Thas mind control not supported.");
|
||||||
DoCast(target, SPELL_MIND_CONTROL);
|
DoCast(target, SPELL_MIND_CONTROL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -870,7 +894,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
if (PyrosCasted < 3 && Check_Timer < diff)
|
if (PyrosCasted < 3 && Check_Timer < diff)
|
||||||
{
|
{
|
||||||
DoCast(m_creature->getVictim(), SPELL_PYROBLAST);
|
DoCast(m_creature->getVictim(), SPELL_PYROBLAST);
|
||||||
PyrosCasted++;
|
++PyrosCasted;
|
||||||
|
|
||||||
Check_Timer = 4400;
|
Check_Timer = 4400;
|
||||||
}else Check_Timer -= diff;
|
}else Check_Timer -= diff;
|
||||||
@@ -958,7 +982,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
GravityLapse_Timer = 10000;
|
GravityLapse_Timer = 10000;
|
||||||
GravityLapse_Phase++;
|
++GravityLapse_Phase;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
@@ -967,7 +991,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
|
|||||||
DoCast(m_creature, SPELL_NETHER_VAPOR);
|
DoCast(m_creature, SPELL_NETHER_VAPOR);
|
||||||
|
|
||||||
GravityLapse_Timer = 20000;
|
GravityLapse_Timer = 20000;
|
||||||
GravityLapse_Phase++;
|
++GravityLapse_Phase;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
|
|||||||
Reference in New Issue
Block a user