71 group->RemoveMember(player->
GetGUID());
78 itr->second->HandlePlayerLeave(player);
109 bool objective_changed =
false;
123 time_t now = time(NULL);
124 for (
int team = 0; team < 2; team++)
126 if (itr->second <= now)
130 for (
int team = 0; team < 2; team++)
132 if (itr->second <= now)
141 if (itr->second->Update(diff))
142 objective_changed =
true;
156 return objective_changed;
161 for (
uint8 team = 0; team < 2; ++team)
162 for (GuidSet::const_iterator itr =
m_players[team].begin(); itr !=
m_players[team].end(); ++itr)
199 for (GuidSet::const_iterator itr =
m_players[team].begin(); itr !=
m_players[team].end(); ++itr)
250 SF_LOG_ERROR(
"bg.battlefield",
"Battlefield::InitStalker: could not spawn Stalker (Creature entry %u), zone messeges will be un-available", entry);
324 player->GetSession()->SendPacket(&data);
373 player->CastSpell(player,
uint32(spellId),
true);
379 player->RemoveAuraFromStack(
uint32(-spellId));
386 for (GuidSet::const_iterator itr =
m_players[team].begin(); itr !=
m_players[team].end(); ++itr)
388 player->GetSession()->SendPacket(&data);
396 player->GetSession()->SendPacket(&data);
404 player->GetSession()->SendPacket(&data);
426 player->SendUpdateWorldState(field, value);
467 if (!group->IsFull())
477 if (group->IsMember(guid))
527 SF_LOG_ERROR(
"bg.battlefield",
"Battlefield::GetGraveyardById Id:%u not existed",
id);
530 SF_LOG_ERROR(
"bg.battlefield",
"Battlefield::GetGraveyardById Id:%u cant be found",
id);
547 if (dist < maxdist || maxdist < 0)
621 SF_LOG_ERROR(
"bg.battlefield",
"BfGraveyard::SetSpirit: Invalid Spirit.");
711 closestGrave =
m_Bf->GetClosestGraveYard(player);
747 SF_LOG_ERROR(
"bg.battlefield",
"Battlefield::SpawnCreature: Can't create creature entry: %u map not found", entry);
754 SF_LOG_ERROR(
"bg.battlefield",
"Battlefield::SpawnCreature: Can't create creature entry: %u", entry);
764 SF_LOG_ERROR(
"bg.battlefield",
"Battlefield::SpawnCreature: entry %u does not exist.", entry);
788 if (!go->
Create(
sObjectMgr->GenerateLowGuid(
HIGHGUID_GAMEOBJECT), entry, map, x, y, z, o, 0, 0, 0, 0, 100,
GOState::GO_STATE_READY))
790 SF_LOG_ERROR(
"bg.battlefield",
"Battlefield::SpawnGameObject: Gameobject template %u not found in database! Battlefield not created!", entry);
791 SF_LOG_ERROR(
"bg.battlefield",
"Battlefield::SpawnGameObject: Cannot create gameobject template %u! Battlefield not created!", entry);
810 return m_Map->GetCreature(GUID);
817 return m_Map->GetGameObject(GUID);
917 capturePoint->SetRespawnTime(0);
918 capturePoint->Delete();
934 float radius = capturePoint->GetGOInfo()->capturePoint.radius;
936 for (
uint8 team = 0; team < 2; ++team)
942 if (!capturePoint->IsWithinDistInMap(player, radius) || !player->IsOutdoorPvPActive())
952 std::list<Player*> players;
955 capturePoint->VisitNearbyWorldObject(radius, searcher);
957 for (std::list<Player*>::iterator itr = players.begin(); itr != players.end(); ++itr)
958 if ((*itr)->IsOutdoorPvPActive())
959 if (
m_activePlayers[(*itr)->GetTeamId()].insert((*itr)->GetGUID()).second)
965 if (G3D::fuzzyEq(fact_diff, 0.0f))
977 if (fact_diff < -maxDiff)
978 fact_diff = -maxDiff;
988 if (fact_diff > maxDiff)
1015 else if (oldValue *
m_value <= 0)
1021 else if (Challenger ==
HORDE)
1035 if (G3D::fuzzyNe(
m_value, oldValue))
1051 for (
uint8 team = 0; team < 2; ++team)
1054 player->SendUpdateWorldState(field, value);
1075 player->KilledMonsterCredit(
id, guid);
@ BATTLEFIELD_OBJECTIVE_UPDATE_INTERVAL
@ NEUTRAL_ALLIANCE_CHALLENGE
@ NEUTRAL_HORDE_CHALLENGE
@ ALLIANCE_HORDE_CHALLENGE
@ HORDE_ALLIANCE_CHALLENGE
@ SPELL_RESURRECTION_VISUAL
@ SPELL_WAITING_FOR_RESURRECT
DBCStorage< WorldSafeLocsEntry > sWorldSafeLocsStore(WorldSafeLocsEntryfmt)
#define SF_LOG_DEBUG(filterType__,...)
#define SF_LOG_ERROR(filterType__,...)
uint64 MAKE_NEW_GUID(uint32 l, uint32 e, uint32 h)
@ GAMEOBJECT_TYPE_CAPTURE_POINT
@ CHAT_MSG_BG_SYSTEM_NEUTRAL
@ UNIT_FLAG_NON_ATTACKABLE
@ UNIT_FLAG_NOT_SELECTABLE
GuidSet m_PlayersInQueue[BG_TEAMS_COUNT]
void BroadcastPacketToQueue(WorldPacket &data) const
GraveyardVect m_GraveyardList
void ShowNpc(Creature *creature, bool aggressive)
void BroadcastPacketToZone(WorldPacket &data) const
void DoPlaySoundToAll(uint32 SoundID)
GuidSet m_players[BG_TEAMS_COUNT]
PlayerTimerMap m_InvitedPlayers[BG_TEAMS_COUNT]
void SendWarningToPlayer(Player *player, uint32 entry)
virtual ~Battlefield()
Destructor.
virtual void SendInitWorldStatesToAll()=0
Send all worldstate data to all player in zone.
void EndBattle(bool endByTimer)
virtual void OnBattleEnd(bool)
Called at the end of battle.
void RemovePlayerFromResurrectQueue(uint64 player_guid)
bool IsWarTime() const
Return true if battle is start, false if battle is not started.
Group * GetGroupPlayer(uint64 guid, TeamId TeamId)
Return battlefield group where player is.
void InvitePlayersInQueueToWar()
Invite all players in queue to join battle on battle start.
void BroadcastPacketToWar(WorldPacket &data) const
virtual void SendRemoveWorldStates(Player *)
uint32 m_StartGroupingTimer
uint32 m_LastResurectTimer
WorldSafeLocsEntry const * GetClosestGraveYard(Player *player)
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().
GameObject * GetGameObject(uint64 GUID)
void InvitePlayerToQueue(Player *player)
TeamId GetOtherTeam(TeamId team)
void RegisterZone(uint32 zoneid)
void SetDefenderTeam(TeamId team)
void InvitePlayerToWar(Player *player)
GuidSet m_PlayersInWar[BG_TEAMS_COUNT]
uint32 m_uiKickAfkPlayersTimer
void PlayerAcceptInviteToWar(Player *player)
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.
void SendAreaSpiritHealerQueryOpcode(Player *player, uint64 guid)
void InvitePlayersInZoneToWar()
Invite all players in zone to join battle on battle start.
GameObject * SpawnGameObject(uint32 entry, float x, float y, float z, float o)
void HideNpc(Creature *creature)
TeamId GetAttackerTeam() const
void InitStalker(uint32 entry, float x, float y, float z, float o)
bool AddOrSetPlayerToCorrectBfGroup(Player *player)
Force player to join a battlefield group.
TeamId GetDefenderTeam() const
void TeamCastSpell(TeamId team, int32 spellId)
GuidSet m_Groups[BG_TEAMS_COUNT]
virtual void AddPlayerToResurrectQueue(uint64 npc_guid, uint64 player_guid)
virtual void OnPlayerLeaveZone(Player *)
Called when a player leave battlefield zone.
Creature * GetCreature(uint64 GUID)
void PlayerAcceptInviteToQueue(Player *player)
BfCapturePointMap m_capturePoints
uint32 m_uiKickDontAcceptTimer
void SendWarningToAllInZone(uint32 entry)
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.
bool HasPlayer(Player *player) const
void AskToLeaveQueue(Player *player)
PlayerTimerMap m_PlayersWillBeKick[BG_TEAMS_COUNT]
Creature * SpawnCreature(uint32 entry, float x, float y, float z, float o, TeamId team)
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.
void KickPlayerFromBattlefield(uint64 guid)
Kick player from battlefield and teleport him to kick-point location.
void SendUpdateWorldState(uint32 field, uint32 value)
Update data of a worldstate to all players present in zone.
void HandlePlayerEnterZone(Player *player, uint32 zone)
Called when player (player) enter in zone.
virtual GuidSet::iterator HandlePlayerLeave(Player *player)
virtual bool HandlePlayerEnter(Player *player)
virtual bool Update(uint32 diff)
BattlefieldObjectiveStates m_OldState
bool SetCapturePointData(GameObject *capturePoint)
virtual void ChangeTeam(TeamId)
void SendObjectiveComplete(uint32 id, uint64 guid)
bool IsInsideObjective(Player *player) const
GameObject * GetCapturePointGo()
virtual void SendChangePhase()
void SendUpdateWorldState(uint32 field, uint32 value)
uint32 m_capturePointEntry
uint64 m_capturePointGUID
GuidSet m_activePlayers[2]
BattlefieldObjectiveStates m_State
void RemovePlayer(uint64 player_guid)
void AddPlayer(uint64 player_guid)
void GiveControlTo(TeamId team)
void SetSpirit(Creature *spirit, TeamId team)
uint32 GetGraveyardId() const
void Initialize(TeamId startcontrol, uint32 gy)
void RelocateDeadPlayers()
float GetDistance(Player *player)
void WriteGuidBytes(const ObjectGuid &guid, Offsets... offsets)
void WriteGuidMask(const ObjectGuid &guid, Offsets... offsets)
void WriteBits(T value, size_t bits)
void SetHomePosition(float x, float y, float z, float o)
void Respawn(bool force=false)
void SetReactState(ReactStates st)
bool Create(uint32 guidlow, Map *map, uint32 Entry, uint32 vehId, uint32 team, float x, float y, float z, float ang, const CreatureData *data=NULL)
GameObjectTemplate const * GetGOInfo() const
bool Create(uint32 guidlow, uint32 name_id, Map *map, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit=0)
bool SetPhased(uint32 id, bool update, bool apply) OVERRIDE
void SetBattlefieldGroup(Battlefield *bf)
bool AddMember(Player *player)
uint8 GetMemberGroup(uint64 guid) const
bool IsMember(uint64 guid) const
bool RemoveMember(uint64 guid, const RemoveMethod &method=GROUP_REMOVEMETHOD_DEFAULT, uint64 kicker=0, const char *reason=NULL)
bool Create(Player *leader)
uint32 GetGUIDLow() const
void SetFlag(uint16 index, uint32 newFlag)
void RemoveFlag(uint16 index, uint32 oldFlag)
void SendUpdateWorldState(uint32 Field, uint32 Value)
WorldSession * GetSession() const
Battleground * GetBattleground() const
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0)
void SetBattlegroundOrBattlefieldRaid(Group *group, int8 subgroup=-1)
void ResurrectPlayer(float restore_percent, bool applySickness=false)
void CombatStop(bool includingCast=false)
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 SetPhaseMask(uint32 newPhaseMask, bool update) override
void SetSpeed(UnitMoveType mtype, float rate, bool forced=false)
std::set< uint32 > const & GetPhases() const
void setActive(bool isActiveObject)
float GetDistance2d(WorldObject const *obj) const
void SendBfLeaveMessage(uint64 guid, BFLeaveReason reason=BF_LEAVE_REASON_EXITED)
void SendBfEntered(uint64 guid)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
void SendBfQueueInviteResponse(uint64 guid, uint32 zoneId, bool canQueue=true, bool full=false)
void SendBfInvitePlayerToWar(uint64 guid, uint32 zoneId, uint32 time)
void SendBfInvitePlayerToQueue(uint64 guid)
@ SMSG_AREA_SPIRIT_HEALER_TIME
struct GameObjectTemplate::@046065176235271051340241126110345143267101032070::@155125343144143170177322306114162367114353163373 capturePoint
float GetOrientation() const