Core/DataStores: Removed hardcoded cap for taxi nodes mask
Port From (https://github.com/TrinityCore/TrinityCore/commit/376dc7402a41a03b4c5bc718863c1e0eb410ebec)
This commit is contained in:
@@ -45,8 +45,6 @@ namespace Framework.Constants
|
||||
public const uint infinityCooldownDelayCheck = Time.Month / 2;
|
||||
public const int MaxPlayerSummonDelay = 2 * Time.Minute;
|
||||
|
||||
public const int TaxiMaskSize = 345;
|
||||
|
||||
// corpse reclaim times
|
||||
public const int DeathExpireStep = (5 * Time.Minute);
|
||||
public const int MaxDeathCount = 3;
|
||||
|
||||
@@ -370,6 +370,12 @@ namespace Game.DataStorage
|
||||
foreach (var entry in TaxiPathNodeStorage.Values)
|
||||
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)
|
||||
{
|
||||
if (!node.Flags.HasAnyFlag(TaxiNodeFlags.Alliance | TaxiNodeFlags.Horde))
|
||||
@@ -754,10 +760,10 @@ namespace Game.DataStorage
|
||||
#endregion
|
||||
|
||||
#region Taxi Collections
|
||||
public static byte[] TaxiNodesMask = new byte[PlayerConst.TaxiMaskSize];
|
||||
public static byte[] OldContinentsNodesMask = new byte[PlayerConst.TaxiMaskSize];
|
||||
public static byte[] HordeTaxiNodesMask = new byte[PlayerConst.TaxiMaskSize];
|
||||
public static byte[] AllianceTaxiNodesMask = new byte[PlayerConst.TaxiMaskSize];
|
||||
public static byte[] TaxiNodesMask;
|
||||
public static byte[] OldContinentsNodesMask;
|
||||
public static byte[] HordeTaxiNodesMask;
|
||||
public static byte[] AllianceTaxiNodesMask;
|
||||
public static Dictionary<uint, Dictionary<uint, TaxiPathBySourceAndDestination>> TaxiPathSetBySource = new();
|
||||
public static Dictionary<uint, TaxiPathNodeRecord[]> TaxiPathNodesByPath = new();
|
||||
#endregion
|
||||
|
||||
@@ -3434,7 +3434,7 @@ namespace Game.Entities
|
||||
stmt.AddValue(index++, transLowGUID);
|
||||
|
||||
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] + " ");
|
||||
|
||||
stmt.AddValue(index++, ss.ToString());
|
||||
@@ -3575,7 +3575,7 @@ namespace Game.Entities
|
||||
stmt.AddValue(index++, transLowGUID);
|
||||
|
||||
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] + " ");
|
||||
|
||||
stmt.AddValue(index++, ss.ToString());
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace Game.Entities
|
||||
{
|
||||
public class PlayerTaxi
|
||||
{
|
||||
public byte[] m_taximask = new byte[PlayerConst.TaxiMaskSize];
|
||||
public byte[] m_taximask;
|
||||
List<uint> m_TaxiDestinations = new();
|
||||
uint m_flightMasterFactionId;
|
||||
|
||||
@@ -37,7 +37,8 @@ namespace Game.Entities
|
||||
if (chrClass == Class.Deathknight)
|
||||
{
|
||||
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]);
|
||||
}
|
||||
|
||||
@@ -107,7 +108,7 @@ namespace Game.Entities
|
||||
var split = new StringArray(data, ' ');
|
||||
|
||||
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
|
||||
if (uint.TryParse(split[i], out uint id))
|
||||
@@ -117,18 +118,18 @@ namespace Game.Entities
|
||||
|
||||
public void AppendTaximaskTo(ShowTaxiNodes data, bool all)
|
||||
{
|
||||
data.CanLandNodes = new byte[PlayerConst.TaxiMaskSize];
|
||||
data.CanUseNodes = new byte[PlayerConst.TaxiMaskSize];
|
||||
data.CanLandNodes = new byte[CliDB.TaxiNodesMask.Length];
|
||||
data.CanUseNodes = new byte[CliDB.TaxiNodesMask.Length];
|
||||
|
||||
if (all)
|
||||
{
|
||||
Buffer.BlockCopy(CliDB.TaxiNodesMask, 0, data.CanLandNodes, 0, PlayerConst.TaxiMaskSize); // all existed nodes
|
||||
Buffer.BlockCopy(CliDB.TaxiNodesMask, 0, data.CanLandNodes, 0, PlayerConst.TaxiMaskSize);
|
||||
Buffer.BlockCopy(CliDB.TaxiNodesMask, 0, data.CanLandNodes, 0, data.CanLandNodes.Length); // all existed nodes
|
||||
Buffer.BlockCopy(CliDB.TaxiNodesMask, 0, data.CanUseNodes, 0, data.CanUseNodes.Length);
|
||||
}
|
||||
else
|
||||
{
|
||||
Buffer.BlockCopy(m_taximask, 0, data.CanLandNodes, 0, PlayerConst.TaxiMaskSize); // known nodes
|
||||
Buffer.BlockCopy(m_taximask, 0, data.CanUseNodes, 0, PlayerConst.TaxiMaskSize);
|
||||
Buffer.BlockCopy(m_taximask, 0, data.CanLandNodes, 0, data.CanLandNodes.Length); // known nodes
|
||||
Buffer.BlockCopy(m_taximask, 0, data.CanUseNodes, 0, data.CanUseNodes.Length);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1924,7 +1924,7 @@ namespace Game
|
||||
|
||||
|
||||
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
|
||||
// m = 1 << ((315 - 1) % 8) = 4
|
||||
|
||||
@@ -112,9 +112,9 @@ namespace Game
|
||||
|
||||
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);
|
||||
for (var i = 0; i < PlayerConst.TaxiMaskSize; ++i)
|
||||
for (var i = 0; i < reachableNodes.Length; ++i)
|
||||
{
|
||||
data.CanLandNodes[i] &= reachableNodes[i];
|
||||
data.CanUseNodes[i] &= reachableNodes[i];
|
||||
|
||||
Reference in New Issue
Block a user