*Merge.
--HG-- branch : trunk
This commit is contained in:
@@ -929,14 +929,30 @@ UPDATE `creature_template` SET `ScriptName`='npc_mortog_steamhead' WHERE `entry`
|
|||||||
UPDATE `creature_template` SET `ScriptName`='npc_kayra_longmane' WHERE `entry`=17969;
|
UPDATE `creature_template` SET `ScriptName`='npc_kayra_longmane' WHERE `entry`=17969;
|
||||||
|
|
||||||
/* ZUL'AMAN */
|
/* ZUL'AMAN */
|
||||||
UPDATE `instance_template` SET `script`='instance_zulaman' WHERE `map`=568;
|
UPDATE `instance_template` SET `script` = 'instance_zulaman' WHERE `map`=568;
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_janalai' WHERE `entry`=23578;
|
UPDATE `creature_template` SET `ScriptName` = 'boss_janalai' WHERE `entry`=23578;
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_nalorakk' WHERE `entry`=23576;
|
UPDATE `creature_template` SET `ScriptName` = 'boss_nalorakk' WHERE `entry`=23576;
|
||||||
UPDATE `creature_template` SET `ScriptName`='mob_jandalai_firebomb' WHERE `entry`=23920;
|
UPDATE `creature_template` SET `ScriptName` = 'mob_janalai_firebomb' WHERE `entry`=23920;
|
||||||
UPDATE `creature_template` SET `ScriptName`='mob_amanishi_hatcher' WHERE `entry`=23818;
|
UPDATE `creature_template` SET `ScriptName` = 'mob_janalai_hatcher' WHERE `entry`=23818;
|
||||||
UPDATE `creature_template` SET `ScriptName`='mob_hatchling' WHERE `entry`=23598;
|
UPDATE `creature_template` SET `ScriptName` = 'mob_janalai_hatchling' WHERE `entry`=23598;
|
||||||
UPDATE `creature_template` SET `ScriptName`='npc_forest_frog' WHERE `entry`=24396;
|
UPDATE `creature_template` SET `ScriptName` = 'mob_janalai_egg' WHERE `entry`=23817;
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_akilzon' WHERE `entry`=23574;
|
UPDATE `creature_template` SET `ScriptName` = 'npc_forest_frog' WHERE `entry`=24396;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'boss_akilzon' where entry = 23574;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'mob_akilzon_eagle' where `entry`=24858;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'boss_halazzi' WHERE `entry` = '23577';
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'mob_halazzi_lynx' WHERE `entry` = '24143';
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'boss_hexlord_malacrass' WHERE `entry` =24239;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'boss_alyson_antille' WHERE `entry` =24240;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'boss_thurg' WHERE `entry` =24241;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'boss_slither' WHERE `entry` =24242;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'boss_lord_raadan' WHERE `entry` =24243;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'boss_gazakroth' WHERE `entry` =24244;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'boss_fenstalker' WHERE `entry` =24245;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'boss_darkheart' WHERE `entry` =24246;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'boss_koragg' WHERE `entry` =24247;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'boss_zuljin' WHERE `entry` =23863;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'do_nothing' WHERE `entry` = '24187';
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'mob_zuljin_vortex' WHERE `entry` = '24136';
|
||||||
|
|
||||||
/* ZUL'FARRAK */
|
/* ZUL'FARRAK */
|
||||||
UPDATE `creature_template` SET `ScriptName`='npc_sergeant_bly' WHERE `entry`=7604;
|
UPDATE `creature_template` SET `ScriptName`='npc_sergeant_bly' WHERE `entry`=7604;
|
||||||
|
|||||||
@@ -73,8 +73,7 @@ void npc_escortAI::JustRespawned()
|
|||||||
IsBeingEscorted = false;
|
IsBeingEscorted = false;
|
||||||
IsOnHold = false;
|
IsOnHold = false;
|
||||||
|
|
||||||
//Re-Enable gossip
|
//Re-Enable questgiver flag
|
||||||
m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
|
||||||
m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
|
m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
|
||||||
|
|
||||||
Reset();
|
Reset();
|
||||||
@@ -298,7 +297,6 @@ void npc_escortAI::Start(bool bAttack, bool bDefend, bool bRun, uint64 pGUID)
|
|||||||
Returning = false;
|
Returning = false;
|
||||||
IsOnHold = false;
|
IsOnHold = false;
|
||||||
|
|
||||||
//Disable gossip
|
//Disable questgiver flag
|
||||||
m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
|
||||||
m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
|
m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -483,7 +483,7 @@ bool GossipSelect_npc_susurrus(Player *player, Creature *_Creature, uint32 sende
|
|||||||
#define MOB_SPARK 17243
|
#define MOB_SPARK 17243
|
||||||
#define GO_NAGA_FLAG 181694
|
#define GO_NAGA_FLAG 181694
|
||||||
|
|
||||||
static float SparkPos[4] = {-5030.95, -11291.99, 7.97};
|
static float SparkPos[3] = {-5030.95, -11291.99, 7.97};
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL npc_geezleAI : public ScriptedAI
|
struct TRINITY_DLL_DECL npc_geezleAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
|
|||||||
AttackLoc[i] = AttackArea[Faction][i];
|
AttackLoc[i] = AttackArea[Faction][i];
|
||||||
}
|
}
|
||||||
|
|
||||||
Creature* pCreature = m_creature->SummonCreature(entry, SpawnLoc[0], SpawnLoc[1], SpawnLoc[2], 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
|
Creature* pCreature = m_creature->SummonCreature(entry, SpawnLoc[0], SpawnLoc[1], SpawnLoc[2], 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000);
|
||||||
if(pCreature)
|
if(pCreature)
|
||||||
{
|
{
|
||||||
// Increment Enemy Count to be used in World States and instance script
|
// Increment Enemy Count to be used in World States and instance script
|
||||||
@@ -167,6 +167,7 @@ void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
|
|||||||
pCreature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
pCreature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||||
pCreature->GetMotionMaster()->MovePoint(0, AttackLoc[0],AttackLoc[1],AttackLoc[2]);
|
pCreature->GetMotionMaster()->MovePoint(0, AttackLoc[0],AttackLoc[1],AttackLoc[2]);
|
||||||
pCreature->AddThreat(m_creature, 0.0f);
|
pCreature->AddThreat(m_creature, 0.0f);
|
||||||
|
pCreature->setActive(true);
|
||||||
DoZoneInCombat(pCreature);
|
DoZoneInCombat(pCreature);
|
||||||
|
|
||||||
// Check if creature is a boss.
|
// Check if creature is a boss.
|
||||||
|
|||||||
+36
-2
@@ -43,10 +43,10 @@ bool GOHello_go_main_chambers_access_panel(Player *player, GameObject* _GO)
|
|||||||
if (!pInstance)
|
if (!pInstance)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (_GO->GetEntry() == ACCESS_PANEL_HYDRO && pInstance->GetData(TYPE_HYDROMANCER_THESPIA) == DONE)
|
if (_GO->GetEntry() == ACCESS_PANEL_HYDRO && (pInstance->GetData(TYPE_HYDROMANCER_THESPIA) == DONE || pInstance->GetData(TYPE_HYDROMANCER_THESPIA) == SPECIAL))
|
||||||
pInstance->SetData(TYPE_HYDROMANCER_THESPIA,SPECIAL);
|
pInstance->SetData(TYPE_HYDROMANCER_THESPIA,SPECIAL);
|
||||||
|
|
||||||
if (_GO->GetEntry() == ACCESS_PANEL_MEK && pInstance->GetData(TYPE_MEKGINEER_STEAMRIGGER) == DONE)
|
if (_GO->GetEntry() == ACCESS_PANEL_MEK && (pInstance->GetData(TYPE_MEKGINEER_STEAMRIGGER) == DONE || pInstance->GetData(TYPE_MEKGINEER_STEAMRIGGER) == SPECIAL))
|
||||||
pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER,SPECIAL);
|
pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER,SPECIAL);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -174,6 +174,9 @@ struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance
|
|||||||
Encounter[3] = data;
|
Encounter[3] = data;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(data == DONE || data == SPECIAL)
|
||||||
|
SaveToDB();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 GetData(uint32 type)
|
uint32 GetData(uint32 type)
|
||||||
@@ -205,6 +208,37 @@ struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* Save()
|
||||||
|
{
|
||||||
|
OUT_SAVE_INST_DATA;
|
||||||
|
std::ostringstream stream;
|
||||||
|
stream << Encounter[0] << " " << Encounter[1] << " " << Encounter[2] << " " << Encounter[3];
|
||||||
|
char* out = new char[stream.str().length() + 1];
|
||||||
|
strcpy(out, stream.str().c_str());
|
||||||
|
if(out)
|
||||||
|
{
|
||||||
|
OUT_SAVE_INST_DATA_COMPLETE;
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Load(const char* in)
|
||||||
|
{
|
||||||
|
if(!in)
|
||||||
|
{
|
||||||
|
OUT_LOAD_INST_DATA_FAIL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
OUT_LOAD_INST_DATA(in);
|
||||||
|
std::istringstream stream(in);
|
||||||
|
stream >> Encounter[0] >> Encounter[1] >> Encounter[2] >> Encounter[3];
|
||||||
|
for(uint8 i = 0; i < ENCOUNTERS; ++i)
|
||||||
|
if(Encounter[i] == IN_PROGRESS)
|
||||||
|
Encounter[i] = NOT_STARTED;
|
||||||
|
OUT_LOAD_INST_DATA_COMPLETE;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
InstanceData* GetInstanceData_instance_steam_vault(Map* map)
|
InstanceData* GetInstanceData_instance_steam_vault(Map* map)
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ struct TRINITY_DLL_DECL boss_moroesAI : public ScriptedAI
|
|||||||
|
|
||||||
DoScriptText(SAY_AGGRO, m_creature);
|
DoScriptText(SAY_AGGRO, m_creature);
|
||||||
AddsAttack();
|
AddsAttack();
|
||||||
|
DoZoneInCombat();
|
||||||
}
|
}
|
||||||
|
|
||||||
void KilledUnit(Unit* victim)
|
void KilledUnit(Unit* victim)
|
||||||
@@ -251,8 +252,10 @@ struct TRINITY_DLL_DECL boss_moroesAI : public ScriptedAI
|
|||||||
{
|
{
|
||||||
Temp = Unit::GetUnit((*m_creature),AddGUID[i]);
|
Temp = Unit::GetUnit((*m_creature),AddGUID[i]);
|
||||||
if (Temp && Temp->isAlive())
|
if (Temp && Temp->isAlive())
|
||||||
|
{
|
||||||
((Creature*)Temp)->AI()->AttackStart(m_creature->getVictim());
|
((Creature*)Temp)->AI()->AttackStart(m_creature->getVictim());
|
||||||
else
|
DoZoneInCombat(Temp);
|
||||||
|
}else
|
||||||
EnterEvadeMode();
|
EnterEvadeMode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
/* ScriptData
|
/* ScriptData
|
||||||
SDName: Boss_Nightbane
|
SDName: Boss_Nightbane
|
||||||
SD%Complete: 80
|
SD%Complete: 80
|
||||||
SDComment: SDComment: skelleton adds need 2 more, timers,
|
SDComment: SDComment: Timers may incorrect
|
||||||
SDCategory: Karazhan
|
SDCategory: Karazhan
|
||||||
EndScriptData */
|
EndScriptData */
|
||||||
|
|
||||||
@@ -353,10 +353,11 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI
|
|||||||
{
|
{
|
||||||
if (!Skeletons)
|
if (!Skeletons)
|
||||||
{
|
{
|
||||||
DoCast(m_creature->getVictim(), SPELL_SUMMON_SKELETON);
|
for (uint8 i = 0; i <= 3; ++i)
|
||||||
DoCast(m_creature->getVictim(), SPELL_SUMMON_SKELETON);
|
{
|
||||||
DoCast(m_creature->getVictim(), SPELL_SUMMON_SKELETON);
|
DoCast(m_creature->getVictim(), SPELL_SUMMON_SKELETON);
|
||||||
Skeletons = true;
|
Skeletons = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RainofBonesTimer < diff && !RainBones) // only once at the beginning of phase 2
|
if (RainofBonesTimer < diff && !RainBones) // only once at the beginning of phase 2
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public ScriptedAI
|
|||||||
uint32 Fly2_Timer;
|
uint32 Fly2_Timer;
|
||||||
uint32 Beserk_Timer;
|
uint32 Beserk_Timer;
|
||||||
uint32 phase;
|
uint32 phase;
|
||||||
bool landoff;
|
bool IsInFly;
|
||||||
uint32 land_Timer;
|
uint32 land_Timer;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
@@ -60,13 +60,13 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public ScriptedAI
|
|||||||
Blizzard_Timer = 20000;
|
Blizzard_Timer = 20000;
|
||||||
Fly_Timer = 45000;
|
Fly_Timer = 45000;
|
||||||
Icebolt_Timer = 4000;
|
Icebolt_Timer = 4000;
|
||||||
land_Timer = 2000;
|
land_Timer = 0;
|
||||||
Beserk_Timer = 0;
|
Beserk_Timer = 0;
|
||||||
phase = 1;
|
phase = 1;
|
||||||
Icebolt_Count = 0;
|
Icebolt_Count = 0;
|
||||||
landoff = false;
|
IsInFly = false;
|
||||||
|
|
||||||
//m_creature->ApplySpellMod(SPELL_FROST_AURA, SPELLMOD_DURATION, -1);
|
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aggro(Unit *who)
|
void Aggro(Unit *who)
|
||||||
@@ -105,16 +105,14 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public ScriptedAI
|
|||||||
if(Fly_Timer < diff)
|
if(Fly_Timer < diff)
|
||||||
{
|
{
|
||||||
phase = 2;
|
phase = 2;
|
||||||
m_creature->InterruptNonMeleeSpells(false);
|
|
||||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
|
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
|
||||||
(*m_creature).GetMotionMaster()->Clear(false);
|
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||||
(*m_creature).GetMotionMaster()->MoveIdle();
|
m_creature->GetMotionMaster()->Clear(false);
|
||||||
DoCast(m_creature,11010);
|
m_creature->GetMotionMaster()->MoveIdle();
|
||||||
m_creature->SetHover(true);
|
m_creature->SetHover(true);
|
||||||
DoCast(m_creature,18430);
|
|
||||||
Icebolt_Timer = 4000;
|
Icebolt_Timer = 4000;
|
||||||
Icebolt_Count = 0;
|
Icebolt_Count = 0;
|
||||||
landoff = false;
|
IsInFly = true;
|
||||||
}else Fly_Timer -= diff;
|
}else Fly_Timer -= diff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,36 +122,35 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public ScriptedAI
|
|||||||
if(Icebolt_Timer < diff && Icebolt_Count < 5)
|
if(Icebolt_Timer < diff && Icebolt_Count < 5)
|
||||||
{
|
{
|
||||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||||
|
{
|
||||||
DoCast(target,SPELL_ICEBOLT);
|
DoCast(target,SPELL_ICEBOLT);
|
||||||
Icebolt_Count ++;
|
++Icebolt_Count;
|
||||||
|
error_log("Count incremented");
|
||||||
|
}
|
||||||
|
FrostBreath_Timer = 6000;
|
||||||
Icebolt_Timer = 4000;
|
Icebolt_Timer = 4000;
|
||||||
}else Icebolt_Timer -= diff;
|
}else Icebolt_Timer -= diff;
|
||||||
|
|
||||||
if(Icebolt_Count == 5 && !landoff)
|
if(Icebolt_Count == 5 && IsInFly && FrostBreath_Timer < diff )
|
||||||
{
|
{
|
||||||
if(FrostBreath_Timer < diff )
|
DoScriptText(EMOTE_BREATH, m_creature);
|
||||||
{
|
DoCast(m_creature->getVictim(),SPELL_FROST_BREATH);
|
||||||
DoScriptText(EMOTE_BREATH, m_creature);
|
land_Timer = 2000;
|
||||||
DoCast(m_creature->getVictim(),SPELL_FROST_BREATH);
|
IsInFly = false;
|
||||||
land_Timer = 2000;
|
FrostBreath_Timer = 6000;
|
||||||
landoff = true;
|
}else FrostBreath_Timer -= diff;
|
||||||
FrostBreath_Timer = 6000;
|
|
||||||
}else FrostBreath_Timer -= diff;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(landoff)
|
|
||||||
{
|
|
||||||
if(land_Timer < diff)
|
|
||||||
{
|
|
||||||
phase = 1;
|
|
||||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
|
|
||||||
m_creature->SetHover(false);
|
|
||||||
(*m_creature).GetMotionMaster()->Clear(false);
|
|
||||||
(*m_creature).GetMotionMaster()->MoveChase(m_creature->getVictim());
|
|
||||||
Fly_Timer = 67000;
|
|
||||||
}else land_Timer -= diff;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if(!IsInFly && land_Timer < diff)
|
||||||
|
{
|
||||||
|
phase = 1;
|
||||||
|
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
|
||||||
|
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||||
|
m_creature->GetMotionMaster()->Clear(false);
|
||||||
|
m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());
|
||||||
|
m_creature->SetHover(true);
|
||||||
|
land_Timer = 0;
|
||||||
|
Fly_Timer = 67000;
|
||||||
|
}else land_Timer -= diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_creature->GetHealth()*100) / m_creature->GetMaxHealth() <= 10)
|
if ((m_creature->GetHealth()*100) / m_creature->GetMaxHealth() <= 10)
|
||||||
|
|||||||
@@ -40,7 +40,8 @@ EndScriptData */
|
|||||||
#define SPELL_BLINDING_LIGHT 33009
|
#define SPELL_BLINDING_LIGHT 33009
|
||||||
#define SPELL_FEAR 29321
|
#define SPELL_FEAR 29321
|
||||||
#define SPELL_VOID_BOLT 39329
|
#define SPELL_VOID_BOLT 39329
|
||||||
|
#define SPELL_SPOTLIGHT 25824
|
||||||
|
|
||||||
#define CENTER_X 432.909f
|
#define CENTER_X 432.909f
|
||||||
#define CENTER_Y -373.424f
|
#define CENTER_Y -373.424f
|
||||||
#define CENTER_Z 17.9608f
|
#define CENTER_Z 17.9608f
|
||||||
@@ -52,7 +53,7 @@ EndScriptData */
|
|||||||
#define SOLARIUM_AGENT 18925
|
#define SOLARIUM_AGENT 18925
|
||||||
#define SOLARIUM_PRIEST 18806
|
#define SOLARIUM_PRIEST 18806
|
||||||
#define ASTROMANCER_SOLARIAN_SPOTLIGHT 18928
|
#define ASTROMANCER_SOLARIAN_SPOTLIGHT 18928
|
||||||
#define SPELL_SPOTLIGHT 25824
|
|
||||||
#define MODEL_HUMAN 18239
|
#define MODEL_HUMAN 18239
|
||||||
#define MODEL_VOIDWALKER 18988
|
#define MODEL_VOIDWALKER 18988
|
||||||
|
|
||||||
@@ -63,18 +64,24 @@ EndScriptData */
|
|||||||
#define WV_ARMOR 31000
|
#define WV_ARMOR 31000
|
||||||
#define MIN_RANGE_FOR_DOT_JUMP 20.0f
|
#define MIN_RANGE_FOR_DOT_JUMP 20.0f
|
||||||
|
|
||||||
|
// x, y, z, o
|
||||||
|
static float SolarianPos[4] = {432.909, -373.424, 17.9608, 1.06421};
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_high_astromancer_solarianAI(Creature *c) : ScriptedAI(c)
|
boss_high_astromancer_solarianAI(Creature *c) : ScriptedAI(c), Summons(m_creature)
|
||||||
{
|
{
|
||||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||||
|
|
||||||
defaultarmor=m_creature->GetArmor();
|
defaultarmor = m_creature->GetArmor();
|
||||||
defaultsize=m_creature->GetFloatValue(OBJECT_FIELD_SCALE_X);
|
defaultsize = m_creature->GetFloatValue(OBJECT_FIELD_SCALE_X);
|
||||||
Reset();
|
Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptedInstance *pInstance;
|
ScriptedInstance *pInstance;
|
||||||
|
SummonList Summons;
|
||||||
|
|
||||||
|
uint8 Phase;
|
||||||
|
|
||||||
uint32 ArcaneMissiles_Timer;
|
uint32 ArcaneMissiles_Timer;
|
||||||
uint32 MarkOfTheAstromancer_Timer;
|
uint32 MarkOfTheAstromancer_Timer;
|
||||||
@@ -90,18 +97,13 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
|
|||||||
uint32 defaultarmor;
|
uint32 defaultarmor;
|
||||||
|
|
||||||
float defaultsize;
|
float defaultsize;
|
||||||
|
float Portals[3][3];
|
||||||
|
|
||||||
bool AppearDelay;
|
bool AppearDelay;
|
||||||
|
bool BlindingLight;
|
||||||
uint8 Phase;
|
|
||||||
|
|
||||||
uint64 WrathTarget;
|
|
||||||
|
|
||||||
float Portals[3][3];
|
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
WrathTarget=0;
|
|
||||||
ArcaneMissiles_Timer = 2000;
|
ArcaneMissiles_Timer = 2000;
|
||||||
MarkOfTheAstromancer_Timer = 15000;
|
MarkOfTheAstromancer_Timer = 15000;
|
||||||
BlindingLight_Timer = 41000;
|
BlindingLight_Timer = 41000;
|
||||||
@@ -111,6 +113,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
|
|||||||
Phase2_Timer = 10000;
|
Phase2_Timer = 10000;
|
||||||
Phase3_Timer = 15000;
|
Phase3_Timer = 15000;
|
||||||
AppearDelay_Timer = 2000;
|
AppearDelay_Timer = 2000;
|
||||||
|
BlindingLight = false;
|
||||||
AppearDelay = false;
|
AppearDelay = false;
|
||||||
MarkOfTheSolarian_Timer=45000;
|
MarkOfTheSolarian_Timer=45000;
|
||||||
Jump_Timer=8000;
|
Jump_Timer=8000;
|
||||||
@@ -124,12 +127,14 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
|
|||||||
m_creature->SetVisibility(VISIBILITY_ON);
|
m_creature->SetVisibility(VISIBILITY_ON);
|
||||||
m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, defaultsize);
|
m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, defaultsize);
|
||||||
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN);
|
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN);
|
||||||
|
|
||||||
|
Summons.DespawnAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartEvent()
|
void StartEvent()
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_AGGRO, m_creature);
|
DoScriptText(SAY_AGGRO, m_creature);
|
||||||
|
|
||||||
if(pInstance)
|
if(pInstance)
|
||||||
pInstance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, IN_PROGRESS);
|
pInstance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, IN_PROGRESS);
|
||||||
}
|
}
|
||||||
@@ -166,6 +171,8 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
|
|||||||
{
|
{
|
||||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||||
Summoned->AI()->AttackStart(target);
|
Summoned->AI()->AttackStart(target);
|
||||||
|
|
||||||
|
Summons.Summon(Summoned);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,91 +213,50 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
|
|||||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||||
m_creature->SetVisibility(VISIBILITY_OFF);
|
m_creature->SetVisibility(VISIBILITY_OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
AppearDelay_Timer = 2000;
|
AppearDelay_Timer = 2000;
|
||||||
}else AppearDelay_Timer -= diff;
|
}else AppearDelay_Timer -= diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
//the jumping of the dot part of the wrath of the astromancer
|
|
||||||
if(WrathTarget)
|
|
||||||
{
|
|
||||||
if(Jump_Timer< diff)
|
|
||||||
{
|
|
||||||
std::list<HostilReference*>& m_threatlist = m_creature->getThreatManager().getThreatList();
|
|
||||||
bool hasJumped = false;
|
|
||||||
|
|
||||||
Unit* target = Unit::GetUnit((*m_creature),WrathTarget);
|
|
||||||
if(target && target->isAlive())
|
|
||||||
{
|
|
||||||
for(std::list<HostilReference*>::iterator iter = m_threatlist.begin();iter!=m_threatlist.end();++iter)
|
|
||||||
{
|
|
||||||
Unit* currentUnit=Unit::GetUnit((*m_creature),(*iter)->getUnitGuid());
|
|
||||||
if(currentUnit)
|
|
||||||
{
|
|
||||||
if(currentUnit->IsWithinDistInMap(target,MIN_RANGE_FOR_DOT_JUMP)&¤tUnit->isAlive()&¤tUnit!=target)
|
|
||||||
{
|
|
||||||
m_creature->CastSpell(currentUnit,SPELL_MARK_OF_THE_ASTROMANCER, false,0,0,m_creature->GetGUID());
|
|
||||||
|
|
||||||
Jump_Timer=8000;
|
|
||||||
WrathTarget=currentUnit->GetGUID();
|
|
||||||
hasJumped = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!hasJumped)
|
|
||||||
WrathTarget = 0;
|
|
||||||
}else Jump_Timer -= diff;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Phase == 1)
|
if (Phase == 1)
|
||||||
{
|
{
|
||||||
//ArcaneMissiles_Timer
|
if (BlindingLight_Timer < diff){
|
||||||
if (ArcaneMissiles_Timer < diff)
|
BlindingLight = true;
|
||||||
{
|
|
||||||
//Solarian casts Arcane Missiles on on random targets in the raid.
|
|
||||||
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
|
||||||
if (!m_creature->HasInArc(2.5f, target))
|
|
||||||
target = m_creature->getVictim();
|
|
||||||
if (target)
|
|
||||||
DoCast(target, SPELL_ARCANE_MISSILES);
|
|
||||||
|
|
||||||
ArcaneMissiles_Timer = 3000;
|
|
||||||
}else ArcaneMissiles_Timer -= diff;
|
|
||||||
|
|
||||||
//MarkOfTheSolarian_Timer
|
|
||||||
if (MarkOfTheSolarian_Timer < diff)
|
|
||||||
{
|
|
||||||
DoCast(m_creature->getVictim(), MARK_OF_SOLARIAN);
|
|
||||||
MarkOfTheSolarian_Timer = 45000;
|
|
||||||
}else MarkOfTheSolarian_Timer -= diff;
|
|
||||||
|
|
||||||
//MarkOfTheAstromancer_Timer
|
|
||||||
if (MarkOfTheAstromancer_Timer < diff)
|
|
||||||
{
|
|
||||||
//A debuff that lasts for 5 seconds, cast several times each phase on a random raid member, but not the main tank
|
|
||||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 1))
|
|
||||||
{
|
|
||||||
DoCast(target, SPELL_MARK_OF_THE_ASTROMANCER);
|
|
||||||
|
|
||||||
WrathTarget=target->GetGUID();
|
|
||||||
Jump_Timer=8000;
|
|
||||||
}
|
|
||||||
|
|
||||||
MarkOfTheAstromancer_Timer = 15000;
|
|
||||||
}else MarkOfTheAstromancer_Timer -= diff;
|
|
||||||
|
|
||||||
//BlindingLight_Timer
|
|
||||||
if (BlindingLight_Timer < diff)
|
|
||||||
{
|
|
||||||
//She casts this spell every 45 seconds. It is a kind of Moonfire spell, which she strikes down on the whole raid simultaneously. It hits everyone in the raid for 2280 to 2520 arcane damage.
|
|
||||||
DoCast(m_creature->getVictim(), SPELL_BLINDING_LIGHT);
|
|
||||||
|
|
||||||
BlindingLight_Timer = 45000;
|
BlindingLight_Timer = 45000;
|
||||||
}else BlindingLight_Timer -= diff;
|
}else BlindingLight_Timer -= diff;
|
||||||
|
|
||||||
|
if (ArcaneMissiles_Timer < diff)
|
||||||
|
{
|
||||||
|
if(BlindingLight)
|
||||||
|
{
|
||||||
|
DoCast(m_creature->getVictim(), SPELL_BLINDING_LIGHT);
|
||||||
|
BlindingLight = false;
|
||||||
|
}else{
|
||||||
|
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||||
|
|
||||||
|
if(!m_creature->HasInArc(2.5f, target))
|
||||||
|
target = m_creature->getVictim();
|
||||||
|
|
||||||
|
if(target)
|
||||||
|
DoCast(target, SPELL_ARCANE_MISSILES);
|
||||||
|
}
|
||||||
|
ArcaneMissiles_Timer = 3000;
|
||||||
|
}else ArcaneMissiles_Timer -= diff;
|
||||||
|
|
||||||
|
if (MarkOfTheSolarian_Timer < diff)
|
||||||
|
{
|
||||||
|
DoCast(m_creature->getVictim(), MARK_OF_SOLARIAN);
|
||||||
|
MarkOfTheSolarian_Timer = 45000;
|
||||||
|
}else MarkOfTheSolarian_Timer -= diff;
|
||||||
|
|
||||||
|
if (MarkOfTheAstromancer_Timer < diff) //A debuff that lasts for 5 seconds, cast several times each phase on a random raid member, but not the main tank
|
||||||
|
{
|
||||||
|
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 1, 100, true);
|
||||||
|
if(target)
|
||||||
|
DoCast(target, SPELL_MARK_OF_THE_ASTROMANCER);
|
||||||
|
else DoCast(m_creature->getVictim(), SPELL_MARK_OF_THE_ASTROMANCER);
|
||||||
|
MarkOfTheAstromancer_Timer = 15000;
|
||||||
|
}else MarkOfTheAstromancer_Timer -= diff;
|
||||||
|
|
||||||
//Phase1_Timer
|
//Phase1_Timer
|
||||||
if (Phase1_Timer < diff)
|
if (Phase1_Timer < diff)
|
||||||
{
|
{
|
||||||
@@ -298,8 +264,8 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
|
|||||||
Phase1_Timer = 50000;
|
Phase1_Timer = 50000;
|
||||||
//After these 50 seconds she portals to the middle of the room and disappears, leaving 3 light portals behind.
|
//After these 50 seconds she portals to the middle of the room and disappears, leaving 3 light portals behind.
|
||||||
m_creature->GetMotionMaster()->Clear();
|
m_creature->GetMotionMaster()->Clear();
|
||||||
m_creature->Relocate(CENTER_X, CENTER_Y, CENTER_Z, CENTER_O);
|
m_creature->Relocate(SolarianPos[0], SolarianPos[1], SolarianPos[2], SolarianPos[3]);
|
||||||
for(int i=0; i<=2; i++)
|
for(int i=0; i<=2; ++i)
|
||||||
{
|
{
|
||||||
if (!i)
|
if (!i)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -451,9 +451,9 @@ CreatureAI* GetAI_boss_janalaiAI(Creature *_Creature)
|
|||||||
return new boss_janalaiAI(_Creature);
|
return new boss_janalaiAI(_Creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL mob_jandalai_firebombAI : public ScriptedAI
|
struct TRINITY_DLL_DECL mob_janalai_firebombAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
mob_jandalai_firebombAI(Creature *c) : ScriptedAI(c){Reset();}
|
mob_janalai_firebombAI(Creature *c) : ScriptedAI(c){Reset();}
|
||||||
|
|
||||||
void Reset() {}
|
void Reset() {}
|
||||||
|
|
||||||
@@ -472,9 +472,9 @@ struct TRINITY_DLL_DECL mob_jandalai_firebombAI : public ScriptedAI
|
|||||||
void UpdateAI(const uint32 diff) {}
|
void UpdateAI(const uint32 diff) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatureAI* GetAI_mob_jandalai_firebombAI(Creature *_Creature)
|
CreatureAI* GetAI_mob_janalai_firebombAI(Creature *_Creature)
|
||||||
{
|
{
|
||||||
return new mob_jandalai_firebombAI(_Creature);
|
return new mob_janalai_firebombAI(_Creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL mob_amanishi_hatcherAI : public ScriptedAI
|
struct TRINITY_DLL_DECL mob_amanishi_hatcherAI : public ScriptedAI
|
||||||
@@ -694,7 +694,7 @@ void AddSC_boss_janalai()
|
|||||||
|
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name="mob_janalai_firebomb";
|
newscript->Name="mob_janalai_firebomb";
|
||||||
newscript->GetAI = &GetAI_mob_jandalai_firebombAI;
|
newscript->GetAI = &GetAI_mob_janalai_firebombAI;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
|
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
|
|||||||
@@ -3878,6 +3878,12 @@ void Aura::HandlePeriodicTriggerSpell(bool apply, bool Real)
|
|||||||
void Aura::HandlePeriodicTriggerSpellWithValue(bool apply, bool Real)
|
void Aura::HandlePeriodicTriggerSpellWithValue(bool apply, bool Real)
|
||||||
{
|
{
|
||||||
m_isPeriodic = apply;
|
m_isPeriodic = apply;
|
||||||
|
|
||||||
|
// Wrath of the Astromancer
|
||||||
|
if(!apply && m_spellProto->Id == 42783)
|
||||||
|
{
|
||||||
|
m_target->CastSpell(m_target, 42787, true, 0, this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aura::HandlePeriodicEnergize(bool apply, bool Real)
|
void Aura::HandlePeriodicEnergize(bool apply, bool Real)
|
||||||
|
|||||||
@@ -682,6 +682,28 @@ void Spell::EffectDummy(uint32 i)
|
|||||||
{
|
{
|
||||||
switch(m_spellInfo->Id )
|
switch(m_spellInfo->Id )
|
||||||
{
|
{
|
||||||
|
// Wrath of the Astromancer
|
||||||
|
case 42784:
|
||||||
|
{
|
||||||
|
uint32 count = 0;
|
||||||
|
for(std::list<TargetInfo>::iterator ihit= m_UniqueTargetInfo.begin();ihit != m_UniqueTargetInfo.end();++ihit)
|
||||||
|
if(ihit->effectMask & (1<<i))
|
||||||
|
++count;
|
||||||
|
|
||||||
|
damage = 12000; // maybe wrong value
|
||||||
|
damage /= count;
|
||||||
|
|
||||||
|
SpellEntry const *spellInfo = sSpellStore.LookupEntry(42784);
|
||||||
|
|
||||||
|
// now deal the damage
|
||||||
|
for(std::list<TargetInfo>::iterator ihit= m_UniqueTargetInfo.begin();ihit != m_UniqueTargetInfo.end();++ihit)
|
||||||
|
if(ihit->effectMask & (1<<i))
|
||||||
|
{
|
||||||
|
Unit* casttarget = Unit::GetUnit((*unitTarget), ihit->targetGUID);
|
||||||
|
if(casttarget)
|
||||||
|
m_caster->DealDamage(casttarget, damage, NULL, SPELL_DIRECT_DAMAGE, SPELL_SCHOOL_MASK_ARCANE, spellInfo, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
// Encapsulate Voidwalker
|
// Encapsulate Voidwalker
|
||||||
case 29364:
|
case 29364:
|
||||||
{
|
{
|
||||||
@@ -5005,6 +5027,21 @@ void Spell::EffectScriptEffect(uint32 effIndex)
|
|||||||
unitTarget->CastSpell(m_caster, 40903, true);
|
unitTarget->CastSpell(m_caster, 40903, true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 48025: // Headless Horseman's Mount
|
||||||
|
{
|
||||||
|
if(!unitTarget)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch(((Player*)unitTarget)->GetBaseSkillValue(762))
|
||||||
|
{
|
||||||
|
case 75: unitTarget->CastSpell(unitTarget, 51621, true); break;;
|
||||||
|
case 150: unitTarget->CastSpell(unitTarget, 48024, true); break;
|
||||||
|
case 225: unitTarget->CastSpell(unitTarget, 51617, true); break;
|
||||||
|
case 300: unitTarget->CastSpell(unitTarget, 48023, true); break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 41931:
|
case 41931:
|
||||||
{
|
{
|
||||||
if(m_caster->GetTypeId() != TYPEID_PLAYER)
|
if(m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||||
|
|||||||
Reference in New Issue
Block a user