34#include <G3D/g3dmath.h>
108 group->RemoveMember(player->
GetGUID());
158 if (itr->second <= now)
164 if (itr->second <= now)
274 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::InitStalker: Could not spawn Stalker (Creature entry {}), zone messages will be unavailable!", entry);
290 auto controlzone = gameobject->GetGOInfo()->controlZone;
292 if (eventId == controlzone.CaptureEventAlliance)
294 else if (eventId == controlzone.CaptureEventHorde)
296 else if (eventId == controlzone.ContestedEventAlliance)
298 else if (eventId == controlzone.ContestedEventHorde)
300 else if (eventId == controlzone.NeutralEventAlliance)
302 else if (eventId == controlzone.NeutralEventHorde)
304 else if (eventId == controlzone.ProgressEventAlliance)
306 else if (eventId == controlzone.ProgressEventHorde)
396 player->
TeleportTo(571, 5804.1499f, 624.7710f, 647.7670f, 1.6400f);
423 player->CastSpell(player,
uint32(spellId),
true);
429 player->RemoveAuraFromStack(
uint32(-spellId));
438 player->SendDirectMessage(data);
446 player->SendDirectMessage(data);
454 player->SendDirectMessage(data);
501 if (!group->IsFull())
511 if (group->IsMember(guid))
523 group->RemoveMember(player->
GetGUID());
561 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::GetGraveyardById Id:{} does not exist.",
id);
564 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::GetGraveyardById Id:{} could not be found.",
id);
581 if (dist < maxdist || maxdist < 0)
615 TC_LOG_ERROR(
"bg.battlefield",
"BfGraveyard::SetSpirit: Invalid Spirit.");
640 spiritHealer->SummonGraveyardTeleporter();
667 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::SpawnCreature: entry {} does not exist.", entry);
674 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::SpawnCreature: Can't create creature entry: {}", entry);
691 if (!
sObjectMgr->GetGameObjectTemplate(entry))
693 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::SpawnGameObject: GameObject template {} not found in database! Battlefield not created!", entry);
701 TC_LOG_ERROR(
"bg.battlefield",
"Battlefield::SpawnGameObject: Could not create gameobject template {}! Battlefield has not been created!", entry);
#define TC_LOG_ERROR(filterType__,...)
uint64 MAKE_PAIR64(uint32 l, uint32 h)
@ GAMEOBJECT_TYPE_CONTROL_ZONE
uint8 constexpr PVP_TEAMS_COUNT
@ UNIT_FLAG_NON_ATTACKABLE
Battlefield * _battlefield
Battlefield * GetBattlefield()
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 AskToLeaveQueue(Player *player)
TeamId GetOtherTeam(TeamId team) const
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 IsMember(ObjectGuid guid) const
bool Create(Player *leader)
GameObject * GetGameObject(ObjectGuid const &guid)
Creature * GetCreature(ObjectGuid const &guid)
static ObjectGuid const Empty
static GameObject * ToGameObject(Object *o)
static ObjectGuid GetGUID(Object const *o)
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, TeleportToOptions options=TELE_TO_NONE, Optional< uint32 > instanceId={})
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 *, uint32, WorldObject *)
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)
constexpr float GetPositionX() const
constexpr float GetPositionY() const