Core/Players: Fixed ExploredZones size and PLAYER_EXPLORED_ZONES_SIZE desync
Port From (https://github.com/TrinityCore/TrinityCore/commit/cb99b08b86f8773563276bf16ccc2210003b056b)
This commit is contained in:
@@ -1105,11 +1105,11 @@ namespace Game.Achievements
|
|||||||
if (area.AreaBit < 0)
|
if (area.AreaBit < 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int playerIndexOffset = (int)((uint)area.AreaBit / 64);
|
int playerIndexOffset = (int)area.AreaBit / ActivePlayerData.ExploredZonesBits;
|
||||||
if (playerIndexOffset >= PlayerConst.ExploredZonesSize)
|
if (playerIndexOffset >= PlayerConst.ExploredZonesSize)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ulong mask = 1ul << (int)((uint)area.AreaBit % 64);
|
ulong mask = 1ul << (int)((uint)area.AreaBit % ActivePlayerData.ExploredZonesBits);
|
||||||
if (Convert.ToBoolean(referencePlayer.m_activePlayerData.ExploredZones[playerIndexOffset] & mask))
|
if (Convert.ToBoolean(referencePlayer.m_activePlayerData.ExploredZones[playerIndexOffset] & mask))
|
||||||
{
|
{
|
||||||
matchFound = true;
|
matchFound = true;
|
||||||
@@ -1857,11 +1857,11 @@ namespace Game.Achievements
|
|||||||
if (areaTable.AreaBit <= 0)
|
if (areaTable.AreaBit <= 0)
|
||||||
break; // success
|
break; // success
|
||||||
|
|
||||||
int playerIndexOffset = areaTable.AreaBit / 64;
|
int playerIndexOffset = areaTable.AreaBit / ActivePlayerData.ExploredZonesBits;
|
||||||
if (playerIndexOffset >= PlayerConst.ExploredZonesSize)
|
if (playerIndexOffset >= PlayerConst.ExploredZonesSize)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if ((referencePlayer.m_activePlayerData.ExploredZones[playerIndexOffset] & (1ul << (areaTable.AreaBit % 64))) == 0)
|
if ((referencePlayer.m_activePlayerData.ExploredZones[playerIndexOffset] & (1ul << (areaTable.AreaBit % ActivePlayerData.ExploredZonesBits))) == 0)
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -765,14 +765,14 @@ namespace Game.Chat
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint offset = (uint)area.AreaBit / 64;
|
uint offset = (uint)(area.AreaBit / ActivePlayerData.ExploredZonesBits);
|
||||||
if (offset >= PlayerConst.ExploredZonesSize)
|
if (offset >= PlayerConst.ExploredZonesSize)
|
||||||
{
|
{
|
||||||
handler.SendSysMessage(CypherStrings.BadValue);
|
handler.SendSysMessage(CypherStrings.BadValue);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint val = (1u << (area.AreaBit % 64));
|
uint val = 1u << (area.AreaBit % ActivePlayerData.ExploredZonesBits);
|
||||||
playerTarget.RemoveExploredZones(offset, val);
|
playerTarget.RemoveExploredZones(offset, val);
|
||||||
|
|
||||||
handler.SendSysMessage(CypherStrings.UnexploreArea);
|
handler.SendSysMessage(CypherStrings.UnexploreArea);
|
||||||
@@ -1750,14 +1750,14 @@ namespace Game.Chat
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint offset = (uint)area.AreaBit / 64;
|
uint offset = (uint)(area.AreaBit / ActivePlayerData.ExploredZonesBits);
|
||||||
if (offset >= PlayerConst.ExploredZonesSize)
|
if (offset >= PlayerConst.ExploredZonesSize)
|
||||||
{
|
{
|
||||||
handler.SendSysMessage(CypherStrings.BadValue);
|
handler.SendSysMessage(CypherStrings.BadValue);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ulong val = 1ul << (area.AreaBit % 64);
|
ulong val = 1ul << (area.AreaBit % ActivePlayerData.ExploredZonesBits);
|
||||||
playerTarget.AddExploredZones(offset, val);
|
playerTarget.AddExploredZones(offset, val);
|
||||||
|
|
||||||
handler.SendSysMessage(CypherStrings.ExploreArea);
|
handler.SendSysMessage(CypherStrings.ExploreArea);
|
||||||
|
|||||||
@@ -2276,7 +2276,7 @@ namespace Game
|
|||||||
{
|
{
|
||||||
AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(condition.Explored[i]);
|
AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(condition.Explored[i]);
|
||||||
if (area != null)
|
if (area != null)
|
||||||
if (area.AreaBit != -1 && !Convert.ToBoolean(player.m_activePlayerData.ExploredZones[area.AreaBit / 64] & (1ul << ((int)area.AreaBit % 64))))
|
if (area.AreaBit != -1 && !Convert.ToBoolean(player.m_activePlayerData.ExploredZones[area.AreaBit / ActivePlayerData.ExploredZonesBits] & (1ul << ((int)area.AreaBit % ActivePlayerData.ExploredZonesBits))))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3469,6 +3469,9 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public class ActivePlayerData : BaseUpdateData<Player>
|
public class ActivePlayerData : BaseUpdateData<Player>
|
||||||
{
|
{
|
||||||
|
public static int ExploredZonesSize;
|
||||||
|
public static int ExploredZonesBits;
|
||||||
|
|
||||||
public UpdateField<bool> BackpackAutoSortDisabled = new(0, 1);
|
public UpdateField<bool> BackpackAutoSortDisabled = new(0, 1);
|
||||||
public UpdateField<bool> BankAutoSortDisabled = new(0, 2);
|
public UpdateField<bool> BankAutoSortDisabled = new(0, 2);
|
||||||
public UpdateField<bool> SortBagsRightToLeft = new(0, 3);
|
public UpdateField<bool> SortBagsRightToLeft = new(0, 3);
|
||||||
@@ -3595,7 +3598,11 @@ namespace Game.Entities
|
|||||||
public UpdateFieldArray<uint> BankBagSlotFlags = new(7, 670, 671);
|
public UpdateFieldArray<uint> BankBagSlotFlags = new(7, 670, 671);
|
||||||
public UpdateFieldArray<ulong> QuestCompleted = new(875, 678, 679);
|
public UpdateFieldArray<ulong> QuestCompleted = new(875, 678, 679);
|
||||||
|
|
||||||
public ActivePlayerData() : base(0, TypeId.ActivePlayer, 1554) { }
|
public ActivePlayerData() : base(0, TypeId.ActivePlayer, 1554)
|
||||||
|
{
|
||||||
|
ExploredZonesSize = ExploredZones.GetSize();
|
||||||
|
ExploredZonesBits = sizeof(ulong) * 8;
|
||||||
|
}
|
||||||
|
|
||||||
public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver)
|
public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2695,9 +2695,8 @@ namespace Game.Entities
|
|||||||
SetXP(xp);
|
SetXP(xp);
|
||||||
|
|
||||||
StringArray exploredZonesStrings = new(exploredZones, ' ');
|
StringArray exploredZonesStrings = new(exploredZones, ' ');
|
||||||
if (exploredZonesStrings.Length == PlayerConst.ExploredZonesSize * 2)
|
for (int i = 0; i < exploredZonesStrings.Length && i / 2 < ActivePlayerData.ExploredZonesSize; ++i)
|
||||||
for (int i = 0; i < exploredZonesStrings.Length; ++i)
|
SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ExploredZones, i / 2), (ulong)((long.Parse(exploredZonesStrings[i])) << (32 * (i % 2))));
|
||||||
SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ExploredZones, i / 2), (ulong)((long.Parse(exploredZonesStrings[i])) << (32 * (i % 2))));
|
|
||||||
|
|
||||||
StringArray knownTitlesStrings = new(knownTitles, ' ');
|
StringArray knownTitlesStrings = new(knownTitles, ' ');
|
||||||
if ((knownTitlesStrings.Length % 2) == 0)
|
if ((knownTitlesStrings.Length % 2) == 0)
|
||||||
|
|||||||
@@ -5852,7 +5852,7 @@ namespace Game.Entities
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int offset = areaEntry.AreaBit / 64;
|
int offset = areaEntry.AreaBit / ActivePlayerData.ExploredZonesBits;
|
||||||
if (offset >= PlayerConst.ExploredZonesSize)
|
if (offset >= PlayerConst.ExploredZonesSize)
|
||||||
{
|
{
|
||||||
Log.outError(LogFilter.Player, "Wrong area flag {0} in map data for (X: {1} Y: {2}) point to field PLAYER_EXPLORED_ZONES_1 + {3} ( {4} must be < {5} ).",
|
Log.outError(LogFilter.Player, "Wrong area flag {0} in map data for (X: {1} Y: {2}) point to field PLAYER_EXPLORED_ZONES_1 + {3} ( {4} must be < {5} ).",
|
||||||
@@ -5860,7 +5860,7 @@ namespace Game.Entities
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ulong val = 1ul << (areaEntry.AreaBit % 64);
|
ulong val = 1ul << (areaEntry.AreaBit % ActivePlayerData.ExploredZonesBits);
|
||||||
ulong currFields = m_activePlayerData.ExploredZones[offset];
|
ulong currFields = m_activePlayerData.ExploredZones[offset];
|
||||||
|
|
||||||
if (!Convert.ToBoolean(currFields & val))
|
if (!Convert.ToBoolean(currFields & val))
|
||||||
|
|||||||
@@ -945,8 +945,8 @@ namespace Game
|
|||||||
// start with every map explored
|
// start with every map explored
|
||||||
if (WorldConfig.GetBoolValue(WorldCfg.StartAllExplored))
|
if (WorldConfig.GetBoolValue(WorldCfg.StartAllExplored))
|
||||||
{
|
{
|
||||||
for (ushort i = 0; i < PlayerConst.ExploredZonesSize; i++)
|
for (uint i = 0; i < PlayerConst.ExploredZonesSize; i++)
|
||||||
pCurrChar.SetUpdateFieldValue(ref pCurrChar.m_values.ModifyValue(pCurrChar.m_activePlayerData).ModifyValue(pCurrChar.m_activePlayerData.ExploredZones, i), 0xFFFFFFFFFFFFFFFF);
|
pCurrChar.AddExploredZones(i, 0xFFFFFFFFFFFFFFFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Reputations if "StartAllReputation" is enabled
|
//Reputations if "StartAllReputation" is enabled
|
||||||
|
|||||||
Reference in New Issue
Block a user