Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
OutdoorPvPTF.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "ScriptMgr.h"
7#include "OutdoorPvPTF.h"
8#include "OutdoorPvPMgr.h"
9#include "OutdoorPvP.h"
10#include "WorldPacket.h"
11#include "Player.h"
12#include "ObjectMgr.h"
13#include "Language.h"
14#include "World.h"
15
31
37
44
68
94
101
103{
105 {
107 uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
110 return true;
111 }
112 return false;
113}
114
120
122{
123 bool changed = OutdoorPvP::Update(diff);
124
125 if (changed)
126 {
128 {
130 m_IsLocked = true;
135 }
137 {
139 m_IsLocked = true;
144 }
145 else
146 {
149 }
152 }
153 if (m_IsLocked)
154 {
155 // lock timer is down, release lock
156 if (m_LockTimer < diff)
157 {
160 m_IsLocked = false;
165 }
166 else
167 {
168 // worldstateui update timer is down, update ui with new time data
169 if (m_LockTimerUpdate < diff)
170 {
172 uint32 minutes_left = m_LockTimer / 60000;
173 hours_left = minutes_left / 60;
174 minutes_left -= hours_left * 60;
175 second_digit = minutes_left % 10;
176 first_digit = minutes_left / 10;
177
181 } else m_LockTimerUpdate -= diff;
182 m_LockTimer -= diff;
183 }
184 }
185 return changed;
186}
187
189{
190 if (player->GetTeam() == ALLIANCE)
191 {
193 player->CastSpell(player, TF_CAPTURE_BUFF, true);
194 }
195 else
196 {
198 player->CastSpell(player, TF_CAPTURE_BUFF, true);
199 }
201}
202
204{
205 // remove buffs
208}
209
214
219
224
229
231{
232 return m_IsLocked;
233}
234
236{
239
240 m_IsLocked = false;
243 hours_left = 6;
244 second_digit = 0;
245 first_digit = 0;
246
247 // add the zones affected by the pvp buff
248 for (uint8 i = 0; i < OutdoorPvPTFBuffZonesNum; ++i)
250
256
257 return true;
258}
259
261{
262 // can update even in locked state if gathers the controlling faction
263 bool canupdate = ((((OutdoorPvPTF*)m_PvP)->GetAllianceTowersControlled() > 0) && m_activePlayers[0].size() > m_activePlayers[1].size()) ||
264 ((((OutdoorPvPTF*)m_PvP)->GetHordeTowersControlled() > 0) && m_activePlayers[0].size() < m_activePlayers[1].size());
265 // if gathers the other faction, then only update if the pvp is unlocked
266 canupdate = canupdate || !((OutdoorPvPTF*)m_PvP)->IsLocked();
267 return canupdate && OPvPCapturePoint::Update(diff);
268}
269
271{
272 // if changing from controlling alliance to horde
274 {
275 if (uint32 alliance_towers = ((OutdoorPvPTF*)m_PvP)->GetAllianceTowersControlled())
276 ((OutdoorPvPTF*)m_PvP)->SetAllianceTowersControlled(--alliance_towers);
277 sWorld->SendZoneText(OutdoorPvPTFBuffZones[0], sObjectMgr->GetSkyFireStringForDBCLocale(LANG_OPVP_TF_LOSE_A));
278 }
279 // if changing from controlling horde to alliance
281 {
282 if (uint32 horde_towers = ((OutdoorPvPTF*)m_PvP)->GetHordeTowersControlled())
283 ((OutdoorPvPTF*)m_PvP)->SetHordeTowersControlled(--horde_towers);
284 sWorld->SendZoneText(OutdoorPvPTFBuffZones[0], sObjectMgr->GetSkyFireStringForDBCLocale(LANG_OPVP_TF_LOSE_H));
285 }
286
287 uint32 artkit = 21;
288
289 switch (m_State)
290 {
292 {
294 artkit = 2;
295 uint32 alliance_towers = ((OutdoorPvPTF*)m_PvP)->GetAllianceTowersControlled();
296 if (alliance_towers < TF_TOWER_NUM)
297 ((OutdoorPvPTF*)m_PvP)->SetAllianceTowersControlled(++alliance_towers);
298
299 sWorld->SendZoneText(OutdoorPvPTFBuffZones[0], sObjectMgr->GetSkyFireStringForDBCLocale(LANG_OPVP_TF_CAPTURE_A));
300
301 for (PlayerSet::iterator itr = m_activePlayers[0].begin(); itr != m_activePlayers[0].end(); ++itr)
302 if (Player* player = ObjectAccessor::FindPlayer(*itr))
303 player->AreaExploredOrEventHappens(TF_ALLY_QUEST);
304 break;
305 }
307 {
309 artkit = 1;
310 uint32 horde_towers = ((OutdoorPvPTF*)m_PvP)->GetHordeTowersControlled();
311 if (horde_towers < TF_TOWER_NUM)
312 ((OutdoorPvPTF*)m_PvP)->SetHordeTowersControlled(++horde_towers);
313
314 sWorld->SendZoneText(OutdoorPvPTFBuffZones[0], sObjectMgr->GetSkyFireStringForDBCLocale(LANG_OPVP_TF_CAPTURE_H));
315
316 for (PlayerSet::iterator itr = m_activePlayers[1].begin(); itr != m_activePlayers[1].end(); ++itr)
317 if (Player* player = ObjectAccessor::FindPlayer(*itr))
318 player->AreaExploredOrEventHappens(TF_HORDE_QUEST);
319 break;
320 }
327 break;
328 }
329
331 if (flag)
332 flag->SetGoArtKit(artkit);
333
335}
336
338{
339 // send this too, sometimes the slider disappears, dunno why :(
341 // send these updates to only the ones in this objective
342 uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
344 // send this too, sometimes it resets :S
346}
347
349{
350 public:
352
354 {
355 return new OutdoorPvPTF();
356 }
357};
358
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ LANG_OPVP_TF_CAPTURE_H
Definition Language.h:1185
@ LANG_OPVP_TF_CAPTURE_A
Definition Language.h:1186
@ LANG_OPVP_TF_LOSE_A
Definition Language.h:1188
@ LANG_OPVP_TF_LOSE_H
Definition Language.h:1187
#define sObjectMgr
Definition ObjectMgr.h:1617
@ OUTDOOR_PVP_TF
Definition OutdoorPvP.h:20
@ OBJECTIVESTATE_HORDE
Definition OutdoorPvP.h:31
@ OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE
Definition OutdoorPvP.h:33
@ OBJECTIVESTATE_ALLIANCE
Definition OutdoorPvP.h:30
@ OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE
Definition OutdoorPvP.h:32
@ OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE
Definition OutdoorPvP.h:35
@ OBJECTIVESTATE_NEUTRAL
Definition OutdoorPvP.h:29
@ OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE
Definition OutdoorPvP.h:34
void AddSC_outdoorpvp_tf()
const go_type TFCapturePoints[TF_TOWER_NUM]
const uint32 TF_HORDE_QUEST
const uint32 TF_ALLY_QUEST
@ TF_UI_TOWER_SLIDER_DISPLAY
@ TF_UI_TOWER_SLIDER_POS
@ TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT
@ TF_UI_LOCKED_DISPLAY_ALLIANCE
@ TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT
@ TF_UI_LOCKED_DISPLAY_NEUTRAL
@ TF_UI_TOWER_SLIDER_N
@ TF_UI_LOCKED_DISPLAY_HORDE
@ TF_UI_TOWER_COUNT_H
@ TF_UI_TOWERS_CONTROLLED_DISPLAY
@ TF_UI_TOWER_COUNT_A
@ TF_UI_LOCKED_TIME_HOURS
@ TF_TOWERSTATE_H
@ TF_TOWERSTATE_N
@ TF_TOWERSTATE_A
const uint32 OutdoorPvPTFBuffZones[OutdoorPvPTFBuffZonesNum]
OutdoorPvPTF_TowerType
@ TF_TOWER_SE
@ TF_TOWER_N
@ TF_TOWER_NE
@ TF_TOWER_NW
@ TF_TOWER_NUM
@ TF_TOWER_S
#define TF_CAPTURE_BUFF
const uint32 TF_LOCK_TIME
const uint32 TF_LOCK_TIME_UPDATE
const tf_tower_world_state TFTowerWorldStates[TF_TOWER_NUM]
const uint8 OutdoorPvPTFBuffZonesNum
@ TEAM_ALLIANCE
@ TEAM_HORDE
@ ALLIANCE
void SetGoArtKit(uint8 artkit)
static T * Find(uint64 guid)
OPvPCapturePoint(OutdoorPvP *pvp)
bool SetCapturePointData(uint32 entry, uint32 map, float x, float y, float z, float o=0, float rotation0=0, float rotation1=0, float rotation2=0, float rotation3=0)
ObjectiveStates m_OldState
Definition OutdoorPvP.h:158
OutdoorPvP * m_PvP
Definition OutdoorPvP.h:165
virtual bool Update(uint32 diff)
ObjectiveStates m_State
Definition OutdoorPvP.h:159
uint32 m_neutralValuePct
Definition OutdoorPvP.h:162
PlayerSet m_activePlayers[2]
Definition OutdoorPvP.h:143
void SendUpdateWorldState(uint32 field, uint32 value)
virtual void HandlePlayerLeave(Player *player)
virtual bool HandlePlayerEnter(Player *player)
uint32 m_capturePointGUID
Definition OutdoorPvP.h:121
bool Update(uint32 diff) OVERRIDE
bool HandlePlayerEnter(Player *player) OVERRIDE
void SendChangePhase() OVERRIDE
void ChangeState() OVERRIDE
void HandlePlayerLeave(Player *player) OVERRIDE
OutdoorPvPTF_TowerType m_TowerType
void FillInitialWorldStates(WorldStateBuilder &builder) OVERRIDE
OPvPCapturePointTF(OutdoorPvP *pvp, OutdoorPvPTF_TowerType type)
static Player * FindPlayer(uint64)
OutdoorPvP * GetOutdoorPvP() const OVERRIDE
virtual void HandlePlayerEnterZone(Player *player, uint32 zone)
OPvPCapturePointMap m_capturePoints
Definition OutdoorPvP.h:238
uint32 m_TypeId
Definition OutdoorPvP.h:242
virtual bool Update(uint32 diff)
void TeamApplyBuff(TeamId team, uint32 spellId, uint32 spellId2=0)
void RegisterZone(uint32 zoneid)
virtual void HandlePlayerLeaveZone(Player *player, uint32 zone)
void TeamCastSpell(TeamId team, int32 spellId)
void SendUpdateWorldState(uint32 field, uint32 value)
void AddCapturePoint(OPvPCapturePoint *cp)
Definition OutdoorPvP.h:256
OutdoorPvPScript(const char *name)
void SetHordeTowersControlled(uint32 count)
uint32 GetHordeTowersControlled() const
uint32 GetAllianceTowersControlled() const
uint32 m_HordeTowersControlled
bool IsLocked() const
void FillInitialWorldStates(WorldStateBuilder &builder) OVERRIDE
bool SetupOutdoorPvP() OVERRIDE
uint32 m_AllianceTowersControlled
uint32 second_digit
void SendRemoveWorldStates(Player *player) OVERRIDE
uint32 m_LockTimer
bool Update(uint32 diff) OVERRIDE
uint32 m_LockTimerUpdate
void HandlePlayerLeaveZone(Player *player, uint32 zone) OVERRIDE
void HandlePlayerEnterZone(Player *player, uint32 zone) OVERRIDE
uint32 hours_left
uint32 first_digit
void SetAllianceTowersControlled(uint32 count)
uint32 GetTeam() const
Definition Player.h:2527
void SendUpdateWorldState(uint32 Field, uint32 Value)
Definition Player.cpp:9734
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 RemoveAurasDueToSpell(uint32 spellId, uint64 casterGUID=0, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void AppendState(uint32 worldstate, uint32 value)
#define sWorld
Definition World.h:910