Skip to content

Commit 6f1640c

Browse files
committed
Fix inventory slots without storages throwing nullptrs
1 parent 4febf13 commit 6f1640c

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

src/Scripts/Game/EPF_PersistenceComponent.c

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -467,14 +467,18 @@
467467
InventoryStorageSlot newInvSlot = InventoryStorageSlot.Cast(newSlot);
468468
if (newInvSlot)
469469
{
470-
if (EPF_Utils.IsInstanceAnyInherited(newInvSlot.GetStorage(), {EquipedLoadoutStorageComponent, BaseEquipmentStorageComponent, BaseEquipedWeaponStorageComponent}))
471-
EPF_BitFlags.SetFlags(m_eFlags, EPF_EPersistenceFlags.WAS_EQUIPPED);
472-
473-
EPF_PersistenceComponent parentPersistence = EPF_Component<EPF_PersistenceComponent>.Find(parent);
474-
if (persistenceManager.GetState() == EPF_EPersistenceManagerState.ACTIVE &&
475-
parentPersistence && EPF_BitFlags.CheckFlags(parentPersistence.GetFlags(), EPF_EPersistenceFlags.BAKED))
470+
BaseInventoryStorageComponent storage = newInvSlot.GetStorage();
471+
if (storage)
476472
{
477-
EPF_BakedStorageChange.OnAdded(this, newInvSlot);
473+
if (EPF_Utils.IsInstanceAnyInherited(storage, {EquipedLoadoutStorageComponent, BaseEquipmentStorageComponent, BaseEquipedWeaponStorageComponent}))
474+
EPF_BitFlags.SetFlags(m_eFlags, EPF_EPersistenceFlags.WAS_EQUIPPED);
475+
476+
EPF_PersistenceComponent parentPersistence = EPF_Component<EPF_PersistenceComponent>.Find(parent);
477+
if (persistenceManager.GetState() == EPF_EPersistenceManagerState.ACTIVE &&
478+
parentPersistence && EPF_BitFlags.CheckFlags(parentPersistence.GetFlags(), EPF_EPersistenceFlags.BAKED))
479+
{
480+
EPF_BakedStorageChange.OnAdded(this, newInvSlot);
481+
}
478482
}
479483
}
480484

@@ -504,14 +508,19 @@
504508
InventoryStorageSlot oldInvSlot = InventoryStorageSlot.Cast(oldSlot);
505509
if (oldInvSlot && persistenceManager.GetState() == EPF_EPersistenceManagerState.ACTIVE)
506510
{
507-
EPF_PersistenceComponent parentPersistence = EPF_Component<EPF_PersistenceComponent>.Find(oldInvSlot.GetOwner());
508-
if (parentPersistence && EPF_BitFlags.CheckFlags(parentPersistence.GetFlags(), EPF_EPersistenceFlags.BAKED))
509-
{
510-
EPF_BakedStorageChange.OnRemoved(this, oldInvSlot);
511-
}
512-
else
511+
// Some inv slots have no storages sometimes e.g. clothing attachments, so ignore those.
512+
BaseInventoryStorageComponent storage = oldInvSlot.GetStorage();
513+
if (storage)
513514
{
514-
EPF_StorageChangeDetection.SetDirty(oldInvSlot.GetStorage());
515+
EPF_PersistenceComponent parentPersistence = EPF_Component<EPF_PersistenceComponent>.Find(oldInvSlot.GetOwner());
516+
if (parentPersistence && EPF_BitFlags.CheckFlags(parentPersistence.GetFlags(), EPF_EPersistenceFlags.BAKED))
517+
{
518+
EPF_BakedStorageChange.OnRemoved(this, oldInvSlot);
519+
}
520+
else
521+
{
522+
EPF_StorageChangeDetection.SetDirty(storage);
523+
}
515524
}
516525
}
517526

0 commit comments

Comments
 (0)