f6aaf9df69
Port From (https://github.com/TrinityCore/TrinityCore/commit/cc08aa8e249c5cd33f6b09a766cf6131c42566b9)
659 lines
30 KiB
C#
659 lines
30 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.Maps;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Game.BattleGrounds.Zones.ArathisBasin
|
|
{
|
|
class BgArathiBasin : Battleground
|
|
{
|
|
TimeTracker _pointsTimer;
|
|
uint[] m_HonorScoreTics = new uint[SharedConst.PvpTeamsCount];
|
|
uint[] m_ReputationScoreTics = new uint[SharedConst.PvpTeamsCount];
|
|
bool m_IsInformedNearVictory;
|
|
uint m_HonorTics;
|
|
uint m_ReputationTics;
|
|
|
|
List<ObjectGuid> _gameobjectsToRemoveOnMatchStart = new();
|
|
List<ObjectGuid> _creaturesToRemoveOnMatchStart = new();
|
|
List<ObjectGuid> _doors = new();
|
|
List<ObjectGuid> _capturePoints = new();
|
|
|
|
public BgArathiBasin(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate)
|
|
{
|
|
m_IsInformedNearVictory = false;
|
|
_pointsTimer = new TimeTracker(MiscConst.TickInterval);
|
|
|
|
for (byte i = 0; i < SharedConst.PvpTeamsCount; ++i)
|
|
{
|
|
m_HonorScoreTics[i] = 0;
|
|
m_ReputationScoreTics[i] = 0;
|
|
}
|
|
|
|
m_HonorTics = 0;
|
|
m_ReputationTics = 0;
|
|
}
|
|
|
|
public override void PostUpdateImpl(uint diff)
|
|
{
|
|
if (GetStatus() == BattlegroundStatus.InProgress)
|
|
{
|
|
// Accumulate points
|
|
_pointsTimer.Update(diff);
|
|
if (_pointsTimer.Passed())
|
|
{
|
|
_pointsTimer.Reset(MiscConst.TickInterval);
|
|
|
|
_CalculateTeamNodes(out var ally, out var horde);
|
|
int[] points = [ally, horde];
|
|
|
|
for (int team = 0; team < SharedConst.PvpTeamsCount; ++team)
|
|
{
|
|
if (points[team] == 0)
|
|
continue;
|
|
|
|
m_TeamScores[team] += MiscConst.TickPoints[points[team]];
|
|
m_HonorScoreTics[team] += MiscConst.TickPoints[points[team]];
|
|
m_ReputationScoreTics[team] += MiscConst.TickPoints[points[team]];
|
|
|
|
if (m_ReputationScoreTics[team] >= m_ReputationTics)
|
|
{
|
|
if (team == BatttleGroundTeamId.Alliance)
|
|
RewardReputationToTeam(509, 10, Team.Alliance);
|
|
else
|
|
RewardReputationToTeam(510, 10, Team.Horde);
|
|
|
|
m_ReputationScoreTics[team] -= m_ReputationTics;
|
|
}
|
|
|
|
if (m_HonorScoreTics[team] >= m_HonorTics)
|
|
{
|
|
RewardHonorToTeam(GetBonusHonorFromKill(1), (team == BatttleGroundTeamId.Alliance) ? Team.Alliance : Team.Horde);
|
|
m_HonorScoreTics[team] -= m_HonorTics;
|
|
}
|
|
|
|
if (!m_IsInformedNearVictory && m_TeamScores[team] > MiscConst.WarningNearVictoryScore)
|
|
{
|
|
if (team == BatttleGroundTeamId.Alliance)
|
|
{
|
|
SendBroadcastText((uint)ABBattlegroundBroadcastTexts.AllianceNearVictory, ChatMsg.BgSystemNeutral);
|
|
PlaySoundToAll((uint)SoundIds.NearVictoryAlliance);
|
|
}
|
|
else
|
|
{
|
|
SendBroadcastText((uint)ABBattlegroundBroadcastTexts.HordeNearVictory, ChatMsg.BgSystemNeutral);
|
|
PlaySoundToAll((uint)SoundIds.NearVictoryHorde);
|
|
}
|
|
m_IsInformedNearVictory = true;
|
|
}
|
|
|
|
if (m_TeamScores[team] > MiscConst.MaxTeamScore)
|
|
m_TeamScores[team] = MiscConst.MaxTeamScore;
|
|
|
|
if (team == BatttleGroundTeamId.Alliance)
|
|
UpdateWorldState(WorldStateIds.ResourcesAlly, (int)m_TeamScores[team]);
|
|
else
|
|
UpdateWorldState(WorldStateIds.ResourcesHorde, (int)m_TeamScores[team]);
|
|
// update achievement flags
|
|
// we increased m_TeamScores[team] so we just need to check if it is 500 more than other teams resources
|
|
int otherTeam = (team + 1) % SharedConst.PvpTeamsCount;
|
|
if (m_TeamScores[team] > m_TeamScores[otherTeam] + 500)
|
|
{
|
|
if (team == BatttleGroundTeamId.Alliance)
|
|
UpdateWorldState(WorldStateIds.Had500DisadvantageHorde, 1);
|
|
else
|
|
UpdateWorldState(WorldStateIds.Had500DisadvantageAlliance, 1);
|
|
}
|
|
}
|
|
|
|
UpdateWorldState(WorldStateIds.OccupiedBasesAlly, ally);
|
|
UpdateWorldState(WorldStateIds.OccupiedBasesHorde, horde);
|
|
}
|
|
|
|
// Test win condition
|
|
if (m_TeamScores[BatttleGroundTeamId.Alliance] >= MiscConst.MaxTeamScore)
|
|
EndBattleground(Team.Alliance);
|
|
else if (m_TeamScores[BatttleGroundTeamId.Horde] >= MiscConst.MaxTeamScore)
|
|
EndBattleground(Team.Horde);
|
|
}
|
|
}
|
|
|
|
public override void StartingEventOpenDoors()
|
|
{
|
|
// Achievement: Let's Get This Done
|
|
TriggerGameEvent((uint)ABEventIds.StartBattle);
|
|
}
|
|
|
|
void _CalculateTeamNodes(out int alliance, out int horde)
|
|
{
|
|
alliance = 0;
|
|
horde = 0;
|
|
|
|
BattlegroundMap map = FindBgMap();
|
|
if (map != null)
|
|
{
|
|
foreach (ObjectGuid guid in _capturePoints)
|
|
{
|
|
GameObject capturePoint = map.GetGameObject(guid);
|
|
if (capturePoint != null)
|
|
{
|
|
int wsValue = map.GetWorldStateValue((int)capturePoint.GetGoInfo().CapturePoint.worldState1);
|
|
switch ((BattlegroundCapturePointState)wsValue)
|
|
{
|
|
case BattlegroundCapturePointState.AllianceCaptured:
|
|
++alliance;
|
|
break;
|
|
case BattlegroundCapturePointState.HordeCaptured:
|
|
++horde;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public override Team GetPrematureWinner()
|
|
{
|
|
// How many bases each team owns
|
|
_CalculateTeamNodes(out var ally, out var horde);
|
|
|
|
if (ally > horde)
|
|
return Team.Alliance;
|
|
else if (horde > ally)
|
|
return Team.Horde;
|
|
|
|
// If the values are equal, fall back to the original result (based on number of players on each team)
|
|
return base.GetPrematureWinner();
|
|
}
|
|
|
|
public override void ProcessEvent(WorldObject source, uint eventId, WorldObject invoker)
|
|
{
|
|
Player player = invoker.ToPlayer();
|
|
|
|
switch ((ABEventIds)eventId)
|
|
{
|
|
case ABEventIds.StartBattle:
|
|
{
|
|
foreach (ObjectGuid guid in _creaturesToRemoveOnMatchStart)
|
|
{
|
|
Creature creature = GetBgMap().GetCreature(guid);
|
|
if (creature != null)
|
|
creature.DespawnOrUnsummon();
|
|
}
|
|
|
|
foreach (ObjectGuid guid in _gameobjectsToRemoveOnMatchStart)
|
|
{
|
|
GameObject gameObject = GetBgMap().GetGameObject(guid);
|
|
if (gameObject != null)
|
|
gameObject.DespawnOrUnsummon();
|
|
}
|
|
|
|
foreach (ObjectGuid guid in _doors)
|
|
{
|
|
GameObject gameObject = GetBgMap().GetGameObject(guid);
|
|
if (gameObject != null)
|
|
{
|
|
gameObject.UseDoorOrButton();
|
|
gameObject.DespawnOrUnsummon(TimeSpan.FromSeconds(3));
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case ABEventIds.ContestedBlacksmithAlliance:
|
|
UpdateWorldState(WorldStateIds.BlacksmithAllianceControlState, 1);
|
|
UpdateWorldState(WorldStateIds.BlacksmithHordeControlState, 0);
|
|
PlaySoundToAll((uint)SoundIds.NodeAssaultedAlliance);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case ABEventIds.DefendedBlacksmithAlliance:
|
|
UpdateWorldState(WorldStateIds.BlacksmithAllianceControlState, 2);
|
|
UpdateWorldState(WorldStateIds.BlacksmithHordeControlState, 0);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesDefended, 1);
|
|
break;
|
|
case ABEventIds.CaptureBlacksmithAlliance:
|
|
UpdateWorldState(WorldStateIds.BlacksmithAllianceControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
break;
|
|
case ABEventIds.ContestedBlacksmithHorde:
|
|
UpdateWorldState(WorldStateIds.BlacksmithAllianceControlState, 0);
|
|
UpdateWorldState(WorldStateIds.BlacksmithHordeControlState, 1);
|
|
PlaySoundToAll((uint)SoundIds.NodeAssaultedHorde);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case ABEventIds.DefendedBlacksmithHorde:
|
|
UpdateWorldState(WorldStateIds.BlacksmithAllianceControlState, 0);
|
|
UpdateWorldState(WorldStateIds.BlacksmithHordeControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesDefended, 1);
|
|
break;
|
|
case ABEventIds.CaptureBlacksmithHorde:
|
|
UpdateWorldState(WorldStateIds.BlacksmithHordeControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
break;
|
|
case ABEventIds.ContestedFarmAlliance:
|
|
UpdateWorldState(WorldStateIds.FarmAllianceControlState, 1);
|
|
UpdateWorldState(WorldStateIds.FarmHordeControlState, 0);
|
|
PlaySoundToAll((uint)SoundIds.NodeAssaultedAlliance);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case ABEventIds.DefendedFarmAlliance:
|
|
UpdateWorldState(WorldStateIds.FarmAllianceControlState, 2);
|
|
UpdateWorldState(WorldStateIds.FarmHordeControlState, 0);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesDefended, 1);
|
|
break;
|
|
case ABEventIds.CaptureFarmAlliance:
|
|
UpdateWorldState(WorldStateIds.FarmAllianceControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
break;
|
|
case ABEventIds.ContestedFarmHorde:
|
|
UpdateWorldState(WorldStateIds.FarmAllianceControlState, 0);
|
|
UpdateWorldState(WorldStateIds.FarmHordeControlState, 1);
|
|
PlaySoundToAll((uint)SoundIds.NodeAssaultedHorde);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case ABEventIds.DefendedFarmHorde:
|
|
UpdateWorldState(WorldStateIds.FarmAllianceControlState, 0);
|
|
UpdateWorldState(WorldStateIds.FarmHordeControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesDefended, 1);
|
|
break;
|
|
case ABEventIds.CaptureFarmHorde:
|
|
UpdateWorldState(WorldStateIds.FarmHordeControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
break;
|
|
case ABEventIds.ContestedGoldMineAlliance:
|
|
UpdateWorldState(WorldStateIds.GoldMineAllianceControlState, 1);
|
|
UpdateWorldState(WorldStateIds.GoldMineHordeControlState, 0);
|
|
PlaySoundToAll((uint)SoundIds.NodeAssaultedAlliance);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case ABEventIds.DefendedGoldMineAlliance:
|
|
UpdateWorldState(WorldStateIds.GoldMineAllianceControlState, 2);
|
|
UpdateWorldState(WorldStateIds.GoldMineHordeControlState, 0);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesDefended, 1);
|
|
break;
|
|
case ABEventIds.CaptureGoldMineAlliance:
|
|
UpdateWorldState(WorldStateIds.GoldMineAllianceControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
break;
|
|
case ABEventIds.ContestedGoldMineHorde:
|
|
UpdateWorldState(WorldStateIds.GoldMineAllianceControlState, 0);
|
|
UpdateWorldState(WorldStateIds.GoldMineHordeControlState, 1);
|
|
PlaySoundToAll((uint)SoundIds.NodeAssaultedHorde);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case ABEventIds.DefendedGoldMineHorde:
|
|
UpdateWorldState(WorldStateIds.GoldMineAllianceControlState, 0);
|
|
UpdateWorldState(WorldStateIds.GoldMineHordeControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesDefended, 1);
|
|
break;
|
|
case ABEventIds.CaptureGoldMineHorde:
|
|
UpdateWorldState(WorldStateIds.GoldMineHordeControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
break;
|
|
case ABEventIds.ContestedLumberMillAlliance:
|
|
UpdateWorldState(WorldStateIds.LumberMillAllianceControlState, 1);
|
|
UpdateWorldState(WorldStateIds.LumberMillHordeControlState, 0);
|
|
PlaySoundToAll((uint)SoundIds.NodeAssaultedAlliance);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case ABEventIds.DefendedLumberMillAlliance:
|
|
UpdateWorldState(WorldStateIds.LumberMillAllianceControlState, 2);
|
|
UpdateWorldState(WorldStateIds.LumberMillHordeControlState, 0);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesDefended, 1);
|
|
break;
|
|
case ABEventIds.CaptureLumberMillAlliance:
|
|
UpdateWorldState(WorldStateIds.LumberMillAllianceControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
break;
|
|
case ABEventIds.ContestedLumberMillHorde:
|
|
UpdateWorldState(WorldStateIds.LumberMillAllianceControlState, 0);
|
|
UpdateWorldState(WorldStateIds.LumberMillHordeControlState, 1);
|
|
PlaySoundToAll((uint)SoundIds.NodeAssaultedHorde);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case ABEventIds.DefendedLumberMillHorde:
|
|
UpdateWorldState(WorldStateIds.LumberMillAllianceControlState, 0);
|
|
UpdateWorldState(WorldStateIds.LumberMillHordeControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesDefended, 1);
|
|
break;
|
|
case ABEventIds.CaptureLumberMillHorde:
|
|
UpdateWorldState(WorldStateIds.LumberMillHordeControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
break;
|
|
case ABEventIds.ContestedStablesAlliance:
|
|
UpdateWorldState(WorldStateIds.StablesAllianceControlState, 1);
|
|
UpdateWorldState(WorldStateIds.StablesHordeControlState, 0);
|
|
PlaySoundToAll((uint)SoundIds.NodeAssaultedAlliance);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case ABEventIds.DefendedStablesAlliance:
|
|
UpdateWorldState(WorldStateIds.StablesAllianceControlState, 2);
|
|
UpdateWorldState(WorldStateIds.StablesHordeControlState, 0);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesDefended, 1);
|
|
break;
|
|
case ABEventIds.CaptureStablesAlliance:
|
|
UpdateWorldState(WorldStateIds.StablesAllianceControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
break;
|
|
case ABEventIds.ContestedStablesHorde:
|
|
UpdateWorldState(WorldStateIds.StablesAllianceControlState, 0);
|
|
UpdateWorldState(WorldStateIds.StablesHordeControlState, 1);
|
|
PlaySoundToAll((uint)SoundIds.NodeAssaultedHorde);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case ABEventIds.DefendedStablesHorde:
|
|
UpdateWorldState(WorldStateIds.StablesAllianceControlState, 0);
|
|
UpdateWorldState(WorldStateIds.StablesHordeControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
if (player != null)
|
|
UpdatePvpStat(player, (uint)ArathiBasinPvpStats.BasesDefended, 1);
|
|
break;
|
|
case ABEventIds.CaptureStablesHorde:
|
|
UpdateWorldState(WorldStateIds.StablesHordeControlState, 2);
|
|
PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
break;
|
|
default:
|
|
Log.outWarn(LogFilter.Battleground, $"BattlegroundAB::ProcessEvent: Unhandled event {eventId}.");
|
|
break;
|
|
}
|
|
}
|
|
|
|
public override void OnCreatureCreate(Creature creature)
|
|
{
|
|
switch ((CreatureIds)creature.GetEntry())
|
|
{
|
|
case CreatureIds.TheBlackBride:
|
|
case CreatureIds.RadulfLeder:
|
|
_creaturesToRemoveOnMatchStart.Add(creature.GetGUID());
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
public override void OnGameObjectCreate(GameObject gameObject)
|
|
{
|
|
if (gameObject.GetGoInfo().type == GameObjectTypes.CapturePoint)
|
|
_capturePoints.Add(gameObject.GetGUID());
|
|
|
|
switch ((GameobjectIds)gameObject.GetEntry())
|
|
{
|
|
case GameobjectIds.GhostGate:
|
|
_gameobjectsToRemoveOnMatchStart.Add(gameObject.GetGUID());
|
|
break;
|
|
case GameobjectIds.AllianceDoor:
|
|
case GameobjectIds.HordeDoor:
|
|
_doors.Add(gameObject.GetGUID());
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
public override bool SetupBattleground()
|
|
{
|
|
UpdateWorldState(WorldStateIds.ResourcesMax, MiscConst.MaxTeamScore);
|
|
UpdateWorldState(WorldStateIds.ResourcesWarning, MiscConst.WarningNearVictoryScore);
|
|
|
|
return true;
|
|
}
|
|
|
|
public override void Reset()
|
|
{
|
|
//call parent's class reset
|
|
base.Reset();
|
|
|
|
for (var i = 0; i < SharedConst.PvpTeamsCount; ++i)
|
|
{
|
|
m_TeamScores[i] = 0;
|
|
m_HonorScoreTics[i] = 0;
|
|
m_ReputationScoreTics[i] = 0;
|
|
}
|
|
|
|
_pointsTimer.Reset(MiscConst.TickInterval);
|
|
|
|
m_IsInformedNearVictory = false;
|
|
bool isBGWeekend = Global.BattlegroundMgr.IsBGWeekend(GetTypeID());
|
|
m_HonorTics = isBGWeekend ? MiscConst.ABBGWeekendHonorTicks : MiscConst.NotABBGWeekendHonorTicks;
|
|
m_ReputationTics = isBGWeekend ? MiscConst.ABBGWeekendReputationTicks : MiscConst.NotABBGWeekendReputationTicks;
|
|
|
|
_creaturesToRemoveOnMatchStart.Clear();
|
|
_gameobjectsToRemoveOnMatchStart.Clear();
|
|
_doors.Clear();
|
|
_capturePoints.Clear();
|
|
}
|
|
|
|
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_end rewards (even if no team wins)
|
|
RewardHonorToTeam(GetBonusHonorFromKill(1), Team.Horde);
|
|
RewardHonorToTeam(GetBonusHonorFromKill(1), Team.Alliance);
|
|
|
|
base.EndBattleground(winner);
|
|
}
|
|
|
|
public override WorldSafeLocsEntry GetClosestGraveyard(Player player)
|
|
{
|
|
return Global.ObjectMgr.GetClosestGraveyard(player.GetWorldLocation(), player.GetTeam(), player);
|
|
}
|
|
|
|
public override WorldSafeLocsEntry GetExploitTeleportLocation(Team team)
|
|
{
|
|
return Global.ObjectMgr.GetWorldSafeLoc(team == Team.Alliance ? MiscConst.ExploitTeleportLocationAlliance : MiscConst.ExploitTeleportLocationHorde);
|
|
}
|
|
}
|
|
|
|
#region Constants
|
|
struct MiscConst
|
|
{
|
|
public const uint NotABBGWeekendHonorTicks = 260;
|
|
public const uint ABBGWeekendHonorTicks = 160;
|
|
public const uint NotABBGWeekendReputationTicks = 160;
|
|
public const uint ABBGWeekendReputationTicks = 120;
|
|
|
|
public const int WarningNearVictoryScore = 1400;
|
|
public const int MaxTeamScore = 1500;
|
|
|
|
public const uint ExploitTeleportLocationAlliance = 3705;
|
|
public const uint ExploitTeleportLocationHorde = 3706;
|
|
|
|
// Tick intervals and given points: case 0, 1, 2, 3, 4, 5 captured nodes
|
|
public static TimeSpan TickInterval = TimeSpan.FromSeconds(2);
|
|
public static uint[] TickPoints = { 0, 10, 10, 10, 10, 30 };
|
|
}
|
|
|
|
enum ABEventIds
|
|
{
|
|
StartBattle = 9158, // Achievement: Let'S Get This Done
|
|
|
|
ContestedStablesHorde = 28523,
|
|
CaptureStablesHorde = 28527,
|
|
DefendedStablesHorde = 28525,
|
|
ContestedStablesAlliance = 28522,
|
|
CaptureStablesAlliance = 28526,
|
|
DefendedStablesAlliance = 28524,
|
|
|
|
ContestedBlacksmithHorde = 8876,
|
|
CaptureBlacksmithHorde = 8773,
|
|
DefendedBlacksmithHorde = 8770,
|
|
ContestedBlacksmithAlliance = 8874,
|
|
CaptureBlacksmithAlliance = 8769,
|
|
DefendedBlacksmithAlliance = 8774,
|
|
|
|
ContestedFarmHorde = 39398,
|
|
CaptureFarmHorde = 39399,
|
|
DefendedFarmHorde = 39400,
|
|
ContestedFarmAlliance = 39401,
|
|
CaptureFarmAlliance = 39402,
|
|
DefendedFarmAlliance = 39403,
|
|
|
|
ContestedGoldMineHorde = 39404,
|
|
CaptureGoldMineHorde = 39405,
|
|
DefendedGoldMineHorde = 39406,
|
|
ContestedGoldMineAlliance = 39407,
|
|
CaptureGoldMineAlliance = 39408,
|
|
DefendedGoldMineAlliance = 39409,
|
|
|
|
ContestedLumberMillHorde = 39387,
|
|
CaptureLumberMillHorde = 39388,
|
|
DefendedLumberMillHorde = 39389,
|
|
ContestedLumberMillAlliance = 39390,
|
|
CaptureLumberMillAlliance = 39391,
|
|
DefendedLumberMillAlliance = 39392
|
|
}
|
|
|
|
struct WorldStateIds
|
|
{
|
|
public const int OccupiedBasesHorde = 1778;
|
|
public const int OccupiedBasesAlly = 1779;
|
|
public const int ResourcesAlly = 1776;
|
|
public const int ResourcesHorde = 1777;
|
|
public const int ResourcesMax = 1780;
|
|
public const int ResourcesWarning = 1955;
|
|
|
|
public const int StableIcon = 1842; // Stable Map Icon (None)
|
|
public const int StableStateAlience = 1767; // Stable Map State (Alience)
|
|
public const int StableStateHorde = 1768; // Stable Map State (Horde)
|
|
public const int StableStateConAli = 1769; // Stable Map State (Con Alience)
|
|
public const int StableStateConHor = 1770; // Stable Map State (Con Horde)
|
|
public const int FarmIcon = 1845; // Farm Map Icon (None)
|
|
public const int FarmStateAlience = 1772; // Farm State (Alience)
|
|
public const int FarmStateHorde = 1773; // Farm State (Horde)
|
|
public const int FarmStateConAli = 1774; // Farm State (Con Alience)
|
|
public const int FarmStateConHor = 1775; // Farm State (Con Horde)
|
|
public const int BlacksmithIcon = 1846; // Blacksmith Map Icon (None)
|
|
public const int BlacksmithStateAlience = 1782; // Blacksmith Map State (Alience)
|
|
public const int BlacksmithStateHorde = 1783; // Blacksmith Map State (Horde)
|
|
public const int BlacksmithStateConAli = 1784; // Blacksmith Map State (Con Alience)
|
|
public const int BlacksmithStateConHor = 1785; // Blacksmith Map State (Con Horde)
|
|
public const int LumbermillIcon = 1844; // Lumber Mill Map Icon (None)
|
|
public const int LumbermillStateAlience = 1792; // Lumber Mill Map State (Alience)
|
|
public const int LumbermillStateHorde = 1793; // Lumber Mill Map State (Horde)
|
|
public const int LumbermillStateConAli = 1794; // Lumber Mill Map State (Con Alience)
|
|
public const int LumbermillStateConHor = 1795; // Lumber Mill Map State (Con Horde)
|
|
public const int GoldmineIcon = 1843; // Gold Mine Map Icon (None)
|
|
public const int GoldmineStateAlience = 1787; // Gold Mine Map State (Alience)
|
|
public const int GoldmineStateHorde = 1788; // Gold Mine Map State (Horde)
|
|
public const int GoldmineStateConAli = 1789; // Gold Mine Map State (Con Alience
|
|
public const int GoldmineStateConHor = 1790; // Gold Mine Map State (Con Horde)
|
|
|
|
public const int Had500DisadvantageAlliance = 3644;
|
|
public const int Had500DisadvantageHorde = 3645;
|
|
|
|
public const int FarmIconNew = 8808; // Farm Map Icon
|
|
public const int LumberMillIconNew = 8805; // Lumber Mill Map Icon
|
|
public const int BlacksmithIconNew = 8799; // Blacksmith Map Icon
|
|
public const int GoldMineIconNew = 8809; // Gold Mine Map Icon
|
|
public const int StablesIconNew = 5834; // Stable Map Icon
|
|
|
|
public const int FarmHordeControlState = 17328;
|
|
public const int FarmAllianceControlState = 17325;
|
|
public const int LumberMillHordeControlState = 17330;
|
|
public const int LumberMillAllianceControlState = 17326;
|
|
public const int BlacksmithHordeControlState = 17327;
|
|
public const int BlacksmithAllianceControlState = 17324;
|
|
public const int GoldMineHordeControlState = 17329;
|
|
public const int GoldMineAllianceControlState = 17323;
|
|
public const int StablesHordeControlState = 17331;
|
|
public const int StablesAllianceControlState = 17322;
|
|
}
|
|
|
|
// Object id templates from DB
|
|
enum GameobjectIds
|
|
{
|
|
CapturePointStables = 227420,
|
|
CapturePointBlacksmith = 227522,
|
|
CapturePointFarm = 227536,
|
|
CapturePointGoldMine = 227538,
|
|
CapturePointLumberMill = 227544,
|
|
|
|
GhostGate = 180322,
|
|
AllianceDoor = 322273,
|
|
HordeDoor = 322274
|
|
}
|
|
|
|
enum CreatureIds
|
|
{
|
|
TheBlackBride = 150501,
|
|
RadulfLeder = 150505
|
|
}
|
|
|
|
struct ABBattlegroundNodes
|
|
{
|
|
public const int NodeStables = 0;
|
|
public const int NodeBlacksmith = 1;
|
|
public const int NodeFarm = 2;
|
|
public const int NodeLumberMill = 3;
|
|
public const int NodeGoldMine = 4;
|
|
|
|
public const int DynamicNodesCount = 5; // Dynamic Nodes That Can Be Captured
|
|
|
|
public const int SpiritAliance = 5;
|
|
public const int SpiritHorde = 6;
|
|
|
|
public const int AllCount = 7; // All Nodes (Dynamic And Static)
|
|
}
|
|
|
|
enum ABBattlegroundBroadcastTexts
|
|
{
|
|
AllianceNearVictory = 10598,
|
|
HordeNearVictory = 10599
|
|
}
|
|
|
|
enum SoundIds
|
|
{
|
|
NodeClaimed = 8192,
|
|
NodeCapturedAlliance = 8173,
|
|
NodeCapturedHorde = 8213,
|
|
NodeAssaultedAlliance = 8212,
|
|
NodeAssaultedHorde = 8174,
|
|
NearVictoryAlliance = 8456,
|
|
NearVictoryHorde = 8457
|
|
}
|
|
|
|
enum ArathiBasinPvpStats
|
|
{
|
|
BasesAssaulted = 926,
|
|
BasesDefended = 927,
|
|
}
|
|
#endregion
|
|
}
|