AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
BfGraveyard Class Reference

#include "Battlefield.h"

Inheritance diagram for BfGraveyard:
BfGraveyardWG

Public Member Functions

 BfGraveyard (Battlefield *bf)
 
virtual ~BfGraveyard ()=default
 
void GiveControlTo (TeamId team)
 
TeamId GetControlTeamId () const
 
float GetDistance (Player *player)
 
void Initialize (TeamId startControl, uint32 graveyardId)
 
void SetSpirit (Creature *spirit, TeamId team)
 
void AddPlayer (ObjectGuid playerGuid)
 
void RemovePlayer (ObjectGuid playerGuid)
 
void Resurrect ()
 
void RelocateDeadPlayers ()
 
bool HasNpc (ObjectGuid guid)
 
bool HasPlayer (ObjectGuid guid) const
 
uint32 GetGraveyardId () const
 

Protected Attributes

TeamId ControlTeam
 
uint32 GraveyardId
 
ObjectGuid SpiritGuide [2]
 
GuidUnorderedSet ResurrectQueue
 
BattlefieldBf
 

Detailed Description

Constructor & Destructor Documentation

◆ BfGraveyard()

BfGraveyard::BfGraveyard ( Battlefield bf)
632 :
634 GraveyardId(0),
635 Bf(bf)
636{
637}
@ TEAM_NEUTRAL
Definition SharedDefines.h:750
uint32 GraveyardId
Definition Battlefield.h:201
Battlefield * Bf
Definition Battlefield.h:204
TeamId ControlTeam
Definition Battlefield.h:200

◆ ~BfGraveyard()

virtual BfGraveyard::~BfGraveyard ( )
virtualdefault

Member Function Documentation

◆ AddPlayer()

void BfGraveyard::AddPlayer ( ObjectGuid  playerGuid)
664{
665 if (!ResurrectQueue.count(playerGuid))
666 {
667 ResurrectQueue.insert(playerGuid);
668
669 if (Player* player = ObjectAccessor::FindPlayer(playerGuid))
670 player->CastSpell(player, SPELL_WAITING_FOR_RESURRECT, true);
671 }
672}
@ SPELL_WAITING_FOR_RESURRECT
Definition Battleground.h:128
GuidUnorderedSet ResurrectQueue
Definition Battlefield.h:203
Definition Player.h:1084
Player * FindPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:245

References ObjectAccessor::FindPlayer(), ResurrectQueue, and SPELL_WAITING_FOR_RESURRECT.

Referenced by Battlefield::AddPlayerToResurrectQueue().

◆ GetControlTeamId()

TeamId BfGraveyard::GetControlTeamId ( ) const
inline
161{ return ControlTeam; }

References ControlTeam.

◆ GetDistance()

float BfGraveyard::GetDistance ( Player player)
658{
659 GraveyardStruct const* safeLoc = sGraveyard->GetGraveyard(GraveyardId);
660 return player->GetDistance2d(safeLoc->x, safeLoc->y);
661}
#define sGraveyard
Definition GameGraveyard.h:74
float GetDistance2d(WorldObject const *obj) const
Definition Object.cpp:1313
Definition GameGraveyard.h:27
float x
Definition GameGraveyard.h:30
float y
Definition GameGraveyard.h:31

References WorldObject::GetDistance2d(), GraveyardId, sGraveyard, GraveyardStruct::x, and GraveyardStruct::y.

Referenced by Battlefield::GetClosestGraveyard().

◆ GetGraveyardId()

uint32 BfGraveyard::GetGraveyardId ( ) const
inline
197{ return GraveyardId; }

References GraveyardId.

Referenced by Battlefield::GetClosestGraveyard().

◆ GiveControlTo()

void BfGraveyard::GiveControlTo ( TeamId  team)
713{
714 ControlTeam = team;
715 // Teleport to other graveyard, players which were on this graveyard
717}
void RelocateDeadPlayers()
Definition Battlefield.cpp:719

References ControlTeam, and RelocateDeadPlayers().

Referenced by WGWorkshop::GiveControlTo(), and WGWorkshop::UpdateGraveyardAndWorkshop().

◆ HasNpc()

bool BfGraveyard::HasNpc ( ObjectGuid  guid)
inline
186 {
187 if (!SpiritGuide[0] && !SpiritGuide[1])
188 return false;
189
190 return (SpiritGuide[0] == guid || SpiritGuide[1] == guid);
191 }
ObjectGuid SpiritGuide[2]
Definition Battlefield.h:202

References SpiritGuide.

◆ HasPlayer()

bool BfGraveyard::HasPlayer ( ObjectGuid  guid) const
inline
194{ return ResurrectQueue.find(guid) != ResurrectQueue.end(); }

References ResurrectQueue.

◆ Initialize()

void BfGraveyard::Initialize ( TeamId  startControl,
uint32  graveyardId 
)
640{
641 ControlTeam = startControl;
642 GraveyardId = graveyardId;
643}

References ControlTeam, and GraveyardId.

Referenced by BattlefieldWG::SetupBattlefield().

◆ RelocateDeadPlayers()

