*Merge.
--HG-- branch : trunk
This commit is contained in:
@@ -68,6 +68,7 @@ struct TRINITY_DLL_DECL npc_escortAI : public ScriptedAI
|
|||||||
void SetCanMelee(bool usemelee) { CanMelee = usemelee; }
|
void SetCanMelee(bool usemelee) { CanMelee = usemelee; }
|
||||||
void SetDespawnAtEnd(bool despawn) { DespawnAtEnd = despawn; }
|
void SetDespawnAtEnd(bool despawn) { DespawnAtEnd = despawn; }
|
||||||
void SetDespawnAtFar(bool despawn) { DespawnAtFar = despawn; }
|
void SetDespawnAtFar(bool despawn) { DespawnAtFar = despawn; }
|
||||||
|
bool GetAttack() { return Attack; }//used in EnterEvadeMode override
|
||||||
|
|
||||||
// EscortAI variables
|
// EscortAI variables
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -299,6 +299,8 @@ hyjalAI::hyjalAI(Creature *c) : npc_escortAI(c), Summons(m_creature)
|
|||||||
RespawnTimer = 10000;
|
RespawnTimer = 10000;
|
||||||
DoRespawn = false;
|
DoRespawn = false;
|
||||||
DoHide = false;
|
DoHide = false;
|
||||||
|
MassTeleportTimer = 0;
|
||||||
|
DoMassTeleport = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void hyjalAI::JustSummoned(Creature *summoned)
|
void hyjalAI::JustSummoned(Creature *summoned)
|
||||||
@@ -389,7 +391,8 @@ void hyjalAI::Reset()
|
|||||||
void hyjalAI::EnterEvadeMode()
|
void hyjalAI::EnterEvadeMode()
|
||||||
{
|
{
|
||||||
m_creature->InterruptNonMeleeSpells(true);
|
m_creature->InterruptNonMeleeSpells(true);
|
||||||
m_creature->RemoveAllAuras();
|
if(m_creature->GetEntry() != JAINA)
|
||||||
|
m_creature->RemoveAllAuras();
|
||||||
m_creature->DeleteThreatList();
|
m_creature->DeleteThreatList();
|
||||||
m_creature->CombatStop();
|
m_creature->CombatStop();
|
||||||
m_creature->LoadCreaturesAddon();
|
m_creature->LoadCreaturesAddon();
|
||||||
@@ -404,6 +407,7 @@ void hyjalAI::EnterEvadeMode()
|
|||||||
|
|
||||||
void hyjalAI::Aggro(Unit *who)
|
void hyjalAI::Aggro(Unit *who)
|
||||||
{
|
{
|
||||||
|
if(IsDummy)return;
|
||||||
for(uint8 i = 0; i < 3; ++i)
|
for(uint8 i = 0; i < 3; ++i)
|
||||||
if(Spell[i].Cooldown)
|
if(Spell[i].Cooldown)
|
||||||
SpellTimer[i] = Spell[i].Cooldown;
|
SpellTimer[i] = Spell[i].Cooldown;
|
||||||
@@ -411,6 +415,18 @@ void hyjalAI::Aggro(Unit *who)
|
|||||||
Talk(ATTACKED);
|
Talk(ATTACKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hyjalAI::MoveInLineOfSight(Unit *who)
|
||||||
|
{
|
||||||
|
if(IsDummy)return;
|
||||||
|
if (IsBeingEscorted && !GetAttack())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(m_creature->getVictim() || !m_creature->canStartAttack(who))
|
||||||
|
return;
|
||||||
|
|
||||||
|
AttackStart(who);
|
||||||
|
}
|
||||||
|
|
||||||
void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
|
void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
|
||||||
{
|
{
|
||||||
uint32 random = rand()%4;
|
uint32 random = rand()%4;
|
||||||
@@ -683,7 +699,9 @@ void hyjalAI::Retreat()
|
|||||||
{
|
{
|
||||||
JainaDummy->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
JainaDummy->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||||
((hyjalAI*)JainaDummy->AI())->IsDummy = true;
|
((hyjalAI*)JainaDummy->AI())->IsDummy = true;
|
||||||
JainaDummy->CastSpell(JainaDummy, SPELL_TELEPORT_VISUAL, true);
|
DummyGuid = JainaDummy->GetGUID();
|
||||||
|
//((hyjalAI*)JainaDummy->AI())->MassTeleportTimer = 20000;
|
||||||
|
//((hyjalAI*)JainaDummy->AI())->DoMassTeleport = true;
|
||||||
}
|
}
|
||||||
AddWaypoint(0,JainaDummySpawn[1][0],JainaDummySpawn[1][1],JainaDummySpawn[1][2]);
|
AddWaypoint(0,JainaDummySpawn[1][0],JainaDummySpawn[1][1],JainaDummySpawn[1][2]);
|
||||||
Start(false, false, false);
|
Start(false, false, false);
|
||||||
@@ -755,6 +773,11 @@ void hyjalAI::UpdateAI(const uint32 diff)
|
|||||||
{
|
{
|
||||||
if(IsDummy)
|
if(IsDummy)
|
||||||
{
|
{
|
||||||
|
if(MassTeleportTimer < diff && DoMassTeleport)
|
||||||
|
{
|
||||||
|
m_creature->CastSpell(m_creature,SPELL_MASS_TELEPORT,false);
|
||||||
|
DoMassTeleport = false;
|
||||||
|
}else MassTeleportTimer -= diff;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(DoHide)
|
if(DoHide)
|
||||||
@@ -781,6 +804,9 @@ void hyjalAI::UpdateAI(const uint32 diff)
|
|||||||
HideNearPos(m_creature->GetPositionX(), m_creature->GetPositionY());
|
HideNearPos(m_creature->GetPositionX(), m_creature->GetPositionY());
|
||||||
HideNearPos(5563, -2763.19);
|
HideNearPos(5563, -2763.19);
|
||||||
HideNearPos(5542.2, -2629.36);
|
HideNearPos(5542.2, -2629.36);
|
||||||
|
for(uint8 i = 0; i < 65; i++)//summon fires
|
||||||
|
m_creature->SummonGameObject(FLAMEOBJECT,HordeFirePos[i][0],HordeFirePos[i][1],HordeFirePos[i][2],HordeFirePos[i][3],HordeFirePos[i][4],HordeFirePos[i][5],HordeFirePos[i][6],HordeFirePos[i][7],0);
|
||||||
|
|
||||||
}
|
}
|
||||||
else m_creature->SetVisibility(VISIBILITY_ON);
|
else m_creature->SetVisibility(VISIBILITY_ON);
|
||||||
break;
|
break;
|
||||||
@@ -809,15 +835,16 @@ void hyjalAI::UpdateAI(const uint32 diff)
|
|||||||
}
|
}
|
||||||
if(Overrun)
|
if(Overrun)
|
||||||
DoOverrun(Faction, diff);
|
DoOverrun(Faction, diff);
|
||||||
if(m_creature->GetEntry() == 17772)
|
/* if(m_creature->GetEntry() == 17772)
|
||||||
{
|
{
|
||||||
if(!m_creature->HasAura(SPELL_BRILLIANCE_AURA,0))
|
if(!m_creature->HasAura(SPELL_BRILLIANCE_AURA,0))
|
||||||
DoCast(m_creature, SPELL_BRILLIANCE_AURA, true);
|
DoCast(m_creature, SPELL_BRILLIANCE_AURA, true);
|
||||||
}
|
}*/
|
||||||
if(bRetreat)
|
if(bRetreat)
|
||||||
{
|
{
|
||||||
if(RetreatTimer < diff)
|
if(RetreatTimer < diff)
|
||||||
{
|
{
|
||||||
|
IsDummy = true;
|
||||||
bRetreat = false;
|
bRetreat = false;
|
||||||
HideNearPos(m_creature->GetPositionX(), m_creature->GetPositionY());
|
HideNearPos(m_creature->GetPositionX(), m_creature->GetPositionY());
|
||||||
switch(m_creature->GetEntry())
|
switch(m_creature->GetEntry())
|
||||||
@@ -996,7 +1023,19 @@ void hyjalAI::WaypointReached(uint32 i)
|
|||||||
{
|
{
|
||||||
m_creature->MonsterYell("Hurry, we don't have much time",0,0);
|
m_creature->MonsterYell("Hurry, we don't have much time",0,0);
|
||||||
WaitForTeleport = true;
|
WaitForTeleport = true;
|
||||||
TeleportTimer = 15000;
|
TeleportTimer = 20000;
|
||||||
|
if(m_creature->GetEntry() == JAINA)
|
||||||
|
m_creature->CastSpell(m_creature,SPELL_MASS_TELEPORT,false);
|
||||||
|
if(m_creature->GetEntry() == THRALL && DummyGuid)
|
||||||
|
{
|
||||||
|
Unit* Dummy = Unit::GetUnit((*m_creature),DummyGuid);
|
||||||
|
if(Dummy)
|
||||||
|
{
|
||||||
|
((hyjalAI*)((Creature*)Dummy)->AI())->DoMassTeleport = true;
|
||||||
|
((hyjalAI*)((Creature*)Dummy)->AI())->MassTeleportTimer = 20000;
|
||||||
|
Dummy->CastSpell(m_creature,SPELL_MASS_TELEPORT,false);
|
||||||
|
}
|
||||||
|
}
|
||||||
//do some talking
|
//do some talking
|
||||||
//all alive guards walk near here
|
//all alive guards walk near here
|
||||||
CellPair pair(Trinity::ComputeCellPair(m_creature->GetPositionX(), m_creature->GetPositionY()));
|
CellPair pair(Trinity::ComputeCellPair(m_creature->GetPositionX(), m_creature->GetPositionY()));
|
||||||
@@ -1065,6 +1104,7 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff)
|
|||||||
{
|
{
|
||||||
(*itr)->CastSpell(*itr, SPELL_TELEPORT_VISUAL, true);
|
(*itr)->CastSpell(*itr, SPELL_TELEPORT_VISUAL, true);
|
||||||
(*itr)->setFaction(35);//make them friendly so mobs won't attack them
|
(*itr)->setFaction(35);//make them friendly so mobs won't attack them
|
||||||
|
(*itr)->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DoCast(m_creature, SPELL_TELEPORT_VISUAL);
|
DoCast(m_creature, SPELL_TELEPORT_VISUAL);
|
||||||
@@ -1122,7 +1162,10 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1://horde
|
case 1://horde
|
||||||
|
for(uint8 i = 0; i < 65; i++)//summon fires
|
||||||
|
m_creature->SummonGameObject(FLAMEOBJECT,HordeFirePos[i][0],HordeFirePos[i][1],HordeFirePos[i][2],HordeFirePos[i][3],HordeFirePos[i][4],HordeFirePos[i][5],HordeFirePos[i][6],HordeFirePos[i][7],0);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
#define TYRANDE 17948
|
#define TYRANDE 17948
|
||||||
|
|
||||||
#define ANCIENT_VEIN 185557
|
#define ANCIENT_VEIN 185557
|
||||||
#define FLAMEOBJECT 182592
|
#define FLAMEOBJECT 182592
|
||||||
|
|
||||||
// Bosses summoned after every 8 waves
|
// Bosses summoned after every 8 waves
|
||||||
#define RAGE_WINTERCHILL 17767
|
#define RAGE_WINTERCHILL 17767
|
||||||
@@ -37,10 +37,11 @@
|
|||||||
#define AZGALOR 17842
|
#define AZGALOR 17842
|
||||||
#define ARCHIMONDE 17968
|
#define ARCHIMONDE 17968
|
||||||
|
|
||||||
#define SPELL_TELEPORT_VISUAL 41232
|
#define SPELL_TELEPORT_VISUAL 41232
|
||||||
|
#define SPELL_MASS_TELEPORT 16807
|
||||||
|
|
||||||
//Spells for Jaina
|
//Spells for Jaina
|
||||||
#define SPELL_BRILLIANCE_AURA 31260 // The database must handle this spell via creature_addon
|
#define SPELL_BRILLIANCE_AURA 31260 // The database must handle this spell via creature_addon(it should, but is removed in evade..)
|
||||||
#define SPELL_BLIZZARD 31266
|
#define SPELL_BLIZZARD 31266
|
||||||
#define SPELL_PYROBLAST 31263
|
#define SPELL_PYROBLAST 31263
|
||||||
#define SPELL_SUMMON_ELEMENTALS 31264
|
#define SPELL_SUMMON_ELEMENTALS 31264
|
||||||
@@ -185,6 +186,7 @@ struct TRINITY_DLL_DECL hyjalAI : public npc_escortAI
|
|||||||
void RespawnNearPos(float x, float y);
|
void RespawnNearPos(float x, float y);
|
||||||
void WaypointReached(uint32 i);
|
void WaypointReached(uint32 i);
|
||||||
void DoOverrun(uint32 faction, const uint32 diff);
|
void DoOverrun(uint32 faction, const uint32 diff);
|
||||||
|
void MoveInLineOfSight(Unit *who);
|
||||||
|
|
||||||
void SummonCreature(uint32 entry, float Base[4][3]); // Summons a creature for that wave in that base
|
void SummonCreature(uint32 entry, float Base[4][3]); // Summons a creature for that wave in that base
|
||||||
|
|
||||||
@@ -232,6 +234,9 @@ struct TRINITY_DLL_DECL hyjalAI : public npc_escortAI
|
|||||||
bool DoRespawn;
|
bool DoRespawn;
|
||||||
bool DoHide;
|
bool DoHide;
|
||||||
bool IsDummy;
|
bool IsDummy;
|
||||||
|
uint32 MassTeleportTimer;
|
||||||
|
bool DoMassTeleport;
|
||||||
|
uint64 DummyGuid;
|
||||||
|
|
||||||
struct Spell
|
struct Spell
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1376,7 +1376,7 @@ bool BattleGround::AddObject(uint32 type, uint32 entry, float x, float y, float
|
|||||||
data.go_state = 1;
|
data.go_state = 1;
|
||||||
*/
|
*/
|
||||||
// add to world, so it can be later looked up from HashMapHolder
|
// add to world, so it can be later looked up from HashMapHolder
|
||||||
go->AddToWorld();
|
map->Add(go);
|
||||||
m_BgObjects[type] = go->GetGUID();
|
m_BgObjects[type] = go->GetGUID();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -477,7 +477,7 @@ bool Map::Add(Player *player)
|
|||||||
SendInitTransports(player);
|
SendInitTransports(player);
|
||||||
|
|
||||||
player->m_clientGUIDs.clear();
|
player->m_clientGUIDs.clear();
|
||||||
AddNotifier(player);
|
//AddNotifier(player);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -517,7 +517,7 @@ Map::Add(T *obj)
|
|||||||
//if(obj->GetTypeId() != TYPEID_UNIT)
|
//if(obj->GetTypeId() != TYPEID_UNIT)
|
||||||
UpdateObjectVisibility(obj,cell,p);
|
UpdateObjectVisibility(obj,cell,p);
|
||||||
|
|
||||||
AddNotifier(obj);
|
//AddNotifier(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Map::MessageBroadcast(Player *player, WorldPacket *msg, bool to_self, bool to_possessor)
|
void Map::MessageBroadcast(Player *player, WorldPacket *msg, bool to_self, bool to_possessor)
|
||||||
|
|||||||
+3
-1
@@ -1674,7 +1674,9 @@ Map const* WorldObject::GetBaseMap() const
|
|||||||
|
|
||||||
void WorldObject::AddObjectToRemoveList()
|
void WorldObject::AddObjectToRemoveList()
|
||||||
{
|
{
|
||||||
Map* map = MapManager::Instance().FindMap(GetMapId(), GetInstanceId());
|
assert(m_uint32Values);
|
||||||
|
|
||||||
|
Map* map = FindMap();
|
||||||
if(!map)
|
if(!map)
|
||||||
{
|
{
|
||||||
sLog.outError("Object (TypeId: %u Entry: %u GUID: %u) at attempt add to move list not have valid map (Id: %u).",GetTypeId(),GetEntry(),GetGUIDLow(),GetMapId());
|
sLog.outError("Object (TypeId: %u Entry: %u GUID: %u) at attempt add to move list not have valid map (Id: %u).",GetTypeId(),GetEntry(),GetGUIDLow(),GetMapId());
|
||||||
|
|||||||
@@ -11007,6 +11007,16 @@ uint32 Unit::GetCreatePowers( Powers power ) const
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Unit::AddToWorld()
|
||||||
|
{
|
||||||
|
if(!IsInWorld())
|
||||||
|
{
|
||||||
|
m_Notified = false;
|
||||||
|
m_IsInNotifyList = false;
|
||||||
|
SetToNotify();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Unit::RemoveFromWorld()
|
void Unit::RemoveFromWorld()
|
||||||
{
|
{
|
||||||
// cleanup
|
// cleanup
|
||||||
|
|||||||
Reference in New Issue
Block a user