Core/Battlegrounds: Rework queues

* No more copies of Battleground classes
* FreesSlotQueues now have as key the MapId instead of queue id
* Random queues can now popup already busy specific battelgrounds (queues are NOT merged)
* Removed Holiday handling, this should already be handled in BattlegroundMgr::IsBGWeekend
Port From (https://github.com/TrinityCore/TrinityCore/commit/0ede6c155605da602b3bafaa3a1212d9f924759b)
This commit is contained in:
hondacrx
2023-09-14 06:16:30 -04:00
parent bad3e89ee6
commit 4134796f1b
35 changed files with 364 additions and 418 deletions
+45 -44
View File
@@ -24,12 +24,9 @@ namespace Game.BattleGrounds
public Battleground(BattlegroundTemplate battlegroundTemplate)
{
_battlegroundTemplate = battlegroundTemplate;
m_RandomTypeID = BattlegroundTypeId.None;
m_Status = BattlegroundStatus.None;
_winnerTeamId = PvPTeamId.Neutral;
m_HonorMode = BGHonorMode.Normal;
StartDelayTimes[BattlegroundConst.EventIdFirst] = BattlegroundStartTimeIntervals.Delay2m;
StartDelayTimes[BattlegroundConst.EventIdSecond] = BattlegroundStartTimeIntervals.Delay1m;
StartDelayTimes[BattlegroundConst.EventIdThird] = BattlegroundStartTimeIntervals.Delay30s;
@@ -632,7 +629,7 @@ namespace Game.BattleGrounds
stmt.AddValue(0, battlegroundId);
stmt.AddValue(1, (byte)GetWinner());
stmt.AddValue(2, GetUniqueBracketId());
stmt.AddValue(3, (byte)GetTypeID(true));
stmt.AddValue(3, (uint)GetTypeID());
DB.Characters.Execute(stmt);
}
@@ -702,18 +699,23 @@ namespace Game.BattleGrounds
// Reward winner team
if (team == winner)
{
if (IsRandom() || Global.BattlegroundMgr.IsBGWeekend(GetTypeID()))
BattlegroundPlayer bgPlayer = GetBattlegroundPlayerData(player.GetGUID());
if (bgPlayer != null)
{
UpdatePlayerScore(player, ScoreType.BonusHonor, GetBonusHonorFromKill(winnerKills));
if (!player.GetRandomWinner())
if (Global.BattlegroundMgr.IsRandomBattleground((BattlegroundTypeId)bgPlayer.queueTypeId.BattlemasterListId)
|| Global.BattlegroundMgr.IsBGWeekend((BattlegroundTypeId)bgPlayer.queueTypeId.BattlemasterListId))
{
player.SetRandomWinner(true);
// TODO: win honor xp
UpdatePlayerScore(player, ScoreType.BonusHonor, GetBonusHonorFromKill(winnerKills));
if (!player.GetRandomWinner())
{
player.SetRandomWinner(true);
// TODO: win honor xp
}
}
else
{
// TODO: loss honor xp
}
}
else
{
// TODO: lose honor xp
}
player.UpdateCriteria(CriteriaType.WinBattleground, player.GetMapId());
@@ -731,8 +733,13 @@ namespace Game.BattleGrounds
}
else
{
if (IsRandom() || Global.BattlegroundMgr.IsBGWeekend(GetTypeID()))
UpdatePlayerScore(player, ScoreType.BonusHonor, GetBonusHonorFromKill(loserKills));
BattlegroundPlayer bgPlayer = GetBattlegroundPlayerData(player.GetGUID());
if (bgPlayer != null)
{
if (Global.BattlegroundMgr.IsRandomBattleground((BattlegroundTypeId)bgPlayer.queueTypeId.BattlemasterListId)
|| Global.BattlegroundMgr.IsBGWeekend((BattlegroundTypeId)bgPlayer.queueTypeId.BattlemasterListId))
UpdatePlayerScore(player, ScoreType.BonusHonor, GetBonusHonorFromKill(loserKills));
}
}
player.ResetAllPowers();
@@ -770,8 +777,10 @@ namespace Game.BattleGrounds
bool participant = false;
// Remove from lists/maps
var bgPlayer = m_Players.LookupByKey(guid);
BattlegroundQueueTypeId? bgQueueTypeId = null;
if (bgPlayer != null)
{
bgQueueTypeId = bgPlayer.queueTypeId;
UpdatePlayersCountByTeam(team, true); // -1 player
m_Players.Remove(guid);
// check if the player was a participant of the match, or only entered through gm command (goname)
@@ -811,8 +820,6 @@ namespace Game.BattleGrounds
RemovePlayer(player, guid, team); // BG subclass specific code
BattlegroundQueueTypeId bgQueueTypeId = GetQueueId();
if (participant) // if the player was a match participant, remove auras, calc rating, update queue
{
if (player)
@@ -826,15 +833,16 @@ namespace Game.BattleGrounds
player.RemovePet(null, PetSaveMode.NotInSlot);
player.ResummonPetTemporaryUnSummonedIfAny();
}
if (SendPacket)
if (SendPacket && bgQueueTypeId.HasValue)
{
BattlefieldStatusNone battlefieldStatus;
Global.BattlegroundMgr.BuildBattlegroundStatusNone(out battlefieldStatus, player, player.GetBattlegroundQueueIndex(bgQueueTypeId), player.GetBattlegroundQueueJoinTime(bgQueueTypeId));
Global.BattlegroundMgr.BuildBattlegroundStatusNone(out battlefieldStatus, player, player.GetBattlegroundQueueIndex(bgQueueTypeId.Value), player.GetBattlegroundQueueJoinTime(bgQueueTypeId.Value));
player.SendPacket(battlefieldStatus);
}
// this call is important, because player, when joins to Battleground, this method is not called, so it must be called when leaving bg
player.RemoveBattlegroundQueueId(bgQueueTypeId);
if (bgQueueTypeId.HasValue)
player.RemoveBattlegroundQueueId(bgQueueTypeId.Value);
}
// remove from raid group if player is member
@@ -846,11 +854,11 @@ namespace Game.BattleGrounds
}
DecreaseInvitedCount(team);
//we should update Battleground queue, but only if bg isn't ending
if (IsBattleground() && GetStatus() < BattlegroundStatus.WaitLeave)
if (IsBattleground() && GetStatus() < BattlegroundStatus.WaitLeave && bgQueueTypeId.HasValue)
{
// a player has left the Battleground, so there are free slots . add to queue
AddToBGFreeSlotQueue();
Global.BattlegroundMgr.ScheduleQueueUpdate(0, bgQueueTypeId, GetBracketId());
Global.BattlegroundMgr.ScheduleQueueUpdate(0, bgQueueTypeId.Value, GetBracketId());
}
// Let others know
BattlegroundPlayerLeft playerLeft = new();
@@ -922,7 +930,7 @@ namespace Game.BattleGrounds
player.TeleportTo(loc.Loc);
}
public virtual void AddPlayer(Player player)
public virtual void AddPlayer(Player player, BattlegroundQueueTypeId queueId)
{
// remove afk from player
if (player.IsAFK())
@@ -936,7 +944,8 @@ namespace Game.BattleGrounds
BattlegroundPlayer bp = new();
bp.OfflineRemoveTime = 0;
bp.Team = team;
bp.Mercenary = player.IsMercenaryForBattlegroundQueueType(GetQueueId());
bp.Mercenary = player.IsMercenaryForBattlegroundQueueType(queueId);
bp.queueTypeId = queueId;
bool isInBattleground = IsPlayerInBattleground(player.GetGUID());
// Add to list/maps
@@ -975,8 +984,9 @@ namespace Game.BattleGrounds
pvpMatchInitialize.Duration = (int)(GetElapsedTime() - (int)BattlegroundStartTimeIntervals.Delay2m) / Time.InMilliseconds;
pvpMatchInitialize.StartTime = GameTime.GetGameTime() - pvpMatchInitialize.Duration;
}
pvpMatchInitialize.ArenaFaction = (byte)(player.GetBGTeam() == Team.Horde ? PvPTeamId.Horde : PvPTeamId.Alliance);
pvpMatchInitialize.BattlemasterListID = (uint)GetTypeID();
pvpMatchInitialize.BattlemasterListID = queueId.BattlemasterListId;
pvpMatchInitialize.Registered = false;
pvpMatchInitialize.AffectsRating = IsRated();
@@ -1118,7 +1128,7 @@ namespace Game.BattleGrounds
{
if (!m_InBGFreeSlotQueue && IsBattleground())
{
Global.BattlegroundMgr.AddToBGFreeSlotQueue(GetQueueId(), this);
Global.BattlegroundMgr.AddToBGFreeSlotQueue(this);
m_InBGFreeSlotQueue = true;
}
}
@@ -1128,7 +1138,7 @@ namespace Game.BattleGrounds
{
if (m_InBGFreeSlotQueue)
{
Global.BattlegroundMgr.RemoveFromBGFreeSlotQueue(GetQueueId(), m_InstanceID);
Global.BattlegroundMgr.RemoveFromBGFreeSlotQueue(GetMapId(), m_InstanceID);
m_InBGFreeSlotQueue = false;
}
}
@@ -1647,11 +1657,6 @@ namespace Game.BattleGrounds
return count;
}
public void SetHoliday(bool is_holiday)
{
m_HonorMode = is_holiday ? BGHonorMode.Holiday : BGHonorMode.Normal;
}
int GetObjectType(ObjectGuid guid)
{
for (int i = 0; i < BgObjects.Length; ++i)
@@ -1724,9 +1729,9 @@ namespace Game.BattleGrounds
return _battlegroundTemplate.BattlemasterEntry.Name[Global.WorldMgr.GetDefaultDbcLocale()];
}
public BattlegroundTypeId GetTypeID(bool getRandom = false)
public BattlegroundTypeId GetTypeID()
{
return getRandom ? m_RandomTypeID : _battlegroundTemplate.Id;
return _battlegroundTemplate.Id;
}
public BattlegroundBracketId GetBracketId()
@@ -1790,12 +1795,16 @@ namespace Game.BattleGrounds
return _battlegroundTemplate.GetMinPlayersPerTeam();
}
public BattlegroundPlayer GetBattlegroundPlayerData(ObjectGuid playerGuid)
{
return m_Players.LookupByKey(playerGuid);
}
public virtual void StartingEventCloseDoors() { }
public virtual void StartingEventOpenDoors() { }
public virtual void DestroyGate(Player player, GameObject go) { }
public BattlegroundQueueTypeId GetQueueId() { return m_queueId; }
public uint GetInstanceID() { return m_InstanceID; }
public BattlegroundStatus GetStatus() { return m_Status; }
public uint GetClientInstanceID() { return m_ClientInstanceID; }
@@ -1805,10 +1814,7 @@ namespace Game.BattleGrounds
int GetStartDelayTime() { return m_StartDelayTime; }
public ArenaTypes GetArenaType() { return m_ArenaType; }
PvPTeamId GetWinner() { return _winnerTeamId; }
public bool IsRandom() { return m_IsRandom; }
public void SetQueueId(BattlegroundQueueTypeId queueId) { m_queueId = queueId; }
public void SetRandomTypeID(BattlegroundTypeId TypeID) { m_RandomTypeID = TypeID; }
//here we can count minlevel and maxlevel for players
public void SetInstanceID(uint InstanceID) { m_InstanceID = InstanceID; }
public void SetStatus(BattlegroundStatus Status) { m_Status = Status; }
@@ -1837,7 +1843,6 @@ namespace Game.BattleGrounds
++m_InvitedHorde;
}
public void SetRandom(bool isRandom) { m_IsRandom = isRandom; }
uint GetInvitedCount(Team team) { return (team == Team.Alliance) ? m_InvitedAlliance : m_InvitedHorde; }
public bool IsRated() { return m_IsRated; }
@@ -1927,9 +1932,6 @@ namespace Game.BattleGrounds
// this must be filled inructors!
public uint[] StartMessageIds = new uint[4];
bool m_IsRandom;
public BGHonorMode m_HonorMode;
public uint[] m_TeamScores = new uint[SharedConst.PvpTeamsCount];
protected ObjectGuid[] BgObjects;// = new Dictionary<int, ObjectGuid>();
@@ -1938,8 +1940,6 @@ namespace Game.BattleGrounds
public uint[] Buff_Entries = { BattlegroundConst.SpeedBuff, BattlegroundConst.RegenBuff, BattlegroundConst.BerserkerBuff };
// Battleground
BattlegroundQueueTypeId m_queueId;
BattlegroundTypeId m_RandomTypeID;
uint m_InstanceID; // Battleground Instance's GUID!
BattlegroundStatus m_Status;
uint m_ClientInstanceID; // the instance-id which is sent to the client and without any other internal use
@@ -1993,5 +1993,6 @@ namespace Game.BattleGrounds
public long OfflineRemoveTime; // for tracking and removing offline players from queue after 5 Time.Minutes
public Team Team; // Player's team
public bool Mercenary;
public BattlegroundQueueTypeId queueTypeId;
}
}
+91 -140
View File
@@ -105,7 +105,7 @@ namespace Game.BattleGrounds
}
}
void BuildBattlegroundStatusHeader(BattlefieldStatusHeader header, Battleground bg, Player player, uint ticketId, uint joinTime, BattlegroundQueueTypeId queueId, ArenaTypes arenaType)
void BuildBattlegroundStatusHeader(BattlefieldStatusHeader header, Player player, uint ticketId, uint joinTime, BattlegroundQueueTypeId queueId)
{
header.Ticket = new RideTicket();
header.Ticket.RequesterGuid = player.GetGUID();
@@ -113,11 +113,11 @@ namespace Game.BattleGrounds
header.Ticket.Type = RideType.Battlegrounds;
header.Ticket.Time = (int)joinTime;
header.QueueID.Add(queueId.GetPacked());
header.RangeMin = (byte)bg.GetMinLevel();
header.RangeMax = (byte)bg.GetMaxLevel();
header.TeamSize = (byte)(bg.IsArena() ? arenaType : 0);
header.InstanceID = bg.GetClientInstanceID();
header.RegisteredMatch = bg.IsRated();
header.RangeMin = 0; // seems to always be 0
header.RangeMax = SharedConst.DefaultMaxLevel; // alwyas max level of current expansion. Might be limited to account
header.TeamSize = queueId.TeamSize;
header.InstanceID = 0; // seems to always be 0
header.RegisteredMatch = queueId.Rated;
header.TournamentRules = false;
}
@@ -130,19 +130,19 @@ namespace Game.BattleGrounds
battlefieldStatus.Ticket.Time = (int)joinTime;
}
public void BuildBattlegroundStatusNeedConfirmation(out BattlefieldStatusNeedConfirmation battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, uint timeout, ArenaTypes arenaType)
public void BuildBattlegroundStatusNeedConfirmation(out BattlefieldStatusNeedConfirmation battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, uint timeout, BattlegroundQueueTypeId queueId)
{
battlefieldStatus = new BattlefieldStatusNeedConfirmation();
BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, bg, player, ticketId, joinTime, bg.GetQueueId(), arenaType);
BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, player, ticketId, joinTime, queueId);
battlefieldStatus.Mapid = bg.GetMapId();
battlefieldStatus.Timeout = timeout;
battlefieldStatus.Role = 0;
}
public void BuildBattlegroundStatusActive(out BattlefieldStatusActive battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, ArenaTypes arenaType)
public void BuildBattlegroundStatusActive(out BattlefieldStatusActive battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, BattlegroundQueueTypeId queueId)
{
battlefieldStatus = new BattlefieldStatusActive();
BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, bg, player, ticketId, joinTime, bg.GetQueueId(), arenaType);
BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, player, ticketId, joinTime, queueId);
battlefieldStatus.ShutdownTimer = bg.GetRemainingTime();
battlefieldStatus.ArenaFaction = (byte)(player.GetBGTeam() == Team.Horde ? TeamId.Horde : TeamId.Alliance);
battlefieldStatus.LeftEarly = false;
@@ -150,10 +150,10 @@ namespace Game.BattleGrounds
battlefieldStatus.Mapid = bg.GetMapId();
}
public void BuildBattlegroundStatusQueued(out BattlefieldStatusQueued battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, BattlegroundQueueTypeId queueId, uint avgWaitTime, ArenaTypes arenaType, bool asGroup)
public void BuildBattlegroundStatusQueued(out BattlefieldStatusQueued battlefieldStatus, Player player, uint ticketId, uint joinTime, BattlegroundQueueTypeId queueId, uint avgWaitTime, bool asGroup)
{
battlefieldStatus = new BattlefieldStatusQueued();
BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, bg, player, ticketId, joinTime, queueId, arenaType);
BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, player, ticketId, joinTime, queueId);
battlefieldStatus.AverageWaitTime = avgWaitTime;
battlefieldStatus.AsGroup = asGroup;
battlefieldStatus.SuspendedQueue = false;
@@ -179,7 +179,7 @@ namespace Game.BattleGrounds
if (instanceId == 0)
return null;
if (bgTypeId != BattlegroundTypeId.None || bgTypeId == BattlegroundTypeId.RB || bgTypeId == BattlegroundTypeId.RandomEpic)
if (bgTypeId != BattlegroundTypeId.None || IsRandomBattleground(bgTypeId))
{
var data = bgDataStore.LookupByKey(bgTypeId);
return data.m_Battlegrounds.LookupByKey(instanceId);
@@ -196,14 +196,6 @@ namespace Game.BattleGrounds
return null;
}
public Battleground GetBattlegroundTemplate(BattlegroundTypeId bgTypeId)
{
if (bgDataStore.ContainsKey(bgTypeId))
return bgDataStore[bgTypeId].Template;
return null;
}
uint CreateClientVisibleInstanceId(BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id)
{
if (IsArenaType(bgTypeId))
@@ -230,115 +222,92 @@ namespace Game.BattleGrounds
}
// create a new Battleground that will really be used to play
public Battleground CreateNewBattleground(BattlegroundQueueTypeId queueId, PvpDifficultyRecord bracketEntry)
public Battleground CreateNewBattleground(BattlegroundQueueTypeId queueId, BattlegroundBracketId bracketId)
{
BattlegroundTypeId bgTypeId = GetRandomBG((BattlegroundTypeId)queueId.BattlemasterListId);
// get the template BG
Battleground bg_template = GetBattlegroundTemplate(bgTypeId);
BattlegroundTemplate bg_template = GetBattlegroundTemplateByTypeId(bgTypeId);
if (bg_template == null)
{
Log.outError(LogFilter.Battleground, "Battleground: CreateNewBattleground - bg template not found for {0}", bgTypeId);
Log.outError(LogFilter.Battleground, $"Battleground: CreateNewBattleground - bg template not found for {bgTypeId}");
return null;
}
if (bgTypeId == BattlegroundTypeId.RB || bgTypeId == BattlegroundTypeId.AA || bgTypeId == BattlegroundTypeId.RandomEpic)
return null;
PvpDifficultyRecord bracketEntry = Global.DB2Mgr.GetBattlegroundBracketById((uint)bg_template.BattlemasterEntry.MapId[0], bracketId);
if (bracketEntry == null)
{
Log.outError(LogFilter.Battleground, $"Battleground: CreateNewBattleground: bg bracket entry not found for map {bg_template.BattlemasterEntry.MapId[0]} bracket id {bracketId}");
return null;
}
Battleground bg = null;
// create a copy of the BG template
Battleground bg = bg_template.GetCopy();
switch (bgTypeId)
{
case BattlegroundTypeId.AV:
bg = new BgAlteracValley(bg_template);
break;
case BattlegroundTypeId.WS:
bg = new BgWarsongGluch(bg_template);
break;
case BattlegroundTypeId.AB:
case BattlegroundTypeId.DomAb:
bg = new BgArathiBasin(bg_template);
break;
case BattlegroundTypeId.NA:
bg = new BgNagrandArena(bg_template);
break;
case BattlegroundTypeId.BE:
bg = new BgBladesEdgeArena(bg_template);
break;
case BattlegroundTypeId.EY:
bg = new BgEyeofStorm(bg_template);
break;
case BattlegroundTypeId.RL:
bg = new BgRuinsOfLordaernon(bg_template);
break;
case BattlegroundTypeId.SA:
bg = new BgStrandOfAncients(bg_template);
break;
case BattlegroundTypeId.DS:
bg = new BgDalaranSewers(bg_template);
break;
case BattlegroundTypeId.RV:
bg = new BgTheRingOfValor(bg_template);
break;
case BattlegroundTypeId.IC:
bg = new BgIsleofConquest(bg_template);
break;
case BattlegroundTypeId.TP:
bg = new BgTwinPeaks(bg_template);
break;
case BattlegroundTypeId.BFG:
bg = new BgBattleforGilneas(bg_template);
break;
case BattlegroundTypeId.RB:
case BattlegroundTypeId.AA:
case BattlegroundTypeId.RandomEpic:
default:
return null;
}
bool isRandom = bgTypeId != (BattlegroundTypeId)queueId.BattlemasterListId && !bg.IsArena();
bg.SetQueueId(queueId);
bg.SetBracket(bracketEntry);
bg.SetInstanceID(Global.MapMgr.GenerateInstanceId());
bg.SetClientInstanceID(CreateClientVisibleInstanceId((BattlegroundTypeId)queueId.BattlemasterListId, bracketEntry.GetBracketId()));
bg.Reset(); // reset the new bg (set status to status_wait_queue from status_none)
// reset the new bg (set status to status_wait_queue from status_none)
// this shouldn't be needed anymore as a new Battleground instance is created each time. But some bg sub classes still depend on it.
bg.Reset();
bg.SetStatus(BattlegroundStatus.WaitJoin); // start the joining of the bg
bg.SetArenaType((ArenaTypes)queueId.TeamSize);
bg.SetRandomTypeID(bgTypeId);
bg.SetRated(queueId.Rated);
bg.SetRandom(isRandom);
return bg;
}
// used to create the BG templates
bool CreateBattleground(BattlegroundTemplate bgTemplate)
{
Battleground bg = GetBattlegroundTemplate(bgTemplate.Id);
if (!bg)
{
// Create the BG
switch (bgTemplate.Id)
{
//case BattlegroundTypeId.AV:
// bg = new BattlegroundAV(bgTemplate);
//break;
case BattlegroundTypeId.WS:
bg = new BgWarsongGluch(bgTemplate);
break;
case BattlegroundTypeId.AB:
case BattlegroundTypeId.DomAb:
bg = new BgArathiBasin(bgTemplate);
break;
case BattlegroundTypeId.NA:
bg = new NagrandArena(bgTemplate);
break;
case BattlegroundTypeId.BE:
bg = new BladesEdgeArena(bgTemplate);
break;
case BattlegroundTypeId.EY:
bg = new BgEyeofStorm(bgTemplate);
break;
case BattlegroundTypeId.RL:
bg = new RuinsofLordaeronArena(bgTemplate);
break;
case BattlegroundTypeId.SA:
bg = new BgStrandOfAncients(bgTemplate);
break;
case BattlegroundTypeId.DS:
bg = new DalaranSewersArena(bgTemplate);
break;
case BattlegroundTypeId.RV:
bg = new RingofValorArena(bgTemplate);
break;
//case BattlegroundTypeId.IC:
//bg = new BattlegroundIC(bgTemplate);
//break;
case BattlegroundTypeId.AA:
bg = new Battleground(bgTemplate);
break;
case BattlegroundTypeId.RB:
bg = new Battleground(bgTemplate);
bg.SetRandom(true);
break;
/*
case BattlegroundTypeId.TP:
bg = new BattlegroundTP(bgTemplate);
break;
case BattlegroundTypeId.BFG:
bg = new BattlegroundBFG(bgTemplate);
break;
*/
case BattlegroundTypeId.RandomEpic:
bg = new Battleground(bgTemplate);
bg.SetRandom(true);
break;
default:
return false;
}
}
if (!bgDataStore.ContainsKey(bg.GetTypeID()))
bgDataStore[bg.GetTypeID()] = new BattlegroundData();
bgDataStore[bg.GetTypeID()].Template = bg;
return true;
}
public void LoadBattlegroundTemplates()
{
uint oldMSTime = Time.GetMSTime();
@@ -375,7 +344,7 @@ namespace Game.BattleGrounds
bgTemplate.ScriptId = Global.ObjectMgr.GetScriptId(result.Read<string>(5));
bgTemplate.BattlemasterEntry = bl;
if (bgTemplate.Id != BattlegroundTypeId.AA && bgTemplate.Id != BattlegroundTypeId.RB && bgTemplate.Id != BattlegroundTypeId.RandomEpic)
if (bgTemplate.Id != BattlegroundTypeId.AA && !IsRandomBattleground(bgTemplate.Id))
{
uint startId = result.Read<uint>(1);
WorldSafeLocsEntry start = Global.ObjectMgr.GetWorldSafeLoc(startId);
@@ -402,12 +371,6 @@ namespace Game.BattleGrounds
}
}
if (!CreateBattleground(bgTemplate))
{
Log.outError(LogFilter.Battleground, $"Could not create battleground template class ({bgTemplate.Id})!");
continue;
}
_battlegroundTemplates[bgTypeId] = bgTemplate;
if (bgTemplate.BattlemasterEntry.MapId[1] == -1) // in this case we have only one mapId
@@ -458,6 +421,11 @@ namespace Game.BattleGrounds
|| bgTypeId == BattlegroundTypeId.DS || bgTypeId == BattlegroundTypeId.RV || bgTypeId == BattlegroundTypeId.RL;
}
public bool IsRandomBattleground(BattlegroundTypeId battlemasterListId)
{
return battlemasterListId == BattlegroundTypeId.RB || battlemasterListId == BattlegroundTypeId.RandomEpic;
}
public BattlegroundQueueTypeId BGQueueTypeId(ushort battlemasterListId, BattlegroundQueueIdType type, bool rated, ArenaTypes teamSize)
{
return new BattlegroundQueueTypeId(battlemasterListId, (byte)type, rated, (byte)teamSize);
@@ -475,23 +443,6 @@ namespace Game.BattleGrounds
Global.WorldMgr.SendWorldText(m_ArenaTesting ? CypherStrings.DebugArenaOn : CypherStrings.DebugArenaOff);
}
public void ResetHolidays()
{
for (var i = BattlegroundTypeId.AV; i < BattlegroundTypeId.Max; i++)
{
Battleground bg = GetBattlegroundTemplate(i);
if (bg != null)
bg.SetHoliday(false);
}
}
public void SetHolidayActive(uint battlegroundId)
{
Battleground bg = GetBattlegroundTemplate((BattlegroundTypeId)battlegroundId);
if (bg != null)
bg.SetHoliday(true);
}
public bool IsValidQueueId(BattlegroundQueueTypeId bgQueueTypeId)
{
BattlemasterListRecord battlemasterList = CliDB.BattlemasterListStorage.LookupByKey(bgQueueTypeId.BattlemasterListId);
@@ -521,9 +472,9 @@ namespace Game.BattleGrounds
case BattlegroundQueueIdType.ArenaSkirmish:
if (battlemasterList.InstanceType != (int)MapTypes.Arena)
return false;
if (bgQueueTypeId.Rated)
if (!bgQueueTypeId.Rated)
return false;
if (bgQueueTypeId.TeamSize != 0)
if (bgQueueTypeId.TeamSize != (int)ArenaTypes.Team3v3)
return false;
break;
default:
@@ -700,19 +651,19 @@ namespace Game.BattleGrounds
return BattlegroundTypeId.None;
}
public List<Battleground> GetBGFreeSlotQueueStore(BattlegroundQueueTypeId bgTypeId)
public List<Battleground> GetBGFreeSlotQueueStore(uint mapId)
{
return m_BGFreeSlotQueue[bgTypeId];
return m_BGFreeSlotQueue[mapId];
}
public void AddToBGFreeSlotQueue(BattlegroundQueueTypeId bgTypeId, Battleground bg)
public void AddToBGFreeSlotQueue(Battleground bg)
{
m_BGFreeSlotQueue.Add(bgTypeId, bg);
m_BGFreeSlotQueue.Add(bg.GetMapId(), bg);
}
public void RemoveFromBGFreeSlotQueue(BattlegroundQueueTypeId bgTypeId, uint instanceId)
public void RemoveFromBGFreeSlotQueue(uint mapId, uint instanceId)
{
var queues = m_BGFreeSlotQueue[bgTypeId];
var queues = m_BGFreeSlotQueue[mapId];
foreach (var bg in queues)
{
if (bg.GetInstanceID() == instanceId)
@@ -750,7 +701,7 @@ namespace Game.BattleGrounds
return mBattleMastersMap.LookupByKey(entry);
}
BattlegroundTemplate GetBattlegroundTemplateByTypeId(BattlegroundTypeId id)
public BattlegroundTemplate GetBattlegroundTemplateByTypeId(BattlegroundTypeId id)
{
return _battlegroundTemplates.LookupByKey(id);
}
@@ -762,7 +713,7 @@ namespace Game.BattleGrounds
Dictionary<BattlegroundTypeId, BattlegroundData> bgDataStore = new();
Dictionary<BattlegroundQueueTypeId, BattlegroundQueue> m_BattlegroundQueues = new();
MultiMap<BattlegroundQueueTypeId, Battleground> m_BGFreeSlotQueue = new();
MultiMap<uint, Battleground> m_BGFreeSlotQueue = new();
Dictionary<uint, BattlegroundTypeId> mBattleMastersMap = new();
Dictionary<BattlegroundTypeId, BattlegroundTemplate> _battlegroundTemplates = new();
Dictionary<uint, BattlegroundTemplate> _battlegroundMapTemplates = new();
+59 -62
View File
@@ -115,10 +115,9 @@ namespace Game.BattleGrounds
//announce to world, this code needs mutex
if (!m_queueId.Rated && !isPremade && WorldConfig.GetBoolValue(WorldCfg.BattlegroundQueueAnnouncerEnable))
{
Battleground bg = Global.BattlegroundMgr.GetBattlegroundTemplate((BattlegroundTypeId)m_queueId.BattlemasterListId);
if (bg)
BattlegroundTemplate bg = Global.BattlegroundMgr.GetBattlegroundTemplateByTypeId((BattlegroundTypeId)m_queueId.BattlemasterListId);
if (bg != null)
{
string bgName = bg.GetName();
uint MinPlayers = bg.GetMinPlayersPerTeam();
uint qHorde = 0;
uint qAlliance = 0;
@@ -135,18 +134,17 @@ namespace Game.BattleGrounds
// Show queue status to player only (when joining queue)
if (WorldConfig.GetBoolValue(WorldCfg.BattlegroundQueueAnnouncerPlayeronly))
{
leader.SendSysMessage(CypherStrings.BgQueueAnnounceSelf, bgName, q_min_level, q_max_level,
leader.SendSysMessage(CypherStrings.BgQueueAnnounceSelf, bg.BattlemasterEntry.Name[Global.WorldMgr.GetDefaultDbcLocale()], q_min_level, q_max_level,
qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : 0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : 0);
}
// System message
else
{
Global.WorldMgr.SendWorldText(CypherStrings.BgQueueAnnounceWorld, bgName, q_min_level, q_max_level,
Global.WorldMgr.SendWorldText(CypherStrings.BgQueueAnnounceWorld, bg.BattlemasterEntry.Name[Global.WorldMgr.GetDefaultDbcLocale()], q_min_level, q_max_level,
qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : 0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : 0);
}
}
}
//release mutex
}
return ginfo;
@@ -364,8 +362,8 @@ namespace Game.BattleGrounds
// not yet invited
// set invitation
ginfo.IsInvitedToBGInstanceGUID = bg.GetInstanceID();
BattlegroundTypeId bgTypeId = bg.GetTypeID();
BattlegroundQueueTypeId bgQueueTypeId = bg.GetQueueId();
BattlegroundTypeId bgTypeId = (BattlegroundTypeId)m_queueId.BattlemasterListId;
BattlegroundQueueTypeId bgQueueTypeId = m_queueId;
BattlegroundBracketId bracket_id = bg.GetBracketId();
// set ArenaTeamId for rated matches
@@ -392,7 +390,7 @@ namespace Game.BattleGrounds
player.SetInviteForBattlegroundQueueType(bgQueueTypeId, ginfo.IsInvitedToBGInstanceGUID);
// create remind invite events
BGQueueInviteEvent inviteEvent = new(player.GetGUID(), ginfo.IsInvitedToBGInstanceGUID, bgTypeId, (ArenaTypes)m_queueId.TeamSize, ginfo.RemoveInviteTime);
BGQueueInviteEvent inviteEvent = new(player.GetGUID(), ginfo.IsInvitedToBGInstanceGUID, bgTypeId, ginfo.RemoveInviteTime, m_queueId);
m_events.AddEvent(inviteEvent, m_events.CalculateTime(TimeSpan.FromMilliseconds(BattlegroundConst.InvitationRemindTime)));
// create automatic remove events
BGQueueRemoveEvent removeEvent = new(player.GetGUID(), ginfo.IsInvitedToBGInstanceGUID, bgQueueTypeId, ginfo.RemoveInviteTime);
@@ -401,10 +399,10 @@ namespace Game.BattleGrounds
uint queueSlot = player.GetBattlegroundQueueIndex(bgQueueTypeId);
Log.outDebug(LogFilter.Battleground, "Battleground: invited player {0} ({1}) to BG instance {2} queueindex {3} bgtype {4}",
player.GetName(), player.GetGUID().ToString(), bg.GetInstanceID(), queueSlot, bg.GetTypeID());
player.GetName(), player.GetGUID().ToString(), bg.GetInstanceID(), queueSlot, m_queueId.BattlemasterListId);
BattlefieldStatusNeedConfirmation battlefieldStatus;
Global.BattlegroundMgr.BuildBattlegroundStatusNeedConfirmation(out battlefieldStatus, bg, player, queueSlot, player.GetBattlegroundQueueJoinTime(bgQueueTypeId), BattlegroundConst.InviteAcceptWaitTime, (ArenaTypes)m_queueId.TeamSize);
Global.BattlegroundMgr.BuildBattlegroundStatusNeedConfirmation(out battlefieldStatus, bg, player, queueSlot, player.GetBattlegroundQueueJoinTime(bgQueueTypeId), BattlegroundConst.InviteAcceptWaitTime, bgQueueTypeId);
player.SendPacket(battlefieldStatus);
}
return true;
@@ -589,15 +587,15 @@ namespace Game.BattleGrounds
}
// this method tries to create Battleground or arena with MinPlayersPerTeam against MinPlayersPerTeam
bool CheckNormalMatch(Battleground bg_template, BattlegroundBracketId bracket_id, uint minPlayers, uint maxPlayers)
bool CheckNormalMatch(BattlegroundBracketId bracketId, uint minPlayers, uint maxPlayers)
{
int[] teamIndex = new int[SharedConst.PvpTeamsCount];
for (uint i = 0; i < SharedConst.PvpTeamsCount; i++)
{
teamIndex[i] = 0;
for (; teamIndex[i] != m_QueuedGroups[(int)bracket_id][BattlegroundConst.BgQueueNormalAlliance + i].Count; ++teamIndex[i])
for (; teamIndex[i] != m_QueuedGroups[(int)bracketId][BattlegroundConst.BgQueueNormalAlliance + i].Count; ++teamIndex[i])
{
var groupQueueInfo = m_QueuedGroups[(int)bracket_id][BattlegroundConst.BgQueueNormalAlliance + i][teamIndex[i]];
var groupQueueInfo = m_QueuedGroups[(int)bracketId][BattlegroundConst.BgQueueNormalAlliance + i][teamIndex[i]];
if (groupQueueInfo.IsInvitedToBGInstanceGUID == 0)
{
m_SelectionPools[i].AddGroup(groupQueueInfo, maxPlayers);
@@ -616,9 +614,9 @@ namespace Game.BattleGrounds
{
//we will try to invite more groups to team with less players indexed by j
++(teamIndex[j]); //this will not cause a crash, because for cycle above reached break;
for (; teamIndex[j] != m_QueuedGroups[(int)bracket_id][BattlegroundConst.BgQueueNormalAlliance + j].Count; ++teamIndex[j])
for (; teamIndex[j] != m_QueuedGroups[(int)bracketId][BattlegroundConst.BgQueueNormalAlliance + j].Count; ++teamIndex[j])
{
var groupQueueInfo = m_QueuedGroups[(int)bracket_id][BattlegroundConst.BgQueueNormalAlliance + j][teamIndex[j]];
var groupQueueInfo = m_QueuedGroups[(int)bracketId][BattlegroundConst.BgQueueNormalAlliance + j][teamIndex[j]];
if (groupQueueInfo.IsInvitedToBGInstanceGUID == 0)
if (!m_SelectionPools[j].AddGroup(groupQueueInfo, m_SelectionPools[(j + 1) % SharedConst.PvpTeamsCount].GetPlayerCount()))
break;
@@ -725,48 +723,48 @@ namespace Game.BattleGrounds
// Battleground with free slot for player should be always in the beggining of the queue
// maybe it would be better to create bgfreeslotqueue for each bracket_id
var bgQueues = Global.BattlegroundMgr.GetBGFreeSlotQueueStore(m_queueId);
foreach (var bg in bgQueues)
{
// DO NOT allow queue manager to invite new player to rated games
if (!bg.IsRated() && bg.GetBracketId() == bracket_id &&
bg.GetStatus() > BattlegroundStatus.WaitQueue && bg.GetStatus() < BattlegroundStatus.WaitLeave)
{
// clear selection pools
m_SelectionPools[TeamId.Alliance].Init();
m_SelectionPools[TeamId.Horde].Init();
// call a function that does the job for us
FillPlayersToBG(bg, bracket_id);
// now everything is set, invite players
foreach (var queueInfo in m_SelectionPools[TeamId.Alliance].SelectedGroups)
InviteGroupToBG(queueInfo, bg, queueInfo.Team);
foreach (var queueInfo in m_SelectionPools[TeamId.Horde].SelectedGroups)
InviteGroupToBG(queueInfo, bg, queueInfo.Team);
if (!bg.HasFreeSlots())
bg.RemoveFromBGFreeSlotQueue();
}
}
// finished iterating through the bgs with free slots, maybe we need to create a new bg
Battleground bg_template = Global.BattlegroundMgr.GetBattlegroundTemplate((BattlegroundTypeId)m_queueId.BattlemasterListId);
if (!bg_template)
BattlegroundTemplate bg_template = Global.BattlegroundMgr.GetBattlegroundTemplateByTypeId((BattlegroundTypeId)m_queueId.BattlemasterListId);
if (bg_template == null)
{
Log.outError(LogFilter.Battleground, $"Battleground: Update: bg template not found for {m_queueId.BattlemasterListId}");
return;
}
PvpDifficultyRecord bracketEntry = Global.DB2Mgr.GetBattlegroundBracketById(bg_template.GetMapId(), bracket_id);
if (bracketEntry == null)
// loop over queues for every map
foreach (var mapId in bg_template.BattlemasterEntry.MapId)
{
Log.outError(LogFilter.Battleground, "Battleground: Update: bg bracket entry not found for map {0} bracket id {1}", bg_template.GetMapId(), bracket_id);
return;
if (mapId == -1)
break;
var bgQueues = Global.BattlegroundMgr.GetBGFreeSlotQueueStore((uint)mapId);
foreach (var bg in bgQueues)
{
// DO NOT allow queue manager to invite new player to rated games
if (!bg.IsRated() && bg.GetBracketId() == bracket_id &&
bg.GetStatus() > BattlegroundStatus.WaitQueue && bg.GetStatus() < BattlegroundStatus.WaitLeave)
{
// clear selection pools
m_SelectionPools[TeamId.Alliance].Init();
m_SelectionPools[TeamId.Horde].Init();
// call a function that does the job for us
FillPlayersToBG(bg, bracket_id);
// now everything is set, invite players
foreach (var queueInfo in m_SelectionPools[TeamId.Alliance].SelectedGroups)
InviteGroupToBG(queueInfo, bg, queueInfo.Team);
foreach (var queueInfo in m_SelectionPools[TeamId.Horde].SelectedGroups)
InviteGroupToBG(queueInfo, bg, queueInfo.Team);
if (!bg.HasFreeSlots())
bg.RemoveFromBGFreeSlotQueue();
}
}
}
// finished iterating through the bgs with free slots, maybe we need to create a new bg
// get the min. players per team, properly for larger arenas as well. (must have full teams for arena matches!)
uint MinPlayersPerTeam = bg_template.GetMinPlayersPerTeam();
uint MaxPlayersPerTeam = bg_template.GetMaxPlayersPerTeam();
@@ -782,12 +780,12 @@ namespace Game.BattleGrounds
m_SelectionPools[TeamId.Alliance].Init();
m_SelectionPools[TeamId.Horde].Init();
if (bg_template.IsBattleground())
if (!bg_template.IsArena())
{
if (CheckPremadeMatch(bracket_id, MinPlayersPerTeam, MaxPlayersPerTeam))
{
// create new Battleground
Battleground bg2 = Global.BattlegroundMgr.CreateNewBattleground(m_queueId, bracketEntry);
Battleground bg2 = Global.BattlegroundMgr.CreateNewBattleground(m_queueId, bracket_id);
if (bg2 == null)
{
Log.outError(LogFilter.Battleground, $"BattlegroundQueue.Update - Cannot create Battleground: {m_queueId.BattlemasterListId}");
@@ -809,11 +807,11 @@ namespace Game.BattleGrounds
if (!m_queueId.Rated)
{
// if there are enough players in pools, start new Battleground or non rated arena
if (CheckNormalMatch(bg_template, bracket_id, MinPlayersPerTeam, MaxPlayersPerTeam)
if (CheckNormalMatch(bracket_id, MinPlayersPerTeam, MaxPlayersPerTeam)
|| (bg_template.IsArena() && CheckSkirmishForSameFaction(bracket_id, MinPlayersPerTeam)))
{
// we successfully created a pool
Battleground bg2 = Global.BattlegroundMgr.CreateNewBattleground(m_queueId, bracketEntry);
Battleground bg2 = Global.BattlegroundMgr.CreateNewBattleground(m_queueId, bracket_id);
if (bg2 == null)
{
Log.outError(LogFilter.Battleground, $"BattlegroundQueue.Update - Cannot create Battleground: {m_queueId.BattlemasterListId}");
@@ -912,7 +910,7 @@ namespace Game.BattleGrounds
{
GroupQueueInfo aTeam = queueArray[TeamId.Alliance];
GroupQueueInfo hTeam = queueArray[TeamId.Horde];
Battleground arena = Global.BattlegroundMgr.CreateNewBattleground(m_queueId, bracketEntry);
Battleground arena = Global.BattlegroundMgr.CreateNewBattleground(m_queueId, bracket_id);
if (!arena)
{
Log.outError(LogFilter.Battleground, "BattlegroundQueue.Update couldn't create arena instance for rated arena match!");
@@ -1145,13 +1143,13 @@ namespace Game.BattleGrounds
/// </summary>
class BGQueueInviteEvent : BasicEvent
{
public BGQueueInviteEvent(ObjectGuid plGuid, uint bgInstanceGUID, BattlegroundTypeId bgTypeId, ArenaTypes arenaType, uint removeTime)
public BGQueueInviteEvent(ObjectGuid plGuid, uint bgInstanceGUID, BattlegroundTypeId bgTypeId, uint removeTime, BattlegroundQueueTypeId queueId)
{
m_PlayerGuid = plGuid;
m_BgInstanceGUID = bgInstanceGUID;
m_BgTypeId = bgTypeId;
m_ArenaType = arenaType;
m_RemoveTime = removeTime;
m_QueueId = queueId;
}
public override bool Execute(ulong e_time, uint p_time)
@@ -1166,16 +1164,15 @@ namespace Game.BattleGrounds
if (bg == null)
return true;
BattlegroundQueueTypeId bgQueueTypeId = bg.GetQueueId();
uint queueSlot = player.GetBattlegroundQueueIndex(bgQueueTypeId);
uint queueSlot = player.GetBattlegroundQueueIndex(m_QueueId);
if (queueSlot < SharedConst.PvpTeamsCount) // player is in queue or in Battleground
{
// check if player is invited to this bg
BattlegroundQueue bgQueue = Global.BattlegroundMgr.GetBattlegroundQueue(bgQueueTypeId);
BattlegroundQueue bgQueue = Global.BattlegroundMgr.GetBattlegroundQueue(m_QueueId);
if (bgQueue.IsPlayerInvited(m_PlayerGuid, m_BgInstanceGUID, m_RemoveTime))
{
BattlefieldStatusNeedConfirmation battlefieldStatus;
Global.BattlegroundMgr.BuildBattlegroundStatusNeedConfirmation(out battlefieldStatus, bg, player, queueSlot, player.GetBattlegroundQueueJoinTime(bgQueueTypeId), BattlegroundConst.InviteAcceptWaitTime - BattlegroundConst.InvitationRemindTime, m_ArenaType);
Global.BattlegroundMgr.BuildBattlegroundStatusNeedConfirmation(out battlefieldStatus, bg, player, queueSlot, player.GetBattlegroundQueueJoinTime(m_QueueId), BattlegroundConst.InviteAcceptWaitTime - BattlegroundConst.InvitationRemindTime, m_QueueId);
player.SendPacket(battlefieldStatus);
}
}
@@ -1187,8 +1184,8 @@ namespace Game.BattleGrounds
ObjectGuid m_PlayerGuid;
uint m_BgInstanceGUID;
BattlegroundTypeId m_BgTypeId;
ArenaTypes m_ArenaType;
uint m_RemoveTime;
BattlegroundQueueTypeId m_QueueId;
}
/// <summary>
@@ -3,7 +3,8 @@
namespace Game.BattleGrounds.Zones
{
class AlteracValley
class BgAlteracValley : Battleground
{
public BgAlteracValley(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate) { }
}
}
@@ -208,10 +208,10 @@ namespace Game.BattleGrounds.Zones
TriggerGameEvent(EventStartBattle);
}
public override void AddPlayer(Player player)
public override void AddPlayer(Player player, BattlegroundQueueTypeId queueId)
{
bool isInBattleground = IsPlayerInBattleground(player.GetGUID());
base.AddPlayer(player);
base.AddPlayer(player, queueId);
if (!isInBattleground)
PlayerScores[player.GetGUID()] = new BattlegroundABScore(player.GetGUID(), player.GetBGTeam());
}
@@ -3,7 +3,8 @@
namespace Game.BattleGrounds.Zones
{
class BattleforGilneas
class BgBattleforGilneas : Battleground
{
public BgBattleforGilneas(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate) { }
}
}
@@ -0,0 +1,10 @@
// 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.
namespace Game.BattleGrounds.Zones
{
class BgBladesEdgeArena : Battleground
{
public BgBladesEdgeArena(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate) { }
}
}
@@ -0,0 +1,10 @@
// 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.
namespace Game.BattleGrounds.Zones
{
class BgDalaranSewers : Battleground
{
public BgDalaranSewers(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate) { }
}
}
@@ -3,7 +3,8 @@
namespace Game.BattleGrounds.Zones
{
class DeepwindGorge
class BgDeepwindGorge : Battleground
{
public BgDeepwindGorge(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate) { }
}
}
+6 -21
View File
@@ -1,25 +1,10 @@
/*
* Copyright (C) 2012-2016 CypherCore <http://github.com/CypherCore>
*
* 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 3 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, see <http://www.gnu.org/licenses/>.
*/
// 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 Game.Entities;
using Framework.Constants;
using System.Collections.Generic;
using Game.Entities;
using Game.Networking.Packets;
using Game.DataStorage;
using System.Collections.Generic;
namespace Game.BattleGrounds.Zones
{
@@ -367,10 +352,10 @@ namespace Game.BattleGrounds.Zones
}
}
public override void AddPlayer(Player player)
public override void AddPlayer(Player player, BattlegroundQueueTypeId queueId)
{
bool isInBattleground = IsPlayerInBattleground(player.GetGUID());
base.AddPlayer(player);
base.AddPlayer(player, queueId);
if (!isInBattleground)
PlayerScores[player.GetGUID()] = new BgEyeOfStormScore(player.GetGUID(), player.GetBGTeam());
@@ -3,8 +3,9 @@
namespace Game.BattleGrounds.Zones
{
class IsleofConquest
class BgIsleofConquest : Battleground
{
public BgIsleofConquest(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate) { }
}
public struct ICCreatures
@@ -0,0 +1,10 @@
// 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.
namespace Game.BattleGrounds.Zones
{
class BgNagrandArena : Battleground
{
public BgNagrandArena(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate) { }
}
}
@@ -0,0 +1,10 @@
// 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.
namespace Game.BattleGrounds.Zones
{
class BgRuinsOfLordaernon : Battleground
{
public BgRuinsOfLordaernon(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate) { }
}
}
@@ -3,7 +3,8 @@
namespace Game.BattleGrounds.Zones
{
class SilvershardMines
class BgSilvershardMines : Battleground
{
public BgSilvershardMines(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate) { }
}
}
@@ -416,10 +416,10 @@ namespace Game.BattleGrounds.Zones
}
}
public override void AddPlayer(Player player)
public override void AddPlayer(Player player, BattlegroundQueueTypeId queueId)
{
bool isInBattleground = IsPlayerInBattleground(player.GetGUID());
base.AddPlayer(player);
base.AddPlayer(player, queueId);
if (!isInBattleground)
PlayerScores[player.GetGUID()] = new BattlegroundSAScore(player.GetGUID(), player.GetBGTeam());
@@ -3,7 +3,8 @@
namespace Game.BattleGrounds.Zones
{
class TempleofKotmogu
class BgTempleofKotmogu : Battleground
{
public BgTempleofKotmogu(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate) { }
}
}
@@ -0,0 +1,10 @@
// 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.
namespace Game.BattleGrounds.Zones
{
class BgTheRingOfValor : Battleground
{
public BgTheRingOfValor(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate) { }
}
}
+2 -1
View File
@@ -3,7 +3,8 @@
namespace Game.BattleGrounds.Zones
{
class TwinPeaks
class BgTwinPeaks : Battleground
{
public BgTwinPeaks(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate) { }
}
}
@@ -184,10 +184,10 @@ namespace Game.BattleGrounds.Zones
TriggerGameEvent(8563);
}
public override void AddPlayer(Player player)
public override void AddPlayer(Player player, BattlegroundQueueTypeId queueId)
{
bool isInBattleground = IsPlayerInBattleground(player.GetGUID());
base.AddPlayer(player);
base.AddPlayer(player, queueId);
if (!isInBattleground)
PlayerScores[player.GetGUID()] = new BattlegroundWGScore(player.GetGUID(), player.GetBGTeam());
}
@@ -320,7 +320,7 @@ namespace Game.BattleGrounds.Zones
UpdateWorldState(WSGWorldStates.FlagStateHorde, 1);
UpdateWorldState(WSGWorldStates.StateTimerActive, 0);
RewardHonorToTeam(Honor[(int)m_HonorMode][(int)WSGRewards.Win], winner);
RewardHonorToTeam(Honor[Global.BattlegroundMgr.IsBGWeekend(BattlegroundTypeId.WS) ? 1 : 0][(int)WSGRewards.Win], winner);
EndBattleground(winner);
}
else