Capture current mission, AI, map and administration development
Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
--- before/ERR_TerrainTakeover.c
|
||||
+++ after/ERR_TerrainTakeover.c
|
||||
@@ -277,6 +277,7 @@
|
||||
if (!ERR_TerrainTakeoverReplication.Link(mode)) { ERR_FailTerrainTakeover("Escape replication hierarchy could not register; restart the scenario."); return; }
|
||||
m_ERRTerrainStage = ERR_TerrainTakeoverStage.RUNNING;
|
||||
mode.ERR_StartTerrainTakeover(GetWorld());
|
||||
+ GetGame().ERR_PresentTerrainTakeover();
|
||||
foreach (ERR_TerrainTakeoverAdmission admission : m_ERRTerrainAdmissions)
|
||||
{
|
||||
int connection = admission.Connection;
|
||||
--- before/ERR_TerrainTakeoverClient.c
|
||||
+++ after/ERR_TerrainTakeoverClient.c
|
||||
@@ -8,6 +8,7 @@
|
||||
{
|
||||
if (!GetGame() || Replication.IsServer()) return;
|
||||
GetGame().ERR_BeginClientTerrainTakeover(this);
|
||||
+ GetGame().ERR_PresentTerrainTakeover();
|
||||
}
|
||||
}
|
||||
modded class ArmaReforgerScripted
|
||||
--- before/ERR_TerrainTakeoverPresentation.c
|
||||
+++ after/ERR_TerrainTakeoverPresentation.c
|
||||
@@ -0,0 +1,54 @@
|
||||
+// Scenario selection still loads the terrain's header. Advertise the configured
|
||||
+// Escape mode through the native DS name callback, then update local metadata
|
||||
+// only when the authority actually starts Escape or its bootstrap reaches a client.
|
||||
+modded class ArmaReforgerScripted
|
||||
+{
|
||||
+ protected ref SCR_MissionHeader m_ERRPresentedTerrainHeader;
|
||||
+ protected string m_ERROriginalTerrainTitle;
|
||||
+ protected string m_ERROriginalTerrainGameMode;
|
||||
+
|
||||
+ static string ERR_TerrainMissionTitle() { return "Co10 Escape Reintroduced"; }
|
||||
+
|
||||
+ override string GetMissionName()
|
||||
+ {
|
||||
+ SCR_MissionHeader header = SCR_MissionHeader.Cast(GetMissionHeader());
|
||||
+ // The engine requests this before the dedicated world has loaded. Preserve
|
||||
+ // authored Escape names and explicit opt-outs; do not change the scenario ID.
|
||||
+ if (Replication.IsServer() && header && header.m_sGameMode != "Escape" && m_ERRTerrainStage != ERR_TerrainTakeoverStage.FAILED && ERR_TerrainTakeoverSettings.Enabled())
|
||||
+ return ERR_TerrainMissionTitle();
|
||||
+ return super.GetMissionName();
|
||||
+ }
|
||||
+
|
||||
+ void ERR_PresentTerrainTakeover()
|
||||
+ {
|
||||
+ SCR_MissionHeader header = SCR_MissionHeader.Cast(GetMissionHeader());
|
||||
+ if (!header || SCR_Global.IsEditMode()) return;
|
||||
+ if (m_ERRPresentedTerrainHeader == header) return;
|
||||
+ ERR_RestoreTerrainPresentation();
|
||||
+ m_ERRPresentedTerrainHeader = header;
|
||||
+ m_ERROriginalTerrainTitle = header.m_sName;
|
||||
+ m_ERROriginalTerrainGameMode = header.m_sGameMode;
|
||||
+ header.m_sName = ERR_TerrainMissionTitle();
|
||||
+ header.m_sGameMode = "Escape";
|
||||
+ PrintFormat("Reintroduced [terrain presentation]: mission=%1; source scenario=%2", header.m_sName, header.GetHeaderResourceName());
|
||||
+ }
|
||||
+
|
||||
+ protected void ERR_RestoreTerrainPresentation()
|
||||
+ {
|
||||
+ if (m_ERRPresentedTerrainHeader)
|
||||
+ {
|
||||
+ // A later change by another system belongs to that system.
|
||||
+ if (m_ERRPresentedTerrainHeader.m_sName == ERR_TerrainMissionTitle()) m_ERRPresentedTerrainHeader.m_sName = m_ERROriginalTerrainTitle;
|
||||
+ if (m_ERRPresentedTerrainHeader.m_sGameMode == "Escape") m_ERRPresentedTerrainHeader.m_sGameMode = m_ERROriginalTerrainGameMode;
|
||||
+ }
|
||||
+ m_ERRPresentedTerrainHeader = null;
|
||||
+ m_ERROriginalTerrainTitle = "";
|
||||
+ m_ERROriginalTerrainGameMode = "";
|
||||
+ }
|
||||
+
|
||||
+ override protected void OnBeforeWorldCleanup()
|
||||
+ {
|
||||
+ ERR_RestoreTerrainPresentation();
|
||||
+ super.OnBeforeWorldCleanup();
|
||||
+ }
|
||||
+}
|
||||
Reference in New Issue
Block a user