AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
SpellEvent Class Reference
Inheritance diagram for SpellEvent:
BasicEvent

Public Member Functions

 SpellEvent (Spell *spell)
 
 ~SpellEvent ()
 
bool Execute (uint64 e_time, uint32 p_time)
 
void Abort (uint64 e_time)
 
bool IsDeletable () const
 
- Public Member Functions inherited from BasicEvent
 BasicEvent ()=default
 
virtual ~BasicEvent ()=default
 
void ScheduleAbort ()
 

Protected Attributes

Spell * m_Spell
 

Detailed Description

Constructor & Destructor Documentation

◆ SpellEvent()

SpellEvent::SpellEvent ( Spell *  spell)
8506 : BasicEvent()
8507{
8508 m_Spell = spell;
8509}
BasicEvent()=default
Spell * m_Spell
Definition Spell.cpp:566

References m_Spell.

◆ ~SpellEvent()

SpellEvent::~SpellEvent ( )
8512{
8514 m_Spell->cancel();
8515
8516 if (m_Spell->IsDeletable())
8517 {
8518 delete m_Spell;
8519 }
8520 else
8521 {
8522 LOG_ERROR("spells", "~SpellEvent: {} {} tried to delete non-deletable spell {}. Was not deleted, causes memory leak.",
8523 (m_Spell->GetCaster()->IsPlayer() ? "Player" : "Creature"), m_Spell->GetCaster()->GetGUID().ToString(), m_Spell->m_spellInfo->Id);
8524 ABORT();
8525 }
8526}
#define ABORT
Definition Errors.h:76
#define LOG_ERROR(filterType__,...)
Definition Log.h:145
@ SPELL_STATE_FINISHED
Definition Spell.h:239
bool IsPlayer() const
Definition Object.h:207
bool IsDeletable() const
Definition Spell.h:576
uint32 getState() const
Definition Spell.h:496
void cancel(bool bySelf=false)
Definition Spell.cpp:3830
WorldObject * GetCaster() const
Definition Spell.h:591
std::string ToString(Type &&val, Params &&... params)
Definition StringConvert.h:250

References ABORT, Spell::cancel(), Spell::GetCaster(), Object::GetGUID(), Spell::getState(), SpellInfo::Id, Spell::IsDeletable(), Object::IsPlayer(), LOG_ERROR, m_Spell, Spell::m_spellInfo, SPELL_STATE_FINISHED, and ObjectGuid::ToString().

Member Function Documentation

◆ Abort()

void SpellEvent::Abort ( uint64  e_time)
virtual

Reimplemented from BasicEvent.

8592{
8593 // oops, the spell we try to do is aborted
8595 m_Spell->cancel();
8596}

References Spell::cancel(), Spell::getState(), m_Spell, and SPELL_STATE_FINISHED.

◆ Execute()

bool SpellEvent::Execute ( uint64  e_time,
uint32  p_time 
)
virtual

Reimplemented from BasicEvent.

8529{
8530 // update spell if it is not finished
8532 m_Spell->update(p_time);
8533
8534 // check spell state to process
8535 switch (m_Spell->getState())
8536 {
8538 {
8539 // spell was finished, check deletable state
8540 if (m_Spell->IsDeletable())
8541 {
8542 // check, if we do have unfinished triggered spells
8543 return true; // spell is deletable, finish event
8544 }
8545 // event will be re-added automatically at the end of routine)
8546 }
8547 break;
8548
8550 {
8551 // first, check, if we have just started
8552 if (m_Spell->GetDelayStart() != 0)
8553 {
8554 {
8555 // run the spell handler and think about what we can do next
8556 uint64 t_offset = e_time - m_Spell->GetDelayStart();
8557 uint64 n_offset = m_Spell->handle_delayed(t_offset);
8558 if (n_offset)
8559 {
8560 // re-add us to the queue
8561 m_Spell->GetCaster()->m_Events.AddEvent(this, m_Spell->GetDelayStart() + n_offset, false);
8562 return false; // event not complete
8563 }
8564 // event complete
8565 // finish update event will be re-added automatically at the end of routine)
8566 }
8567 }
8568 else
8569 {
8570 // delaying had just started, record the moment
8571 m_Spell->SetDelayStart(e_time);
8572 // re-plan the event for the delay moment
8573 m_Spell->GetCaster()->m_Events.AddEvent(this, e_time + m_Spell->GetDelayMoment(), false);
8574 return false; // event not complete
8575 }
8576 }
8577 break;
8578
8579 default:
8580 {
8581 // all other states
8582 // event will be re-added automatically at the end of routine)
8583 } break;
8584 }
8585
8586 // spell processing not complete, plan event on the next update interval
8587 m_Spell->GetCaster()->m_Events.AddEvent(this, e_time + 1, false);
8588 return false; // event not complete
8589}
std::uint64_t uint64
Definition Define.h:106
@ SPELL_STATE_DELAYED
Definition Spell.h:241
void AddEvent(BasicEvent *Event, uint64 e_time, bool set_addtime=true, uint8 eventGroup=0)
Definition EventProcessor.cpp:136
void SetDelayStart(uint64 m_time)
Definition Spell.h:581
uint64 handle_delayed(uint64 t_offset)
Definition Spell.cpp:4311
void update(uint32 difftime)
Definition Spell.cpp:4548
uint64 GetDelayStart() const
Definition Spell.h:580
uint64 GetDelayMoment() const
Definition Spell.h:582
EventProcessor m_Events
Definition Object.h:749

References EventProcessor::AddEvent(), Spell::GetCaster(), Spell::GetDelayMoment(), Spell::GetDelayStart(), Spell::getState(), Spell::handle_delayed(), Spell::IsDeletable(), WorldObject::m_Events, m_Spell, Spell::SetDelayStart(), SPELL_STATE_DELAYED, SPELL_STATE_FINISHED, and Spell::update().

◆ IsDeletable()

bool SpellEvent::IsDeletable ( ) const
virtual

Reimplemented from BasicEvent.

8599{
8600 return m_Spell->IsDeletable();
8601}

References Spell::IsDeletable(), and m_Spell.

Member Data Documentation

◆ m_Spell

Spell* SpellEvent::m_Spell
protected

The documentation for this class was generated from the following file: