Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
DynamicObject.cpp
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
#include "
CellImpl.h
"
7
#include "
Common.h
"
8
#include "
DatabaseEnv.h
"
9
#include "
GridNotifiers.h
"
10
#include "
GridNotifiersImpl.h
"
11
#include "
ObjectAccessor.h
"
12
#include "
Opcodes.h
"
13
#include "
ScriptMgr.h
"
14
#include "
UpdateMask.h
"
15
#include "
World.h
"
16
17
DynamicObject::DynamicObject
(
bool
isWorldObject) :
WorldObject
(isWorldObject),
18
_aura
(NULL),
_removedAura
(NULL),
_caster
(NULL),
_duration
(0),
_isViewpoint
(false)
19
{
20
m_objectType
|=
TYPEMASK_DYNAMICOBJECT
;
21
m_objectTypeId
=
TypeID::TYPEID_DYNAMICOBJECT
;
22
23
m_updateFlag
=
UPDATEFLAG_STATIONARY_POSITION
;
24
25
m_valuesCount
=
DYNAMICOBJECT_END
;
26
}
27
28
DynamicObject::~DynamicObject
()
29
{
30
// make sure all references were properly removed
31
ASSERT
(!
_aura
);
32
ASSERT
(!
_caster
);
33
ASSERT
(!
_isViewpoint
);
34
delete
_removedAura
;
35
}
36
37
void
DynamicObject::AddToWorld
()
38
{
40
if
(!
IsInWorld
())
41
{
42
sObjectAccessor
->AddObject(
this
);
43
WorldObject::AddToWorld
();
44
BindToCaster
();
45
}
46
}
47
48
void
DynamicObject::RemoveFromWorld
()
49
{
51
if
(
IsInWorld
())
52
{
53
if
(
_isViewpoint
)
54
RemoveCasterViewpoint
();
55
56
if
(
_aura
)
57
RemoveAura
();
58
59
// dynobj could get removed in Aura::RemoveAura
60
if
(!
IsInWorld
())
61
return
;
62
63
UnbindFromCaster
();
64
WorldObject::RemoveFromWorld
();
65
sObjectAccessor
->RemoveObject(
this
);
66
}
67
}
68
69
bool
DynamicObject::CreateDynamicObject
(
uint32
guidlow,
Unit
* caster,
SpellInfo
const
* spell,
Position
const
& pos,
float
radius,
DynamicObjectType
type)
70
{
71
SetMap
(caster->
GetMap
());
72
Relocate
(pos);
73
if
(!
IsPositionValid
())
74
{
75
SF_LOG_ERROR
(
"misc"
,
"DynamicObject (spell %u) not created. Suggested coordinates isn't valid (X: %f Y: %f)"
, spell->
Id
,
GetPositionX
(),
GetPositionY
());
76
return
false
;
77
}
78
79
WorldObject::_Create
(guidlow,
HIGHGUID_DYNAMICOBJECT
, caster->
GetPhaseMask
());
80
SetEntry
(spell->
Id
);
81
SetObjectScale
(1);
82
SetUInt64Value
(
DYNAMICOBJECT_FIELD_CASTER
, caster->
GetGUID
());
83
SetUInt32Value
(
DYNAMICOBJECT_FIELD_TYPE_AND_VISUAL_ID
, spell->
SpellVisual
[0] | (type << 28));
84
SetUInt32Value
(
DYNAMICOBJECT_FIELD_SPELL_ID
, spell->
Id
);
85
SetFloatValue
(
DYNAMICOBJECT_FIELD_RADIUS
, radius);
86
SetUInt32Value
(
DYNAMICOBJECT_FIELD_CAST_TIME
,
getMSTime
());
87
88
SetDuration
(spell->
GetDuration
());
89
90
if
(
IsWorldObject
())
91
setActive
(
true
);
//must before add to map to be put in world container
92
93
if
(!
GetMap
()->AddToMap(
this
))
94
return
false
;
95
96
return
true
;
97
}
98
99
void
DynamicObject::Update
(
uint32
p_time)
100
{
101
// caster has to be always available and in the same map
102
ASSERT
(
_caster
);
103
ASSERT
(
_caster
->GetMap() ==
GetMap
());
104
105
bool
expired =
false
;
106
107
if
(
_aura
)
108
{
109
if
(!
_aura
->IsRemoved())
110
_aura
->UpdateOwner(p_time,
this
);
111
112
// _aura may be set to null in Aura::UpdateOwner call
113
if
(
_aura
&& (
_aura
->IsRemoved() ||
_aura
->IsExpired()))
114
expired =
true
;
115
}
116
else
117
{
118
if
(
GetDuration
() >
int32
(p_time))
119
_duration
-= p_time;
120
else
121
expired =
true
;
122
}
123
124
if
(expired)
125
Remove
();
126
else
127
sScriptMgr
->OnDynamicObjectUpdate(
this
, p_time);
128
}
129
130
void
DynamicObject::Remove
()
131
{
132
if
(
IsInWorld
())
133
{
134
SendObjectDeSpawnAnim
(
GetGUID
());
135
RemoveFromWorld
();
136
AddObjectToRemoveList
();
137
}
138
}
139
140
int32
DynamicObject::GetDuration
()
const
141
{
142
if
(!
_aura
)
143
return
_duration
;
144
else
145
return
_aura
->GetDuration();
146
}
147
148
void
DynamicObject::SetDuration
(
int32
newDuration)
149
{
150
if
(!
_aura
)
151
_duration
= newDuration;
152
else
153
_aura
->SetDuration(newDuration);
154
}
155
156
void
DynamicObject::Delay
(
int32
delaytime)
157
{
158
SetDuration
(
GetDuration
() - delaytime);
159
}
160
161
void
DynamicObject::SetAura
(
Aura
* aura)
162
{
163
ASSERT
(!
_aura
&& aura);
164
_aura
= aura;
165
}
166
167
void
DynamicObject::RemoveAura
()
168
{
169
ASSERT
(
_aura
&& !
_removedAura
);
170
_removedAura
=
_aura
;
171
_aura
= NULL;
172
if
(!
_removedAura
->IsRemoved())
173
_removedAura
->_Remove(
AURA_REMOVE_BY_DEFAULT
);
174
}
175
176
void
DynamicObject::SetCasterViewpoint
()
177
{
178
if
(
Player
* caster =
_caster
->ToPlayer())
179
{
180
caster->SetViewpoint(
this
,
true
);
181
_isViewpoint
=
true
;
182
}
183
}
184
185
void
DynamicObject::RemoveCasterViewpoint
()
186
{
187
if
(
Player
* caster =
_caster
->ToPlayer())
188
{
189
caster->SetViewpoint(
this
,
false
);
190
_isViewpoint
=
false
;
191
}
192
}
193
194
void
DynamicObject::BindToCaster
()
195
{
196
ASSERT
(!
_caster
);
197
_caster
=
ObjectAccessor::GetUnit
(*
this
,
GetCasterGUID
());
198
ASSERT
(
_caster
);
199
ASSERT
(
_caster
->GetMap() ==
GetMap
());
200
_caster
->_RegisterDynObject(
this
);
201
}
202
203
void
DynamicObject::UnbindFromCaster
()
204
{
205
ASSERT
(
_caster
);
206
_caster
->_UnregisterDynObject(
this
);
207
_caster
= NULL;
208
}
CellImpl.h
Common.h
DatabaseEnv.h
int32
std::int32_t int32
Definition
Define.h:73
uint32
std::uint32_t uint32
Definition
Define.h:77
DynamicObjectType
DynamicObjectType
Definition
DynamicObject.h:16
ASSERT
#define ASSERT
Definition
Errors.h:29
GridNotifiers.h
GridNotifiersImpl.h
SF_LOG_ERROR
#define SF_LOG_ERROR(filterType__,...)
Definition
Log.h:143
TypeID::TYPEID_DYNAMICOBJECT
@ TYPEID_DYNAMICOBJECT
Definition
Object.h:57
TYPEMASK_DYNAMICOBJECT
@ TYPEMASK_DYNAMICOBJECT
Definition
Object.h:43
ObjectAccessor.h
sObjectAccessor
#define sObjectAccessor
Definition
ObjectAccessor.h:195
HIGHGUID_DYNAMICOBJECT
@ HIGHGUID_DYNAMICOBJECT
Definition
ObjectDefines.h:21
Opcodes.h
ScriptMgr.h
sScriptMgr
#define sScriptMgr
Definition
ScriptMgr.h:764
getMSTime
uint32 getMSTime()
Definition
Timer.h:12
AURA_REMOVE_BY_DEFAULT
@ AURA_REMOVE_BY_DEFAULT
Definition
Unit.h:407
UPDATEFLAG_STATIONARY_POSITION
@ UPDATEFLAG_STATIONARY_POSITION
Definition
UpdateData.h:31
DYNAMICOBJECT_FIELD_RADIUS
@ DYNAMICOBJECT_FIELD_RADIUS
Definition
UpdateFields.h:264
DYNAMICOBJECT_FIELD_CASTER
@ DYNAMICOBJECT_FIELD_CASTER
Definition
UpdateFields.h:261
DYNAMICOBJECT_FIELD_SPELL_ID
@ DYNAMICOBJECT_FIELD_SPELL_ID
Definition
UpdateFields.h:263
DYNAMICOBJECT_FIELD_TYPE_AND_VISUAL_ID
@ DYNAMICOBJECT_FIELD_TYPE_AND_VISUAL_ID
Definition
UpdateFields.h:262
DYNAMICOBJECT_FIELD_CAST_TIME
@ DYNAMICOBJECT_FIELD_CAST_TIME
Definition
UpdateFields.h:265
DYNAMICOBJECT_END
@ DYNAMICOBJECT_END
Definition
UpdateFields.h:266
UpdateMask.h
World.h
Aura
Definition
SpellAuras.h:74
DynamicObject::CreateDynamicObject
bool CreateDynamicObject(uint32 guidlow, Unit *caster, SpellInfo const *spell, Position const &pos, float radius, DynamicObjectType type)
Definition
DynamicObject.cpp:69
DynamicObject::SetAura
void SetAura(Aura *aura)
Definition
DynamicObject.cpp:161
DynamicObject::_caster
Unit * _caster
Definition
DynamicObject.h:51
DynamicObject::~DynamicObject
~DynamicObject()
Definition
DynamicObject.cpp:28
DynamicObject::SetCasterViewpoint
void SetCasterViewpoint()
Definition
DynamicObject.cpp:176
DynamicObject::BindToCaster
void BindToCaster()
Definition
DynamicObject.cpp:194
DynamicObject::UnbindFromCaster
void UnbindFromCaster()
Definition
DynamicObject.cpp:203
DynamicObject::AddToWorld
void AddToWorld() OVERRIDE
Definition
DynamicObject.cpp:37
DynamicObject::_duration
int32 _duration
Definition
DynamicObject.h:52
DynamicObject::DynamicObject
DynamicObject(bool isWorldObject)
Definition
DynamicObject.cpp:17
DynamicObject::SetDuration
void SetDuration(int32 newDuration)
Definition
DynamicObject.cpp:148
DynamicObject::RemoveCasterViewpoint
void RemoveCasterViewpoint()
Definition
DynamicObject.cpp:185
DynamicObject::Remove
void Remove()
Definition
DynamicObject.cpp:130
DynamicObject::GetCasterGUID
uint64 GetCasterGUID() const
Definition
DynamicObject.h:45
DynamicObject::_removedAura
Aura * _removedAura
Definition
DynamicObject.h:50
DynamicObject::Delay
void Delay(int32 delaytime)
Definition
DynamicObject.cpp:156
DynamicObject::Update
void Update(uint32 p_time) OVERRIDE
Definition
DynamicObject.cpp:99
DynamicObject::_isViewpoint
bool _isViewpoint
Definition
DynamicObject.h:53
DynamicObject::RemoveAura
void RemoveAura()
Definition
DynamicObject.cpp:167
DynamicObject::_aura
Aura * _aura
Definition
DynamicObject.h:49
DynamicObject::GetDuration
int32 GetDuration() const
Definition
DynamicObject.cpp:140
DynamicObject::RemoveFromWorld
void RemoveFromWorld() OVERRIDE
Definition
DynamicObject.cpp:48
ObjectAccessor::GetUnit
static Unit * GetUnit(WorldObject const &, uint64 guid)
Definition
ObjectAccessor.cpp:204
Object::m_objectType
uint16 m_objectType
Definition
Object.h:242
Object::GetGUID
uint64 GetGUID() const
Definition
Object.h:119
Object::IsInWorld
bool IsInWorld() const
Definition
Object.h:114
Object::m_valuesCount
uint16 m_valuesCount
Definition
Object.h:256
Object::SetFloatValue
void SetFloatValue(uint16 index, float value)
Definition
Object.cpp:1141
Object::AddToWorld
virtual void AddToWorld()
Definition
Object.cpp:148
Object::SetEntry
void SetEntry(uint32 entry)
Definition
Object.h:126
Object::SetObjectScale
virtual void SetObjectScale(float scale)
Definition
Object.h:129
Object::SetUInt32Value
void SetUInt32Value(uint16 index, uint32 value)
Definition
Object.cpp:1038
Object::m_updateFlag
uint16 m_updateFlag
Definition
Object.h:245
Object::m_objectTypeId
TypeID m_objectTypeId
Definition
Object.h:244
Object::SetUInt64Value
void SetUInt64Value(uint16 index, uint64 value)
Definition
Object.cpp:1079
Player
Definition
Player.h:1289
SpellInfo
Definition
SpellInfo.h:158
SpellInfo::SpellVisual
uint32 SpellVisual[2]
Definition
SpellInfo.h:219
SpellInfo::Id
uint32 Id
Definition
SpellInfo.h:160
SpellInfo::GetDuration
int32 GetDuration() const
Definition
SpellInfo.cpp:1967
Unit
Definition
Unit.h:1367
WorldObject::_Create
void _Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask)
Definition
Object.cpp:1581
WorldObject::GetPhaseMask
uint32 GetPhaseMask() const
Definition
Object.h:643
WorldObject::GetMap
Map * GetMap() const
Definition
Object.h:740
WorldObject::RemoveFromWorld
virtual void RemoveFromWorld()
Definition
Object.cpp:1587
WorldObject::IsWorldObject
bool IsWorldObject() const
Definition
Object.cpp:1531
WorldObject::SendObjectDeSpawnAnim
void SendObjectDeSpawnAnim(uint64 guid)
Definition
Object.cpp:2503
WorldObject::setActive
void setActive(bool isActiveObject)
Definition
Object.cpp:1542
WorldObject::SetMap
virtual void SetMap(Map *map)
Definition
Object.cpp:2514
WorldObject::AddObjectToRemoveList
void AddObjectToRemoveList()
Definition
Object.cpp:2550
WorldObject::WorldObject
WorldObject(bool isWorldObject)
Definition
Object.cpp:1514
Position
Definition
Object.h:274
Position::IsPositionValid
bool IsPositionValid() const
Definition
Object.cpp:2049
Position::GetPositionX
float GetPositionX() const
Definition
Object.h:328
Position::GetPositionY
float GetPositionY() const
Definition
Object.h:329
Position::Relocate
void Relocate(float x, float y)
Definition
Object.h:302
src
server
game
Entities
DynamicObject
DynamicObject.cpp
Generated on
for Project SkyFire Core by
1.17.0