#ifndef _PLAYERBOT_RAIDULDUARBOSSHELPER_H #define _PLAYERBOT_RAIDULDUARBOSSHELPER_H #include #include "AiObject.h" #include "AiObjectContext.h" #include "EventMap.h" #include "Log.h" #include "ObjectGuid.h" #include "Player.h" #include "PlayerbotAI.h" #include "Playerbots.h" #include "RaidUlduarScripts.h" #include "ScriptedCreature.h" #include "SharedDefines.h" const uint32 ULDUAR_MAP_ID = 603; template class GenericBossHelper : public AiObject { public: GenericBossHelper(PlayerbotAI* botAI, std::string name) : AiObject(botAI), _name(name) {} virtual bool UpdateBossAI() { if (!bot->IsInCombat()) { _unit = nullptr; } if (_unit && (!_unit->IsInWorld() || !_unit->IsAlive())) { _unit = nullptr; } if (!_unit) { _unit = AI_VALUE2(Unit*, "find target", _name); if (!_unit) { return false; } _target = _unit->ToCreature(); if (!_target) { return false; } _ai = dynamic_cast(_target->GetAI()); if (!_ai) { return false; } _event_map = &_ai->events; if (!_event_map) { return false; } } if (!_event_map) { return false; } _timer = _event_map->GetTimer(); return true; } virtual void Reset() { _unit = nullptr; _target = nullptr; _ai = nullptr; _event_map = nullptr; _timer = 0; } protected: std::string _name; Unit* _unit = nullptr; Creature* _target = nullptr; BossAiType* _ai = nullptr; EventMap* _event_map = nullptr; uint32 _timer = 0; }; #endif