44 lines
2.2 KiB
C
44 lines
2.2 KiB
C
modded class ERR_ScenarioComponent
|
|
{
|
|
override ERR_PrepareResult Prepare()
|
|
{
|
|
if (System.IsCLIParam("errExtractionTerrain")) m_TerrainIndependent = true;
|
|
return super.Prepare();
|
|
}
|
|
}
|
|
modded class ERR_GameMode
|
|
{
|
|
protected bool m_ERRExtractionChecked;
|
|
protected override void EOnInit(IEntity owner)
|
|
{
|
|
super.EOnInit(owner);
|
|
if (Replication.IsServer() && !SCR_Global.IsEditMode()) GetGame().GetCallqueue().CallLater(ERR_CheckAnywhereExtraction, 500, true);
|
|
}
|
|
protected void ERR_CheckAnywhereExtraction()
|
|
{
|
|
if (m_ERRExtractionChecked) return;
|
|
if (!PreparationError().IsEmpty())
|
|
{
|
|
Print("ERR SMOKE FAIL: extraction mission " + PreparationError(), LogLevel.ERROR);
|
|
m_ERRExtractionChecked = true; return;
|
|
}
|
|
if (!Active()) return;
|
|
SCR_PlayerController pc = SCR_PlayerController.Cast(GetGame().GetPlayerController());
|
|
if (!pc || !pc.GetControlledEntity() || !Players().CurrentActor(pc.GetControlledEntity())) return;
|
|
m_ERRExtractionChecked = true;
|
|
ERR_SiteRuntime extraction = Sites().Find("everon-extraction-1");
|
|
ERR_SiteRuntime prison = Sites().Find("everon-prison-1");
|
|
if (!extraction || !prison || !extraction.Definition.PlacementResolved || extraction.Definition.RequireAirfield)
|
|
{ Print("ERR SMOKE FAIL: extraction was not generated without airport requirement", LogLevel.ERROR); return; }
|
|
vector point = extraction.Definition.Position;
|
|
float distance = vector.DistanceXZ(point, prison.Definition.Position);
|
|
float fromOldPad = vector.DistanceXZ(point, "4800.953 0 11487.412");
|
|
PrintFormat("ERR EXTRACTION ANYWHERE: terrainIndependent=%1 pickup=%2 prisonDistance=%3 oldAirportPadDistance=%4", System.IsCLIParam("errExtractionTerrain"), point, distance, fromOldPad);
|
|
if (distance + 100 >= EscapeRadius() || fromOldPad < 600 || !ERR_Actors.DryGround(point) || !ERR_RescueLanding.Fits(point))
|
|
{ Print("ERR SMOKE FAIL: extraction distance/ground/fleet verification", LogLevel.ERROR); return; }
|
|
Print("ERR SMOKE PASS: full mission and player admission; generated off-airport extraction, inside escape boundary with dry ground and rescue fleet space");
|
|
Print("ERR SMOKE COMPLETE: anywhere extraction");
|
|
GetGame().GetCallqueue().Remove(ERR_CheckAnywhereExtraction);
|
|
}
|
|
}
|