Skip to content

Commit d810fde

Browse files
committed
AR 1.2 INT compatibility
1 parent 328c7ef commit d810fde

9 files changed

+56
-53
lines changed

src/Scripts/Game/Components/EPF_BaseInventoryStorageComponentSaveData.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ class EPF_BaseInventoryStorageComponentSaveData : EPF_ComponentSaveData
112112
override EPF_EApplyResult ApplyTo(IEntity owner, GenericComponent component, EPF_ComponentSaveDataClass attributes)
113113
{
114114
BaseInventoryStorageComponent storageComponent = BaseInventoryStorageComponent.Cast(component);
115-
InventoryStorageManagerComponent storageManager = InventoryStorageManagerComponent.Cast(storageComponent.GetOwner().FindComponent(InventoryStorageManagerComponent));
115+
InventoryStorageManagerComponent storageManager = InventoryStorageManagerComponent.Cast(owner.FindComponent(InventoryStorageManagerComponent));
116116
if (!storageManager) storageManager = EPF_GlobalInventoryStorageManagerComponent.GetInstance();
117117

118118
bool isNotBaked = !EPF_BitFlags.CheckFlags(EPF_Component<EPF_PersistenceComponent>.Find(owner).GetFlags(), EPF_EPersistenceFlags.BAKED);
@@ -178,9 +178,11 @@ class EPF_BaseInventoryStorageComponentSaveData : EPF_ComponentSaveData
178178
if (!slotEntity)
179179
return EPF_EApplyResult.ERROR;
180180

181+
// Teleport to target position so it is within valid range and if insert fails becomes visible overflow
182+
EPF_WorldUtils.Teleport(slotEntity, owner.GetOrigin(), owner.GetYawPitchRoll()[0]);
183+
181184
// Unable to add it to the storage parent, so put it on the ground at the parent origin
182-
if (!storageManager.TryInsertItemInStorage(slotEntity, storageComponent, slot.m_iSlotIndex))
183-
EPF_WorldUtils.Teleport(slotEntity, storageComponent.GetOwner().GetOrigin(), storageComponent.GetOwner().GetYawPitchRoll()[0]);
185+
storageManager.TryInsertItemInStorage(slotEntity, storageComponent, slot.m_iSlotIndex);
184186
}
185187

186188
// Delte any items not found in the storage data for non bakes that always save all slots

src/Scripts/Game/Components/EPF_CompartmentAccessComponentSaveData.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,10 @@ class EPF_CompartmentAccessComponentSaveData : EPF_ComponentSaveData
7575
compartmentManager.GetCompartments(outCompartments);
7676
if (m_iSlotIdx < outCompartments.Count())
7777
{
78-
compartment.MoveInVehicle(compartmentHolder, outCompartments.Get(m_iSlotIdx));
79-
return EPF_EApplyResult.OK;
78+
EPF_DeferredApplyResult.AddPending(this, "CompartmentAccessComponentSaveData::GetInVehicle");
79+
compartment.GetInVehicle(compartmentHolder, outCompartments.Get(m_iSlotIdx), true, -1, ECloseDoorAfterActions.INVALID, true);
80+
GetGame().GetCallqueue().CallLater(Complete, 500);
81+
return EPF_EApplyResult.AWAIT_COMPLETION;
8082
}
8183
}
8284

@@ -87,6 +89,11 @@ class EPF_CompartmentAccessComponentSaveData : EPF_ComponentSaveData
8789
return EPF_EApplyResult.OK;
8890
}
8991

