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)
633 :
635 GraveyardId(0),
636 Bf(bf)
637{
638}
@ 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)
665{
666 if (!ResurrectQueue.count(playerGuid))
667 {
668 ResurrectQueue.insert(playerGuid);
669
670 if (Player* player = ObjectAccessor::FindPlayer(playerGuid))
671 player->CastSpell(player, SPELL_WAITING_FOR_RESURRECT, true);
672 }
673}
@ 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)
659{
660 GraveyardStruct const* safeLoc = sGraveyard->GetGraveyard(GraveyardId);
661 return player->GetDistance2d(safeLoc->x, safeLoc->y);
662}
#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)
714{
715 ControlTeam = team;
716 // Teleport to other graveyard, players which were on this graveyard
718}
void RelocateDeadPlayers()
Definition Battlefield.cpp:720

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 
)
641{
642 ControlTeam = startControl;
643 GraveyardId = graveyardId;
644}

References ControlTeam, and GraveyardId.

Referenced by BattlefieldWG::SetupBattlefield().

◆ RelocateDeadPlayers()

void BfGraveyard::RelocateDeadPlayers ( )
721{
722 GraveyardStruct const* closestGrave = nullptr;
723 for (ObjectGuid const& guid : ResurrectQueue)
724 {
725 Player* player = ObjectAccessor::FindPlayer(guid);
726 if (!player)
727 continue;
728
729 if (closestGrave)
730 player->TeleportTo(player->GetMapId(), closestGrave->x, closestGrave->y, closestGrave->z, player->GetOrientation());
731 else
732 {
733 closestGrave = Bf->GetClosestGraveyard(player);
734 if (closestGrave)
735 player->TeleportTo(player->GetMapId(), closestGrave->x, closestGrave->y, closestGrave->z, player->GetOrientation());
736 }
737 }
738}
GraveyardStruct const * GetClosestGraveyard(Player *player)
Definition Battlefield.cpp:565
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:1353
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)
676{
677 ResurrectQueue.erase(ResurrectQueue.find(playerGuid));
678
679 if (Player* player = ObjectAccessor::FindPlayer(playerGuid))
680 player->RemoveAurasDueToSpell(SPELL_WAITING_FOR_RESURRECT);
681}

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

◆ Resurrect()

void BfGraveyard::Resurrect ( )
684{
685 if (ResurrectQueue.empty())
686 return;
687
688 for (ObjectGuid const& guid : ResurrectQueue)
689 {
690 // Get player object from his guid
691 Player* player = ObjectAccessor::FindPlayer(guid);
692 if (!player)
693 continue;
694
695 // Check if the player is in world and on the good graveyard
696 if (player->IsInWorld())
698 spirit->CastSpell(spirit, SPELL_SPIRIT_HEAL, true);
699
700 // Resurrect player
701 player->CastSpell(player, SPELL_RESURRECTION_VISUAL, true);
702 player->ResurrectPlayer(1.0f);
703 player->CastSpell(player, 6962, true);
704 player->CastSpell(player, SPELL_SPIRIT_HEAL_MANA, true);
705
706 player->SpawnCorpseBones(false);
707 }
708
709 ResurrectQueue.clear();
710}
@ 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:4604
void ResurrectPlayer(float restore_percent, bool applySickness=false)
Definition Player.cpp:4386
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:1375
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 
)
647{
648 if (!spirit)
649 {
650 LOG_ERROR("bg.battlefield", "BfGraveyard::SetSpirit: Invalid Spirit.");
651 return;
652 }
653
654 SpiritGuide[team] = spirit->GetGUID();
656}
#define LOG_ERROR(filterType__,...)
Definition Log.h:145
@ REACT_PASSIVE
Definition Unit.h:566
void SetReactState(ReactStates state)
A creature can have 3 ReactStates : Agressive, Passive, Neutral.
Definition Creature.h:100
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: