Files
CypherCore/Source/Game/BattleGrounds/Zones/EyeofStorm.cs
T

804 lines
36 KiB
C#

// Copyright (c) CypherCore <http://github.com/CypherCore> All rights reserved.
// Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information.
using Framework.Constants;
using Game.Entities;
using Game.Entities.GameObjectType;
using Game.Maps;
using Game.Spells;
using System;
using System.Collections.Generic;
namespace Game.BattleGrounds.Zones.EyeofStorm
{
class BgEyeofStorm : Battleground
{
uint[] m_HonorScoreTics = new uint[SharedConst.PvpTeamsCount];
uint m_FlagCapturedBgObjectType; // type that should be despawned when flag is captured
TimeTracker _pointsTimer;
uint m_HonorTics;
Dictionary<uint, BgEyeOfStormControlZoneHandler> _controlZoneHandlers = new();
List<ObjectGuid> _doorGUIDs = new();
ObjectGuid _flagGUID;
// Focused/Brutal Assault
bool _assaultEnabled;
TimeTracker _flagAssaultTimer;
byte _assaultStackCount;
public BgEyeofStorm(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate)
{
m_HonorScoreTics = [0, 0];
m_FlagCapturedBgObjectType = 0;
m_HonorTics = 0;
_pointsTimer = new(MiscConst.PointsTickTime);
_assaultEnabled = false;
_assaultStackCount = 0;
_flagAssaultTimer = new(MiscConst.FlagAssaultTimer);
}
public override void PostUpdateImpl(uint diff)
{
if (GetStatus() == BattlegroundStatus.InProgress)
{
_pointsTimer.Update(diff);
if (_pointsTimer.Passed())
{
_pointsTimer.Reset(MiscConst.PointsTickTime);
byte baseCountAlliance = GetControlledBaseCount(BattleGroundTeamId.Alliance);
byte baseCountHorde = GetControlledBaseCount(BattleGroundTeamId.Horde);
if (baseCountAlliance > 0)
AddPoints(Team.Alliance, MiscConst.TickPoints[baseCountAlliance - 1]);
if (baseCountHorde > 0)
AddPoints(Team.Horde, MiscConst.TickPoints[baseCountHorde - 1]);
}
if (_assaultEnabled)
{
_flagAssaultTimer.Update(diff);
if (_flagAssaultTimer.Passed())
{
_flagAssaultTimer.Reset(MiscConst.FlagAssaultTimer);
_assaultStackCount++;
// update assault debuff stacks
DoForFlagKeepers(player => ApplyAssaultDebuffToPlayer(player));
}
}
}
}
public override void StartingEventOpenDoors()
{
foreach (ObjectGuid door in _doorGUIDs)
{
GameObject gameObject = GetBgMap().GetGameObject(door);
if (gameObject != null)
{
gameObject.UseDoorOrButton();
gameObject.DespawnOrUnsummon(TimeSpan.FromSeconds(3));
}
}
// Achievement: Flurry
TriggerGameEvent(MiscConst.EventStartBattle);
}
void AddPoints(Team Team, uint Points)
{
int team_index = GetTeamIndexByTeamId(Team);
m_TeamScores[team_index] += Points;
m_HonorScoreTics[team_index] += Points;
if (m_HonorScoreTics[team_index] >= m_HonorTics)
{
RewardHonorToTeam(GetBonusHonorFromKill(1), Team);
m_HonorScoreTics[team_index] -= m_HonorTics;
}
UpdateTeamScore(team_index);
}
byte GetControlledBaseCount(int teamId)
{
byte baseCount = 0;
foreach (var controlZoneHandler in _controlZoneHandlers)
{
uint point = controlZoneHandler.Value.GetPoint();
switch (teamId)
{
case BattleGroundTeamId.Alliance:
if (GetBgMap().GetWorldStateValue(MiscConst.m_PointsIconStruct[point].WorldStateAllianceControlledIndex) == 1)
baseCount++;
break;
case BattleGroundTeamId.Horde:
if (GetBgMap().GetWorldStateValue(MiscConst.m_PointsIconStruct[point].WorldStateHordeControlledIndex) == 1)
baseCount++;
break;
default:
break;
}
}
return baseCount;
}
void DoForFlagKeepers(Action<Player> action)
{
GameObject flag = GetBgMap().GetGameObject(_flagGUID);
if (flag != null)
{
Player carrier = Global.ObjAccessor.FindPlayer(flag.GetFlagCarrierGUID());
if (carrier != null)
action(carrier);
}
}
void ResetAssaultDebuff()
{
_assaultEnabled = false;
_assaultStackCount = 0;
_flagAssaultTimer.Reset(MiscConst.FlagAssaultTimer);
DoForFlagKeepers(RemoveAssaultDebuffFromPlayer);
}
void ApplyAssaultDebuffToPlayer(Player player)
{
if (_assaultStackCount == 0)
return;
uint spellId = MiscConst.SpellFocusedAssault;
if (_assaultStackCount >= MiscConst.FlagBrutalAssaultStackCount)
{
player.RemoveAurasDueToSpell(MiscConst.SpellFocusedAssault);
spellId = MiscConst.SpellBrutalAssault;
}
Aura aura = player.GetAura(spellId);
if (aura == null)
{
player.CastSpell(player, spellId, true);
aura = player.GetAura(spellId);
}
if (aura != null)
aura.SetStackAmount(_assaultStackCount);
}
void RemoveAssaultDebuffFromPlayer(Player player)
{
player.RemoveAurasDueToSpell(MiscConst.SpellFocusedAssault);
player.RemoveAurasDueToSpell(MiscConst.SpellBrutalAssault);
}
void UpdateTeamScore(int team)
{
uint score = GetTeamScore(team);
if (score >= ScoreIds.MaxTeamScore)
{
score = ScoreIds.MaxTeamScore;
if (team == BattleGroundTeamId.Alliance)
EndBattleground(Team.Alliance);
else
EndBattleground(Team.Horde);
}
if (team == BattleGroundTeamId.Alliance)
UpdateWorldState(WorldStateIds.AllianceResources, (int)score);
else
UpdateWorldState(WorldStateIds.HordeResources, (int)score);
}
public override void EndBattleground(Team winner)
{
// Win reward
if (winner == Team.Alliance)
RewardHonorToTeam(GetBonusHonorFromKill(1), Team.Alliance);
if (winner == Team.Horde)
RewardHonorToTeam(GetBonusHonorFromKill(1), Team.Horde);
// Complete map reward
RewardHonorToTeam(GetBonusHonorFromKill(1), Team.Alliance);
RewardHonorToTeam(GetBonusHonorFromKill(1), Team.Horde);
base.EndBattleground(winner);
}
void UpdatePointsCount(uint teamId)
{
if (teamId == BattleGroundTeamId.Alliance)
UpdateWorldState(WorldStateIds.AllianceBase, GetControlledBaseCount(BattleGroundTeamId.Alliance));
else
UpdateWorldState(WorldStateIds.HordeBase, GetControlledBaseCount(BattleGroundTeamId.Horde));
}
public override void OnGameObjectCreate(GameObject gameobject)
{
switch (gameobject.GetEntry())
{
case GameobjectIds.ADoorEyEntry:
case GameobjectIds.HDoorEyEntry:
_doorGUIDs.Add(gameobject.GetGUID());
break;
case GameobjectIds.Flag2EyEntry:
_flagGUID = gameobject.GetGUID();
break;
default:
break;
}
}
public override bool CanCaptureFlag(AreaTrigger areaTrigger, Player player)
{
if (areaTrigger.GetEntry() != MiscConst.AreatriggerCaptureFlag)
return false;
GameObject flag = GetBgMap().GetGameObject(_flagGUID);
if (flag != null)
{
if (flag.GetFlagCarrierGUID() != player.GetGUID())
return false;
}
GameObject controlzone = player.FindNearestGameObjectWithOptions(40.0f, new FindGameObjectOptions() { StringId = "bg_eye_of_the_storm_control_zone" });
if (controlzone != null)
{
uint point = _controlZoneHandlers[controlzone.GetEntry()].GetPoint();
switch (GetPlayerTeam(player.GetGUID()))
{
case Team.Alliance:
return GetBgMap().GetWorldStateValue(MiscConst.m_PointsIconStruct[point].WorldStateAllianceControlledIndex) == 1;
case Team.Horde:
return GetBgMap().GetWorldStateValue(MiscConst.m_PointsIconStruct[point].WorldStateHordeControlledIndex) == 1;
default:
return false;
}
}
return false;
}
public override void OnCaptureFlag(AreaTrigger areaTrigger, Player player)
{
if (areaTrigger.GetEntry() != MiscConst.AreatriggerCaptureFlag)
return;
uint baseCount = GetControlledBaseCount(GetTeamIndexByTeamId(GetPlayerTeam(player.GetGUID())));
GameObject gameObject = GetBgMap().GetGameObject(_flagGUID);
if (gameObject != null)
gameObject.HandleCustomTypeCommand(new SetNewFlagState(FlagState.Respawning, player));
Team team = GetPlayerTeam(player.GetGUID());
if (team == Team.Alliance)
{
SendBroadcastText(BroadcastTextIds.AllianceCapturedFlag, ChatMsg.BgSystemAlliance, player);
PlaySoundToAll(SoundIds.FlagCapturedAlliance);
}
else
{
SendBroadcastText(BroadcastTextIds.HordeCapturedFlag, ChatMsg.BgSystemHorde, player);
PlaySoundToAll(SoundIds.FlagCapturedHorde);
}
if (baseCount > 0)
AddPoints(team, MiscConst.FlagPoints[baseCount - 1]);
UpdateWorldState(WorldStateIds.NetherstormFlagStateHorde, (int)EYFlagState.OnBase);
UpdateWorldState(WorldStateIds.NetherstormFlagStateAlliance, (int)EYFlagState.OnBase);
UpdatePvpStat(player, MiscConst.PvpStatFlagCaptures, 1);
player.RemoveAurasDueToSpell(MiscConst.SpellNetherstormFlag);
player.RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags.PvPActive);
}
public override void OnFlagStateChange(GameObject flagInBase, FlagState oldValue, FlagState newValue, Player player)
{
switch (newValue)
{
case FlagState.InBase:
ResetAssaultDebuff();
break;
case FlagState.Dropped:
player.CastSpell(player, BattlegroundConst.SpellRecentlyDroppedNeutralFlag, true);
RemoveAssaultDebuffFromPlayer(player);
UpdateWorldState(WorldStateIds.NetherstormFlagStateHorde, (int)EYFlagState.WaitRespawn);
UpdateWorldState(WorldStateIds.NetherstormFlagStateAlliance, (int)EYFlagState.WaitRespawn);
if (GetPlayerTeam(player.GetGUID()) == Team.Alliance)
SendBroadcastText(BroadcastTextIds.FlagDropped, ChatMsg.BgSystemAlliance);
else
SendBroadcastText(BroadcastTextIds.FlagDropped, ChatMsg.BgSystemHorde);
break;
case FlagState.Taken:
if (GetPlayerTeam(player.GetGUID()) == Team.Alliance)
{
UpdateWorldState(WorldStateIds.NetherstormFlagStateAlliance, (int)EYFlagState.OnPlayer);
PlaySoundToAll(SoundIds.FlagPickedUpAlliance);
SendBroadcastText(BroadcastTextIds.TakenFlag, ChatMsg.BgSystemAlliance, player);
}
else
{
UpdateWorldState(WorldStateIds.NetherstormFlagStateHorde, (int)EYFlagState.OnPlayer);
PlaySoundToAll(SoundIds.FlagPickedUpHorde);
SendBroadcastText(BroadcastTextIds.TakenFlag, ChatMsg.BgSystemHorde, player);
}
ApplyAssaultDebuffToPlayer(player);
_assaultEnabled = true;
player.RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags.PvPActive);
break;
case FlagState.Respawning:
ResetAssaultDebuff();
break;
default:
break;
}
UpdateWorldState(WorldStateIds.NetherstormFlag, (int)newValue);
}
public override bool SetupBattleground()
{
UpdateWorldState(WorldStateIds.MaxResources, (int)ScoreIds.MaxTeamScore);
_controlZoneHandlers[GameobjectIds.FrTowerCapEyEntry] = new BgEyeOfStormControlZoneHandler(this, Points.FelReaver);
_controlZoneHandlers[GameobjectIds.BeTowerCapEyEntry] = new BgEyeOfStormControlZoneHandler(this, Points.BloodElf);
_controlZoneHandlers[GameobjectIds.DrTowerCapEyEntry] = new BgEyeOfStormControlZoneHandler(this, Points.DraeneiRuins);
_controlZoneHandlers[GameobjectIds.HuTowerCapEyEntry] = new BgEyeOfStormControlZoneHandler(this, Points.MageTower);
return true;
}
public override void Reset()
{
//call parent's class reset
base.Reset();
m_TeamScores[BattleGroundTeamId.Alliance] = 0;
m_TeamScores[BattleGroundTeamId.Horde] = 0;
m_HonorScoreTics = [0, 0];
m_FlagCapturedBgObjectType = 0;
bool isBGWeekend = Global.BattlegroundMgr.IsBGWeekend(GetTypeID());
m_HonorTics = isBGWeekend ? MiscConst.EYWeekendHonorTicks : MiscConst.NotEYWeekendHonorTicks;
}
public override void HandleKillPlayer(Player player, Player killer)
{
if (GetStatus() != BattlegroundStatus.InProgress)
return;
base.HandleKillPlayer(player, killer);
EventPlayerDroppedFlag(player);
}
public void EventTeamLostPoint(uint teamId, uint point, WorldObject controlZone)
{
if (teamId == BattleGroundTeamId.Alliance)
{
SendBroadcastText(MiscConst.m_LosingPointTypes[point].MessageIdAlliance, ChatMsg.BgSystemAlliance, controlZone);
UpdateWorldState(MiscConst.m_PointsIconStruct[point].WorldStateAllianceControlledIndex, 0);
}
else if (teamId == BattleGroundTeamId.Horde)
{
SendBroadcastText(MiscConst.m_LosingPointTypes[point].MessageIdHorde, ChatMsg.BgSystemHorde, controlZone);
UpdateWorldState(MiscConst.m_PointsIconStruct[point].WorldStateHordeControlledIndex, 0);
}
UpdateWorldState(MiscConst.m_PointsIconStruct[point].WorldStateControlIndex, 1);
UpdatePointsCount(teamId);
}
public void EventTeamCapturedPoint(uint teamId, uint point, WorldObject controlZone)
{
if (teamId == BattleGroundTeamId.Alliance)
{
SendBroadcastText(MiscConst.m_CapturingPointTypes[point].MessageIdAlliance, ChatMsg.BgSystemAlliance, controlZone);
UpdateWorldState(MiscConst.m_PointsIconStruct[point].WorldStateAllianceControlledIndex, 1);
}
else if (teamId == BattleGroundTeamId.Horde)
{
SendBroadcastText(MiscConst.m_CapturingPointTypes[point].MessageIdHorde, ChatMsg.BgSystemHorde, controlZone);
UpdateWorldState(MiscConst.m_PointsIconStruct[point].WorldStateHordeControlledIndex, 1);
}
UpdateWorldState(MiscConst.m_PointsIconStruct[point].WorldStateControlIndex, 0);
UpdatePointsCount(teamId);
}
public override WorldSafeLocsEntry GetExploitTeleportLocation(Team team)
{
return Global.ObjectMgr.GetWorldSafeLoc(team == Team.Alliance ? MiscConst.ExploitTeleportLocationAlliance : MiscConst.ExploitTeleportLocationHorde);
}
public override Team GetPrematureWinner()
{
if (GetTeamScore(BattleGroundTeamId.Alliance) > GetTeamScore(BattleGroundTeamId.Horde))
return Team.Alliance;
else if (GetTeamScore(BattleGroundTeamId.Horde) > GetTeamScore(BattleGroundTeamId.Alliance))
return Team.Horde;
return base.GetPrematureWinner();
}
public override void ProcessEvent(WorldObject target, uint eventId, WorldObject invoker)
{
base.ProcessEvent(target, eventId, invoker);
if (invoker != null)
{
GameObject gameobject = invoker.ToGameObject();
if (gameobject != null)
{
if (gameobject.GetGoType() == GameObjectTypes.ControlZone)
{
if (!_controlZoneHandlers.TryGetValue(gameobject.GetEntry(), out BgEyeOfStormControlZoneHandler handler))
return;
var controlzone = gameobject.GetGoInfo().ControlZone;
if (eventId == controlzone.NeutralEventAlliance)
handler.HandleNeutralEventAlliance(gameobject);
else if (eventId == controlzone.NeutralEventHorde)
handler.HandleNeutralEventHorde(gameobject);
else if (eventId == controlzone.ProgressEventAlliance)
handler.HandleProgressEventAlliance(gameobject);
else if (eventId == controlzone.ProgressEventHorde)
handler.HandleProgressEventHorde(gameobject);
}
}
}
}
void RemovePoint(Team team, uint Points = 1) { m_TeamScores[GetTeamIndexByTeamId(team)] -= Points; }
void SetTeamPoint(Team team, uint Points = 0) { m_TeamScores[GetTeamIndexByTeamId(team)] = Points; }
}
struct BgEyeOfStormPointIconsStruct
{
public BgEyeOfStormPointIconsStruct(uint worldStateControlIndex, int worldStateAllianceControlledIndex, int worldStateHordeControlledIndex, uint worldStateAllianceStatusBarIcon, uint worldStateHordeStatusBarIcon)
{
WorldStateControlIndex = worldStateControlIndex;
WorldStateAllianceControlledIndex = worldStateAllianceControlledIndex;
WorldStateHordeControlledIndex = worldStateHordeControlledIndex;
WorldStateAllianceStatusBarIcon = worldStateAllianceStatusBarIcon;
WorldStateHordeStatusBarIcon = worldStateHordeStatusBarIcon;
}
public uint WorldStateControlIndex;
public int WorldStateAllianceControlledIndex;
public int WorldStateHordeControlledIndex;
public uint WorldStateAllianceStatusBarIcon;
public uint WorldStateHordeStatusBarIcon;
}
struct BgEyeOfStormLosingPointStruct
{
public BgEyeOfStormLosingPointStruct(int _SpawnNeutralObjectType, int _DespawnObjectTypeAlliance, uint _MessageIdAlliance, int _DespawnObjectTypeHorde, uint _MessageIdHorde)
{
SpawnNeutralObjectType = _SpawnNeutralObjectType;
DespawnObjectTypeAlliance = _DespawnObjectTypeAlliance;
MessageIdAlliance = _MessageIdAlliance;
DespawnObjectTypeHorde = _DespawnObjectTypeHorde;
MessageIdHorde = _MessageIdHorde;
}
public int SpawnNeutralObjectType;
public int DespawnObjectTypeAlliance;
public uint MessageIdAlliance;
public int DespawnObjectTypeHorde;
public uint MessageIdHorde;
}
struct BgEyeOfStormCapturingPointStruct
{
public BgEyeOfStormCapturingPointStruct(int _DespawnNeutralObjectType, int _SpawnObjectTypeAlliance, uint _MessageIdAlliance, int _SpawnObjectTypeHorde, uint _MessageIdHorde, uint _GraveyardId)
{
DespawnNeutralObjectType = _DespawnNeutralObjectType;
SpawnObjectTypeAlliance = _SpawnObjectTypeAlliance;
MessageIdAlliance = _MessageIdAlliance;
SpawnObjectTypeHorde = _SpawnObjectTypeHorde;
MessageIdHorde = _MessageIdHorde;
GraveyardId = _GraveyardId;
}
public int DespawnNeutralObjectType;
public int SpawnObjectTypeAlliance;
public uint MessageIdAlliance;
public int SpawnObjectTypeHorde;
public uint MessageIdHorde;
public uint GraveyardId;
}
class BgEyeOfStormControlZoneHandler : ControlZoneHandler
{
BgEyeofStorm _battleground;
uint _point;
public BgEyeOfStormControlZoneHandler(BgEyeofStorm bg, uint point)
{
_battleground = bg;
_point = point;
}
public override void HandleProgressEventHorde(GameObject controlZone)
{
_battleground.EventTeamCapturedPoint(BattleGroundTeamId.Horde, _point, controlZone);
}
public override void HandleProgressEventAlliance(GameObject controlZone)
{
_battleground.EventTeamCapturedPoint(BattleGroundTeamId.Alliance, _point, controlZone);
}
public override void HandleNeutralEventHorde(GameObject controlZone)
{
_battleground.EventTeamLostPoint(BattleGroundTeamId.Horde, _point, controlZone);
}
public override void HandleNeutralEventAlliance(GameObject controlZone)
{
_battleground.EventTeamLostPoint(BattleGroundTeamId.Alliance, _point, controlZone);
}
public uint GetPoint() { return _point; }
}
#region Constants
struct MiscConst
{
public static TimeSpan PointsTickTime = TimeSpan.FromSeconds(2);
public static TimeSpan FlagAssaultTimer = TimeSpan.FromSeconds(30);
public static ushort FlagBrutalAssaultStackCount = 5;
public const uint EventStartBattle = 13180; // Achievement: Flurry
public const uint NotEYWeekendHonorTicks = 260;
public const uint EYWeekendHonorTicks = 160;
public const uint SpellNetherstormFlag = 34976;
// Focused/Brutal Assault
public const uint SpellFocusedAssault = 46392;
public const uint SpellBrutalAssault = 46393;
public const uint ExploitTeleportLocationAlliance = 3773;
public const uint ExploitTeleportLocationHorde = 3772;
public static byte[] TickPoints = { 1, 2, 5, 10 };
public static uint[] FlagPoints = { 75, 85, 100, 500 };
public const uint AreatriggerCaptureFlag = 33;
public const uint PvpStatFlagCaptures = 183;
public static BgEyeOfStormPointIconsStruct[] m_PointsIconStruct =
{
new BgEyeOfStormPointIconsStruct(WorldStateIds.FelReaverUncontrol, WorldStateIds.FelReaverAllianceControl, WorldStateIds.FelReaverHordeControl, WorldStateIds.FelReaverAllianceControlState, WorldStateIds.FelReaverHordeControlState),
new BgEyeOfStormPointIconsStruct(WorldStateIds.BloodElfUncontrol, WorldStateIds.BloodElfAllianceControl, WorldStateIds.BloodElfHordeControl, WorldStateIds.BloodElfAllianceControlState, WorldStateIds.BloodElfHordeControlState),
new BgEyeOfStormPointIconsStruct(WorldStateIds.DraeneiRuinsUncontrol, WorldStateIds.DraeneiRuinsAllianceControl, WorldStateIds.DraeneiRuinsHordeControl, WorldStateIds.DraeneiRuinsAllianceControlState, WorldStateIds.DraeneiRuinsHordeControlState),
new BgEyeOfStormPointIconsStruct(WorldStateIds.MageTowerUncontrol, WorldStateIds.MageTowerAllianceControl, WorldStateIds.MageTowerHordeControl, WorldStateIds.MageTowerAllianceControlState, WorldStateIds.MageTowerHordeControlState)
};
public static BgEyeOfStormLosingPointStruct[] m_LosingPointTypes =
{
new BgEyeOfStormLosingPointStruct(ObjectTypes.NBannerFelReaverCenter, ObjectTypes.ABannerFelReaverCenter, BroadcastTextIds.AllianceLostFelReaverRuins, ObjectTypes.HBannerFelReaverCenter, BroadcastTextIds.HordeLostFelReaverRuins),
new BgEyeOfStormLosingPointStruct(ObjectTypes.NBannerBloodElfCenter, ObjectTypes.ABannerBloodElfCenter, BroadcastTextIds.AllianceLostBloodElfTower, ObjectTypes.HBannerBloodElfCenter, BroadcastTextIds.HordeLostBloodElfTower),
new BgEyeOfStormLosingPointStruct(ObjectTypes.NBannerDraeneiRuinsCenter, ObjectTypes.ABannerDraeneiRuinsCenter, BroadcastTextIds.AllianceLostDraeneiRuins, ObjectTypes.HBannerDraeneiRuinsCenter, BroadcastTextIds.HordeLostDraeneiRuins),
new BgEyeOfStormLosingPointStruct(ObjectTypes.NBannerMageTowerCenter, ObjectTypes.ABannerMageTowerCenter, BroadcastTextIds.AllianceLostMageTower, ObjectTypes.HBannerMageTowerCenter, BroadcastTextIds.HordeLostMageTower)
};
public static BgEyeOfStormCapturingPointStruct[] m_CapturingPointTypes =
{
new BgEyeOfStormCapturingPointStruct(ObjectTypes.NBannerFelReaverCenter, ObjectTypes.ABannerFelReaverCenter, BroadcastTextIds.AllianceTakenFelReaverRuins, ObjectTypes.HBannerFelReaverCenter, BroadcastTextIds.HordeTakenFelReaverRuins, GaveyardIds.FelReaver),
new BgEyeOfStormCapturingPointStruct(ObjectTypes.NBannerBloodElfCenter, ObjectTypes.ABannerBloodElfCenter, BroadcastTextIds.AllianceTakenBloodElfTower, ObjectTypes.HBannerBloodElfCenter, BroadcastTextIds.HordeTakenBloodElfTower, GaveyardIds.BloodElf),
new BgEyeOfStormCapturingPointStruct(ObjectTypes.NBannerDraeneiRuinsCenter, ObjectTypes.ABannerDraeneiRuinsCenter, BroadcastTextIds.AllianceTakenDraeneiRuins, ObjectTypes.HBannerDraeneiRuinsCenter, BroadcastTextIds.HordeTakenDraeneiRuins, GaveyardIds.DraeneiRuins),
new BgEyeOfStormCapturingPointStruct(ObjectTypes.NBannerMageTowerCenter, ObjectTypes.ABannerMageTowerCenter, BroadcastTextIds.AllianceTakenMageTower, ObjectTypes.HBannerMageTowerCenter, BroadcastTextIds.HordeTakenMageTower, GaveyardIds.MageTower)
};
}
struct BroadcastTextIds
{
public const uint AllianceTakenFelReaverRuins = 17828;
public const uint HordeTakenFelReaverRuins = 17829;
public const uint AllianceLostFelReaverRuins = 17835;
public const uint HordeLostFelReaverRuins = 17836;
public const uint AllianceTakenBloodElfTower = 17819;
public const uint HordeTakenBloodElfTower = 17823;
public const uint AllianceLostBloodElfTower = 17831;
public const uint HordeLostBloodElfTower = 17832;
public const uint AllianceTakenDraeneiRuins = 17827;
public const uint HordeTakenDraeneiRuins = 17826;
public const uint AllianceLostDraeneiRuins = 17833;
public const uint HordeLostDraeneiRuins = 17834;
public const uint AllianceTakenMageTower = 17824;
public const uint HordeTakenMageTower = 17825;
public const uint AllianceLostMageTower = 17837;
public const uint HordeLostMageTower = 17838;
public const uint TakenFlag = 18359;
public const uint FlagDropped = 18361;
public const uint FlagReset = 18364;
public const uint AllianceCapturedFlag = 18375;
public const uint HordeCapturedFlag = 18384;
}
struct WorldStateIds
{
public const int AllianceResources = 1776;
public const int HordeResources = 1777;
public const int MaxResources = 1780;
public const int AllianceBase = 2752;
public const int HordeBase = 2753;
public const int DraeneiRuinsHordeControl = 2733;
public const int DraeneiRuinsAllianceControl = 2732;
public const int DraeneiRuinsUncontrol = 2731;
public const int MageTowerAllianceControl = 2730;
public const int MageTowerHordeControl = 2729;
public const int MageTowerUncontrol = 2728;
public const int FelReaverHordeControl = 2727;
public const int FelReaverAllianceControl = 2726;
public const int FelReaverUncontrol = 2725;
public const int BloodElfHordeControl = 2724;
public const int BloodElfAllianceControl = 2723;
public const int BloodElfUncontrol = 2722;
public const int ProgressBarPercentGrey = 2720; //100 = Empty (Only Grey); 0 = Blue|Red (No Grey)
public const int ProgressBarStatus = 2719; //50 Init!; 48 ... Hordak Bere .. 33 .. 0 = Full 100% Hordacky; 100 = Full Alliance
public const int ProgressBarShow = 2718; //1 Init; 0 Druhy Send - Bez Messagu; 1 = Controlled Aliance
public const int NetherstormFlag = 8863;
//Set To 2 When Flag Is Picked Up; And To 1 If It Is Dropped
public const int NetherstormFlagStateAlliance = 9808;
public const int NetherstormFlagStateHorde = 9809;
public const int DraeneiRuinsHordeControlState = 17362;
public const int DraeneiRuinsAllianceControlState = 17366;
public const int MageTowerHordeControlState = 17361;
public const int MageTowerAllianceControlState = 17368;
public const int FelReaverHordeControlState = 17364;
public const int FelReaverAllianceControlState = 17367;
public const int BloodElfHordeControlState = 17363;
public const int BloodElfAllianceControlState = 17365;
}
struct SoundIds
{
//strange ids, but sure about them
public const uint FlagPickedUpAlliance = 8212;
public const uint FlagCapturedHorde = 8213;
public const uint FlagPickedUpHorde = 8174;
public const uint FlagCapturedAlliance = 8173;
public const uint FlagReset = 8192;
}
struct GameobjectIds
{
public const uint ADoorEyEntry = 184719; //Alliance Door
public const uint HDoorEyEntry = 184720; //Horde Door
public const uint Flag1EyEntry = 184493; //Netherstorm Flag (Generic)
public const uint Flag2EyEntry = 208977; //Netherstorm Flag (Flagstand)
public const uint ABannerEyEntry = 184381; //Visual Banner (Alliance)
public const uint HBannerEyEntry = 184380; //Visual Banner (Horde)
public const uint NBannerEyEntry = 184382; //Visual Banner (Neutral)
public const uint BeTowerCapEyEntry = 184080; //Be Tower Cap Pt
public const uint FrTowerCapEyEntry = 184081; //Fel Reaver Cap Pt
public const uint HuTowerCapEyEntry = 184082; //Human Tower Cap Pt
public const uint DrTowerCapEyEntry = 184083; //Draenei Tower Cap Pt
public const uint SpeedBuffFelReaverEyEntry = 184970;
public const uint RestorationBuffFelReaverEyEntry = 184971;
public const uint BerserkBuffFelReaverEyEntry = 184972;
public const uint SpeedBuffBloodElfEyEntry = 184964;
public const uint RestorationBuffBloodElfEyEntry = 184965;
public const uint BerserkBuffBloodElfEyEntry = 184966;
public const uint SpeedBuffDraeneiRuinsEyEntry = 184976;
public const uint RestorationBuffDraeneiRuinsEyEntry = 184977;
public const uint BerserkBuffDraeneiRuinsEyEntry = 184978;
public const uint SpeedBuffMageTowerEyEntry = 184973;
public const uint RestorationBuffMageTowerEyEntry = 184974;
public const uint BerserkBuffMageTowerEyEntry = 184975;
}
struct GaveyardIds
{
public const int MainAlliance = 1103;
public const uint MainHorde = 1104;
public const uint FelReaver = 1105;
public const uint BloodElf = 1106;
public const uint DraeneiRuins = 1107;
public const uint MageTower = 1108;
}
struct Points
{
public const int FelReaver = 0;
public const int BloodElf = 1;
public const int DraeneiRuins = 2;
public const int MageTower = 3;
public const int PlayersOutOfPoints = 4;
public const int PointsMax = 4;
}
struct ObjectTypes
{
public const int DoorA = 0;
public const int DoorH = 1;
public const int ABannerFelReaverCenter = 2;
public const int ABannerFelReaverLeft = 3;
public const int ABannerFelReaverRight = 4;
public const int ABannerBloodElfCenter = 5;
public const int ABannerBloodElfLeft = 6;
public const int ABannerBloodElfRight = 7;
public const int ABannerDraeneiRuinsCenter = 8;
public const int ABannerDraeneiRuinsLeft = 9;
public const int ABannerDraeneiRuinsRight = 10;
public const int ABannerMageTowerCenter = 11;
public const int ABannerMageTowerLeft = 12;
public const int ABannerMageTowerRight = 13;
public const int HBannerFelReaverCenter = 14;
public const int HBannerFelReaverLeft = 15;
public const int HBannerFelReaverRight = 16;
public const int HBannerBloodElfCenter = 17;
public const int HBannerBloodElfLeft = 18;
public const int HBannerBloodElfRight = 19;
public const int HBannerDraeneiRuinsCenter = 20;
public const int HBannerDraeneiRuinsLeft = 21;
public const int HBannerDraeneiRuinsRight = 22;
public const int HBannerMageTowerCenter = 23;
public const int HBannerMageTowerLeft = 24;
public const int HBannerMageTowerRight = 25;
public const int NBannerFelReaverCenter = 26;
public const int NBannerFelReaverLeft = 27;
public const int NBannerFelReaverRight = 28;
public const int NBannerBloodElfCenter = 29;
public const int NBannerBloodElfLeft = 30;
public const int NBannerBloodElfRight = 31;
public const int NBannerDraeneiRuinsCenter = 32;
public const int NBannerDraeneiRuinsLeft = 33;
public const int NBannerDraeneiRuinsRight = 34;
public const int NBannerMageTowerCenter = 35;
public const int NBannerMageTowerLeft = 36;
public const int NBannerMageTowerRight = 37;
public const int TowerCapFelReaver = 38;
public const int TowerCapBloodElf = 39;
public const int TowerCapDraeneiRuins = 40;
public const int TowerCapMageTower = 41;
public const int FlagNetherstorm = 42;
public const int FlagFelReaver = 43;
public const int FlagBloodElf = 44;
public const int FlagDraeneiRuins = 45;
public const int FlagMageTower = 46;
//Buffs
public const int SpeedbuffFelReaver = 47;
public const int RegenbuffFelReaver = 48;
public const int BerserkbuffFelReaver = 49;
public const int SpeedbuffBloodElf = 50;
public const int RegenbuffBloodElf = 51;
public const int BerserkbuffBloodElf = 52;
public const int SpeedbuffDraeneiRuins = 53;
public const int RegenbuffDraeneiRuins = 54;
public const int BerserkbuffDraeneiRuins = 55;
public const int SpeedbuffMageTower = 56;
public const int RegenbuffMageTower = 57;
public const int BerserkbuffMageTower = 58;
public const int Max = 59;
}
struct ScoreIds
{
public const uint WarningNearVictoryScore = 1400;
public const uint MaxTeamScore = 1500;
}
enum EYFlagState
{
OnBase = 0,
WaitRespawn = 1,
OnPlayer = 2,
OnGround = 3
}
#endregion
}