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 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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|||||||
Reference in New Issue
Block a user