95 int points = team_points[team];
180 uint8 buff = std::rand() % 2;
246 uint8 obj = node * 8 + type + teamIndex;
259 uint8 obj = node * 8 + type + teamIndex;
286 const uint8 plusArray[] = { 0, 2, 3, 0, 1 };
298 uint8 ally = 0, horde = 0;
321 const uint8 plusArray[] = { 0, 2, 3, 0, 1 };
331 uint8 ally = 0, horde = 0;
345 SF_LOG_ERROR(
"bg.battleground",
"Failed to spawn spirit guide! point: %u, team: %u, ", node, team);
350 uint8 capturedNodes = 0;
355 if (capturedNodes >= 5)
357 if (capturedNodes >= 4)
521 uint8 ally = 0, horde = 0;
530 else if (horde > ally)
541 if (!
AddObject(
BG_AB_OBJECT_BANNER_NEUTRAL + 8 * i,
BG_AB_OBJECTID_NODE_BANNER_0 + i,
BG_AB_NodePositions[i][0],
BG_AB_NodePositions[i][1],
BG_AB_NodePositions[i][2],
BG_AB_NodePositions[i][3], 0, 0, std::sin(
BG_AB_NodePositions[i][3] / 2), std::cos(
BG_AB_NodePositions[i][3] / 2),
RESPAWN_ONE_DAY)
542 || !
AddObject(
BG_AB_OBJECT_BANNER_CONT_A + 8 * i,
BG_AB_OBJECTID_BANNER_CONT_A,
BG_AB_NodePositions[i][0],
BG_AB_NodePositions[i][1],
BG_AB_NodePositions[i][2],
BG_AB_NodePositions[i][3], 0, 0, std::sin(
BG_AB_NodePositions[i][3] / 2), std::cos(
BG_AB_NodePositions[i][3] / 2),
RESPAWN_ONE_DAY)
543 || !
AddObject(
BG_AB_OBJECT_BANNER_CONT_H + 8 * i,
BG_AB_OBJECTID_BANNER_CONT_H,
BG_AB_NodePositions[i][0],
BG_AB_NodePositions[i][1],
BG_AB_NodePositions[i][2],
BG_AB_NodePositions[i][3], 0, 0, std::sin(
BG_AB_NodePositions[i][3] / 2), std::cos(
BG_AB_NodePositions[i][3] / 2),
RESPAWN_ONE_DAY)
544 || !
AddObject(
BG_AB_OBJECT_BANNER_ALLY + 8 * i,
BG_AB_OBJECTID_BANNER_A,
BG_AB_NodePositions[i][0],
BG_AB_NodePositions[i][1],
BG_AB_NodePositions[i][2],
BG_AB_NodePositions[i][3], 0, 0, std::sin(
BG_AB_NodePositions[i][3] / 2), std::cos(
BG_AB_NodePositions[i][3] / 2),
RESPAWN_ONE_DAY)
545 || !
AddObject(
BG_AB_OBJECT_BANNER_HORDE + 8 * i,
BG_AB_OBJECTID_BANNER_H,
BG_AB_NodePositions[i][0],
BG_AB_NodePositions[i][1],
BG_AB_NodePositions[i][2],
BG_AB_NodePositions[i][3], 0, 0, std::sin(
BG_AB_NodePositions[i][3] / 2), std::cos(
BG_AB_NodePositions[i][3] / 2),
RESPAWN_ONE_DAY)
546 || !
AddObject(
BG_AB_OBJECT_AURA_ALLY + 8 * i,
BG_AB_OBJECTID_AURA_A,
BG_AB_NodePositions[i][0],
BG_AB_NodePositions[i][1],
BG_AB_NodePositions[i][2],
BG_AB_NodePositions[i][3], 0, 0, std::sin(
BG_AB_NodePositions[i][3] / 2), std::cos(
BG_AB_NodePositions[i][3] / 2),
RESPAWN_ONE_DAY)
547 || !
AddObject(
BG_AB_OBJECT_AURA_HORDE + 8 * i,
BG_AB_OBJECTID_AURA_H,
BG_AB_NodePositions[i][0],
BG_AB_NodePositions[i][1],
BG_AB_NodePositions[i][2],
BG_AB_NodePositions[i][3], 0, 0, std::sin(
BG_AB_NodePositions[i][3] / 2), std::cos(
BG_AB_NodePositions[i][3] / 2),
RESPAWN_ONE_DAY)
548 || !
AddObject(
BG_AB_OBJECT_AURA_CONTESTED + 8 * i,
BG_AB_OBJECTID_AURA_C,
BG_AB_NodePositions[i][0],
BG_AB_NodePositions[i][1],
BG_AB_NodePositions[i][2],
BG_AB_NodePositions[i][3], 0, 0, std::sin(
BG_AB_NodePositions[i][3] / 2), std::cos(
BG_AB_NodePositions[i][3] / 2),
RESPAWN_ONE_DAY)
551 SF_LOG_ERROR(
"sql.sql",
"BatteGroundAB: Failed to spawn some object Battleground not created!");
555 if (!
AddObject(
BG_AB_OBJECT_GATE_A,
BG_AB_OBJECTID_GATE_A,
BG_AB_DoorPositions[0][0],
BG_AB_DoorPositions[0][1],
BG_AB_DoorPositions[0][2],
BG_AB_DoorPositions[0][3],
BG_AB_DoorPositions[0][4],
BG_AB_DoorPositions[0][5],
BG_AB_DoorPositions[0][6],
BG_AB_DoorPositions[0][7],
RESPAWN_IMMEDIATELY)
556 || !
AddObject(
BG_AB_OBJECT_GATE_H,
BG_AB_OBJECTID_GATE_H,
BG_AB_DoorPositions[1][0],
BG_AB_DoorPositions[1][1],
BG_AB_DoorPositions[1][2],
BG_AB_DoorPositions[1][3],
BG_AB_DoorPositions[1][4],
BG_AB_DoorPositions[1][5],
BG_AB_DoorPositions[1][6],
BG_AB_DoorPositions[1][7],
RESPAWN_IMMEDIATELY)
559 SF_LOG_ERROR(
"sql.sql",
"BatteGroundAB: Failed to spawn door object Battleground not created!");
565 if (!
AddObject(
BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i,
Buff_Entries[0],
BG_AB_BuffPositions[i][0],
BG_AB_BuffPositions[i][1],
BG_AB_BuffPositions[i][2],
BG_AB_BuffPositions[i][3], 0, 0, std::sin(
BG_AB_BuffPositions[i][3] / 2), std::cos(
BG_AB_BuffPositions[i][3] / 2),
RESPAWN_ONE_DAY)
566 || !
AddObject(
BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i + 1,
Buff_Entries[1],
BG_AB_BuffPositions[i][0],
BG_AB_BuffPositions[i][1],
BG_AB_BuffPositions[i][2],
BG_AB_BuffPositions[i][3], 0, 0, std::sin(
BG_AB_BuffPositions[i][3] / 2), std::cos(
BG_AB_BuffPositions[i][3] / 2),
RESPAWN_ONE_DAY)
567 || !
AddObject(
BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i + 2,
Buff_Entries[2],
BG_AB_BuffPositions[i][0],
BG_AB_BuffPositions[i][1],
BG_AB_BuffPositions[i][2],
BG_AB_BuffPositions[i][3], 0, 0, std::sin(
BG_AB_BuffPositions[i][3] / 2), std::cos(
BG_AB_BuffPositions[i][3] / 2),
RESPAWN_ONE_DAY)
569 SF_LOG_ERROR(
"sql.sql",
"BatteGroundAB: Failed to spawn buff object!");
627 std::vector<uint8> nodes;
629 if (
m_Nodes[i] == teamIndex + 3)
639 float mindist = 999999.0f;
640 for (
uint8 i = 0; i < nodes.size(); ++i)
645 float dist = (entry->
x - plr_x) * (entry->
x - plr_x) + (entry->
y - plr_y) * (entry->
y - plr_y);
@ BG_CRITERIA_CHECK_RESILIENT_VICTORY
uint32 const Buff_Entries[3]
@ SPELL_HONORABLE_DEFENDER_25Y
@ SPELL_AB_QUEST_REWARD_4_BASES
@ SPELL_AB_QUEST_REWARD_5_BASES
@ BG_STARTING_EVENT_THIRD
@ BG_STARTING_EVENT_SECOND
@ BG_STARTING_EVENT_FIRST
@ BG_STARTING_EVENT_FOURTH
#define BG_AB_ABBGWeekendReputationTicks
const uint32 BG_AB_TickPoints[6]
@ BG_AB_OBJECT_BANNER_HORDE
@ BG_AB_OBJECT_BANNER_ALLY
@ BG_AB_OBJECT_AURA_HORDE
@ BG_AB_OBJECT_BANNER_NEUTRAL
@ BG_AB_OBJECT_BANNER_CONT_H
@ BG_AB_OBJECT_SPEEDBUFF_STABLES
@ BG_AB_OBJECT_BANNER_CONT_A
@ BG_AB_OBJECT_AURA_CONTESTED
#define AB_EVENT_START_BATTLE
const float BG_AB_BuffPositions[BG_AB_DYNAMIC_NODES_COUNT][4]
@ BG_AB_NODE_TYPE_OCCUPIED
@ BG_AB_NODE_STATUS_ALLY_CONTESTED
@ BG_AB_NODE_STATUS_ALLY_OCCUPIED
@ BG_AB_NODE_STATUS_HORDE_OCCUPIED
@ BG_AB_NODE_STATUS_HORDE_CONTESTED
@ BG_AB_NODE_TYPE_NEUTRAL
@ BG_AB_NODE_TYPE_CONTESTED
const uint32 BG_AB_TickIntervals[6]
const float BG_AB_DoorPositions[2][8]
const uint32 BG_AB_GraveyardIds[BG_AB_ALL_NODES_COUNT]
@ BG_AB_OBJECTID_BANNER_CONT_A
@ BG_AB_OBJECTID_BANNER_A
@ BG_AB_OBJECTID_BANNER_H
@ BG_AB_OBJECTID_BANNER_CONT_H
@ BG_AB_DYNAMIC_NODES_COUNT
const float BG_AB_SpiritGuidePos[BG_AB_ALL_NODES_COUNT][4]
#define BG_AB_NotABBGWeekendReputationTicks
#define BG_AB_NotABBGWeekendHonorTicks
const uint32 BG_AB_OP_NODEICONS[5]
@ BG_AB_OBJECTID_NODE_BANNER_0
@ BG_AB_FLAG_CAPTURING_TIME
#define BG_AB_ABBGWeekendHonorTicks
@ AB_OBJECTIVE_ASSAULT_BASE
@ AB_OBJECTIVE_DEFEND_BASE
const uint32 BG_AB_OP_NODESTATES[5]
@ BG_AB_OP_RESOURCES_ALLY
@ BG_AB_OP_OCCUPIED_BASES_HORDE
@ BG_AB_OP_RESOURCES_HORDE
@ BG_AB_OP_RESOURCES_WARNING
@ BG_AB_OP_OCCUPIED_BASES_ALLY
@ BG_AB_WARNING_NEAR_VICTORY_SCORE
const float BG_AB_NodePositions[BG_AB_DYNAMIC_NODES_COUNT][4]
@ BG_AB_SOUND_NODE_CAPTURED_HORDE
@ BG_AB_SOUND_NODE_ASSAULTED_ALLIANCE
@ BG_AB_SOUND_NEAR_VICTORY
@ BG_AB_SOUND_NODE_ASSAULTED_HORDE
@ BG_AB_SOUND_NODE_CLAIMED
@ BG_AB_SOUND_NODE_CAPTURED_ALLIANCE
@ ACHIEVEMENT_TIMED_TYPE_EVENT
@ ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE
DBCStorage< WorldSafeLocsEntry > sWorldSafeLocsStore(WorldSafeLocsEntryfmt)
@ LANG_BG_AB_START_HALF_MINUTE
@ LANG_BG_AB_NODE_ASSAULTED
@ LANG_BG_AB_START_ONE_MINUTE
@ LANG_BG_AB_NODE_BLACKSMITH
@ LANG_BG_AB_H_NEAR_VICTORY
@ LANG_BG_AB_NODE_DEFENDED
@ LANG_BG_AB_NODE_STABLES
@ LANG_BG_AB_NODE_LUMBER_MILL
@ LANG_BG_AB_START_TWO_MINUTES
@ LANG_BG_AB_NODE_GOLD_MINE
@ LANG_BG_AB_NODE_CLAIMED
@ LANG_BG_AB_A_NEAR_VICTORY
#define SF_LOG_ERROR(filterType__,...)
@ CHAT_MSG_BG_SYSTEM_ALLIANCE
@ CHAT_MSG_BG_SYSTEM_NEUTRAL
@ CHAT_MSG_BG_SYSTEM_HORDE
@ AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT
bool SetupBattleground() OVERRIDE
void RemovePlayer(Player *player, uint64 guid, uint32 team) OVERRIDE
void _NodeOccupied(uint8 node, Team team)
int32 _GetNodeNameId(uint8 node)
void UpdatePlayerScore(Player *Source, uint32 type, uint32 value, bool doAddHonor=true) OVERRIDE
bool m_TeamScores500Disadvantage[BG_TEAMS_COUNT]
bool CheckAchievementCriteriaMeet(uint32, Player const *, Unit const *=NULL, uint32=0) OVERRIDE
void _SendNodeUpdate(uint8 node)
bool IsAllNodesControlledByTeam(uint32 team) const OVERRIDE
void FillInitialWorldStates(WorldStateBuilder &builder) OVERRIDE
uint32 m_NodeTimers[BG_AB_DYNAMIC_NODES_COUNT]
uint32 m_lastTick[BG_TEAMS_COUNT]
uint8 m_Nodes[BG_AB_DYNAMIC_NODES_COUNT]
void AddPlayer(Player *player) OVERRIDE
bool m_IsInformedNearVictory
void _CreateBanner(uint8 node, uint8 type, uint8 teamIndex, bool delay)
void StartingEventCloseDoors() OVERRIDE
void _DelBanner(uint8 node, uint8 type, uint8 teamIndex)
uint32 m_ReputationScoreTics[BG_TEAMS_COUNT]
void StartingEventOpenDoors() OVERRIDE
uint8 m_prevNodes[BG_AB_DYNAMIC_NODES_COUNT]
void PostUpdateImpl(uint32 diff) OVERRIDE
Post-update hook.
uint32 m_HonorScoreTics[BG_TEAMS_COUNT]
void _NodeDeOccupied(uint8 node)
void HandleAreaTrigger(Player *Source, uint32 Trigger) OVERRIDE
BG_AB_BannerTimer m_BannerTimers[BG_AB_DYNAMIC_NODES_COUNT]
WorldSafeLocsEntry const * GetClosestGraveYard(Player *player) OVERRIDE
void EventPlayerClickedOnFlag(Player *source, GameObject *target_obj) OVERRIDE
void EndBattleground(uint32 winner)
uint32 GetPrematureWinner() OVERRIDE
virtual void AddPlayer(Player *player)
BattlegroundTypeId GetTypeID(bool GetRandom=false) const
void EndBattleground(uint32 winner)
void CastSpellOnTeam(uint32 SpellID, uint32 TeamID)
static TeamId GetTeamIndexByTeamId(uint32 Team)
void DoorOpen(uint32 type)
bool DelCreature(uint32 type)
void SpawnBGObject(uint32 type, uint32 respawntime)
void PlaySoundToAll(uint32 SoundID)
BattlegroundMap * GetBgMap() const
void DoorClose(uint32 type)
void RelocateDeadPlayers(uint64 queueIndex)
Relocate all players in ReviveQueue to the closest graveyard.
void UpdateWorldState(uint32 Field, uint32 Value)
BattlegroundScoreMap PlayerScores
void RewardHonorToTeam(uint32 Honor, uint32 TeamID)
bool AddSpiritGuide(uint32 type, float x, float y, float z, float o, uint32 team)
BattlegroundStatus GetStatus() const
virtual bool CheckAchievementCriteriaMeet(uint32, Player const *, Unit const *=NULL, uint32=0)
virtual void HandleAreaTrigger(Player *, uint32)
void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry)
void SendMessage2ToAll(int32 entry, ChatMsg type, Player const *source, int32 strId1=0, int32 strId2=0)
uint32 GetBonusHonorFromKill(uint32 kills) const
void RewardReputationToTeam(uint32 faction_id, uint32 Reputation, uint32 TeamID)
virtual void UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true)
Creature * AddCreature(uint32 entry, uint32 type, uint32 teamval, float x, float y, float z, float o, uint32 respawntime=0)
void SendMessageToAll(int32 entry, ChatMsg type, Player const *source=NULL)
int32 m_TeamScores[BG_TEAMS_COUNT]
Creature * GetBGCreature(uint32 type)
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)
virtual uint32 GetPrematureWinner()
uint32 StartMessageIds[BG_STARTING_EVENT_COUNT]
GameObject * GetGameObject(uint64 guid)
void LeaveBattleground(bool teleportToEntryPoint=true)
WorldSession * GetSession() const
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, Unit *unit=NULL)
void setFaction(uint32 faction)
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
void RemoveAurasWithInterruptFlags(uint32 flag, uint32 except=0)
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true) const
void SendNotification(const char *format,...) ATTR_PRINTF(2
void AppendState(uint32 worldstate, uint32 value)
float GetPositionX() const
float GetPositionY() const