mirror of
https://github.com/mangosfour/server.git
synced 2025-12-28 13:37:13 +00:00
Active objects triggrering grid loading and updating around self like players. It can be used for event long run movements or escoring quest travels. Also can be used for proper implementation far vision spells. Currently only creatures can be activated by function call (from script) cr->SetActiveObjectState(true); Please avoid lot amount active objects in same time use. Existance active objects support isn't meaning that each rabbit must be active creature. Also added independent grid unloading locks for explicit unloading lock, lock for used by instance copied grids, lock counter for actiove object spawn grids locks. Last case required for prevent double spawn active creature walk far away from spawn point.
70 lines
2.7 KiB
C++
70 lines
2.7 KiB
C++
/*
|
|
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef MANGOSSERVER_DYNAMICOBJECT_H
|
|
#define MANGOSSERVER_DYNAMICOBJECT_H
|
|
|
|
#include "Object.h"
|
|
|
|
class Unit;
|
|
struct SpellEntry;
|
|
|
|
class DynamicObject : public WorldObject
|
|
{
|
|
public:
|
|
typedef std::set<Unit*> AffectedSet;
|
|
explicit DynamicObject();
|
|
|
|
void AddToWorld();
|
|
void RemoveFromWorld();
|
|
|
|
bool Create(uint32 guidlow, Unit *caster, uint32 spellId, uint32 effIndex, float x, float y, float z, int32 duration, float radius);
|
|
void Update(uint32 p_time);
|
|
void Delete();
|
|
uint32 GetSpellId() const { return m_spellId; }
|
|
uint32 GetEffIndex() const { return m_effIndex; }
|
|
uint32 GetDuration() const { return m_aliveDuration; }
|
|
uint64 GetCasterGUID() const { return m_casterGuid; }
|
|
Unit* GetCaster() const;
|
|
float GetRadius() const { return m_radius; }
|
|
bool IsAffecting(Unit *unit) const { return m_affected.find(unit) != m_affected.end(); }
|
|
void AddAffected(Unit *unit) { m_affected.insert(unit); }
|
|
void RemoveAffected(Unit *unit) { m_affected.erase(unit); }
|
|
void Delay(int32 delaytime);
|
|
bool isVisibleForInState(Player const* u, bool inVisibleList) const;
|
|
|
|
void Say(int32 textId, uint32 language, uint64 TargetGuid) { MonsterSay(textId,language,TargetGuid); }
|
|
void Yell(int32 textId, uint32 language, uint64 TargetGuid) { MonsterYell(textId,language,TargetGuid); }
|
|
void TextEmote(int32 textId, uint64 TargetGuid) { MonsterTextEmote(textId,TargetGuid); }
|
|
void Whisper(int32 textId,uint64 receiver) { MonsterWhisper(textId,receiver); }
|
|
|
|
GridReference<DynamicObject> &GetGridRef() { return m_gridRef; }
|
|
|
|
bool isActiveObject() const { return false; }
|
|
protected:
|
|
uint64 m_casterGuid;
|
|
uint32 m_spellId;
|
|
uint32 m_effIndex;
|
|
int32 m_aliveDuration;
|
|
time_t m_nextThinkTime;
|
|
float m_radius;
|
|
AffectedSet m_affected;
|
|
private:
|
|
GridReference<DynamicObject> m_gridRef;
|
|
};
|
|
#endif
|