92+
protected void Complete()
93+
{
94+
EPF_DeferredApplyResult.SetFinished(this, "CompartmentAccessComponentSaveData::GetInVehicle");
95+
}
96+
9097
//------------------------------------------------------------------------------------------------
9198
override bool Equals(notnull EPF_ComponentSaveData other)
9299
{

src/Scripts/Game/Components/EPF_VehicleControllerSaveData.c

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[EPF_ComponentSaveDataType(VehicleControllerComponent), EPF_ComponentSaveDataType(VehicleControllerComponent_SA), BaseContainerProps()]
1+
[EPF_ComponentSaveDataType(VehicleControllerComponent), BaseContainerProps()]
22
class EPF_VehicleControllerSaveDataClass : EPF_ComponentSaveDataClass
33
{
44
}
@@ -11,17 +11,8 @@ class EPF_VehicleControllerSaveData : EPF_ComponentSaveData
1111
//------------------------------------------------------------------------------------------------
1212
override EPF_EReadResult ReadFrom(IEntity owner, GenericComponent component, EPF_ComponentSaveDataClass attributes)
1313
{
14-
VehicleControllerComponent_SA vehicleController_SA = VehicleControllerComponent_SA.Cast(component);
15-
if (vehicleController_SA)
16-
{
17-
m_bEngineOn = vehicleController_SA.IsEngineOn();
18-
}
19-
else
20-
{
21-
VehicleControllerComponent vehicleController = VehicleControllerComponent.Cast(component);
22-
if (vehicleController)
23-
m_bEngineOn = vehicleController.IsEngineOn();
24-
}
14+
VehicleControllerComponent vehicleController = VehicleControllerComponent.Cast(component);
15+
m_bEngineOn = vehicleController.IsEngineOn();
2516

2617
if (!m_bEngineOn)
2718
return EPF_EReadResult.DEFAULT;
@@ -32,18 +23,9 @@ class EPF_VehicleControllerSaveData : EPF_ComponentSaveData
3223
//------------------------------------------------------------------------------------------------
3324
override EPF_EApplyResult ApplyTo(IEntity owner, GenericComponent component, EPF_ComponentSaveDataClass attributes)
3425
{
35-
VehicleControllerComponent_SA vehicleController_SA = VehicleControllerComponent_SA.Cast(component);
36-
if (vehicleController_SA)
37-
{
38-
if (m_bEngineOn)
39-
vehicleController_SA.ForceStartEngine();
40-
}
41-
else
42-
{
43-
VehicleControllerComponent vehicleController = VehicleControllerComponent.Cast(component);
44-
if (vehicleController && m_bEngineOn)
45-
vehicleController.StartEngine();
46-
}
26+
VehicleControllerComponent vehicleController = VehicleControllerComponent.Cast(component);
27+
if (m_bEngineOn)
28+
vehicleController.ForceStartEngine();
4729

4830
return EPF_EApplyResult.OK;
4931
}

src/Scripts/Game/EPF_DbFind.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class EPF_ComponentFieldBuilder
5656
//------------------------------------------------------------------------------------------------
5757
EDF_DbFindFieldCollectionHandlingBuilder Field(string fieldPath)
5858
{
59-
return EDF_DbFindFieldCollectionHandlingBuilder.Cast(m_pBuilder.Field(fieldPath));
59+
return m_pBuilder.Field(fieldPath);
6060
}
6161

6262
//------------------------------------------------------------------------------------------------

src/Scripts/Game/EPF_NetworkUtils.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class EPF_NetworkUtils
2323
if (rplId.IsValid())
2424
{
2525
RplComponent entityRpl = RplComponent.Cast(Replication.FindItem(rplId));
26-
if (entityRpl) entity = IEntity.Cast(entityRpl.GetEntity());
26+
if (entityRpl) entity = entityRpl.GetEntity();
2727
}
2828

2929
return entity;

src/Scripts/Game/EPF_PersistenceComponent.c

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,12 @@
164164
m_iLastSaved = System.GetUnixTime();
165165

166166
IEntity owner = GetOwner();
167+
if (!owner)
168+
{
169+
Debug.Error("Failed to save entity, because it was already deleted.");
170+
return null;
171+
}
172+
167173
EPF_PersistenceComponentClass settings = EPF_PersistenceComponentClass.Cast(GetComponentData(owner));
168174
EPF_EntitySaveData saveData = EPF_EntitySaveData.Cast(settings.m_tSaveDataType.Spawn());
169175

@@ -386,7 +392,7 @@
386392
}
387393

388394
// For vehicles we want to get notified when they encounter their first contact or start to be driven
389-
if (settings.m_pSaveData.m_bTrimDefaults && (owner.FindComponent(VehicleControllerComponent) || owner.FindComponent(VehicleControllerComponent_SA)))
395+
if (settings.m_pSaveData.m_bTrimDefaults && (owner.FindComponent(VehicleControllerComponent)))
390396
{
391397
SetEventMask(owner, EntityEvent.CONTACT);
392398
EventHandlerManagerComponent ev = EPF_Component<EventHandlerManagerComponent>.Find(owner);
@@ -609,18 +615,9 @@
609615
override event protected void EOnPhysicsMove(IEntity owner)
610616
{
611617
// Check for if engine is one as there is tiny jitter movement during engine startup we want to ignore.
612-
VehicleControllerComponent_SA vehicleController_SA = EPF_Component<VehicleControllerComponent_SA>.Find(owner);
613-
if (vehicleController_SA)
614-
{
615-
if (vehicleController_SA.IsEngineOn())
616-
FlagAsMoved();
617-
}
618-
else
619-
{
620-
VehicleControllerComponent vehicleController = EPF_Component<VehicleControllerComponent>.Find(owner);
621-
if (vehicleController && vehicleController.IsEngineOn())
622-
FlagAsMoved();
623-
}
618+
VehicleControllerComponent vehicleController = EPF_Component<VehicleControllerComponent>.Find(owner);
619+
if (vehicleController && vehicleController.IsEngineOn())
620+
FlagAsMoved();
624621
}
625622

626623
//------------------------------------------------------------------------------------------------

src/Scripts/Game/EPF_PersistenceManager.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ class EPF_PersistenceManager
195195
}
196196
}
197197

