18 if (!scenarioFrameworkSystem)
23 context.WriteValue(
"version", 1);
24 context.WriteValue(
"matchOver",
true);
30 array<ref SCR_ScenarioFrameworkAreaSave> areas();
34 array<ref SCR_ScenarioFrameworkActionSave> afterTasksInitActions();
39 afterTasksInitActions.IsEmpty() &&
43 context.WriteValue(
"version", 1);
44 context.WriteValueDefault(
"matchOver",
false,
false);
45 context.WriteDefault(gameOverType,
EGameOverTypes.COMBATPATROL_DRAW);
47 if (!context.CanSeekMembers() || !areas.IsEmpty())
50 if (!context.CanSeekMembers() || !afterTasksInitActions.IsEmpty())
51 context.Write(afterTasksInitActions);
53 if (!context.CanSeekMembers() || !scenarioFrameworkSystem.
m_mVariableMap.IsEmpty())
54 context.WriteValue(
"variables", scenarioFrameworkSystem.
m_mVariableMap);
63 if (!scenarioFrameworkSystem)
66 scenarioFrameworkSystem.m_bIsSaveGameLoad =
true;
69 context.Read(version);
72 context.ReadDefault(matchOver,
false);
75 if (context.Read(gameOverType))
78 array<ref SCR_ScenarioFrameworkAreaSave> areas();
79 if (!context.Read(areas) && !context.CanSeekMembers())
84 array<ref SCR_ScenarioFrameworkActionSave> afterTasksInitActions();
85 if (!context.Read(afterTasksInitActions) && !context.CanSeekMembers())
88 foreach (
auto action : afterTasksInitActions)
90 action.Write(GetSystem(), scenarioFrameworkSystem, scenarioFrameworkSystem.m_aAfterTasksInitActions);
93 context.ReadValue(
"variables", scenarioFrameworkSystem.
m_mVariableMap);
101 for (
int i = scenarioFrameworkSystem.
m_aAreas.Count() - 1; i >= 0; i--)
103 SCR_ScenarioFrameworkAreaSave save();
104 save.Read(persistence, scenarioFrameworkSystem.
m_aAreas[i]);
105 if (!save.IsDefault())
113 foreach (SCR_ScenarioFrameworkAreaSave areaSave : saves)
115 auto entity =
GetGame().GetWorld().FindEntityByName(areaSave.m_sName);
123 areaSave.Write(persistence, scenarioFrameworkSystem, area);
131 bool m_bIsTerminated;
132 int m_iActivationType;
133 int m_iRepeatedSpawnNumber;
134 ref array<string> m_aRandomlySpawnedChildren = {};
135 ref array<ref SCR_ScenarioFrameworkLogicSave> m_aLogics = {};
136 ref array<ref SCR_ScenarioFrameworkLayerSave> m_aChildLayers = {};
137 ref array<ref SCR_ScenarioFrameworkActionSave> m_aActivationActions = {};
138 ref array<ref SCR_ScenarioFrameworkPluginSave> m_aPlugins = {};
143 if (
layer.IsInherited(SCR_ScenarioFrameworkLayerTaskDefend))
146 if (
layer.IsInherited(SCR_ScenarioFrameworkLayerTask))
147 return new SCR_ScenarioFrameworkLayerTaskSave();
152 if (
layer.IsInherited(SCR_ScenarioFrameworkSlotTaskAI))
155 if (
layer.IsInherited(SCR_ScenarioFrameworkSlotTask))
156 return new SCR_ScenarioFrameworkSlotTaskSave();
158 if (
layer.IsInherited(SCR_ScenarioFrameworkSlotTrigger))
159 return new SCR_ScenarioFrameworkSlotTriggerSave();
162 return new SCR_ScenarioFrameworkSlotSave();
165 return new SCR_ScenarioFrameworkAreaSave();
173 m_sName =
layer.GetName();
175 m_iActivationType =
layer.GetActivationType();
176 if (m_iActivationType ==
layer.m_eActivationTypeDefault)
177 m_iActivationType = -1;
179 m_bIsTerminated =
layer.GetIsTerminated();
181 m_iRepeatedSpawnNumber =
layer.GetRepeatedSpawnNumber();
182 if (m_iRepeatedSpawnNumber ==
layer.m_iRepeatedSpawnNumberDefault)
183 m_iRepeatedSpawnNumber = 0;
186 array<SCR_ScenarioFrameworkLogic> logics();
187 layer.GetLogics(logics);
188 foreach (SCR_ScenarioFrameworkLogic logic : logics)
190 auto logicCounter = SCR_ScenarioFrameworkLogicCounter.Cast(logic);
194 SCR_ScenarioFrameworkLogicCounterSave logicSave();
195 logicSave.Read(persistence, logicCounter);
196 if (!logicSave.IsDefault())
197 m_aLogics.Insert(logicSave);
203 foreach (
auto randomlayer :
layer.GetRandomlySpawnedChildren())
205 m_aRandomlySpawnedChildren.Insert(randomlayer.GetName());
210 array<SCR_ScenarioFrameworkLayerBase> children();
211 layer.GetChildren(children);
212 foreach (
auto childLayer : children)
214 auto childSave = GetLayerTypeSave(childLayer);
215 childSave.Read(persistence, childLayer);
216 if (!childSave.IsDefault())
217 m_aChildLayers.Insert(childSave);
224 auto plugins =
layer.GetSpawnedPlugins();
228 pluginSave.Read(persistence,
layer, plugin);
229 if (!pluginSave.IsDefault())
230 m_aPlugins.Insert(pluginSave);
238 m_aChildLayers.IsEmpty() &&
239 m_aLogics.IsEmpty() &&
240 m_aRandomlySpawnedChildren.IsEmpty() &&
241 m_iActivationType == -1 &&
242 m_bIsTerminated ==
false &&
243 m_iRepeatedSpawnNumber == 0 &&
244 m_aActivationActions.IsEmpty() &&
245 m_aPlugins.IsEmpty();
251 if (m_iRepeatedSpawnNumber != 0)
253 layer.SetEnableRepeatedSpawn(
true);
254 layer.SetRepeatedSpawnNumber(m_iRepeatedSpawnNumber);
257 if (m_iActivationType != -1)
258 layer.SetActivationType(m_iActivationType);
260 layer.SetIsTerminated(m_bIsTerminated);
262 if (!m_aRandomlySpawnedChildren.IsEmpty())
263 layer.SetRandomlySpawnedChildren(m_aRandomlySpawnedChildren);
265 foreach (
auto logic : m_aLogics)
267 logic.Write(persistence, scenarioFrameworkSystem);
272 foreach (
auto plugin : m_aPlugins)
274 plugin.Write(persistence, scenarioFrameworkSystem,
layer,
layer.GetSpawnedPlugins());
278 foreach (
auto saveData : m_aChildLayers)
280 IEntity entity = world.FindEntityByName(saveData.m_sName);
286 saveData.Write(persistence, scenarioFrameworkSystem, childlayer);
293 context.Write(m_sName);
295 if (!context.CanSeekMembers() || !m_aChildLayers.IsEmpty())
296 context.Write(m_aChildLayers);
298 if (!context.CanSeekMembers() || !m_aLogics.IsEmpty())
299 context.Write(m_aLogics);
301 if (!context.CanSeekMembers() || !m_aRandomlySpawnedChildren.IsEmpty())
302 context.Write(m_aRandomlySpawnedChildren);
304 context.WriteDefault(m_iActivationType, -1);
305 context.WriteDefault(m_iRepeatedSpawnNumber, 0);
306 context.WriteDefault(m_bIsTerminated,
false);
308 if (!context.CanSeekMembers() || !m_aActivationActions.IsEmpty())
309 context.Write(m_aActivationActions);
311 if (!context.CanSeekMembers() || !m_aPlugins.IsEmpty())
312 context.Write(m_aPlugins);
320 context.Read(m_sName);
322 if (!context.Read(m_aChildLayers) && !context.CanSeekMembers())
325 if (!context.Read(m_aLogics) && !context.CanSeekMembers())
328 if (!context.Read(m_aRandomlySpawnedChildren) && !context.CanSeekMembers())
331 context.ReadDefault(m_iActivationType, -1);
332 context.ReadDefault(m_iRepeatedSpawnNumber, 0);
333 context.ReadDefault(m_bIsTerminated,
false);
335 if (!context.Read(m_aActivationActions) && !context.CanSeekMembers())
338 if (!context.Read(m_aPlugins) && !context.CanSeekMembers())
356 super.Read(persistence,
layer);
363 if (area.GetLayerTask())
384 super.Write(persistence, scenarioFrameworkSystem,
layer);
408 protected static void OnTriggerAvailable(Managed instance, PersistenceDeferredDeserializeTask
task,
bool expired, Managed context)
410 auto trigger = SCR_BaseTriggerEntity.Cast(instance);
416 ctx.param1.m_Trigger = trigger;
422 if (!super.SerializationSave(context))
439 if (!super.SerializationLoad(context))
456 ref SCR_ScenarioFrameworkLayerTaskSave Save;
457 SCR_ScenarioFrameworkLayerTask Task;
473 super.Read(persistence,
layer);
475 auto layerTask = SCR_ScenarioFrameworkLayerTask.Cast(
layer);
478 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, layerTask.m_aTriggerActionsOnFinish,
m_aTriggerActionsOnFinish);
479 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, layerTask.m_aActionsOnCreated,
m_aActionsOnCreated);
480 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, layerTask.m_aActionsOnFailed,
m_aActionsOnFailed);
481 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, layerTask.m_aActionsOnCancelled,
m_aActionsOnCancelled);
482 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, layerTask.m_aActionsOnProgress,
m_aActionsOnProgress);
483 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, layerTask.m_aActionsOnAssigned,
m_aActionsOnAssigned);
503 super.Write(persistence, scenarioFrameworkSystem,
layer);
505 const UUID taskSystemId = persistence.GetId(persistence.GetPersistentState(SCR_TaskSystemData));
506 if (taskSystemId.IsNull())
509 SCR_ScenarioFrameworkLayerTaskSaveLoadContext context();
511 context.Task = SCR_ScenarioFrameworkLayerTask.Cast(
layer);
512 PersistenceWhenAvailableTask taskSystemDataHandler(OnTaskDataAvailable, context);
513 persistence.WhenAvailable(taskSystemId, taskSystemDataHandler);
517 protected static void OnTaskDataAvailable(Managed instance, PersistenceDeferredDeserializeTask deserializeTask,
bool expired, Managed context)
519 auto taskSystem = SCR_TaskSystem.GetInstance();
520 if (!taskSystem || !instance)
523 auto ctx = SCR_ScenarioFrameworkLayerTaskSaveLoadContext.Cast(context);
524 if (!ctx.Save || !ctx.Task)
527 auto task = SCR_ScenarioFrameworkTask.Cast(taskSystem.GetTaskFromTaskID(ctx.Task.GetName()));
531 ctx.Task.m_Task =
task;
532 task.SetLayerTask(ctx.Task);
534 const PersistenceSystem persistence = PersistenceSystem.GetInstance();
535 const SCR_ScenarioFrameworkSystem scenarioFrameworkSystem = SCR_ScenarioFrameworkSystem.
GetInstance();
536 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem, ctx.Save.m_aTriggerActionsOnFinish, ctx.Task.m_aTriggerActionsOnFinish);
537 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem, ctx.Save.m_aActionsOnCreated, ctx.Task.m_aActionsOnCreated);
538 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem, ctx.Save.m_aActionsOnFailed, ctx.Task.m_aActionsOnFailed);
539 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem, ctx.Save.m_aActionsOnCancelled, ctx.Task.m_aActionsOnCancelled);
540 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem, ctx.Save.m_aActionsOnProgress, ctx.Task.m_aActionsOnProgress);
541 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem, ctx.Save.m_aActionsOnAssigned, ctx.Task.m_aActionsOnAssigned);
547 if (!super.SerializationSave(context))
574 if (!super.SerializationLoad(context))
601 float m_fSecondsRemaining = -1.0;
606 super.Read(persistence,
layer);
608 auto layerTaskDefend = SCR_ScenarioFrameworkLayerTaskDefend.Cast(
layer);
609 m_fSecondsRemaining = layerTaskDefend.GetSecondsRemaining();
610 const float defendTime = layerTaskDefend.GetDefendTime();
611 if (
float.AlmostEqual(m_fSecondsRemaining, defendTime))
612 m_fSecondsRemaining = -1.0;
618 return super.IsDefault() &&
float.AlmostEqual(m_fSecondsRemaining, -1.0);
624 super.Write(persistence, scenarioFrameworkSystem,
layer);
626 auto layerTaskDefend = SCR_ScenarioFrameworkLayerTaskDefend.Cast(
layer);
627 layerTaskDefend.SetSecondsRemaining(m_fSecondsRemaining);
631 override bool SerializationSave(
SaveContext context)
633 if (!super.SerializationSave(context))
636 context.WriteDefault(m_fSecondsRemaining, -1.0);
641 override bool SerializationLoad(
LoadContext context)
643 if (!super.SerializationLoad(context))
646 context.ReadDefault(m_fSecondsRemaining, -1.0);
660 super.Read(persistence,
layer);
664 auto spawnedEntity = slot.GetSpawnedEntity();
666 foreach (
auto entity : slot.m_aSpawnedEntities)
668 if (entity == spawnedEntity)
671 const UUID
id = persistence.GetId(entity);
690 super.Write(persistence, scenarioFrameworkSystem,
layer);
699 Tuple2<SCR_ScenarioFrameworkSlotBase, bool> entityContext(slot,
true);
700 PersistenceWhenAvailableTask slotEntityTask(OnEntityAvailable, entityContext);
706 Tuple2<SCR_ScenarioFrameworkSlotBase, bool> entityContext(slot,
false);
707 PersistenceWhenAvailableTask slotEntityTask(OnEntityAvailable, entityContext);
708 persistence.WhenAvailable(miscEntity, slotEntityTask);
713 protected static void OnEntityAvailable(Managed instance, PersistenceDeferredDeserializeTask
task,
bool expired, Managed context)
715 auto entity =
IEntity.Cast(instance);
719 auto entityContext = Tuple2<SCR_ScenarioFrameworkSlotBase, bool>.Cast(context);
720 if (!entityContext.param1)
723 if (entityContext.param2)
725 entityContext.param1.SetEntity(entity);
728 if (slotWP && slotWP.m_Waypoint)
730 slotWP.m_Waypoint.m_SlotWaypoint = slotWP;
731 slotWP.m_Waypoint.SetupWaypoint(entity);
736 entityContext.param1.m_aSpawnedEntities.Insert(entity);
743 if (!super.SerializationSave(context))
758 if (!super.SerializationLoad(context))
778 super.Read(persistence,
layer);
781 m_sGroupId = persistence.GetId(slot.m_AIGroup);
787 return super.IsDefault() && m_sGroupId.IsNull();
793 super.Write(persistence, scenarioFrameworkSystem,
layer);
795 if (m_sGroupId.IsNull())
801 persistence.WhenAvailable(m_sGroupId, slotGroupTask);
812 if (!groupContext.param1)
815 groupContext.param1.m_AIGroup = group;
816 if (group.GetCurrentWaypoint())
817 groupContext.param1.m_bWaypointsInitialized =
true;
823 if (!super.SerializationSave(context))
826 context.WriteDefault(m_sGroupId,
UUID.NULL_UUID);
833 if (!super.SerializationLoad(context))
836 context.ReadDefault(m_sGroupId,
UUID.NULL_UUID);
841class SCR_ScenarioFrameworkSlotTaskSave : SCR_ScenarioFrameworkSlotSave
853 super.Read(persistence,
layer);
855 auto slot = SCR_ScenarioFrameworkSlotTask.Cast(
layer);
856 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, slot.m_aActionsOnFinished,
m_aActionsOnFinished);
857 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, slot.m_aActionsOnCreated,
m_aActionsOnCreated);
858 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, slot.m_aActionsOnFailed,
m_aActionsOnFailed);
859 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, slot.m_aActionsOnCancelled,
m_aActionsOnCancelled);
860 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, slot.m_aActionsOnProgress,
m_aActionsOnProgress);
861 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, slot.m_aActionsOnAssigned,
m_aActionsOnAssigned);
867 return super.IsDefault() &&
879 super.Write(persistence, scenarioFrameworkSystem,
layer);
881 auto slot = SCR_ScenarioFrameworkSlotTask.Cast(
layer);
882 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem,
m_aActionsOnFinished, slot.m_aActionsOnFinished);
883 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem,
m_aActionsOnCreated, slot.m_aActionsOnCreated);
884 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem,
m_aActionsOnFailed, slot.m_aActionsOnFailed);
885 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem,
m_aActionsOnCancelled, slot.m_aActionsOnCancelled);
886 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem,
m_aActionsOnProgress, slot.m_aActionsOnProgress);
887 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem,
m_aActionsOnAssigned, slot.m_aActionsOnAssigned);
893 if (!super.SerializationSave(context))
920 if (!super.SerializationLoad(context))
952 super.Read(persistence,
layer);
954 auto slot = SCR_ScenarioFrameworkSlotTaskAI.Cast(
layer);
955 m_sGroupId = persistence.GetId(slot.m_AIGroup);
961 return super.IsDefault() && m_sGroupId.IsNull();
967 super.Write(persistence, scenarioFrameworkSystem,
layer);
969 if (m_sGroupId.IsNull())
972 auto slot = SCR_ScenarioFrameworkSlotTaskAI.Cast(
layer);
975 persistence.WhenAvailable(m_sGroupId, slotGroupTask);
986 if (!groupContext.param1)
989 groupContext.param1.m_AIGroup = group;
990 if (group.GetCurrentWaypoint())
991 groupContext.param1.m_bWaypointsInitialized =
true;
997 if (!super.SerializationSave(context))
1000 context.WriteDefault(m_sGroupId,
UUID.NULL_UUID);
1007 if (!super.SerializationLoad(context))
1010 context.ReadDefault(m_sGroupId,
UUID.NULL_UUID);
1015class SCR_ScenarioFrameworkSlotTriggerSave : SCR_ScenarioFrameworkSlotSave
1022 super.Read(persistence,
layer);
1024 auto slot = SCR_ScenarioFrameworkSlotTrigger.Cast(
layer);
1025 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, slot.m_aTriggerActions,
m_aTriggerActions);
1037 super.Write(persistence, scenarioFrameworkSystem,
layer);
1039 auto slot = SCR_ScenarioFrameworkSlotTrigger.Cast(
layer);
1040 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem,
m_aTriggerActions, slot.m_aTriggerActions);
1046 if (!super.SerializationSave(context))
1058 if (!super.SerializationLoad(context))
1071 bool m_bIsTerminated;
1072 ref array<ref SCR_ScenarioFrameworkActionSave> m_aActions = {};
1077 m_sName = logic.GetName();
1078 m_bIsTerminated = logic.GetIsTerminated();
1085 return !m_bIsTerminated && m_aActions.IsEmpty();
1091 if (m_sName.IsEmpty())
1094 auto logic = SCR_ScenarioFrameworkLogic.Cast(
GetGame().GetWorld().FindEntityByName(m_sName));
1095 if (logic && m_bIsTerminated)
1096 logic.SetIsTerminated(
true);
1106 context.Write(m_sName);
1107 context.WriteDefault(m_bIsTerminated,
false);
1109 if (!context.CanSeekMembers() || !m_aActions.IsEmpty())
1110 context.Write(m_aActions);
1118 context.Read(m_sName);
1119 context.ReadDefault(m_bIsTerminated,
false);
1121 if (!context.Read(m_aActions) && !context.CanSeekMembers())
1135 super.Read(persistence, logic);
1137 m_iCounterValue = SCR_ScenarioFrameworkLogicCounter.Cast(logic).GetCounterValue();
1149 auto logic = super.Write(persistence, scenarioFrameworkSystem);
1150 auto counter = SCR_ScenarioFrameworkLogicCounter.Cast(logic);
1160 if (!super.SerializationSave(context))
1170 if (!super.SerializationLoad(context))
1180 string m_sStoreName;
1181 int m_iNumberOfActivations;
1182 ref array<ref SCR_ScenarioFrameworkActionSave> m_aSubActions = {};
1188 return new SCR_ScenarioFrameworkActionWaitAndExecuteSave();
1194 return new SCR_ScenarioFrameworkActionOnUserActionEventSave();
1200 static void ReadActions(
1202 notnull array<ref SCR_ScenarioFrameworkActionBase> sourceActions,
1203 notnull array<ref SCR_ScenarioFrameworkActionSave> savesholder)
1208 actionSave.Read(persistence, action);
1209 if (!actionSave.IsDefault())
1210 savesholder.Insert(actionSave);
1215 static void WriteActions(
1218 notnull array<ref SCR_ScenarioFrameworkActionSave> savesholder,
1219 notnull array<ref SCR_ScenarioFrameworkActionBase> sourceActions)
1221 foreach (
auto action : savesholder)
1223 action.Write(persistence, scenarioFrameworkSystem, sourceActions);
1230 m_sStoreName = action.GetStoreName();
1232 auto subActions = action.GetSubActions();
1234 ReadActions(persistence, subActions, m_aSubActions);
1236 if (action.m_iMaxNumberOfActivations == -1)
1239 m_iNumberOfActivations = action.m_iNumberOfActivations;
1245 return m_iNumberOfActivations == 0 && m_aSubActions.IsEmpty();
1252 array<ref SCR_ScenarioFrameworkActionBase> actions)
1256 if (action.GetStoreName() == m_sStoreName)
1258 action.m_iNumberOfActivations = m_iNumberOfActivations;
1260 auto subActions = action.GetSubActions();
1262 WriteActions(persistence, scenarioFrameworkSystem, m_aSubActions, subActions);
1274 context.Write(m_sStoreName);
1275 context.WriteDefault(m_iNumberOfActivations, 0);
1277 if (!context.CanSeekMembers() || !m_aSubActions.IsEmpty())
1278 context.Write(m_aSubActions);
1286 context.Read(m_sStoreName);
1287 context.ReadDefault(m_iNumberOfActivations, 0);
1289 if (!context.Read(m_aSubActions) && !context.CanSeekMembers())
1304 super.Read(persistence, action);
1308 if (!waitAndExecuteAction.m_Entity)
1311 const UUID persistentId = persistence.GetId(waitAndExecuteAction.m_Entity);
1312 if (!persistentId.IsNull())
1318 m_EntityId = waitAndExecuteAction.m_Entity.GetName();
1331 array<ref SCR_ScenarioFrameworkActionBase> actions)
1334 if (waitAndExecuteAction)
1338 Tuple2<SCR_ScenarioFrameworkActionWaitAndExecute, int> actionContext(waitAndExecuteAction,
m_iTimeRemaining);
1340 persistence.WhenAvailable(
m_EntityId, entityTask);
1346 object = persistence.GetWorld().FindEntityByName(
m_EntityId);
1351 return waitAndExecuteAction;
1355 protected static void OnEntityAvailable(Managed instance, PersistenceDeferredDeserializeTask
task,
bool expired, Managed context)
1357 auto entity =
IEntity.Cast(instance);
1359 auto entityContext = Tuple2<SCR_ScenarioFrameworkActionWaitAndExecute, int>.Cast(context);
1360 if (!entityContext.param1)
1363 SCR_ScenarioFrameworkSystem.GetCallQueuePausable().CallLater(entityContext.param1.ExecuteActions, entityContext.param2,
false, entity);
1369 if (!super.SerializationSave(context))
1373 context.WriteDefault(
m_EntityId,
string.Empty);
1380 if (!super.SerializationLoad(context))
1384 context.ReadDefault(
m_EntityId,
string.Empty);
1391 float m_fLimitRemaining;
1396 super.Read(persistence, action);
1399 if (!limiterAction.m_LimitedUntil)
1403 m_fLimitRemaining = limiterAction.m_LimitedUntil.DiffMilliseconds(currentTimestamp)
1409 return super.IsDefault() && m_fLimitRemaining == 0.0;
1416 array<ref SCR_ScenarioFrameworkActionBase> actions)
1421 limiterAction.m_LimitedUntil =
GetGame().GetWorld().GetTimestamp().PlusMilliseconds(m_fLimitRemaining);
1423 return limiterAction;
1427 override bool SerializationSave(
SaveContext context)
1429 if (!super.SerializationSave(context))
1432 context.WriteDefault(m_fLimitRemaining, 0.0);
1437 override bool SerializationLoad(
LoadContext context)
1439 if (!super.SerializationLoad(context))
1442 context.ReadDefault(m_fLimitRemaining, 0.0);
1453 override void Read(
const PersistenceSystem persistence,
const SCR_ScenarioFrameworkActionBase action)
1455 super.Read(persistence, action);
1457 const SCR_ScenarioFrameworkActionOnUserActionEvent listenerAction = SCR_ScenarioFrameworkActionOnUserActionEvent.Cast(action);
1459 if (!listenerAction.m_aUserEntities)
1462 foreach (
IEntity user : listenerAction.m_aUserEntities)
1464 const UUID
id = persistence.GetId(user);
1477 override SCR_ScenarioFrameworkActionBase
Write(
1478 PersistenceSystem persistence,
1479 SCR_ScenarioFrameworkSystem scenarioFrameworkSystem,
1480 array<ref SCR_ScenarioFrameworkActionBase> actions)
1482 auto listenerAction = SCR_ScenarioFrameworkActionOnUserActionEvent.Cast(super.Write(persistence, scenarioFrameworkSystem, actions));
1487 Tuple2<SCR_ScenarioFrameworkActionOnUserActionEvent, bool> actionContext(listenerAction,
true);
1488 PersistenceWhenAvailableTask entityTask(OnEntityAvailable, actionContext);
1494 Tuple2<SCR_ScenarioFrameworkActionOnUserActionEvent, bool> actionContext(listenerAction,
false);
1495 PersistenceWhenAvailableTask entityTask(OnEntityAvailable, actionContext);
1498 persistence.WhenAvailable(user, entityTask);
1502 return listenerAction;
1506 protected static void OnEntityAvailable(Managed instance, PersistenceDeferredDeserializeTask
task,
bool expired, Managed context)
1508 auto entity =
IEntity.Cast(instance);
1510 auto entityContext = Tuple2<SCR_ScenarioFrameworkActionOnUserActionEvent, bool>.Cast(context);
1511 if (!entityContext.param1)
1514 if (!entityContext.param2)
1516 entityContext.param1.m_aUserEntities.Insert(entity);
1520 BaseActionsManagerComponent actionsManager = BaseActionsManagerComponent.Cast(entity.FindComponent(BaseActionsManagerComponent));
1521 if (!actionsManager)
1524 ScriptedUserAction scriptedUserAction = ScriptedUserAction.Cast(actionsManager.FindAction(entityContext.param1.m_iActionID));
1525 if (!scriptedUserAction)
1528 actionsManager.AddUserActionEventListener(scriptedUserAction, entityContext.param1.OnInvoked);
1534 if (!super.SerializationSave(context))
1548 if (!super.SerializationLoad(context))
1562 string m_sStoreName;
1568 return new SCR_ScenarioFrameworkPluginTriggerSave();
1574 return new SCR_ScenarioFrameworkPluginOnInventoryChangeSave();
1585 m_sStoreName = plugin.GetStoreName();
1599 array<ref SCR_ScenarioFrameworkPlugin> plugins)
1603 if (plugin.GetStoreName() == m_sStoreName)
1615 context.Write(m_sStoreName);
1622 context.Read(m_sStoreName);
1636 super.Read(persistence,
layer, plugin);
1649 super.IsDefault() &&
1660 array<ref SCR_ScenarioFrameworkPlugin> plugins)
1669 return pluginTrigger;
1675 if (!super.SerializationSave(context))
1693 if (!super.SerializationLoad(context))
1711 ref array<ref SCR_ScenarioFrameworkActionSave> m_aActionsOnSpawnPointUsed = {};
1716 super.Read(persistence,
layer, plugin);
1725 return super.IsDefault() && m_aActionsOnSpawnPointUsed.IsEmpty();
1733 array<ref SCR_ScenarioFrameworkPlugin> plugins)
1736 if (spawnpointPlugin)
1738 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem, m_aActionsOnSpawnPointUsed, spawnpointPlugin.m_aActionsOnSpawnPointUsed);
1740 return spawnpointPlugin;
1744 override bool SerializationSave(
SaveContext context)
1746 if (!super.SerializationSave(context))
1749 if (!context.CanSeekMembers() || !m_aActionsOnSpawnPointUsed.IsEmpty())
1750 context.Write(m_aActionsOnSpawnPointUsed);
1756 override bool SerializationLoad(
LoadContext context)
1758 if (!super.SerializationLoad(context))
1761 if (!context.Read(m_aActionsOnSpawnPointUsed) && !context.CanSeekMembers())
1775 super.Read(persistence,
layer, plugin);
1777 const SCR_ScenarioFrameworkPluginOnInventoryChange inventoryChangePlugin = SCR_ScenarioFrameworkPluginOnInventoryChange.Cast(plugin);
1778 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, inventoryChangePlugin.m_aActionsOnItemAdded,
m_aActionsOnItemAdded);
1779 SCR_ScenarioFrameworkActionSave.ReadActions(persistence, inventoryChangePlugin.m_aActionsOnItemRemoved,
m_aActionsOnItemRemoved);
1786 super.IsDefault() &&
1792 override SCR_ScenarioFrameworkPlugin
Write(
1793 PersistenceSystem persistence,
1794 SCR_ScenarioFrameworkSystem scenarioFrameworkSystem,
1796 array<ref SCR_ScenarioFrameworkPlugin> plugins)
1798 SCR_ScenarioFrameworkPluginOnInventoryChange inventoryChangePlugin = SCR_ScenarioFrameworkPluginOnInventoryChange.Cast(super.Write(persistence, scenarioFrameworkSystem,
layer, plugins));
1799 if (inventoryChangePlugin)
1801 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem,
m_aActionsOnItemAdded, inventoryChangePlugin.m_aActionsOnItemAdded);
1802 SCR_ScenarioFrameworkActionSave.WriteActions(persistence, scenarioFrameworkSystem,
m_aActionsOnItemRemoved, inventoryChangePlugin.m_aActionsOnItemRemoved);
1804 return inventoryChangePlugin;
1810 if (!super.SerializationSave(context))
1825 if (!super.SerializationLoad(context))
1840 ref array<ref SCR_ScenarioFrameworkActionSave> m_aActionsOnDestroy = {};
1845 super.Read(persistence,
layer, plugin);
1854 return super.IsDefault() && m_aActionsOnDestroy.IsEmpty();
1862 array<ref SCR_ScenarioFrameworkPlugin> plugins)
1865 if (destroyEventPlugin)
1869 return destroyEventPlugin;
1873 override bool SerializationSave(
SaveContext context)
1875 if (!super.SerializationSave(context))
1878 if (!context.CanSeekMembers() || !m_aActionsOnDestroy.IsEmpty())
1879 context.Write(m_aActionsOnDestroy);
1885 override bool SerializationLoad(
LoadContext context)
1887 if (!super.SerializationLoad(context))
1890 if (!context.Read(m_aActionsOnDestroy) && !context.CanSeekMembers())
class SCR_PersistentThreatSector GetTargetType()
ArmaReforgerScripted GetGame()
SCR_EScenarioFrameworkSpawnChildrenType
void SCR_ScenarioFrameworkLayerBase(IEntityComponentSource src, IEntity ent, IEntity parent)
void SCR_ScenarioFrameworkSlotBase(IEntityComponentSource src, IEntity ent, IEntity parent)
void SCR_ScenarioFrameworkSlotWaypoint(IEntityComponentSource src, IEntity ent, IEntity parent)
ref array< UUID > m_aUserEntitiyIds
ref array< ref SCR_ScenarioFrameworkActionSave > m_aTriggerActions
ref array< UUID > m_aMiscEntities
class SCR_ScenarioFrameworkActionSave m_iTimeRemaining
ref array< ref SCR_ScenarioFrameworkActionSave > m_aActionsOnCancelled
void StoreAreaStates(PersistenceSystem persistence, SCR_ScenarioFrameworkSystem scenarioFrameworkSystem, out array< ref SCR_ScenarioFrameworkAreaSave > saves)
ref array< ref SCR_ScenarioFrameworkActionSave > m_aActionsOnCreated
SCR_ScenarioFrameworkSlotAISave m_aActionsOnFinished
ref array< ref SCR_ScenarioFrameworkActionSave > m_aFinishedActions
SCR_ScenarioFrameworkLayerTaskDefendSave m_sRandomlySpawnedObject
class SCR_ScenarioFrameworkLogicSave m_iCounterValue
class SCR_ScenarioFrameworkPluginSave m_aEntityEnteredActions
class SCR_ScenarioFrameworkLayerTaskSaveLoadContext m_bTaskActive
override bool IsDefault()
ref array< ref SCR_ScenarioFrameworkActionSave > m_aEntityLeftActions
SCR_ScenarioFrameworkActionLimiterSave m_sActionHolderId
void LoadAreaStates(PersistenceSystem persistence, SCR_ScenarioFrameworkSystem scenarioFrameworkSystem, array< ref SCR_ScenarioFrameworkAreaSave > saves)
class SCR_ScenarioFrameworkLayerSave m_bAreaSelected
ref array< ref SCR_ScenarioFrameworkActionSave > m_aTriggerActionsOnFinish
ref array< ref SCR_ScenarioFrameworkActionSave > m_aActionsOnItemRemoved
ref array< ref SCR_ScenarioFrameworkActionSave > m_aActionsOnAssigned
ref array< ref SCR_ScenarioFrameworkActionSave > m_aActionsOnFailed
override bool SerializationLoad(LoadContext context)
string m_sItemDeliveryPointName
ref array< ref SCR_ScenarioFrameworkActionSave > m_aActionsOnProgress
SCR_ScenarioFrameworkPluginSpawnPointSave m_aActionsOnItemAdded
override bool SerializationSave(SaveContext context)
proto bool Write(void value_out)
proto bool Read(void value_in)
enum EVehicleType IEntity
proto external Managed FindComponent(typename typeName)
override bool SerializationSave(SaveContext context)
static void OnGroupAvailable(Managed instance, PersistenceDeferredDeserializeTask task, bool expired, Managed context)
override bool SerializationLoad(LoadContext context)
override bool SerializationLoad(LoadContext context)
override bool SerializationSave(SaveContext context)
static void OnGroupAvailable(Managed instance, PersistenceDeferredDeserializeTask task, bool expired, Managed context)
Dummy state proxy to access scenario framework system instance.
ref array< string > m_aLayersTaskToSpawn
static ScriptCallQueue GetCallQueuePausable()
static SCR_ScenarioFrameworkSystem GetInstance()
ref array< SCR_ScenarioFrameworkArea > m_aAreas
ref array< string > m_aAreasTasksToSpawn
EGameOverTypes m_eGameOverType
ref map< string, string > m_mVariableMap
bool Deserialize(notnull Managed instance, notnull LoadContext context)
ESerializeResult Serialize(notnull Managed instance, notnull SaveContext context)