54 for (BattlegroundPlayerMap::const_iterator itr =
m_Players.begin(); itr !=
m_Players.end(); ++itr)
223 for (BattlegroundPlayerMap::const_iterator itr =
GetPlayers().begin(); itr !=
GetPlayers().end(); ++itr)
227 if (player->IsGameMaster())
234 TC_LOG_DEBUG(
"bg.battleground",
"BATTLEGROUND: Sending {} back to start location (map: {}) (possible exploit)", player->GetName(),
GetMapId());
235 player->TeleportTo(startPos->
Loc);
255 playerPosition.Pos = player->GetPosition();
342 for (BattlegroundPlayerMap::const_iterator itr =
GetPlayers().begin(); itr !=
GetPlayers().end(); ++itr)
344 player->ResetAllPowers();
417 for (BattlegroundPlayerMap::const_iterator itr =
GetPlayers().begin(); itr !=
GetPlayers().end(); ++itr)
422 player->SetArenaFaction(player->GetBGTeam());
425 player->ResetAllPowers();
426 if (!player->IsGameMaster())
448 for (BattlegroundPlayerMap::const_iterator itr =
GetPlayers().begin(); itr !=
GetPlayers().end(); ++itr)
453 player->ResetAllPowers();
476 BattlegroundPlayerMap::iterator itr, next;
496 TC_LOG_ERROR(
"bg.battleground",
"Battleground::{}: player ({}) not found for BG (map: {}, instance id: {})!",
507 Team playerTeam = itr->second.Team;
510 if (playerTeam != team)
535 for (BattlegroundPlayerMap::const_iterator itr =
m_Players.begin(); itr !=
m_Players.end(); ++itr)
537 player->SendDirectMessage(packet);
542 for (BattlegroundPlayerMap::const_iterator itr =
m_Players.begin(); itr !=
m_Players.end(); ++itr)
545 if (player != except)
546 player->SendDirectMessage(packet);
559 TC_LOG_ERROR(
"bg.battleground",
"Battleground::SendBroadcastText: `broadcast_text` (ID: {}) was not found",
id);
580 for (BattlegroundPlayerMap::const_iterator itr =
m_Players.begin(); itr !=
m_Players.end(); ++itr)
582 player->CastSpell(player, SpellID,
true);
587 for (BattlegroundPlayerMap::const_iterator itr =
m_Players.begin(); itr !=
m_Players.end(); ++itr)
589 player->RemoveAura(SpellID);
594 for (BattlegroundPlayerMap::const_iterator itr =
m_Players.begin(); itr !=
m_Players.end(); ++itr)
605 for (BattlegroundPlayerMap::const_iterator itr =
m_Players.begin(); itr !=
m_Players.end(); ++itr)
614 uint32 repGain = Reputation;
630 bool guildAwarded =
false;
641 else if (winner ==
HORDE)
656 uint64 battlegroundId = 1;
664 Field* fields = result->Fetch();
665 battlegroundId = fields[0].
GetUInt64() + 1;
683 pvpMatchComplete.
LogData.emplace();
685 pvpMatchComplete.
Write();
687 for (BattlegroundPlayerMap::iterator itr =
m_Players.begin(); itr !=
m_Players.end(); ++itr)
689 Team team = itr->second.Team;
722 stmt->
setBool (2, team == winner);
723 stmt->
setUInt32(3, score->second->GetKillingBlows());
724 stmt->
setUInt32(4, score->second->GetDeaths());
725 stmt->
setUInt32(5, score->second->GetHonorableKills());
726 stmt->
setUInt32(6, score->second->GetBonusHonor());
727 stmt->
setUInt32(7, score->second->GetDamageDone());
728 stmt->
setUInt32(8, score->second->GetHealingDone());
729 stmt->
setUInt32(9, score->second->GetAttr(0));
730 stmt->
setUInt32(10, score->second->GetAttr(1));
731 stmt->
setUInt32(11, score->second->GetAttr(2));
732 stmt->
setUInt32(12, score->second->GetAttr(3));
733 stmt->
setUInt32(13, score->second->GetAttr(4));
812 bool participant =
false;
814 BattlegroundPlayerMap::iterator itr =
m_Players.find(guid);
818 bgQueueTypeId = itr->second.queueTypeId;
825 BattlegroundScoreMap::iterator itr2 =
PlayerScores.find(guid);
880 if (SendPacket && bgQueueTypeId)
895 if (!group->RemoveMember(guid))
909 playerLeft.
Guid = guid;
926 TC_LOG_DEBUG(
"bg.battleground",
"Removed player {} from Battleground.", player->
GetName());
942 TC_LOG_ERROR(
"bg.battleground",
"Battleground::Reset: one of the counters is not 0 (alliance: {}, horde: {}) for BG (map: {}, instance id: {})!",
999 if (!isInBattleground)
1033 pvpMatchInitialize.
Duration = std::chrono::duration_cast<Seconds>(duration);
1113 if (originalGroup->IsLeader(playerGuid))
1192 uint32 otherTeamInvitedCount;
1193 uint32 thisTeamInvitedCount;
1194 uint32 otherTeamPlayersCount;
1195 uint32 thisTeamPlayersCount;
1218 if (otherTeamInvitedCount == thisTeamInvitedCount)
1221 else if (otherTeamInvitedCount > thisTeamInvitedCount)
1222 diff = otherTeamInvitedCount - thisTeamInvitedCount;
1231 if (otherTeamPlayersCount == thisTeamPlayersCount)
1234 else if (otherTeamPlayersCount > thisTeamPlayersCount)
1235 diff3 = otherTeamPlayersCount - thisTeamPlayersCount;
1243 diff = std::min(diff, diff2);
1245 return std::min(diff, diff3);
1273 score.second->BuildPvPLogPlayerDataPacket(playerData);
1277 playerData.
Sex = player->GetGender();
1278 playerData.
Race = player->GetRace();
1279 playerData.
Class = player->GetClass();
1280 playerData.
HonorLevel = player->GetHonorLevel();
1304 itr->second->UpdateScore(type, value);
1312 score->UpdatePvpStat(pvpStatId, value);
1315bool Battleground::AddObject(
uint32 type,
uint32 entry,
float x,
float y,
float z,
float o,
float rotation0,
float rotation1,
float rotation2,
float rotation3,
uint32 ,
GOState goState)
1326 if (!rotation0 && !rotation1 && !rotation2 && !rotation3)
1328 TC_LOG_DEBUG(
"bg.battleground",
"Battleground::AddObject: gameoobject [entry: {}, object type: {}] for BG (map: {}) has zeroed rotation fields, "
1329 "orientation used temporally, but please fix the spawn", entry, type,
GetMapId());
1340 TC_LOG_ERROR(
"bg.battleground",
"Battleground::AddObject: cannot create gameobject (entry: {}) for BG (map: {}, instance id: {})!",
1379 return AddObject(type, entry, pos.
GetPositionX(), pos.
GetPositionY(), pos.
GetPositionZ(), pos.
GetOrientation(), rotation0, rotation1, rotation2, rotation3, respawnTime, goState);
1396 TC_LOG_ERROR(
"bg.battleground",
"Battleground::DoorClose: door gameobject (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1408 TC_LOG_ERROR(
"bg.battleground",
"Battleground::DoorOpen: door gameobject (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1418 TC_LOG_ERROR(
"bg.battleground",
"Battleground::GetBGObject: gameobject (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1421 TC_LOG_INFO(
"bg.battleground",
"Battleground::GetBGObject: gameobject (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1433 TC_LOG_ERROR(
"bg.battleground",
"Battleground::GetBGCreature: creature (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1436 TC_LOG_INFO(
"bg.battleground",
"Battleground::GetBGCreature: creature (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1473 obj->SendGameObjectDespawn();
1481 obj->SetRespawnTime(respawntime);
1497 TC_LOG_ERROR(
"bg.battleground",
"Battleground::AddCreature: creature template (entry: {}) does not exist for BG (map: {}, instance id: {})!",
1518 TC_LOG_ERROR(
"bg.battleground",
"Battleground::AddCreature: cannot create creature (entry: {}) for BG (map: {}, instance id: {})!",
1551 creature->AddObjectToRemoveList();
1556 TC_LOG_ERROR(
"bg.battleground",
"Battleground::DelCreature: creature (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1569 obj->SetRespawnTime(0);
1574 TC_LOG_ERROR(
"bg.battleground",
"Battleground::DelObject: gameobject (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1587 obj->RemoveFromWorld();
1591 TC_LOG_INFO(
"bg.battleground",
"Battleground::RemoveObjectFromWorld: gameobject (type: {}, {}) not found for BG (map: {}, instance id: {})!",
1603 TC_LOG_ERROR(
"bg.battleground",
"Battleground::AddSpiritGuide: cannot create spirit guide (type: {}, entry: {}) for BG (map: {}, instance id: {})!",
1630 va_start(ap, source);
1648 return playerPosition.Guid == guid;
1671 if (killer == victim)
1679 for (BattlegroundPlayerMap::const_iterator itr =
m_Players.begin(); itr !=
m_Players.end(); ++itr)
1682 if (!creditedPlayer || creditedPlayer == killer)
1702 BattlegroundPlayerMap::const_iterator itr =
m_Players.find(guid);
1704 return itr->second.Team;
1715 BattlegroundPlayerMap::const_iterator itr =
m_Players.find(guid);
1725 return itr->second.Mercenary;
1744 for (BattlegroundPlayerMap::const_iterator itr =
m_Players.begin(); itr !=
m_Players.end(); ++itr)
1746 if (itr->second.Team == team)
1749 if (player && player->
IsAlive())
1761 TC_LOG_ERROR(
"bg.battleground",
"Battleground::GetObjectType: player used gameobject ({}) which is not in internal data for BG (map: {}, instance id: {}), cheating?",
1785 for (BattlegroundPlayerMap::const_iterator itr =
GetPlayers().begin(); itr !=
GetPlayers().end(); ++itr)
1799 Player* killers[] = { killer };
1815 TC_LOG_DEBUG(
"bg.battleground",
"Unhandled AreaTrigger {} in Battleground {}. Player coords (x: {}, y: {}, z: {})",
@ BG_QUEUE_INVITATION_TYPE_NO_BALANCE
@ PLAYER_POSITION_UPDATE_INTERVAL
@ TIME_AUTOCLOSE_BATTLEGROUND
@ CHECK_PLAYER_POSITION_INVERVAL
@ BG_CREATURE_ENTRY_H_SPIRITGUIDE
@ BG_CREATURE_ENTRY_A_SPIRITGUIDE
@ BG_TEXT_START_TWO_MINUTES
@ BG_TEXT_BATTLE_HAS_BEGUN
@ BG_TEXT_START_ONE_MINUTE
@ BG_TEXT_START_HALF_MINUTE
@ SPELL_MERCENARY_SHAPESHIFT
@ SPELL_MERCENARY_ALLIANCE_REACTIONS
@ SPELL_MERCENARY_HORDE_REACTIONS
@ SPELL_MERCENARY_HORDE_1
@ SPELL_ARENA_PREPARATION
@ SPELL_HONORABLE_DEFENDER_25Y
@ SPELL_MERCENARY_ALLIANCE_1
@ SPELL_HONORABLE_DEFENDER_60Y
@ BG_STARTING_EVENT_THIRD
@ BG_STARTING_EVENT_SECOND
@ BG_STARTING_EVENT_FIRST
@ BG_STARTING_EVENT_FOURTH
@ CHAR_SEL_PVPSTATS_MAXID
@ CHAR_INS_PVPSTATS_PLAYER
@ CHAR_INS_PVPSTATS_BATTLEGROUND
DB2Storage< BroadcastTextEntry > sBroadcastTextStore("BroadcastText.db2", &BroadcastTextLoadInfo::Instance)
DB2Storage< FactionEntry > sFactionStore("Faction.db2", &FactionLoadInfo::Instance)
@ ParticipateInBattleground
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
@ LANG_BG_STARTED_ANNOUNCE_WORLD
@ LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING
@ LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING_SECS
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
@ TEMPSUMMON_MANUAL_DESPAWN
std::optional< T > Optional
Optional helper class to wrap optional values within.
@ PLAYER_FLAGS_EX_MERCENARY_MODE
constexpr BattlegroundQueueTypeId BATTLEGROUND_QUEUE_NONE
@ SPELL_ATTR0_NO_IMMUNITIES
@ CHAT_MSG_BG_SYSTEM_NEUTRAL
@ SPELL_AURA_MOD_SHAPESHIFT
@ SPELL_AURA_SPIRIT_OF_REDEMPTION
@ SPELL_AURA_MOD_INVISIBILITY
@ SPELL_AURA_MOD_REPUTATION_GAIN
@ SPELL_AURA_MOD_FACTION_REPUTATION_GAIN
@ LeaveArenaOrBattleground
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
int32 GetDuration() const
bool HasEffectType(AuraType type) const
SpellInfo const * GetSpellInfo() const
void SetBG(Battleground *bg)
static bool IsRandomBattleground(uint32 battlemasterListId)
static bool IsBGWeekend(BattlegroundTypeId bgTypeId)
void UpdatePlayersCountByTeam(Team team, bool remove)
void SetRemainingTime(uint32 Time)
uint32 m_ArenaTeamMMR[PVP_TEAMS_COUNT]
WorldSafeLocsEntry const * GetTeamStartPosition(TeamId teamId) const
virtual Team GetPrematureWinner()
virtual Creature * AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, TeamId teamId=TEAM_NEUTRAL, uint32 respawntime=0, Transport *transport=nullptr)
void SendPacketToTeam(Team team, WorldPacket const *packet, Player *except=nullptr) const
char const * GetName() const
PVPDifficultyEntry const * _pvpDifficultyEntry
void SendPacketToAll(WorldPacket const *packet) const
void RemovePlayerPosition(ObjectGuid guid)
uint32 GetMinLevel() const
void ModifyStartDelayTime(int diff)
void SetElapsedTime(uint32 Time)
virtual void HandleKillPlayer(Player *player, Player *killer)
uint32 m_ArenaTeamIds[PVP_TEAMS_COUNT]
void _ProcessPlayerPositionBroadcast(uint32 diff)
virtual bool SetupBattleground()
void AddOrSetPlayerToCorrectBgGroup(Player *player, Team team)
void DoorOpen(uint32 type)
std::deque< ObjectGuid > m_OfflineQueue
uint32 GetMinPlayersPerTeam() const
void PlayerAddedToBGCheckIfBGIsRunning(Player *player)
virtual void OnMapSet(BattlegroundMap *map)
bool DelCreature(uint32 type)
uint8 GetArenaType() const
BattlegroundPlayerMap m_Players
void SpawnBGObject(uint32 type, uint32 respawntime)
Player * _GetPlayerForTeam(Team team, BattlegroundPlayerMap::const_iterator itr, char const *context) const
uint32 GetMaxPlayersPerTeam() const
time_t _preparationStartTime
uint32 m_ValidStartPositionTimer
virtual bool AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime=0, GOState goState=GO_STATE_READY)
Group * GetBgRaid(Team team) const
BattlegroundTemplate const * _battlegroundTemplate
uint32 GetInvitedCount(Team team) const
void SetWinner(PvPTeamId winnerTeamId)
uint8 GetUniqueBracketId() const
void PlaySoundToAll(uint32 SoundID)
uint32 m_ClientInstanceID
int32 GetObjectType(ObjectGuid guid)
void AddToBGFreeSlotQueue()
uint32 GetTeamScore(TeamId teamId) const
uint32 GetPlayerScoresSize() const
void DecreaseInvitedCount(Team team)
Creature * GetBGCreature(uint32 type, bool logError=true)
void RewardHonorToTeam(uint32 Honor, Team team)
void SetBgMap(BattlegroundMap *map)
uint32 GetMaxPlayers() const
BattlegroundMap * GetBgMap() const
virtual void PostUpdateImpl(uint32)
Post-update hook.
PvPTeamId GetWinner() const
Battleground(BattlegroundTemplate const *battlegroundTemplate)
virtual void RemovePlayer(Player *, ObjectGuid, uint32)
BattlegroundMap * FindBgMap() const
void BlockMovement(Player *player)
uint32 GetRemainingTime() const
Player * _GetPlayer(ObjectGuid guid, bool offlineRemove, char const *context) const
virtual bool AddSpiritGuide(uint32 type, float x, float y, float z, float o, TeamId teamId=TEAM_NEUTRAL)
BattlegroundTypeId GetTypeID() const
void DoorClose(uint32 type)
bool m_PrematureCountDown
uint32 m_PlayersCount[PVP_TEAMS_COUNT]
Group * m_BgRaids[PVP_TEAMS_COUNT]
uint32 m_PrematureCountDownTimer
void RemoveAuraOnTeam(uint32 SpellID, Team team)
void ProcessEvent(WorldObject *, uint32, WorldObject *) override
virtual WorldSafeLocsEntry const * GetExploitTeleportLocation(Team)
void TriggerGameEvent(uint32 gameEventId, WorldObject *source=nullptr, WorldObject *target=nullptr) override
int32 m_TeamScores[PVP_TEAMS_COUNT]
void PSendMessageToAll(uint32 entry, ChatMsg type, Player const *source,...)
void SendMessageToAll(uint32 entry, ChatMsg type, Player const *source=nullptr)
void EventPlayerLoggedOut(Player *player)
virtual WorldSafeLocsEntry const * GetClosestGraveyard(Player *player)
void SendChatMessage(Creature *source, uint8 textId, WorldObject *target=nullptr)
BattlegroundPlayer const * GetBattlegroundPlayerData(ObjectGuid const &playerGuid) const
void RewardXPAtKill(Player *killer, Player *victim)
Team GetOtherTeam(Team team) const
static TeamId GetTeamIndexByTeamId(Team team)
void UpdateWorldState(int32 worldStateId, int32 value, bool hidden=false)
void SetStatus(BattlegroundStatus Status)
bool IsPlayerMercenaryInBattleground(ObjectGuid guid) const
virtual void StartingEventCloseDoors()
void BroadcastWorker(Do &_do)
virtual void EndBattleground(Team winner)
bool IsPlayerInBattleground(ObjectGuid guid) const
BattlegroundStartTimeIntervals StartDelayTimes[BG_STARTING_EVENT_COUNT]
uint32 m_LastPlayerPositionBroadcast
void SendBroadcastText(uint32 id, ChatMsg msgType, WorldObject const *target=nullptr)
BattlegroundScore const * GetBattlegroundScore(Player *player) const
void AddPlayerPosition(WorldPackets::Battleground::BattlegroundPlayerPosition const &position)
bool DelObject(uint32 type)
void PlaySoundToTeam(uint32 SoundID, Team team)
void RewardReputationToTeam(uint32 faction_id, uint32 Reputation, Team team)
BattlegroundPlayerMap const & GetPlayers() const
int32 GetStartDelayTime() const
BattlegroundScoreMap PlayerScores
virtual void StartingEventOpenDoors()
float GetStartMaxDist() const
bool isBattleground() const
std::vector< WorldPackets::Battleground::BattlegroundPlayerPosition > _playerPositions
virtual void AddPlayer(Player *player, BattlegroundQueueTypeId queueId)
BattlegroundStatus GetStatus() const
bool HasFreeSlots() const
virtual bool UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true)
uint32 GetPlayersCountByTeam(Team team) const
virtual void HandleAreaTrigger(Player *, uint32, bool)
void _ProcessOfflineQueue()
uint32 GetAlivePlayersCountByTeam(Team team) const
void RemoveFromBGFreeSlotQueue()
void TeleportPlayerToExploitLocation(Player *player)
void _ProcessProgress(uint32 diff)
uint32 GetFreeSlotsForTeam(Team team) const
virtual bool PreUpdateImpl(uint32)
Pre-update hook.
uint32 GetScriptId() const
virtual void CheckWinConditions()
void EventPlayerLoggedIn(Player *player)
void _CheckSafePositions(uint32 diff)
void _ProcessJoin(uint32 diff)
BattlegroundBracketId GetBracketId() const
std::unordered_set< uint32 > const * _pvpStatIds
Team GetPlayerTeam(ObjectGuid guid) const
bool RemoveObjectFromWorld(uint32 type)
uint32 GetBonusHonorFromKill(uint32 kills) const
void UpdatePvpStat(Player *player, uint32 pvpStatId, uint32 value)
uint32 GetMaxLevel() const
uint32 GetElapsedTime() const
void CastSpellOnTeam(uint32 SpellID, Team team)
void SetBracket(PVPDifficultyEntry const *bracketEntry)
uint32 GetPlayersSize() const
void SetBgRaid(Team team, Group *bg_raid)
void SetStartDelayTime(int Time)
virtual void BuildPvPLogDataPacket(WorldPackets::Battleground::PVPMatchStatistics &pvpLogData) const
virtual void RemovePlayerAtLeave(ObjectGuid guid, bool Transport, bool SendPacket)
GameObject * GetBGObject(uint32 type, bool logError=true)
uint32 GetMinPlayers() const
void _ProcessLeave(uint32 diff)
BattlegroundStatus m_Status
uint32 StartMessageIds[BG_STARTING_EVENT_COUNT]
void SetHomePosition(float x, float y, float z, float o)
static Creature * CreateCreature(uint32 entry, Map *map, Position const &pos, uint32 vehId=0)
void SetRespawnDelay(uint32 delay)
Class used to access individual fields of database query result.
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
bool AddMember(Player *player)
void ChangeLeader(ObjectGuid guid)
void SetBattlegroundGroup(Battleground *bg)
bool IsMember(ObjectGuid guid) const
bool Create(Player *leader)
void StartCountdown(CountdownTimerType timerType, Seconds duration, Optional< time_t > startTime={ })
GameObject * GetGameObject(ObjectGuid const &guid)
Creature * GetCreature(ObjectGuid const &guid)
LowType GetCounter() const
static ObjectGuid const Empty
std::string ToString() const
static ObjectGuid GetGUID(Object const *o)
void SetClientControl(Unit *target, bool allowMove)
void SetBGTeam(Team team)
void SetPlayerFlagEx(PlayerFlagsEx flags)
bool HasPlayerFlagEx(PlayerFlagsEx flags) const
void SetBattlegroundId(uint32 val, BattlegroundTypeId bgTypeId, BattlegroundQueueTypeId queueId)
void SendDirectMessage(WorldPacket const *data) const
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, TeleportToOptions options=TELE_TO_NONE, Optional< uint32 > instanceId={})
static void OfflineResurrect(ObjectGuid const &guid, CharacterDatabaseTransaction trans)
void RemovePlayerFlagEx(PlayerFlagsEx flags)
void SpawnCorpseBones(bool triggerSave=true)
Group * GetOriginalGroup() const
uint32 GetBattlegroundQueueJoinTime(BattlegroundQueueTypeId bgQueueTypeId) const
bool IsMercenaryForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const
bool IsAtGroupRewardDistance(WorldObject const *pRewardSource) const
void DestroyConjuredItems(bool update)
void UnsummonPetTemporaryIfAny()
void RemoveBattlegroundQueueId(BattlegroundQueueTypeId val)
bool GetRandomWinner() const
void UpdateCriteria(CriteriaType type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, WorldObject *ref=nullptr)
void RemovePet(Pet *pet, PetSaveMode mode, bool returnreagent=false)
bool TeleportToBGEntryPoint()
uint32 GetBattlegroundQueueIndex(BattlegroundQueueTypeId bgQueueTypeId) const
bool RewardHonor(Unit *victim, uint32 groupsize, int32 honor=-1, bool pvptoken=false)
Team GetEffectiveTeam() const
void FailCriteria(CriteriaFailEvent condition, int32 failAsset)
void ResummonPetTemporaryUnSummonedIfAny()
void SetBattlegroundOrBattlefieldRaid(Group *group, int8 subgroup=-1)
ReputationMgr & GetReputationMgr()
void RemoveArenaEnchantments(EnchantmentSlot slot)
void SetRandomWinner(bool isWinner)
void ResurrectPlayer(float restore_percent, bool applySickness=false)
void setUInt8(const uint8 index, const uint8 value)
void setBool(const uint8 index, const bool value)
void setUInt32(const uint8 index, const uint32 value)
void setUInt64(const uint8 index, const uint64 value)
bool ModifyReputation(FactionEntry const *factionEntry, int32 standing, bool spillOverOnly=false, bool noSpillover=false)
bool HasAttribute(SpellAttr0 attribute) const
TempSummon * SummonPassenger(uint32 entry, Position const &pos, TempSummonType summonType, SummonPropertiesEntry const *properties=nullptr, Milliseconds duration=0ms, Unit *summoner=nullptr, uint32 spellId=0, uint32 vehId=0)
Temporarily summons a creature as passenger on this transport.
Utility class to enable range for loop syntax for multimap.equal_range uses.
void RemoveAurasByType(AuraType auraType, std::function< bool(AuraApplication const *)> const &check, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void CombatStop(bool includingCast=false, bool mutualPvP=true, bool(*unitFilter)(Unit const *otherUnit)=nullptr)
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
void AtEndOfEncounter(EncounterType type)
bool HasAuraType(AuraType auraType) const
int32 GetTotalAuraModifier(AuraType auraType) const
void RemoveAurasWithInterruptFlags(InterruptFlags flag, SpellInfo const *source=nullptr)
int32 GetTotalAuraModifierByMiscValue(AuraType auraType, int32 misc_value) const
void SetUnitFlag(UnitFlags flags)
void CombatStopWithPets(bool includingCast=false)
constexpr uint32 GetMapId() const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
std::string const & GetName() const
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< BattlegroundPlayerPosition > FlagCarriers
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPackets::Duration< Seconds > Duration
Optional< PVPMatchStatistics > LogData
uint32 BattlemasterListID
WorldPackets::Duration< Seconds > Duration
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * GetRawPacket() const
@ CONFIG_BG_REWARD_LOSER_HONOR_LAST
@ CONFIG_BATTLEGROUND_INVITATION_TYPE
@ CONFIG_BG_REWARD_WINNER_HONOR_FIRST
@ CONFIG_BG_REWARD_LOSER_HONOR_FIRST
@ CONFIG_BG_REWARD_WINNER_HONOR_LAST
@ CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE
TC_GAME_API uint32 GetId(std::string_view username)
TC_GAME_API void TriggerForMap(uint32 gameEventId, Map *map, WorldObject *source=nullptr, WorldObject *target=nullptr)
TC_GAME_API void TriggerForPlayer(uint32 gameEventId, Player *source)
SystemTimePoint GetSystemTime()
Current chrono system_clock time point.
TC_GAME_API GameObject * GetGameObject(WorldObject const &u, ObjectGuid const &guid)
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
auto MapGetValuePtr(M &map, typename M::key_type const &key)
uint32 hk_honor_at_level(uint8 level, float multiplier=1.0f)
std::string ToString(Type &&val, Params &&... params)
constexpr std::size_t size()
BattlegroundQueueTypeId queueTypeId
uint16 BattlemasterListId
uint8 GetMinLevel() const
BattlemasterListEntry const * BattlemasterEntry
uint16 GetMaxPlayersPerTeam() const
WorldSafeLocsEntry const * StartLocation[PVP_TEAMS_COUNT]
uint16 GetMinPlayersPerTeam() const
uint8 GetMaxLevel() const
std::array< int16, 16 > MapID
BattlegroundBracketId GetBracketId() const
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr void GetPosition(float &x, float &y) const
constexpr float GetExactDistSq(float x, float y, float z) const
constexpr float GetOrientation() const
constexpr float GetPositionZ() const
static QuaternionData fromEulerAnglesZYX(float Z, float Y, float X)
std::vector< PVPMatchPlayerStatistics > Statistics
std::array< int8, 2 > PlayerCount