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);
}
}
@@ -4153,6 +4153,9 @@ namespace Game.Entities
public void ClearChangesMask(HasChangesMask updateData)
{
if (updateData == null)
return;
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
if ((EntityFragment)updateData._blockBit == EntityFragment.CGObject)
{
+1 -1
View File
@@ -1645,7 +1645,7 @@ namespace Game.Entities
if (aura.GetCasterGUID() == GetGUID() && aura.GetSpellInfo().HasAttribute(SpellAttr8.MasteryAffectsPoints))
{
foreach (var auraEff in aura.GetAuraEffects())
if (MathFunctions.fuzzyEq(auraEff.GetSpellEffectInfo().BonusCoefficient, 0.0f))
if (auraEff != null && MathFunctions.fuzzyEq(auraEff.GetSpellEffectInfo().BonusCoefficient, 0.0f))
auraEff.RecalculateAmount(this);
}
}
+6 -3
View File
@@ -3204,6 +3204,9 @@ namespace Game.Entities
Unit caster = aura.GetCaster();
foreach (AuraEffect aurEff in aura.GetAuraEffects())
{
if (aurEff == null)
continue;
int i = (int)aurEff.GetEffIndex();
baseDamage[i] = aurEff.GetBaseAmount();
damage[i] = aurEff.GetAmount();
@@ -3475,7 +3478,7 @@ namespace Game.Entities
// remove remaining effects of an aura
foreach (AuraEffect aurEff in aurApp.GetBase().GetAuraEffects())
{
if (aurApp.HasEffect(aurEff.GetEffIndex()))
if (aurEff != null && aurApp.HasEffect(aurEff.GetEffIndex()))
aurApp._HandleEffect(aurEff.GetEffIndex(), false);
}
return;
@@ -3899,7 +3902,7 @@ namespace Game.Entities
// remove effects of the spell - needs to be done after removing aura from lists
foreach (AuraEffect aurEff in aura.GetAuraEffects())
if (aurApp.HasEffect(aurEff.GetEffIndex()))
if (aurEff != null && aurApp.HasEffect(aurEff.GetEffIndex()))
aurApp._HandleEffect(aurEff.GetEffIndex(), false);
// all effect mustn't be applied
@@ -4147,7 +4150,7 @@ namespace Game.Entities
// apply effects of the aura
foreach (AuraEffect aurEff in aura.GetAuraEffects())
{
if ((effMask & 1 << (int)aurEff.GetEffIndex()) != 0)
if (aurEff != null && (effMask & 1 << (int)aurEff.GetEffIndex()) != 0)
{
aurApp._HandleEffect(aurEff.GetEffIndex(), true);
if (aurApp.GetRemoveMode() != 0)