aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/AI
diff options
context:
space:
mode:
authorGiacomo Pozzoni <giacomopoz@gmail.com>2019-05-23 21:08:29 +0200
committerShauren <shauren.trinity@gmail.com>2021-12-07 00:02:03 +0100
commit5f545f540216d3b94c26e4aeda50c8bb8d5c3d74 (patch)
treef949771047c43242881593e94522783851415e5c /src/server/game/AI
parent54044bda8219e712eaec6148af4db6523386cc0f (diff)
3.3.5 gameobject summoner (#23289)
* Scripts/Misc: Change IsSummonedBy(Unit*) to IsSummonedBy(WorldObject*) * Scripts/Misc: Fix build * Core/TempSummons: Rename GetSummoner() to GetSummonerUnit() * Core/TempSummons: Add support to TempSummons::GetSummoner() to return GameObject too * Fix build * Core/TempSummons: Allow GameObject to be owner of TempSummon * Core/TempSummons: Add support to SAI for GameObject owner of TempSummon * Scripts/Misc: Fix no-pch build * Core/TempSummons: Implement PR comments (cherry picked from commit 797fba98e95da1236465a15061ec4122d7ec33fe)
Diffstat (limited to 'src/server/game/AI')
-rw-r--r--src/server/game/AI/CoreAI/GameObjectAI.h7
-rw-r--r--src/server/game/AI/CoreAI/PassiveAI.cpp2
-rw-r--r--src/server/game/AI/CoreAI/PassiveAI.h2
-rw-r--r--src/server/game/AI/CreatureAI.h2
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp4
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h2
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp6
7 files changed, 16 insertions, 9 deletions
diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h
index cec28d4c420..8a28e192a65 100644
--- a/src/server/game/AI/CoreAI/GameObjectAI.h
+++ b/src/server/game/AI/CoreAI/GameObjectAI.h
@@ -23,6 +23,7 @@
#include "ObjectGuid.h"
#include "Optional.h"
+class Creature;
class GameObject;
class Player;
class Quest;
@@ -102,6 +103,12 @@ class TC_GAME_API GameObjectAI
// Called when spell hits a target
virtual void SpellHitTarget(Unit* /*target*/, SpellInfo const* /*spellInfo*/) { }
virtual void SpellHitTargetGameObject(GameObject* /*target*/, SpellInfo const* /*spellInfo*/) { }
+
+ // Called when the gameobject summon successfully other creature
+ virtual void JustSummoned(Creature* /*summon*/) { }
+
+ virtual void SummonedCreatureDespawn(Creature* /*summon*/) { }
+ virtual void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) { }
};
class TC_GAME_API NullGameObjectAI : public GameObjectAI
diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp
index e762e8d4aad..78d60fdb4b2 100644
--- a/src/server/game/AI/CoreAI/PassiveAI.cpp
+++ b/src/server/game/AI/CoreAI/PassiveAI.cpp
@@ -100,7 +100,7 @@ int32 CritterAI::Permissible(Creature const* creature)
return PERMIT_BASE_NO;
}
-void TriggerAI::IsSummonedBy(Unit* summoner)
+void TriggerAI::IsSummonedBy(WorldObject* summoner)
{
if (me->m_spells[0])
{
diff --git a/src/server/game/AI/CoreAI/PassiveAI.h b/src/server/game/AI/CoreAI/PassiveAI.h
index 08946e33eb5..5a5e011118c 100644
--- a/src/server/game/AI/CoreAI/PassiveAI.h
+++ b/src/server/game/AI/CoreAI/PassiveAI.h
@@ -78,7 +78,7 @@ class TC_GAME_API TriggerAI : public NullCreatureAI
public:
using NullCreatureAI::NullCreatureAI;
- void IsSummonedBy(Unit* summoner) override;
+ void IsSummonedBy(WorldObject* summoner) override;
static int32 Permissible(Creature const* creature);
};
diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h
index e6fb48571b9..babac1d6f59 100644
--- a/src/server/game/AI/CreatureAI.h
+++ b/src/server/game/AI/CreatureAI.h
@@ -108,7 +108,7 @@ class TC_GAME_API CreatureAI : public UnitAI
// Called when the creature summon successfully other creature
virtual void JustSummoned(Creature* /*summon*/) { }
- virtual void IsSummonedBy(Unit* /*summoner*/) { }
+ virtual void IsSummonedBy(WorldObject* /*summoner*/) { }
virtual void SummonedCreatureDespawn(Creature* /*summon*/) { }
virtual void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) { }
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 6cac09f35fb..06e8fd994cf 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -638,9 +638,9 @@ void SmartAI::ReceiveEmote(Player* player, uint32 textEmote)
GetScript()->ProcessEventsFor(SMART_EVENT_RECEIVE_EMOTE, player, textEmote);
}
-void SmartAI::IsSummonedBy(Unit* summoner)
+void SmartAI::IsSummonedBy(WorldObject* summoner)
{
- GetScript()->ProcessEventsFor(SMART_EVENT_JUST_SUMMONED, summoner);
+ GetScript()->ProcessEventsFor(SMART_EVENT_JUST_SUMMONED, summoner->ToUnit(), 0, 0, false, nullptr, summoner->ToGameObject());
}
void SmartAI::DamageDealt(Unit* doneTo, uint32& damage, DamageEffectType /*damagetype*/)
diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h
index 806902d9072..4acb1488a53 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.h
+++ b/src/server/game/AI/SmartScripts/SmartAI.h
@@ -120,7 +120,7 @@ class TC_GAME_API SmartAI : public CreatureAI
void MovementInform(uint32 MovementType, uint32 Data) override;
// Called when creature is summoned by another unit
- void IsSummonedBy(Unit* summoner) override;
+ void IsSummonedBy(WorldObject* summoner) override;
// Called at any Damage to any victim (before damage apply)
void DamageDealt(Unit* doneTo, uint32& damage, DamageEffectType /*damagetype*/) override;
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 28b4f008b5b..fb074fd69c2 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -2952,13 +2952,13 @@ void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e,
if (!charmerOrOwnerGuid)
if (TempSummon* tempSummon = me->ToTempSummon())
- if (Unit* summoner = tempSummon->GetSummoner())
+ if (WorldObject* summoner = tempSummon->GetSummoner())
charmerOrOwnerGuid = summoner->GetGUID();
if (!charmerOrOwnerGuid)
charmerOrOwnerGuid = me->GetCreatorGUID();
- if (Unit* owner = ObjectAccessor::GetUnit(*me, charmerOrOwnerGuid))
+ if (WorldObject* owner = ObjectAccessor::GetWorldObject(*me, charmerOrOwnerGuid))
targets.push_back(owner);
}
else if (go)
@@ -2970,7 +2970,7 @@ void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e,
// Get owner of owner
if (e.target.owner.useCharmerOrOwner && !targets.empty())
{
- Unit* owner = targets.front()->ToUnit();
+ WorldObject* owner = targets.front();
targets.clear();
if (Unit* base = ObjectAccessor::GetUnit(*owner, owner->GetCharmerOrOwnerGUID()))