e9b21a91be
Port From (https://github.com/TrinityCore/TrinityCore/commit/d0d5d309bb5877dc2fcb27f6cb123707a31ec1e8)
597 lines
28 KiB
C#
597 lines
28 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.BattleGrounds;
|
|
using Game.Entities;
|
|
using Game.Maps;
|
|
using Game.Scripting;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Scripts.Battlegrounds.ArthiBasin
|
|
{
|
|
enum PvpStats
|
|
{
|
|
BasesAssaulted = 926,
|
|
BasesDefended = 927,
|
|
}
|
|
|
|
enum EventIds
|
|
{
|
|
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
|
|
}
|
|
|
|
enum SoundIds
|
|
{
|
|
NodeClaimed = 8192,
|
|
NodeCapturedAlliance = 8173,
|
|
NodeCapturedHorde = 8213,
|
|
NodeAssaultedAlliance = 8212,
|
|
NodeAssaultedHorde = 8174,
|
|
NearVictoryAlliance = 8456,
|
|
NearVictoryHorde = 8457
|
|
}
|
|
|
|
enum BroadcastTexts
|
|
{
|
|
AllianceNearVictory = 10598,
|
|
HordeNearVictory = 10599,
|
|
}
|
|
|
|
enum CreatureIds
|
|
{
|
|
TheBlackBride = 150501,
|
|
RadulfLeder = 150505
|
|
}
|
|
|
|
enum GameObjectIds
|
|
{
|
|
CapturePointStables = 227420,
|
|
CapturePointBlacksmith = 227522,
|
|
CapturePointFarm = 227536,
|
|
CapturePointGoldMine = 227538,
|
|
CapturePointLumberMill = 227544,
|
|
|
|
GhostGate = 180322,
|
|
AllianceDoor = 322273,
|
|
HordeDoor = 322274
|
|
}
|
|
|
|
enum WorldStateIds
|
|
{
|
|
OccupiedBasesHorde = 1778,
|
|
OccupiedBasesAlly = 1779,
|
|
ResourcesAlly = 1776,
|
|
ResourcesHorde = 1777,
|
|
ResourcesMax = 1780,
|
|
ResourcesWarning = 1955,
|
|
|
|
StableIcon = 1842, // Stable Map Icon (None)
|
|
StableStateAlience = 1767, // Stable Map State (Alience)
|
|
StableStateHorde = 1768, // Stable Map State (Horde)
|
|
StableStateConAli = 1769, // Stable Map State (Con Alience)
|
|
StableStateConHor = 1770, // Stable Map State (Con Horde)
|
|
FarmIcon = 1845, // Farm Map Icon (None)
|
|
FarmStateAlience = 1772, // Farm State (Alience)
|
|
FarmStateHorde = 1773, // Farm State (Horde)
|
|
FarmStateConAli = 1774, // Farm State (Con Alience)
|
|
FarmStateConHor = 1775, // Farm State (Con Horde)
|
|
BlacksmithIcon = 1846, // Blacksmith Map Icon (None)
|
|
BlacksmithStateAlience = 1782, // Blacksmith Map State (Alience)
|
|
BlacksmithStateHorde = 1783, // Blacksmith Map State (Horde)
|
|
BlacksmithStateConAli = 1784, // Blacksmith Map State (Con Alience)
|
|
BlacksmithStateConHor = 1785, // Blacksmith Map State (Con Horde)
|
|
LumbermillIcon = 1844, // Lumber Mill Map Icon (None)
|
|
LumbermillStateAlience = 1792, // Lumber Mill Map State (Alience)
|
|
LumbermillStateHorde = 1793, // Lumber Mill Map State (Horde)
|
|
LumbermillStateConAli = 1794, // Lumber Mill Map State (Con Alience)
|
|
LumbermillStateConHor = 1795, // Lumber Mill Map State (Con Horde)
|
|
GoldmineIcon = 1843, // Gold Mine Map Icon (None)
|
|
GoldmineStateAlience = 1787, // Gold Mine Map State (Alience)
|
|
GoldmineStateHorde = 1788, // Gold Mine Map State (Horde)
|
|
GoldmineStateConAli = 1789, // Gold Mine Map State (Con Alience
|
|
GoldmineStateConHor = 1790, // Gold Mine Map State (Con Horde)
|
|
|
|
Had500DisadvantageAlliance = 3644,
|
|
Had500DisadvantageHorde = 3645,
|
|
|
|
FarmIconNew = 8808, // Farm Map Icon
|
|
LumberMillIconNew = 8805, // Lumber Mill Map Icon
|
|
BlacksmithIconNew = 8799, // Blacksmith Map Icon
|
|
GoldMineIconNew = 8809, // Gold Mine Map Icon
|
|
StablesIconNew = 5834, // Stable Map Icon
|
|
|
|
FarmHordeControlState = 17328,
|
|
FarmAllianceControlState = 17325,
|
|
LumberMillHordeControlState = 17330,
|
|
LumberMillAllianceControlState = 17326,
|
|
BlacksmithHordeControlState = 17327,
|
|
BlacksmithAllianceControlState = 17324,
|
|
GoldMineHordeControlState = 17329,
|
|
GoldMineAllianceControlState = 17323,
|
|
StablesHordeControlState = 17331,
|
|
StablesAllianceControlState = 17322,
|
|
}
|
|
|
|
struct Misc
|
|
{
|
|
public const int WarningNearVictoryScore = 1200;
|
|
public const int MaxTeamScore = 1500;
|
|
|
|
// Tick intervals and given points: case 0, 1, 2, 3, 4, 5 captured nodes
|
|
public static uint TickInterval = 2000;
|
|
public static uint[] TickPoints = { 0, 2, 3, 4, 7, 60 };
|
|
public static uint NormalHonorTicks = 160;
|
|
public static uint WeekendHonorTicks = 260;
|
|
public static uint NormalReputationTicks = 120;
|
|
public static uint WeekendReputationTicks = 160;
|
|
}
|
|
|
|
[Script(nameof(battleground_arathi_basin), 2107)]
|
|
class battleground_arathi_basin : BattlegroundScript
|
|
{
|
|
uint _lastTick;
|
|
uint[] _honorScoreTics = new uint[SharedConst.PvpTeamsCount];
|
|
uint[] _reputationScoreTics = new uint[SharedConst.PvpTeamsCount];
|
|
bool _isInformedNearVictory;
|
|
uint _honorTics;
|
|
uint _reputationTics;
|
|
|
|
List<ObjectGuid> _gameobjectsToRemoveOnMatchStart = new();
|
|
List<ObjectGuid> _creaturesToRemoveOnMatchStart = new();
|
|
List<ObjectGuid> _doors = new();
|
|
List<ObjectGuid> _capturePoints = new();
|
|
|
|
public battleground_arathi_basin(BattlegroundMap map) : base(map)
|
|
{
|
|
bool isBGWeekend = Global.BattlegroundMgr.IsBGWeekend(battleground.GetTypeID());
|
|
|
|
_honorTics = isBGWeekend ? Misc.WeekendHonorTicks : Misc.NormalHonorTicks;
|
|
_reputationTics = isBGWeekend ? Misc.WeekendReputationTicks : Misc.NormalReputationTicks;
|
|
_honorScoreTics = [0, 0];
|
|
_reputationScoreTics = [0, 0];
|
|
}
|
|
|
|
public override void OnInit()
|
|
{
|
|
base.OnInit();
|
|
|
|
UpdateWorldState((int)WorldStateIds.ResourcesMax, Misc.MaxTeamScore);
|
|
UpdateWorldState((int)WorldStateIds.ResourcesWarning, Misc.WarningNearVictoryScore);
|
|
}
|
|
|
|
public override void OnUpdate(uint diff)
|
|
{
|
|
if (battleground.GetStatus() != BattlegroundStatus.InProgress)
|
|
return;
|
|
|
|
// Accumulate points
|
|
_lastTick += diff;
|
|
if (_lastTick > Misc.TickInterval)
|
|
{
|
|
_lastTick -= Misc.TickInterval;
|
|
|
|
_CalculateTeamNodes(out byte ally, out byte horde);
|
|
byte[] points = { ally, horde };
|
|
|
|
for (byte team = 0; team < SharedConst.PvpTeamsCount; ++team)
|
|
{
|
|
if (points[team] == 0)
|
|
continue;
|
|
|
|
battleground.AddPoint(team == BattleGroundTeamId.Horde ? Team.Horde : Team.Alliance, Misc.TickPoints[points[team]]);
|
|
_honorScoreTics[team] += Misc.TickPoints[points[team]];
|
|
_reputationScoreTics[team] += Misc.TickPoints[points[team]];
|
|
|
|
if (_reputationScoreTics[team] >= _reputationTics)
|
|
{
|
|
if (team == BattleGroundTeamId.Alliance)
|
|
battleground.RewardReputationToTeam(509, 10, Team.Alliance);
|
|
else
|
|
battleground.RewardReputationToTeam(510, 10, Team.Horde);
|
|
_reputationScoreTics[team] -= _reputationTics;
|
|
}
|
|
|
|
if (_honorScoreTics[team] >= _honorTics)
|
|
{
|
|
battleground.RewardHonorToTeam(battleground.GetBonusHonorFromKill(1), (team == BattleGroundTeamId.Alliance) ? Team.Alliance : Team.Horde);
|
|
_honorScoreTics[team] -= _honorTics;
|
|
}
|
|
|
|
uint teamScore = battleground.GetTeamScore(team);
|
|
if (!_isInformedNearVictory && teamScore > Misc.WarningNearVictoryScore)
|
|
{
|
|
if (team == BattleGroundTeamId.Alliance)
|
|
{
|
|
battleground.SendBroadcastText((uint)BroadcastTexts.AllianceNearVictory, ChatMsg.BgSystemNeutral);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NearVictoryAlliance);
|
|
}
|
|
else
|
|
{
|
|
battleground.SendBroadcastText((uint)BroadcastTexts.HordeNearVictory, ChatMsg.BgSystemNeutral);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NearVictoryHorde);
|
|
}
|
|
_isInformedNearVictory = true;
|
|
}
|
|
|
|
if (teamScore > Misc.MaxTeamScore)
|
|
battleground.SetTeamPoint(team == BattleGroundTeamId.Horde ? Team.Horde : Team.Alliance, Misc.MaxTeamScore);
|
|
|
|
if (team == BattleGroundTeamId.Alliance)
|
|
UpdateWorldState((int)WorldStateIds.ResourcesAlly, (int)teamScore);
|
|
else
|
|
UpdateWorldState((int)WorldStateIds.ResourcesHorde, (int)teamScore);
|
|
|
|
// 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 (teamScore > battleground.GetTeamScore(otherTeam) + 500)
|
|
{
|
|
if (team == BattleGroundTeamId.Alliance)
|
|
UpdateWorldState((int)WorldStateIds.Had500DisadvantageHorde, 1);
|
|
else
|
|
UpdateWorldState((int)WorldStateIds.Had500DisadvantageAlliance, 1);
|
|
}
|
|
}
|
|
|
|
UpdateWorldState((int)WorldStateIds.OccupiedBasesAlly, ally);
|
|
UpdateWorldState((int)WorldStateIds.OccupiedBasesHorde, horde);
|
|
}
|
|
|
|
// Test win condition
|
|
if (battleground.GetTeamScore(BattleGroundTeamId.Alliance) >= Misc.MaxTeamScore && battleground.GetTeamScore(BattleGroundTeamId.Horde) >= Misc.MaxTeamScore)
|
|
battleground.EndBattleground(Team.Other); // draw
|
|
else if (battleground.GetTeamScore(BattleGroundTeamId.Alliance) >= Misc.MaxTeamScore)
|
|
battleground.EndBattleground(Team.Alliance);
|
|
else if (battleground.GetTeamScore(BattleGroundTeamId.Horde) >= Misc.MaxTeamScore)
|
|
battleground.EndBattleground(Team.Horde);
|
|
}
|
|
|
|
public override void OnStart()
|
|
{
|
|
// Achievement: Let's Get This Done
|
|
TriggerGameEvent((uint)EventIds.StartBattle);
|
|
}
|
|
|
|
void _CalculateTeamNodes(out byte alliance, out byte horde)
|
|
{
|
|
alliance = 0;
|
|
horde = 0;
|
|
|
|
foreach (ObjectGuid guid in _capturePoints)
|
|
{
|
|
GameObject capturePoint = battlegroundMap.GetGameObject(guid);
|
|
if (capturePoint != null)
|
|
{
|
|
int wsValue = battlegroundMap.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 byte ally, out byte horde);
|
|
|
|
if (ally > horde)
|
|
return Team.Alliance;
|
|
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 ((EventIds)eventId)
|
|
{
|
|
case EventIds.StartBattle:
|
|
{
|
|
foreach (ObjectGuid guid in _creaturesToRemoveOnMatchStart)
|
|
{
|
|
Creature creature = battlegroundMap.GetCreature(guid);
|
|
if (creature != null)
|
|
creature.DespawnOrUnsummon();
|
|
}
|
|
|
|
foreach (ObjectGuid guid in _gameobjectsToRemoveOnMatchStart)
|
|
{
|
|
GameObject gameObject = battlegroundMap.GetGameObject(guid);
|
|
if (gameObject != null)
|
|
gameObject.DespawnOrUnsummon();
|
|
}
|
|
|
|
foreach (ObjectGuid guid in _doors)
|
|
{
|
|
GameObject gameObject = battlegroundMap.GetGameObject(guid);
|
|
if (gameObject != null)
|
|
{
|
|
gameObject.UseDoorOrButton();
|
|
gameObject.DespawnOrUnsummon(TimeSpan.FromSeconds(3));
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case EventIds.ContestedBlacksmithAlliance:
|
|
UpdateWorldState((int)WorldStateIds.BlacksmithAllianceControlState, 1);
|
|
UpdateWorldState((int)WorldStateIds.BlacksmithHordeControlState, 0);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeAssaultedAlliance);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case EventIds.DefendedBlacksmithAlliance:
|
|
UpdateWorldState((int)WorldStateIds.BlacksmithAllianceControlState, 2);
|
|
UpdateWorldState((int)WorldStateIds.BlacksmithHordeControlState, 0);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesDefended, 1);
|
|
break;
|
|
case EventIds.CaptureBlacksmithAlliance:
|
|
UpdateWorldState((int)WorldStateIds.BlacksmithAllianceControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
break;
|
|
case EventIds.ContestedBlacksmithHorde:
|
|
UpdateWorldState((int)WorldStateIds.BlacksmithAllianceControlState, 0);
|
|
UpdateWorldState((int)WorldStateIds.BlacksmithHordeControlState, 1);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeAssaultedHorde);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case EventIds.DefendedBlacksmithHorde:
|
|
UpdateWorldState((int)WorldStateIds.BlacksmithAllianceControlState, 0);
|
|
UpdateWorldState((int)WorldStateIds.BlacksmithHordeControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesDefended, 1);
|
|
break;
|
|
case EventIds.CaptureBlacksmithHorde:
|
|
UpdateWorldState((int)WorldStateIds.BlacksmithHordeControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
break;
|
|
case EventIds.ContestedFarmAlliance:
|
|
UpdateWorldState((int)WorldStateIds.FarmAllianceControlState, 1);
|
|
UpdateWorldState((int)WorldStateIds.FarmHordeControlState, 0);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeAssaultedAlliance);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case EventIds.DefendedFarmAlliance:
|
|
UpdateWorldState((int)WorldStateIds.FarmAllianceControlState, 2);
|
|
UpdateWorldState((int)WorldStateIds.FarmHordeControlState, 0);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesDefended, 1);
|
|
break;
|
|
case EventIds.CaptureFarmAlliance:
|
|
UpdateWorldState((int)WorldStateIds.FarmAllianceControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
break;
|
|
case EventIds.ContestedFarmHorde:
|
|
UpdateWorldState((int)WorldStateIds.FarmAllianceControlState, 0);
|
|
UpdateWorldState((int)WorldStateIds.FarmHordeControlState, 1);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeAssaultedHorde);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case EventIds.DefendedFarmHorde:
|
|
UpdateWorldState((int)WorldStateIds.FarmAllianceControlState, 0);
|
|
UpdateWorldState((int)WorldStateIds.FarmHordeControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesDefended, 1);
|
|
break;
|
|
case EventIds.CaptureFarmHorde:
|
|
UpdateWorldState((int)WorldStateIds.FarmHordeControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
break;
|
|
case EventIds.ContestedGoldMineAlliance:
|
|
UpdateWorldState((int)WorldStateIds.GoldMineAllianceControlState, 1);
|
|
UpdateWorldState((int)WorldStateIds.GoldMineHordeControlState, 0);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeAssaultedAlliance);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case EventIds.DefendedGoldMineAlliance:
|
|
UpdateWorldState((int)WorldStateIds.GoldMineAllianceControlState, 2);
|
|
UpdateWorldState((int)WorldStateIds.GoldMineHordeControlState, 0);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesDefended, 1);
|
|
break;
|
|
case EventIds.CaptureGoldMineAlliance:
|
|
UpdateWorldState((int)WorldStateIds.GoldMineAllianceControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
break;
|
|
case EventIds.ContestedGoldMineHorde:
|
|
UpdateWorldState((int)WorldStateIds.GoldMineAllianceControlState, 0);
|
|
UpdateWorldState((int)WorldStateIds.GoldMineHordeControlState, 1);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeAssaultedHorde);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case EventIds.DefendedGoldMineHorde:
|
|
UpdateWorldState((int)WorldStateIds.GoldMineAllianceControlState, 0);
|
|
UpdateWorldState((int)WorldStateIds.GoldMineHordeControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesDefended, 1);
|
|
break;
|
|
case EventIds.CaptureGoldMineHorde:
|
|
UpdateWorldState((int)WorldStateIds.GoldMineHordeControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
break;
|
|
case EventIds.ContestedLumberMillAlliance:
|
|
UpdateWorldState((int)WorldStateIds.LumberMillAllianceControlState, 1);
|
|
UpdateWorldState((int)WorldStateIds.LumberMillHordeControlState, 0);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeAssaultedAlliance);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case EventIds.DefendedLumberMillAlliance:
|
|
UpdateWorldState((int)WorldStateIds.LumberMillAllianceControlState, 2);
|
|
UpdateWorldState((int)WorldStateIds.LumberMillHordeControlState, 0);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesDefended, 1);
|
|
break;
|
|
case EventIds.CaptureLumberMillAlliance:
|
|
UpdateWorldState((int)WorldStateIds.LumberMillAllianceControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
break;
|
|
case EventIds.ContestedLumberMillHorde:
|
|
UpdateWorldState((int)WorldStateIds.LumberMillAllianceControlState, 0);
|
|
UpdateWorldState((int)WorldStateIds.LumberMillHordeControlState, 1);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeAssaultedHorde);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case EventIds.DefendedLumberMillHorde:
|
|
UpdateWorldState((int)WorldStateIds.LumberMillAllianceControlState, 0);
|
|
UpdateWorldState((int)WorldStateIds.LumberMillHordeControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesDefended, 1);
|
|
break;
|
|
case EventIds.CaptureLumberMillHorde:
|
|
UpdateWorldState((int)WorldStateIds.LumberMillHordeControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
break;
|
|
case EventIds.ContestedStablesAlliance:
|
|
UpdateWorldState((int)WorldStateIds.StablesAllianceControlState, 1);
|
|
UpdateWorldState((int)WorldStateIds.StablesHordeControlState, 0);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeAssaultedAlliance);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case EventIds.DefendedStablesAlliance:
|
|
UpdateWorldState((int)WorldStateIds.StablesAllianceControlState, 2);
|
|
UpdateWorldState((int)WorldStateIds.StablesHordeControlState, 0);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesDefended, 1);
|
|
break;
|
|
case EventIds.CaptureStablesAlliance:
|
|
UpdateWorldState((int)WorldStateIds.StablesAllianceControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedAlliance);
|
|
break;
|
|
case EventIds.ContestedStablesHorde:
|
|
UpdateWorldState((int)WorldStateIds.StablesAllianceControlState, 0);
|
|
UpdateWorldState((int)WorldStateIds.StablesHordeControlState, 1);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeAssaultedHorde);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesAssaulted, 1);
|
|
break;
|
|
case EventIds.DefendedStablesHorde:
|
|
UpdateWorldState((int)WorldStateIds.StablesAllianceControlState, 0);
|
|
UpdateWorldState((int)WorldStateIds.StablesHordeControlState, 2);
|
|
battleground.PlaySoundToAll((uint)SoundIds.NodeCapturedHorde);
|
|
if (player != null)
|
|
battleground.UpdatePvpStat(player, (uint)PvpStats.BasesDefended, 1);
|
|
break;
|
|
case EventIds.CaptureStablesHorde:
|
|
UpdateWorldState((int)WorldStateIds.StablesHordeControlState, 2);
|
|
battleground.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 void OnEnd(Team winner)
|
|
{
|
|
base.OnEnd(winner);
|
|
|
|
// Win reward
|
|
if (winner == Team.Alliance)
|
|
battleground.RewardHonorToTeam(battleground.GetBonusHonorFromKill(1), Team.Alliance);
|
|
if (winner == Team.Horde)
|
|
battleground.RewardHonorToTeam(battleground.GetBonusHonorFromKill(1), Team.Horde);
|
|
// Complete map_end rewards (even if no team wins)
|
|
battleground.RewardHonorToTeam(battleground.GetBonusHonorFromKill(1), Team.Horde);
|
|
battleground.RewardHonorToTeam(battleground.GetBonusHonorFromKill(1), Team.Alliance);
|
|
}
|
|
}
|
|
} |