void BfGraveyard::RelocateDeadPlayers ( )
720{
721 GraveyardStruct const* closestGrave = nullptr;
722 for (ObjectGuid const& guid : ResurrectQueue)
723 {
724 Player* player = ObjectAccessor::FindPlayer(guid);
725 if (!player)
726 continue;
727
728 if (closestGrave)
729 player->TeleportTo(player->GetMapId(), closestGrave->x, closestGrave->y, closestGrave->z, player->GetOrientation());
730 else
731 {
732 closestGrave = Bf->GetClosestGraveyard(player);
733 if (closestGrave)
734 player->TeleportTo(player->GetMapId(), closestGrave->x, closestGrave->y, closestGrave->z, player->GetOrientation());
735 }
736 }
737}
GraveyardStruct const * GetClosestGraveyard(Player *player)
Definition Battlefield.cpp:564
Definition ObjectGuid.h:118
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition Player.cpp:1352
uint32 GetMapId() const
Definition Position.h:281
float z
Definition GameGraveyard.h:32
float GetOrientation() const
Definition Position.h:124

References Bf, ObjectAccessor::FindPlayer(), Battlefield::GetClosestGraveyard(), WorldLocation::GetMapId(), Position::GetOrientation(), ResurrectQueue, Player::TeleportTo(), GraveyardStruct::x, GraveyardStruct::y, and GraveyardStruct::z.

Referenced by GiveControlTo().

◆ RemovePlayer()

void BfGraveyard::RemovePlayer ( ObjectGuid  playerGuid)
675{
676 ResurrectQueue.erase(ResurrectQueue.find(playerGuid));
677
678 if (Player* player = ObjectAccessor::FindPlayer(playerGuid))
679 player->RemoveAurasDueToSpell(SPELL_WAITING_FOR_RESURRECT);
680}

References ObjectAccessor::FindPlayer(), ResurrectQueue, and SPELL_WAITING_FOR_RESURRECT.

◆ Resurrect()

void BfGraveyard::Resurrect ( )
683{
684 if (ResurrectQueue.empty())
685 return;
686
687 for (ObjectGuid const& guid : ResurrectQueue)
688 {
689 // Get player object from his guid
690 Player* player = ObjectAccessor::FindPlayer(guid);
691 if (!player)
692 continue;
693
694 // Check if the player is in world and on the good graveyard
695 if (player->IsInWorld())
697 spirit->CastSpell(spirit, SPELL_SPIRIT_HEAL, true);
698
699 // Resurrect player
700 player->CastSpell(player, SPELL_RESURRECTION_VISUAL, true);
701 player->ResurrectPlayer(1.0f);
702 player->CastSpell(player, 6962, true);
703 player->CastSpell(player, SPELL_SPIRIT_HEAL_MANA, true);
704
705 player->SpawnCorpseBones(false);
706 }
707
708 ResurrectQueue.clear();
709}
@ SPELL_SPIRIT_HEAL
Definition Battleground.h:130
@ SPELL_SPIRIT_HEAL_MANA
Definition Battleground.h:134
@ SPELL_RESURRECTION_VISUAL
Definition Battleground.h:131
bool IsInWorld() const
Definition Object.h:109
void SpawnCorpseBones(bool triggerSave=true)
Definition Player.cpp:4592
void ResurrectPlayer(float restore_percent, bool applySickness=false)
Definition Player.cpp:4374
Definition Unit.h:664
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition Unit.cpp:1350
Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:210

References Unit::CastSpell(), ControlTeam, ObjectAccessor::FindPlayer(), ObjectAccessor::GetCreature(), Object::IsInWorld(), Player::ResurrectPlayer(), ResurrectQueue, Player::SpawnCorpseBones(), SPELL_RESURRECTION_VISUAL, SPELL_SPIRIT_HEAL, SPELL_SPIRIT_HEAL_MANA, and SpiritGuide.

◆ SetSpirit()

void BfGraveyard::SetSpirit ( Creature spirit,
TeamId  team 
)
646{
647 if (!spirit)
648 {
649 LOG_ERROR("bg.battlefield", "BfGraveyard::SetSpirit: Invalid Spirit.");
650 return;
651 }
652
653 SpiritGuide[team] = spirit->GetGUID();
655}
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
@ REACT_PASSIVE
Definition Unit.h:566
void SetReactState(ReactStates state)
A creature can have 3 ReactStates : Agressive, Passive, Neutral.
Definition Creature.h:99
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114

References Object::GetGUID(), LOG_ERROR, REACT_PASSIVE, Creature::SetReactState(), and SpiritGuide.

Member Data Documentation

◆ Bf

Battlefield* BfGraveyard::Bf
protected

◆ ControlTeam

TeamId BfGraveyard::ControlTeam
protected

◆ GraveyardId

uint32 BfGraveyard::GraveyardId
protected

◆ ResurrectQueue

GuidUnorderedSet BfGraveyard::ResurrectQueue
protected

◆ SpiritGuide

ObjectGuid BfGraveyard::SpiritGuide[2]
protected

Referenced by HasNpc(), Resurrect(), and SetSpirit().


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