diff options
| author | ccrs <ccrs@users.noreply.github.com> | 2025-10-10 14:21:36 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-10 14:21:36 +0200 |
| commit | bc68d013da92f70c20a1dbed16e5c6b8bcba48ae (patch) | |
| tree | 6e94006315e72b11633d2df1a592405d312ab2dc /src/server/game | |
| parent | 676c1398d67fa40c13b4ab4ec30626093fdc6760 (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.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/AI/ScriptedAI/ScriptedCreature.h | 2 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/CommonHelpers.cpp | 27 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/CommonHelpers.h | 18 |
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; + }; + } } } |
