34#include <G3D/g3dmath.h>
108 group->RemoveMember(player->
GetGUID());
158 if (itr->second <= now)
164 if (itr->second <= now)
271 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::InitStalker: Could not spawn Stalker (Creature entry {}), zone messages will be unavailable!", entry);
287 auto controlzone = gameobject->GetGOInfo()->controlZone;
289 if (eventId == controlzone.CaptureEventAlliance)
291 else if (eventId == controlzone.CaptureEventHorde)
293 else if (eventId == controlzone.ContestedEventAlliance)
295 else if (eventId == controlzone.ContestedEventHorde)
297 else if (eventId == controlzone.NeutralEventAlliance)
299 else if (eventId == controlzone.NeutralEventHorde)
301 else if (eventId == controlzone.ProgressEventAlliance)
303 else if (eventId == controlzone.ProgressEventHorde)
393 player->
TeleportTo(571, 5804.1499f, 624.7710f, 647.7670f, 1.6400f);
420 player->CastSpell(player,
uint32(spellId),
true);
426 player->RemoveAuraFromStack(
uint32(-spellId));
435 player->SendDirectMessage(data);
443 player->SendDirectMessage(data);
451 player->SendDirectMessage(data);
498 if (!group->IsFull())
508 if (group->IsMember(guid))
563 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::GetGraveyardById Id:{} does not exist.",
id);
566 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::GetGraveyardById Id:{} could not be found.",
id);
583 if (dist < maxdist || maxdist < 0)
619 TC_LOG_ERROR(
"bg.battlefield",
"BfGraveyard::SetSpirit: Invalid Spirit.");
644 spiritHealer->SummonGraveyardTeleporter();
671 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::SpawnCreature: entry {} does not exist.", entry);
678 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::SpawnCreature: Can't create creature entry: {}", entry);
695 if (!
sObjectMgr->GetGameObjectTemplate(entry))
697 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::SpawnGameObject: GameObject template {} not found in database! Battlefield not created!", entry);
705 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::SpawnGameObject: Could not create gameobject template {}! Battlefield has not been created!", entry);
#define TC_LOG_ERROR(filterType__, message__,...)
uint64 MAKE_PAIR64(uint32 l, uint32 h)
@ GAMEOBJECT_TYPE_CONTROL_ZONE
constexpr TeamId GetOtherTeam(TeamId team)
uint8 constexpr PVP_TEAMS_COUNT
@ UNIT_FLAG_NON_ATTACKABLE
ObjectGuid const & GetGUID() const
Battlefield * _battlefield
Battlefield * GetBattlefield()
virtual ~BattlefieldControlZoneHandler()
BattlefieldControlZoneHandler(Battlefield *bf)
GameObject * SpawnGameObject(uint32 entry, Position const &pos, QuaternionData const &rot)
void ProcessEvent(WorldObject *target, uint32 eventId, WorldObject *invoker) override
GraveyardVect m_GraveyardList
GameObject * GetGameObject(ObjectGuid guid)
void BroadcastPacketToWar(WorldPacket const *data) const
void ShowNpc(Creature *creature, bool aggressive)
Creature * GetCreature(ObjectGuid guid)
void DoPlaySoundToAll(uint32 SoundID)
Creature * SpawnCreature(uint32 entry, Position const &pos)
void BroadcastPacketToZone(WorldPacket const *data) const
virtual ~Battlefield()
Destructor.
void EndBattle(bool endByTimer)
virtual void OnBattleEnd(bool)
Called at the end of battle.
bool IsWarTime() const
Return true if battle is start, false if battle is not started.
void InitStalker(uint32 entry, Position const &pos)
void InvitePlayersInQueueToWar()
Invite all players in queue to join battle on battle start.
virtual void SendRemoveWorldStates(Player *)
uint32 m_StartGroupingTimer
virtual bool Update(uint32 diff)
Called every time for update bf data and time.
void InvitePlayersInZoneToQueue()
Invite all players in zone to join the queue, called x minutes before battle start in Update()
void KickPlayerFromBattlefield(ObjectGuid guid)
Kick player from battlefield and teleport him to kick-point location.
void InvitePlayerToQueue(Player *player)
void RegisterZone(uint32 zoneid)
void SetDefenderTeam(TeamId team)
void InvitePlayerToWar(Player *player)
uint32 m_uiKickAfkPlayersTimer
void PlayerAcceptInviteToWar(Player *player)
void BroadcastPacketToQueue(WorldPacket const *data) const
void SendWarning(uint8 id, WorldObject const *target=nullptr)
Group * GetFreeBfRaid(TeamId TeamId)
Find a not full battlefield group, if there is no, create one.
virtual void OnPlayerJoinWar(Player *)
Called when a player accept to join the battle.
uint32 m_TimeForAcceptInvite
BfGraveyard * GetGraveyardById(uint32 id) const
virtual void OnBattleStart()
Called on start.
GuidUnorderedSet m_PlayersInWar[PVP_TEAMS_COUNT]
uint64 GetQueueId() const
void InvitePlayersInZoneToWar()
Invite all players in zone to join battle on battle start.
void HideNpc(Creature *creature)
PlayerTimerMap m_PlayersWillBeKick[PVP_TEAMS_COUNT]
uint32 m_RestartAfterCrash
TeamId GetAttackerTeam() const
GuidUnorderedSet m_PlayersInQueue[PVP_TEAMS_COUNT]
bool AddOrSetPlayerToCorrectBfGroup(Player *player)
Force player to join a battlefield group.
void PlayerAskToLeave(Player *player)
void TeamCastSpell(TeamId team, int32 spellId)
virtual void OnPlayerLeaveZone(Player *)
Called when a player leave battlefield zone.
void PlayerAcceptInviteToQueue(Player *player)
Group * GetGroupPlayer(ObjectGuid guid, TeamId TeamId)
Return battlefield group where player is.
uint32 m_uiKickDontAcceptTimer
ControlZoneHandlerMap ControlZoneHandlers
GuidUnorderedSet m_Groups[PVP_TEAMS_COUNT]
virtual void OnStartGrouping()
Called x minutes before battle start when player in zone are invite to join queue.
WorldLocation KickPosition
virtual void OnPlayerLeaveWar(Player *)
Called when a player leave the battle.
PlayerTimerMap m_InvitedPlayers[PVP_TEAMS_COUNT]
bool HasPlayer(Player *player) const
void SetGraveyardNumber(uint32 number)
void AskToLeaveQueue(Player *player)
Battlefield(Map *map)
Constructor.
WorldSafeLocsEntry const * GetClosestGraveyard(Player *player)
void HandlePlayerLeaveZone(Player *player, uint32 zone)
Called when player (player) leave the zone.
virtual void OnPlayerEnterZone(Player *)
Called when a player enter in battlefield zone.
GuidUnorderedSet m_players[PVP_TEAMS_COUNT]
void HandlePlayerEnterZone(Player *player, uint32 zone)
Called when player (player) enter in zone.
ObjectGuid m_SpiritGuide[PVP_TEAMS_COUNT]
BfGraveyard(Battlefield *bf)
bool HasNpc(ObjectGuid guid)
void GiveControlTo(TeamId team)
void SetSpirit(Creature *spirit, TeamId team)
uint32 GetGraveyardId() const
void Initialize(TeamId startcontrol, uint32 gy)
float GetDistance(Player *player)
virtual void HandleNeutralEventHorde(GameObject *controlZone)
virtual void HandleProgressEventAlliance(GameObject *controlZone)
virtual void HandleContestedEventAlliance(GameObject *controlZone)
virtual void HandleNeutralEventAlliance(GameObject *controlZone)
virtual void HandleCaptureEventHorde(GameObject *controlZone)
virtual void HandleProgressEventHorde(GameObject *controlZone)
virtual void HandleContestedEventHorde(GameObject *controlZone)
virtual void HandleCaptureEventAlliance(GameObject *controlZone)
void SetHomePosition(float x, float y, float z, float o)
void Respawn(bool force=false)
static Creature * CreateCreature(uint32 entry, Map *map, Position const &pos, uint32 vehId=0)
void SetReactState(ReactStates st)
static GameObject * CreateGameObject(uint32 entry, Map *map, Position const &pos, QuaternionData const &rotation, uint32 animProgress, GOState goState, uint32 artKit=0)
uint8 GetMemberGroup(ObjectGuid guid) const
void SetBattlefieldGroup(Battlefield *bf)
bool AddMember(Player *player)
ObjectGuid GetGUID() const
bool RemoveMember(ObjectGuid guid, RemoveMethod method=GROUP_REMOVEMETHOD_DEFAULT, ObjectGuid kicker=ObjectGuid::Empty, const char *reason=nullptr)
bool IsMember(ObjectGuid guid) const
bool Create(Player *leader)
GameObject * GetGameObject(ObjectGuid const &guid)
Creature * GetCreature(ObjectGuid const &guid)
static ObjectGuid const Empty
GameObject * ToGameObject()
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, TeleportToOptions options=TELE_TO_NONE, Optional< uint32 > instanceId={}, uint32 teleportSpellId=0)
Battleground * GetBattleground() const
Group * GetGroup(Optional< uint8 > partyIndex)
void SetBattlegroundOrBattlefieldRaid(Group *group, int8 subgroup=-1)
void CombatStop(bool includingCast=false, bool mutualPvP=true, bool(*unitFilter)(Unit const *otherUnit)=nullptr)
void SetUninteractible(bool apply)
void SetUnitFlag(UnitFlags flags)
void RemoveUnitFlag(UnitFlags flags)
void setActive(bool isActiveObject)
float GetDistance2d(WorldObject const *obj) const
void SetFarVisible(bool on)
virtual void ProcessEvent(WorldObject *obj, uint32 eventId, WorldObject *invoker)
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)
constexpr float GetPositionX() const
constexpr float GetPositionY() const