aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorccrs <ccrs@users.noreply.github.com>2025-10-10 14:21:36 +0200
committerGitHub <noreply@github.com>2025-10-10 14:21:36 +0200
commitbc68d013da92f70c20a1dbed16e5c6b8bcba48ae (patch)
tree6e94006315e72b11633d2df1a592405d312ab2dc /src/server/game
parent676c1398d67fa40c13b4ab4ec30626093fdc6760 (diff)
Scripts/Gundrak: Drakkari Colossus cleanup (#31275)
Drakkari Colossus implementation cleanup
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp8
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.h2
-rw-r--r--src/server/game/Miscellaneous/CommonHelpers.cpp27
-rw-r--r--src/server/game/Miscellaneous/CommonHelpers.h18
4 files changed, 55 insertions, 0 deletions
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index 459f1acf74d..ae53c97a496 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -20,6 +20,7 @@
#include "Cell.h"
#include "CellImpl.h"
#include "Containers.h"
+#include "CommonHelpers.h"
#include "DBCStores.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
@@ -489,6 +490,13 @@ void ScriptedAI::SetCombatMovement(bool allowMovement)
_isCombatMovementAllowed = allowMovement;
}
+void ScriptedAI::SetAggressiveStateAfter(Milliseconds timer, Creature* who/* = nullptr*/, bool startCombat/* = true*/, Creature* summoner/* = nullptr*/)
+{
+ if (!who)
+ who = me;
+ who->m_Events.AddEvent(new Trinity::Helpers::Events::SetAggresiveStateEvent(who, startCombat, summoner->GetGUID()), who->m_Events.CalculateTime(timer));
+}
+
// BossAI - for instanced bosses
BossAI::BossAI(Creature* creature, uint32 bossId) : ScriptedAI(creature), instance(creature->GetInstanceScript()), summons(creature), _bossId(bossId)
{
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
index d002e20a198..83858b784af 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
@@ -246,6 +246,8 @@ struct TC_GAME_API ScriptedAI : public CreatureAI
// return true for 25 man or 25 man heroic mode
bool Is25ManRaid() const { return _difficulty & RAID_DIFFICULTY_MASK_25MAN; }
+ void SetAggressiveStateAfter(Milliseconds timer, Creature* who = nullptr, bool startCombat = true, Creature* summoner = nullptr);
+
template <class T>
inline T const& DUNGEON_MODE(T const& normal5, T const& heroic10) const
{
diff --git a/src/server/game/Miscellaneous/CommonHelpers.cpp b/src/server/game/Miscellaneous/CommonHelpers.cpp
index e1a30cb6869..77b2f32ef41 100644
--- a/src/server/game/Miscellaneous/CommonHelpers.cpp
+++ b/src/server/game/Miscellaneous/CommonHelpers.cpp
@@ -17,10 +17,14 @@
#include "CommonHelpers.h"
#include "Common.h"
+#include "Creature.h"
+#include "CreatureAI.h"
#include "Item.h"
#include "ItemTemplate.h"
+#include "ObjectAccessor.h"
#include "Player.h"
#include "SharedDefines.h"
+#include "UnitAI.h"
enum PlayerSpecializationIconicSpellIds
{
@@ -322,3 +326,26 @@ bool Trinity::Helpers::Entity::IsPlayerRangedAttacker(Player const* who)
return (Trinity::Helpers::Entity::GetPlayerSpecialization(who) == SPEC_DRUID_BALANCE);
}
}
+
+Trinity::Helpers::Events::SetAggresiveStateEvent::SetAggresiveStateEvent(Creature* owner, bool startCombat/* = true*/, ObjectGuid summonerGUID/* = ObjectGuid::Empty*/) : _owner(owner), _startCombat(startCombat), _summonerGUID(summonerGUID)
+{
+}
+
+bool Trinity::Helpers::Events::SetAggresiveStateEvent::Execute(uint64 /*time*/, uint32 /*diff*/)
+{
+ _owner->SetReactState(REACT_AGGRESSIVE);
+ if (_startCombat)
+ {
+ if (Unit* currentVictim = _owner->SelectVictim())
+ {
+ if (_owner->IsAIEnabled())
+ _owner->AI()->AttackStart(currentVictim);
+ }
+ else if (!_summonerGUID.IsEmpty())
+ if (Creature* summoner = ObjectAccessor::GetCreature(*_owner, _summonerGUID))
+ if (summoner->IsEngaged() && summoner->IsAIEnabled() && _owner->IsAIEnabled())
+ if (Unit* target = summoner->AI()->SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
+ _owner->AI()->AttackStart(target);
+ }
+ return true;
+}
diff --git a/src/server/game/Miscellaneous/CommonHelpers.h b/src/server/game/Miscellaneous/CommonHelpers.h
index a38acb8b968..228484fbc3d 100644
--- a/src/server/game/Miscellaneous/CommonHelpers.h
+++ b/src/server/game/Miscellaneous/CommonHelpers.h
@@ -18,8 +18,11 @@
#ifndef TRINITY_COMMONHELPERS_H
#define TRINITY_COMMONHELPERS_H
+#include "EventProcessor.h"
#include "Define.h"
+#include "ObjectGuid.h"
+class Creature;
class Player;
namespace Trinity
@@ -33,6 +36,21 @@ namespace Trinity
TC_GAME_API bool IsPlayerHealer(Player const* who);
bool IsPlayerRangedAttacker(Player const* who);
}
+ namespace Events
+ {
+ class SetAggresiveStateEvent : public BasicEvent
+ {
+ public:
+ SetAggresiveStateEvent(Creature* owner, bool startCombat = true, ObjectGuid summonerGUID = ObjectGuid::Empty);
+
+ bool Execute(uint64 /*time*/, uint32 /*diff*/) override;
+
+ private:
+ Creature* _owner;
+ bool const _startCombat;
+ ObjectGuid const _summonerGUID;
+ };
+ }
}
}