198-
IEntity entity = GetGame().SpawnEntityPrefab(resource, params: spawnParams);
198+
IEntity entity = GetGame().SpawnEntityPrefab(resource, null, spawnParams);
199199
if (!entity)
200200
{
201201
Debug.Error(string.Format("Failed to spawn entity '%1:%2'. Ignored.", saveData.Type().ToString(), saveData.GetId()));

src/Scripts/Game/Entities/Character/EPF_CharacterInventoryStorageComponentSaveData.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,13 @@ class EPF_CharacterInventoryStorageComponentSaveData : EPF_BaseInventoryStorageC
2020
m_aQuickSlotEntities = {};
2121

2222
SCR_CharacterInventoryStorageComponent inventoryStorage = SCR_CharacterInventoryStorageComponent.Cast(component);
23-
foreach (int idx, IEntity item : inventoryStorage.GetQuickSlotItems())
23+
foreach (int idx, auto quickslot: inventoryStorage.GetQuickSlotItems())
2424
{
25-
string persistentId = EPF_PersistenceComponent.GetPersistentId(item);
25+
auto quickslotEntity = SCR_QuickslotEntityContainer.Cast(quickslot);
26+
if (!quickslotEntity)
27+
continue;
28+
29+
string persistentId = EPF_PersistenceComponent.GetPersistentId(quickslotEntity.GetEntity());
2630
if (!persistentId) continue;
2731

2832
EPF_PersistentQuickSlotItem slot();

src/Scripts/Game/Entities/Character/SCR_CharacterInventoryStorageComponent.c

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,14 @@ modded class SCR_CharacterInventoryStorageComponent
3636
array<RplId> rplIds();
3737
rplIds.Reserve(m_aQuickSlots.Count());
3838

39-
foreach (IEntity quickSlotItem : m_aQuickSlots)
39+
foreach (auto quickSlot : m_aQuickSlots)
4040
{
4141
RplId rplId = RplId.Invalid();
4242

43-
if (quickSlotItem)
43+
auto quickslotEntity = SCR_QuickslotEntityContainer.Cast(quickSlot);
44+
if (quickslotEntity)
4445
{
45-
RplComponent replication = RplComponent.Cast(quickSlotItem.FindComponent(RplComponent));
46+
auto replication = EPF_Component<RplComponent>.Find(quickslotEntity.GetEntity());
4647
if (replication) rplId = replication.Id();
4748
}
4849

@@ -68,12 +69,21 @@ modded class SCR_CharacterInventoryStorageComponent
6869
if (m_aQuickSlotsHistory.Count() < slotsCount)
6970
m_aQuickSlotsHistory.Resize(slotsCount);
7071

72+
Print("EPF_Rpc_UpdateQuickSlotItems");
73+
7174
foreach (int idx, RplId rplId : rplIds)
7275
{
7376
IEntity slotEntity = EPF_NetworkUtils.FindEntityByRplId(rplId);
74-
m_aQuickSlots.Set(idx, slotEntity);
77+
PrintFormat("idx: %1, rplId:%2, entity:%3", idx, rplId, slotEntity);
78+
7579
if (slotEntity)
76-
m_aQuickSlotsHistory.Set(idx, GetItemType(slotEntity));
80+
{
81+
super.StoreItemToQuickSlot(slotEntity, idx, true);
82+
}
83+
else
84+
{
85+
super.RemoveItemFromQuickSlotAtIndex(idx);
86+
}
7787
}
7888
}
7989

@@ -87,6 +97,7 @@ modded class SCR_CharacterInventoryStorageComponent
8797
[RplRpc(RplChannel.Reliable, RplRcver.Owner)]
8898
protected void Rpc_SetQuickBarItems(array<RplId> quickBarRplIds)
8999
{
90-
EPF_Rpc_UpdateQuickSlotItems(quickBarRplIds);
100+
// Delay to allow items to be loaded. Alt: Wait until all RPL ids are known and keep it in queue on repeat until then
101+
GetGame().GetCallqueue().CallLater(EPF_Rpc_UpdateQuickSlotItems, 500, param1: quickBarRplIds);
91102
}
92103
}

0 commit comments

Comments
 (0)