Fixed world login
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user