aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/AI/CreatureAI.cpp2
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.cpp2
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.h3
-rw-r--r--src/server/scripts/Outland/zone_hellfire_peninsula.cpp28
4 files changed, 21 insertions, 14 deletions
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp
index 49ff7661302..b222d96985e 100644
--- a/src/server/game/AI/CreatureAI.cpp
+++ b/src/server/game/AI/CreatureAI.cpp
@@ -198,7 +198,7 @@ void CreatureAI::JustAppeared()
if (TempSummon* summon = me->ToTempSummon())
{
// Only apply this to specific types of summons
- if (!summon->GetVehicle() && ShouldFollowOnSpawn(summon->m_Properties))
+ if (!summon->GetVehicle() && ShouldFollowOnSpawn(summon->m_Properties) && summon->CanFollowOwner())
{
if (Unit* owner = summon->GetCharmerOrOwner())
{
diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp
index 7a3827694d3..27409d0209c 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.cpp
+++ b/src/server/game/Entities/Creature/TemporarySummon.cpp
@@ -29,7 +29,7 @@
TempSummon::TempSummon(SummonPropertiesEntry const* properties, WorldObject* owner, bool isWorldObject) :
Creature(isWorldObject), m_Properties(properties), m_type(TEMPSUMMON_MANUAL_DESPAWN),
-m_timer(0), m_lifetime(0)
+m_timer(0), m_lifetime(0), m_canFollowOwner(true)
{
if (owner)
m_summonerGUID = owner->GetGUID();
diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h
index c2d245744d2..04ca319f1dd 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.h
+++ b/src/server/game/Entities/Creature/TemporarySummon.h
@@ -60,6 +60,8 @@ class TC_GAME_API TempSummon : public Creature
ObjectGuid GetSummonerGUID() const { return m_summonerGUID; }
TempSummonType GetSummonType() const { return m_type; }
uint32 GetTimer() const { return m_timer; }
+ bool CanFollowOwner() const { return m_canFollowOwner; }
+ void SetCanFollowOwner(bool can) { m_canFollowOwner = can; }
SummonPropertiesEntry const* const m_Properties;
@@ -69,6 +71,7 @@ class TC_GAME_API TempSummon : public Creature
uint32 m_timer;
uint32 m_lifetime;
ObjectGuid m_summonerGUID;
+ bool m_canFollowOwner;
};
class TC_GAME_API Minion : public TempSummon
diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
index 9e9df90c9d6..0cac96a64b5 100644
--- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
+++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
@@ -38,6 +38,7 @@ EndContentData */
#include "Player.h"
#include "ScriptedEscortAI.h"
#include "ScriptedGossip.h"
+#include "TemporarySummon.h"
/*######
## npc_aeranas
@@ -152,15 +153,21 @@ public:
struct npc_ancestral_wolfAI : public EscortAI
{
- npc_ancestral_wolfAI(Creature* creature) : EscortAI(creature)
+ npc_ancestral_wolfAI(Creature* creature) : EscortAI(creature) { }
+
+ void InitializeAI() override
{
- if (creature->GetOwner() && creature->GetOwner()->GetTypeId() == TYPEID_PLAYER)
- Start(false, false, creature->GetOwner()->GetGUID());
+ if (me->GetOwner() && me->GetOwner()->GetTypeId() == TYPEID_PLAYER)
+ {
+ EscortAI::Start(false, false, me->GetOwner()->GetGUID());
+
+ me->SetSpeedRate(MOVE_WALK, 1.5f);
+
+ if (auto tempSummon = me->ToTempSummon())
+ tempSummon->SetCanFollowOwner(false);
+ }
else
TC_LOG_ERROR("scripts", "TRINITY: npc_ancestral_wolf can not obtain owner or owner is not a player.");
-
- creature->SetSpeedRate(MOVE_WALK, 1.5f);
- Reset();
}
void Reset() override
@@ -187,33 +194,31 @@ public:
break;
// Move Ryga into position
case 48:
- if (Creature* ryga = me->FindNearestCreature(NPC_RYGA,70))
+ if (Creature* ryga = me->FindNearestCreature(NPC_RYGA, 70.0f))
{
if (ryga->IsAlive() && !ryga->IsInCombat())
{
ryga->SetWalk(true);
ryga->SetSpeedRate(MOVE_WALK, 1.5f);
ryga->GetMotionMaster()->MovePoint(0, 517.340698f, 3885.03975f, 190.455978f, true);
- Reset();
}
}
break;
// Ryga Kneels and welcomes spirit wolf
case 50:
- if (Creature* ryga = me->FindNearestCreature(NPC_RYGA,70))
+ if (Creature* ryga = me->FindNearestCreature(NPC_RYGA, 70.0f))
{
if (ryga->IsAlive() && !ryga->IsInCombat())
{
ryga->SetFacingTo(0.776773f);
ryga->SetStandState(UNIT_STAND_STATE_KNEEL);
ryga->AI()->Talk(SAY_WOLF_WELCOME);
- Reset();
}
}
break;
// Ryga returns to spawn point
case 51:
- if (Creature* ryga = me->FindNearestCreature(NPC_RYGA,70))
+ if (Creature* ryga = me->FindNearestCreature(NPC_RYGA, 70.0f))
{
if (ryga->IsAlive() && !ryga->IsInCombat())
{
@@ -222,7 +227,6 @@ public:
ryga->SetHomePosition(fRetX, fRetY, fRetZ, fRetO);
ryga->SetStandState(UNIT_STAND_STATE_STAND);
ryga->GetMotionMaster()->MoveTargetedHome();
- Reset();
}
}
break;