Core/DataStores: Removed hardcoded cap for taxi nodes mask

Port From (https://github.com/TrinityCore/TrinityCore/commit/376dc7402a41a03b4c5bc718863c1e0eb410ebec)
This commit is contained in:
hondacrx
2022-06-01 17:19:30 -04:00
parent a99d430a9c
commit 386122e247
6 changed files with 25 additions and 20 deletions
@@ -45,8 +45,6 @@ namespace Framework.Constants
public const uint infinityCooldownDelayCheck = Time.Month / 2; public const uint infinityCooldownDelayCheck = Time.Month / 2;
public const int MaxPlayerSummonDelay = 2 * Time.Minute; public const int MaxPlayerSummonDelay = 2 * Time.Minute;
public const int TaxiMaskSize = 345;
// corpse reclaim times // corpse reclaim times
public const int DeathExpireStep = (5 * Time.Minute); public const int DeathExpireStep = (5 * Time.Minute);
public const int MaxDeathCount = 3; public const int MaxDeathCount = 3;
+10 -4
View File
@@ -370,6 +370,12 @@ namespace Game.DataStorage
foreach (var entry in TaxiPathNodeStorage.Values) foreach (var entry in TaxiPathNodeStorage.Values)
TaxiPathNodesByPath[entry.PathID][entry.NodeIndex] = entry; TaxiPathNodesByPath[entry.PathID][entry.NodeIndex] = entry;
var taxiMaskSize = ((TaxiNodesStorage.Count - 1) / 8) + 1;
TaxiNodesMask = new byte[taxiMaskSize];
OldContinentsNodesMask = new byte[taxiMaskSize];
HordeTaxiNodesMask = new byte[taxiMaskSize];
AllianceTaxiNodesMask = new byte[taxiMaskSize];
foreach (var node in TaxiNodesStorage.Values) foreach (var node in TaxiNodesStorage.Values)
{ {
if (!node.Flags.HasAnyFlag(TaxiNodeFlags.Alliance | TaxiNodeFlags.Horde)) if (!node.Flags.HasAnyFlag(TaxiNodeFlags.Alliance | TaxiNodeFlags.Horde))
@@ -754,10 +760,10 @@ namespace Game.DataStorage
#endregion #endregion
#region Taxi Collections #region Taxi Collections
public static byte[] TaxiNodesMask = new byte[PlayerConst.TaxiMaskSize]; public static byte[] TaxiNodesMask;
public static byte[] OldContinentsNodesMask = new byte[PlayerConst.TaxiMaskSize]; public static byte[] OldContinentsNodesMask;
public static byte[] HordeTaxiNodesMask = new byte[PlayerConst.TaxiMaskSize]; public static byte[] HordeTaxiNodesMask;
public static byte[] AllianceTaxiNodesMask = new byte[PlayerConst.TaxiMaskSize]; public static byte[] AllianceTaxiNodesMask;
public static Dictionary<uint, Dictionary<uint, TaxiPathBySourceAndDestination>> TaxiPathSetBySource = new(); public static Dictionary<uint, Dictionary<uint, TaxiPathBySourceAndDestination>> TaxiPathSetBySource = new();
public static Dictionary<uint, TaxiPathNodeRecord[]> TaxiPathNodesByPath = new(); public static Dictionary<uint, TaxiPathNodeRecord[]> TaxiPathNodesByPath = new();
#endregion #endregion
+2 -2
View File
@@ -3434,7 +3434,7 @@ namespace Game.Entities
stmt.AddValue(index++, transLowGUID); stmt.AddValue(index++, transLowGUID);
StringBuilder ss = new(); StringBuilder ss = new();
for (int i = 0; i < PlayerConst.TaxiMaskSize; ++i) for (int i = 0; i < m_taxi.m_taximask.Length; ++i)
ss.Append(m_taxi.m_taximask[i] + " "); ss.Append(m_taxi.m_taximask[i] + " ");
stmt.AddValue(index++, ss.ToString()); stmt.AddValue(index++, ss.ToString());
@@ -3575,7 +3575,7 @@ namespace Game.Entities
stmt.AddValue(index++, transLowGUID); stmt.AddValue(index++, transLowGUID);
StringBuilder ss = new(); StringBuilder ss = new();
for (int i = 0; i < PlayerConst.TaxiMaskSize; ++i) for (int i = 0; i < m_taxi.m_taximask.Length; ++i)
ss.Append(m_taxi.m_taximask[i] + " "); ss.Append(m_taxi.m_taximask[i] + " ");
stmt.AddValue(index++, ss.ToString()); stmt.AddValue(index++, ss.ToString());
+10 -9
View File
@@ -27,7 +27,7 @@ namespace Game.Entities
{ {
public class PlayerTaxi public class PlayerTaxi
{ {
public byte[] m_taximask = new byte[PlayerConst.TaxiMaskSize]; public byte[] m_taximask;
List<uint> m_TaxiDestinations = new(); List<uint> m_TaxiDestinations = new();
uint m_flightMasterFactionId; uint m_flightMasterFactionId;
@@ -37,7 +37,8 @@ namespace Game.Entities
if (chrClass == Class.Deathknight) if (chrClass == Class.Deathknight)
{ {
var factionMask = Player.TeamForRace(race) == Team.Horde ? CliDB.HordeTaxiNodesMask : CliDB.AllianceTaxiNodesMask; var factionMask = Player.TeamForRace(race) == Team.Horde ? CliDB.HordeTaxiNodesMask : CliDB.AllianceTaxiNodesMask;
for (int i = 0; i < PlayerConst.TaxiMaskSize; ++i) m_taximask = new byte[factionMask.Length];
for (int i = 0; i < factionMask.Length; ++i)
m_taximask[i] |= (byte)(CliDB.OldContinentsNodesMask[i] & factionMask[i]); m_taximask[i] |= (byte)(CliDB.OldContinentsNodesMask[i] & factionMask[i]);
} }
@@ -107,7 +108,7 @@ namespace Game.Entities
var split = new StringArray(data, ' '); var split = new StringArray(data, ' ');
int index = 0; int index = 0;
for (var i = 0; index < PlayerConst.TaxiMaskSize && i != split.Length; ++i, ++index) for (var i = 0; index < m_taximask.Length && i != split.Length; ++i, ++index)
{ {
// load and set bits only for existing taxi nodes // load and set bits only for existing taxi nodes
if (uint.TryParse(split[i], out uint id)) if (uint.TryParse(split[i], out uint id))
@@ -117,18 +118,18 @@ namespace Game.Entities
public void AppendTaximaskTo(ShowTaxiNodes data, bool all) public void AppendTaximaskTo(ShowTaxiNodes data, bool all)
{ {
data.CanLandNodes = new byte[PlayerConst.TaxiMaskSize]; data.CanLandNodes = new byte[CliDB.TaxiNodesMask.Length];
data.CanUseNodes = new byte[PlayerConst.TaxiMaskSize]; data.CanUseNodes = new byte[CliDB.TaxiNodesMask.Length];
if (all) if (all)
{ {
Buffer.BlockCopy(CliDB.TaxiNodesMask, 0, data.CanLandNodes, 0, PlayerConst.TaxiMaskSize); // all existed nodes Buffer.BlockCopy(CliDB.TaxiNodesMask, 0, data.CanLandNodes, 0, data.CanLandNodes.Length); // all existed nodes
Buffer.BlockCopy(CliDB.TaxiNodesMask, 0, data.CanLandNodes, 0, PlayerConst.TaxiMaskSize); Buffer.BlockCopy(CliDB.TaxiNodesMask, 0, data.CanUseNodes, 0, data.CanUseNodes.Length);
} }
else else
{ {
Buffer.BlockCopy(m_taximask, 0, data.CanLandNodes, 0, PlayerConst.TaxiMaskSize); // known nodes Buffer.BlockCopy(m_taximask, 0, data.CanLandNodes, 0, data.CanLandNodes.Length); // known nodes
Buffer.BlockCopy(m_taximask, 0, data.CanUseNodes, 0, PlayerConst.TaxiMaskSize); Buffer.BlockCopy(m_taximask, 0, data.CanUseNodes, 0, data.CanUseNodes.Length);
} }
} }
+1 -1
View File
@@ -1924,7 +1924,7 @@ namespace Game
var factionMask = newTeamId == TeamId.Horde ? CliDB.HordeTaxiNodesMask : CliDB.AllianceTaxiNodesMask; var factionMask = newTeamId == TeamId.Horde ? CliDB.HordeTaxiNodesMask : CliDB.AllianceTaxiNodesMask;
for (int i = 0; i < PlayerConst.TaxiMaskSize; ++i) for (int i = 0; i < factionMask.Length; ++i)
{ {
// i = (315 - 1) / 8 = 39 // i = (315 - 1) / 8 = 39
// m = 1 << ((315 - 1) % 8) = 4 // m = 1 << ((315 - 1) % 8) = 4
+2 -2
View File
@@ -112,9 +112,9 @@ namespace Game
GetPlayer().m_taxi.AppendTaximaskTo(data, lastTaxiCheaterState); GetPlayer().m_taxi.AppendTaximaskTo(data, lastTaxiCheaterState);
byte[] reachableNodes = new byte[PlayerConst.TaxiMaskSize]; byte[] reachableNodes = new byte[CliDB.TaxiNodesMask.Length];
Global.TaxiPathGraph.GetReachableNodesMask(CliDB.TaxiNodesStorage.LookupByKey(curloc), reachableNodes); Global.TaxiPathGraph.GetReachableNodesMask(CliDB.TaxiNodesStorage.LookupByKey(curloc), reachableNodes);
for (var i = 0; i < PlayerConst.TaxiMaskSize; ++i) for (var i = 0; i < reachableNodes.Length; ++i)
{ {
data.CanLandNodes[i] &= reachableNodes[i]; data.CanLandNodes[i] &= reachableNodes[i];
data.CanUseNodes[i] &= reachableNodes[i]; data.CanUseNodes[i] &= reachableNodes[i];