Files
TCPlayerbotCore/src/server/game/BattleGrounds/Zones/BattleGroundSA.h
T

385 lines
10 KiB
C++
Raw Normal View History

2009-01-05 14:53:33 -06:00
/*
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
2009-10-17 15:51:44 -07:00
2009-01-05 14:53:33 -06:00
#ifndef __BATTLEGROUNDSA_H
#define __BATTLEGROUNDSA_H
2009-10-17 15:51:44 -07:00
2009-01-05 14:53:33 -06:00
class BattleGround;
2009-10-17 15:51:44 -07:00
2009-01-05 14:53:33 -06:00
class BattleGroundSAScore : public BattleGroundScore
{
public:
2010-02-14 19:13:14 -07:00
BattleGroundSAScore(): demolishers_destroyed(0), gates_destroyed(0) {};
2009-01-05 14:53:33 -06:00
virtual ~BattleGroundSAScore() {};
2010-04-07 17:24:07 +02:00
uint8 demolishers_destroyed;
uint8 gates_destroyed;
2010-02-14 19:13:14 -07:00
};
2010-05-31 23:01:47 +02:00
#define BG_SA_FLAG_AMOUNT 3
#define BG_SA_DEMOLISHER_AMOUNT 4
2010-02-14 19:13:14 -07:00
enum BG_SA_Status
{
BG_SA_NOTSTARTED = 0,
BG_SA_WARMUP,
BG_SA_ROUND_ONE,
BG_SA_SECOND_WARMUP,
BG_SA_ROUND_TWO,
BG_SA_BONUS_ROUND
};
enum BG_SA_GateState
{
BG_SA_GATE_OK = 1,
BG_SA_GATE_DAMAGED = 2,
BG_SA_GATE_DESTROYED = 3
};
enum BG_SA_Timers
{
BG_SA_BOAT_START = 60000,
BG_SA_WARMUPLENGTH = 120000,
BG_SA_ROUNDLENGTH = 600000
};
enum BG_SA_WorldStates
{
BG_SA_TIMER_MINS = 3559,
BG_SA_TIMER_SEC_TENS = 3560,
BG_SA_TIMER_SEC_DECS = 3561,
BG_SA_ALLY_ATTACKS = 4352,
BG_SA_HORDE_ATTACKS = 4353,
2010-04-07 18:09:10 +02:00
2010-02-14 19:13:14 -07:00
BG_SA_PURPLE_GATEWS = 3614,
BG_SA_RED_GATEWS = 3617,
BG_SA_BLUE_GATEWS = 3620,
BG_SA_GREEN_GATEWS = 3623,
BG_SA_YELLOW_GATEWS = 3638,
BG_SA_ANCIENT_GATEWS = 3849,
2010-04-07 18:09:10 +02:00
2010-02-14 19:13:14 -07:00
BG_SA_LEFT_GY_ALLIANCE = 3635,
BG_SA_RIGHT_GY_ALLIANCE = 3636,
BG_SA_CENTER_GY_ALLIANCE = 3637,
BG_SA_RIGHT_ATT_TOKEN_ALL = 3627,
BG_SA_LEFT_ATT_TOKEN_ALL = 3626,
BG_SA_LEFT_ATT_TOKEN_HRD = 3629,
BG_SA_RIGHT_ATT_TOKEN_HRD = 3628,
BG_SA_HORDE_DEFENCE_TOKEN = 3631,
BG_SA_ALLIANCE_DEFENCE_TOKEN = 3630,
BG_SA_RIGHT_GY_HORDE = 3632,
BG_SA_LEFT_GY_HORDE = 3633,
BG_SA_CENTER_GY_HORDE = 3634,
BG_SA_BONUS_TIMER = 0xdf3,
BG_SA_ENABLE_TIMER = 3564,
};
enum BG_SA_NPCs
{
BG_SA_GUN_1 = 0,
BG_SA_GUN_2,
BG_SA_GUN_3,
BG_SA_GUN_4,
BG_SA_GUN_5,
BG_SA_GUN_6,
BG_SA_GUN_7,
BG_SA_GUN_8,
BG_SA_GUN_9,
BG_SA_GUN_10,
BG_SA_DEMOLISHER_1,
BG_SA_DEMOLISHER_2,
BG_SA_DEMOLISHER_3,
BG_SA_DEMOLISHER_4,
BG_SA_NPC_SPARKLIGHT,
BG_SA_NPC_RIGSPARK,
BG_SA_MAXNPC
};
2010-04-07 18:09:10 +02:00
const uint32 BG_SA_NpcEntries[BG_SA_MAXNPC] =
2010-02-14 19:13:14 -07:00
{
27894,
27894,
27894,
27894,
27894,
27894,
27894,
27894,
27894,
27894,
//4 beach demolishers
28781,
28781,
28781,
28781,
//Fizzle Sparklight, or whatever his name was
29260,
29262,
};
2010-05-31 23:01:47 +02:00
const float BG_SA_NpcSpawnlocs[BG_SA_MAXNPC + BG_SA_DEMOLISHER_AMOUNT][4] =
2010-02-14 19:13:14 -07:00
{
//Cannons
2010-04-07 18:09:10 +02:00
{ 1436.429f, 110.05f, 41.407f, 5.4f },
2010-02-14 19:13:14 -07:00
{ 1404.9023f, 84.758f, 41.183f, 5.46f },
2010-04-07 18:09:10 +02:00
{ 1068.693f, -86.951f, 93.81f, 0.02f },
2010-02-14 19:13:14 -07:00
{ 1068.83f, -127.56f, 96.45f, 0.0912f },
2010-04-07 18:09:10 +02:00
{ 1422.115f, -196.433f, 42.1825f, 1.0222f },
2010-02-14 19:13:14 -07:00
{ 1454.887f, -220.454f, 41.956f, 0.9627f },
2010-04-07 18:09:10 +02:00
{ 1232.345f, -187.517f, 66.945f, 0.45f },
2010-02-14 19:13:14 -07:00
{ 1249.634f, -224.189f, 66.72f, 0.635f },
2010-04-07 18:09:10 +02:00
{ 1236.213f, 92.287f, 64.965f, 5.751f },
2010-02-14 19:13:14 -07:00
{ 1215.11f, 57.772f, 64.739f, 5.78f } ,
//Demolishers
{ 1611.597656,-117.270073,8.719355,2.513274},
{ 1575.562500,-158.421875,5.024450,2.129302},
{ 1618.047729,61.424641,7.248210,3.979351},
{ 1575.103149,98.873344,2.830360,3.752458},
//Npcs
{ 1348.644165, -298.786469, 31.080130, 1.710423},
{ 1358.191040, 195.527786, 31.018187, 4.171337},
2010-05-31 23:01:47 +02:00
//Demolishers2
{ 1371.055786, -317.071136, 35.007359, 1.947460},
{ 1424.034912, -260.195190, 31.084425, 2.820013},
{ 1353.139893, 223.745438, 35.265411, 4.343684},
{ 1404.809570, 197.027237, 32.046032, 3.605401},
2010-02-14 19:13:14 -07:00
};
enum BG_SA_Objects
{
BG_SA_GREEN_GATE = 0,
BG_SA_YELLOW_GATE,
BG_SA_BLUE_GATE,
BG_SA_RED_GATE,
BG_SA_PURPLE_GATE,
BG_SA_ANCIENT_GATE,
BG_SA_TITAN_RELIC,
BG_SA_BOAT_ONE,
BG_SA_BOAT_TWO,
BG_SA_SIGIL_1,
BG_SA_SIGIL_2,
BG_SA_SIGIL_3,
BG_SA_SIGIL_4,
BG_SA_SIGIL_5,
BG_SA_CENTRAL_FLAGPOLE,
BG_SA_RIGHT_FLAGPOLE,
BG_SA_LEFT_FLAGPOLE,
BG_SA_CENTRAL_FLAG,
BG_SA_RIGHT_FLAG,
BG_SA_LEFT_FLAG,
BG_SA_MAXOBJ
};
2010-04-07 18:09:10 +02:00
const float BG_SA_ObjSpawnlocs[BG_SA_MAXOBJ][4] =
2010-02-14 19:13:14 -07:00
{
{ 1411.57f, 108.163f, 28.692f, 5.441f },
{ 1055.452f, -108.1f, 82.134f, 0.034f },
{ 1431.3413f, -219.437f, 30.893f, 0.9736f },
{ 1227.667f, -212.555f, 55.372f, 0.5023f },
{ 1214.681f, 81.21f, 53.413f, 5.745f },
{ 878.555f, -108.2f, 117.845f, 0.0f },
2010-02-14 19:13:14 -07:00
{ 836.5f, -108.8f, 120.219f, 0.0f },
//Ships
{ 2679.696777, -826.891235, 3.712860, 5.78367f}, //rot2 1 rot3 0.0002
{ 2574.003662, 981.261475, 2.603424, 0.807696},
//Sigils
{ 1414.054f, 106.72f, 41.442f, 5.441f },
{ 1060.63f, -107.8f, 94.7f, 0.034f },
{ 1433.383f, -216.4f, 43.642f, 0.9736f },
{ 1230.75f, -210.724f, 67.611f, 0.5023f },
{ 1217.8f, 79.532f, 66.58f, 5.745f },
//Flagpoles
{ 1215.114258,-65.711861,70.084267,-3.124123},
{1338.863892,-153.336533,30.895121,-2.530723},
{1309.124268,9.410645,30.893402,-1.623156},
//Flags
{ 1215.108032,-65.715767,70.084267,-3.124123},
{ 1338.859253,-153.327316,30.895077,-2.530723},
{ 1309.192017,9.416233,30.893402,1.518436},
};
/* Ships:
* 193182 - ally
* 193183 - horde
* 193184 - horde
* 193185 - ally
* Banners:
* 191308 - left one,
* 191306 - right one,
* 191310 - central,
* Ally ones, substract 1
* to get horde ones.
*/
2010-05-31 23:01:47 +02:00
const uint32 BG_SA_ObjEntries[BG_SA_MAXOBJ + BG_SA_FLAG_AMOUNT] =
2010-02-14 19:13:14 -07:00
{
190722,
190727,
190724,
190726,
190723,
192549,
192834,
193182,
193185,
2010-04-07 18:09:10 +02:00
192687,
192685,
192689,
192690,
2010-02-14 19:13:14 -07:00
192691,
191311,
191311,
191311,
191310,
191306,
2010-04-07 18:09:10 +02:00
191308,
2010-05-31 23:01:47 +02:00
191309,
191305,
191307,
2010-02-14 19:13:14 -07:00
};
const uint32 BG_SA_Factions[2] =
{
1732,
1735,
};
enum BG_SA_Graveyards
{
BG_SA_BEACH_GY = 0,
BG_SA_DEFENDER_LAST_GY,
BG_SA_RIGHT_CAPTURABLE_GY,
BG_SA_LEFT_CAPTURABLE_GY,
BG_SA_CENTRAL_CAPTURABLE_GY,
BG_SA_MAX_GY
};
const uint32 BG_SA_GYEntries[BG_SA_MAX_GY] =
{
1350,
1349,
1347,
1346,
1348,
};
const float BG_SA_GYOrientation[BG_SA_MAX_GY] =
{
6.202f,
1.926f, //right capturable GY
3.917f, //left capturable GY
3.104f, //center, capturable
6.148f, //defender last GY
};
struct BG_SA_RoundScore
{
TeamId winner;
uint32 time;
2009-01-05 14:53:33 -06:00
};
2009-10-17 15:51:44 -07:00
2009-01-05 14:53:33 -06:00
class BattleGroundSA : public BattleGround
{
friend class BattleGroundMgr;
2009-10-17 15:51:44 -07:00
2009-01-05 14:53:33 -06:00
public:
BattleGroundSA();
~BattleGroundSA();
2009-01-21 16:18:57 -06:00
void Update(uint32 diff);
2009-10-17 15:51:44 -07:00
2009-01-05 14:53:33 -06:00
/* inherited from BattlegroundClass */
virtual void AddPlayer(Player *plr);
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
2010-04-07 17:24:07 +02:00
virtual bool SetupBattleGround();
virtual void Reset();
virtual void FillInitialWorldStates(WorldPacket& data);
2010-06-01 23:55:09 +02:00
virtual void EventPlayerDamagedGO(Player* plr, GameObject* go, uint8 hitType, uint32 destroyedEvent);
2010-04-07 17:24:07 +02:00
virtual void HandleKillUnit(Creature* unit, Player* killer);
virtual WorldSafeLocsEntry const* GetClosestGraveYard(Player* player);
virtual void EventPlayerClickedOnFlag(Player *Source, GameObject* target_obj);
virtual void EventPlayerUsedGO(Player* Source, GameObject* object);
2010-06-01 23:55:09 +02:00
uint32 GetGateIDFromDestroyEventID(uint32 id)
{
uint32 i = 0;
switch(id)
{
case 19046: i = BG_SA_GREEN_GATE; break; //Green gate destroyed
case 19045: i = BG_SA_BLUE_GATE; break; //blue gate
case 19047: i = BG_SA_RED_GATE; break; //red gate
case 19048: i = BG_SA_PURPLE_GATE; break; //purple gate
case 19049: i = BG_SA_YELLOW_GATE; break; //yellow gate
case 19837: i = BG_SA_ANCIENT_GATE; break; //ancient gate
}
return i;
}
uint32 GetWorldStateFromGateID(uint32 id)
{
uint32 uws = 0;
switch(id)
{
case BG_SA_GREEN_GATE: uws = BG_SA_GREEN_GATEWS; break;
case BG_SA_YELLOW_GATE: uws = BG_SA_YELLOW_GATEWS; break;
case BG_SA_BLUE_GATE: uws = BG_SA_BLUE_GATEWS; break;
case BG_SA_RED_GATE: uws = BG_SA_RED_GATEWS; break;
case BG_SA_PURPLE_GATE: uws = BG_SA_PURPLE_GATEWS; break;
case BG_SA_ANCIENT_GATE: uws = BG_SA_ANCIENT_GATEWS; break;
}
return uws;
}
2010-03-02 19:44:54 -06:00
void EndBattleGround(uint32 winner);
2009-01-05 14:53:33 -06:00
void RemovePlayer(Player *plr,uint64 guid);
void HandleAreaTrigger(Player *Source, uint32 Trigger);
2010-02-14 19:13:14 -07:00
2009-10-17 15:51:44 -07:00
2009-01-05 14:53:33 -06:00
/* Scorekeeping */
void UpdatePlayerScore(Player *Source, uint32 type, uint32 value, bool doAddHonor = true);
2009-10-17 15:51:44 -07:00
2009-01-05 14:53:33 -06:00
private:
2010-04-07 17:24:07 +02:00
bool ResetObjs();
void StartShips();
void TeleportPlayers();
void OverrideGunFaction();
2010-05-31 23:01:47 +02:00
void DemolisherStartState(bool start);
2010-06-01 23:55:09 +02:00
void DestroyGate(Player* pl, GameObject* /*go*/, uint32 destroyedEvent);
2010-04-07 17:24:07 +02:00
void SendTime();
2010-05-31 23:01:47 +02:00
void CaptureGraveyard(BG_SA_Graveyards i, Player *Source);
2010-04-07 17:24:07 +02:00
void ToggleTimer();
2010-05-31 23:01:47 +02:00
void UpdateDemolisherSpawns();
2010-04-07 17:24:07 +02:00
TeamId attackers;
uint32 TotalTime;
2010-06-03 16:24:10 +02:00
uint32 BG_SA_ENDROUNDTIME;
2010-04-07 17:24:07 +02:00
bool ShipsStarted;
BG_SA_GateState GateStatus[6];
BG_SA_Status status;
TeamId GraveyardStatus[BG_SA_MAX_GY];
2010-04-07 18:09:10 +02:00
BG_SA_RoundScore RoundScores[2];
2010-04-07 17:24:07 +02:00
bool TimerEnabled;
2010-06-01 23:55:09 +02:00
uint32 UpdateWaitTimer;//5secs before starting the 1min countdown for second round
bool SignaledRoundTwo;
bool SignaledRoundTwoHalfMin;
bool InitSecondRound;
2009-01-05 14:53:33 -06:00
};
#endif