Fixed world login

This commit is contained in:
Hondacrx
2025-08-26 22:37:42 -04:00
parent 7bb4769eee
commit ec4f2a49d4
20 changed files with 80 additions and 74 deletions
@@ -384,7 +384,7 @@ namespace Game.Entities
public abstract class HasChangesMask : IHasChangesMask
{
public static int ChangeMaskLength;
public int ChangeMaskLength;
public UpdateMask _changesMask;
public int _blockBit;
@@ -164,7 +164,7 @@ namespace Game.Entities
dynFlags |= (uint)GameObjectDynamicLowFlags.NoInterract;
var data = Global.ObjectMgr.GetSpawnMetadata(SpawnObjectType.GameObject, gameObject.GetSpawnId());
if (data.spawnTrackingData != null && !data.spawnTrackingQuestObjectives.Empty())
if (data != null && data.spawnTrackingData != null && !data.spawnTrackingQuestObjectives.Empty())
if (receiver.GetSpawnTrackingStateByObjectives(data.spawnTrackingData.SpawnTrackingId, data.spawnTrackingQuestObjectives) != SpawnTrackingState.Active)
dynFlags &= ~(uint)GameObjectDynamicLowFlags.Activate;
}
@@ -3352,14 +3352,14 @@ namespace Game.Entities
public void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags)
{
UpdateMask allowedMaskForTarget = new(324, [0xFFFFFFDDu, 0x0007FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000000Fu]);
UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFFFFFFDDu, 0x0007FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000000Fu]);
PlayerDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
changesMask.AND(allowedMaskForTarget);
}
public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver)
{
UpdateMask allowedMaskForTarget = new(324, [0xFFFFFFDDu, 0x0007FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000000Fu]);
UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFFFFFFDDu, 0x0007FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000000Fu]);
PlayerDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
}
@@ -24,12 +24,11 @@ namespace Game.Entities
if (input != null)
{
int block = 0;
for (; block < input.Length; ++block)
for (; block < _blockCount; ++block)
if ((_blocks[block] = input[block]) != 0)
_blocksMask[GetBlockIndex(block)] |= (uint)GetBlockFlag(block);
for (; block < _blockCount; ++block)
_blocks[block] = 0;
else
_blocksMask[GetBlockIndex(block)] &= ~(uint)GetBlockFlag(block);
}
}
@@ -100,7 +99,7 @@ namespace Game.Entities
for (int i = 0; i < _blockCount; ++i)
{
if (!Convert.ToBoolean(_blocks[i] &= right._blocks[i]))
if ((_blocks[i] &= right._blocks[i]) == 0)
_blocksMask[GetBlockIndex(i)] &= ~(uint)GetBlockFlag(i);
}
}