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,702 @@
|
||||
--- before/README.md
|
||||
+++ after/README.md
|
||||
@@ -76,4 +76,4 @@
|
||||
|
||||
Random field hospitals and camps, their permanent/mobile guard split, finite supplies and authoring options are documented in [Field sites](docs/field-sites.md).
|
||||
|
||||
-Town population and its 700-metre spawning rule: [town garrisons](docs/town-garrisons.md).
|
||||
+Town population, configurable factory guards and safe tower/roof posts: [town and object garrisons](docs/town-garrisons.md).
|
||||
--- before/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenu.c
|
||||
+++ after/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenu.c
|
||||
@@ -8,12 +8,12 @@
|
||||
{
|
||||
static array<string> Keys()
|
||||
{
|
||||
- return {"hunterSpawnDistanceMetres", "roadblockCount", "civilianTrafficCount", "startMode", "radioDefenceSeconds", "aiIntelChancePercent", "intelRevealChancePercent", "startTimeMinutes", "timeMultiplier", "startDateCode", "weatherProfile", "viewDistanceMetres", "reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "convoyCount", "antiAirChancePercent", "antiPersonnelMineChancePercent", "heliTimerMinutes"};
|
||||
+ return {"objectGuardCount", "hunterSpawnDistanceMetres", "roadblockCount", "civilianTrafficCount", "startMode", "radioDefenceSeconds", "aiIntelChancePercent", "intelRevealChancePercent", "startTimeMinutes", "timeMultiplier", "startDateCode", "weatherProfile", "viewDistanceMetres", "reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "convoyCount", "antiAirChancePercent", "antiPersonnelMineChancePercent", "heliTimerMinutes"};
|
||||
}
|
||||
static bool Available(string key, bool hq, bool intel)
|
||||
{
|
||||
if (key == "aiIntelChancePercent") return intel;
|
||||
- if (key == "hunterSpawnDistanceMetres" || key == "heliTimerMinutes" || key == "antiAirChancePercent" || key == "antiPersonnelMineChancePercent" || key == "convoyCount" || key == "reportIntervalSeconds" || key == "supportSquadLimit" || key == "responseRadiusMetres") return hq;
|
||||
+ if (key == "objectGuardCount" || key == "hunterSpawnDistanceMetres" || key == "heliTimerMinutes" || key == "antiAirChancePercent" || key == "antiPersonnelMineChancePercent" || key == "convoyCount" || key == "reportIntervalSeconds" || key == "supportSquadLimit" || key == "responseRadiusMetres") return hq;
|
||||
return Keys().Contains(key);
|
||||
}
|
||||
// A short journal has no older off-screen lines, even if its slider is zero.
|
||||
@@ -44,7 +44,8 @@
|
||||
static string Command(string key, string value)
|
||||
{
|
||||
string prefix;
|
||||
- if (key == "hunterSpawnDistanceMetres") prefix = "mission hunterdistance";
|
||||
+ if (key == "objectGuardCount") prefix = "mission objectguards";
|
||||
+ else if (key == "hunterSpawnDistanceMetres") prefix = "mission hunterdistance";
|
||||
else if (key == "roadblockCount") prefix = "mission roadblocks";
|
||||
else if (key == "civilianTrafficCount") prefix = "mission traffic";
|
||||
else if (key == "startMode") prefix = "mission start";
|
||||
--- before/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminService.c
|
||||
+++ after/addons/core/Scripts/Game/ERR/00_Core/ERR_AdminService.c
|
||||
@@ -4,6 +4,7 @@
|
||||
{
|
||||
static string CoreSetting(string section, string option)
|
||||
{
|
||||
+ if (section == "mission" && option == "objectguards") return "objectGuardCount";
|
||||
if (section == "mission" && option == "hunterdistance") return "hunterSpawnDistanceMetres";
|
||||
if (section == "mission" && option == "roadblocks") return "roadblockCount";
|
||||
if (section == "mission" && option == "traffic") return "civilianTrafficCount";
|
||||
@@ -145,6 +146,7 @@
|
||||
}
|
||||
protected string SettingHelp(string key)
|
||||
{
|
||||
+ if (key == "objectGuardCount") return "0..16 soldiers per factory/industrial, military or infrastructure site; default 8, zero off. Next round. Half stay at posts (odd extra stays), half respond to HQ; both report. Spawn only 1000m from every player as sites approach 1400m. Towers/chimneys use safe platforms; no replacement waves.";
|
||||
if (key == "hunterSpawnDistanceMetres") return "Set 800..3000 metres (default 1000). Applies next round to the opening UAZs and troop truck, on separate sides. Roads allow 250m variation; unsuitable terrain uses safe objective-road fallback.";
|
||||
if (key == "roadblockCount") return "Set 0..12 roadblocks (default 4; 0 disables). Applies next round. Each has four guards; unsuitable sites are skipped.";
|
||||
if (key == "civilianTrafficCount") return "Set 0..6 civilian cars (default 3). Zero disables new traffic. Unclaimed cars retire only far from all players and out of sight; player-entered cars are preserved.";
|
||||
@@ -157,7 +159,7 @@
|
||||
}
|
||||
protected string RoadblockTiming(string key)
|
||||
{
|
||||
- if (key == "hunterSpawnDistanceMetres" || key == "roadblockCount") return " for next round";
|
||||
+ if (key == "objectGuardCount" || key == "hunterSpawnDistanceMetres" || key == "roadblockCount") return " for next round";
|
||||
return "";
|
||||
}
|
||||
protected void SettingCommand(ERR_Settings settings, string key, array<string> parts, array<string> replies)
|
||||
--- before/addons/core/Scripts/Game/ERR/00_Core/ERR_Settings.c
|
||||
+++ after/addons/core/Scripts/Game/ERR/00_Core/ERR_Settings.c
|
||||
@@ -9,11 +9,12 @@
|
||||
|
||||
static array<string> Keys()
|
||||
{
|
||||
- return {"hunterSpawnDistanceMetres", "roadblockCount", "civilianTrafficCount", "startMode", "keepWeaponOnUnconscious", "reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "aiIntelChancePercent", "intelRevealChancePercent", "radioDefenceSeconds", "startTimeMinutes", "timeMultiplier", "startDateCode", "weatherProfile", "viewDistanceMetres", "antiAirChancePercent", "antiPersonnelMineChancePercent", "automaticEquipmentChancePercent", "automaticConvoyEnabled", "convoyCount", "heliTimerMinutes"};
|
||||
+ return {"objectGuardCount", "hunterSpawnDistanceMetres", "roadblockCount", "civilianTrafficCount", "startMode", "keepWeaponOnUnconscious", "reportIntervalSeconds", "supportSquadLimit", "responseRadiusMetres", "aiIntelChancePercent", "intelRevealChancePercent", "radioDefenceSeconds", "startTimeMinutes", "timeMultiplier", "startDateCode", "weatherProfile", "viewDistanceMetres", "antiAirChancePercent", "antiPersonnelMineChancePercent", "automaticEquipmentChancePercent", "automaticConvoyEnabled", "convoyCount", "heliTimerMinutes"};
|
||||
}
|
||||
|
||||
static bool Valid(string key, int value)
|
||||
{
|
||||
+ if (key == "objectGuardCount") return value >= 0 && value <= 16;
|
||||
if (key == "hunterSpawnDistanceMetres") return value >= 800 && value <= 3000;
|
||||
if (key == "roadblockCount") return value >= 0 && value <= 12;
|
||||
if (key == "civilianTrafficCount") return value >= 0 && value <= 6;
|
||||
@@ -102,6 +103,7 @@
|
||||
|
||||
static int AddedDefault(string key)
|
||||
{
|
||||
+ if (key == "objectGuardCount") return 8;
|
||||
if (key == "hunterSpawnDistanceMetres") return 1000;
|
||||
if (key == "roadblockCount") return 4;
|
||||
if (key == "civilianTrafficCount") return 3;
|
||||
@@ -122,6 +124,7 @@
|
||||
void ERR_Settings(string path = PATH)
|
||||
{
|
||||
m_Path = path;
|
||||
+ m_Values.Set("objectGuardCount", AddedDefault("objectGuardCount"));
|
||||
m_Values.Set("hunterSpawnDistanceMetres", AddedDefault("hunterSpawnDistanceMetres"));
|
||||
m_Values.Set("roadblockCount", AddedDefault("roadblockCount"));
|
||||
m_Values.Set("civilianTrafficCount", AddedDefault("civilianTrafficCount"));
|
||||
--- before/addons/core/Scripts/Game/ERR/10_AI/ERR_TownGarrisons.c
|
||||
+++ after/addons/core/Scripts/Game/ERR/10_AI/ERR_TownGarrisons.c
|
||||
@@ -10,11 +10,11 @@
|
||||
if (!ERR_ForceRules.FiniteVector(player) || vector.DistanceXZ(position, player) < minimum) return false;
|
||||
return true;
|
||||
}
|
||||
- static bool Approached(vector centre, array<vector> players)
|
||||
+ static bool Approached(vector centre, array<vector> players, float distance = DISTANCE)
|
||||
{
|
||||
if (!players || !ERR_ForceRules.FiniteVector(centre)) return false;
|
||||
foreach (vector player : players)
|
||||
- if (ERR_ForceRules.FiniteVector(player) && vector.DistanceXZ(centre, player) <= DISTANCE) return true;
|
||||
+ if (ERR_ForceRules.FiniteVector(player) && vector.DistanceXZ(centre, player) <= distance) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,9 @@
|
||||
string Id;
|
||||
string Name;
|
||||
int Count;
|
||||
+ bool FixedGuard;
|
||||
+ ref ERR_GuardedObjectSite ObjectSite;
|
||||
+ int GuardIndex;
|
||||
bool Finished;
|
||||
bool Admitted;
|
||||
float NextLog;
|
||||
@@ -37,14 +40,20 @@
|
||||
// check, so native expansion cannot introduce late soldiers beside a player.
|
||||
class ERR_TownGarrisons
|
||||
{
|
||||
+ protected ref ERR_ObjectGarrisons m_Objects;
|
||||
+ protected int m_ObjectGuardCount;
|
||||
protected ERR_GameMode m_Mode;
|
||||
protected ref array<ref ERR_TownGarrison> m_Towns = {};
|
||||
protected ref ERR_SpawnPlacement m_Placement = new ERR_SpawnPlacement();
|
||||
protected float m_Next;
|
||||
protected int m_Cursor;
|
||||
protected bool m_Stopped;
|
||||
- void ERR_TownGarrisons(ERR_GameMode mode) { m_Mode = mode; }
|
||||
-
|
||||
+ void ERR_TownGarrisons(ERR_GameMode mode) { m_Mode = mode; m_ObjectGuardCount = mode.Settings().Get("objectGuardCount"); }
|
||||
+
|
||||
+ protected bool ObjectsOnly() { return false; }
|
||||
+ protected float SpawnDistance() { return 700; }
|
||||
+ protected float ActivationDistance() { return 700; }
|
||||
+ protected void Admitted(ERR_TownGarrison town) {}
|
||||
protected void Players(out array<vector> positions)
|
||||
{
|
||||
positions.Clear();
|
||||
@@ -88,6 +97,7 @@
|
||||
{
|
||||
if (!group) return false;
|
||||
foreach (ERR_TownGarrison town : m_Towns) if (town.Group == group && town.Admitted) return true;
|
||||
+ if (m_Objects && m_Objects.Contains(group)) return true;
|
||||
return false;
|
||||
}
|
||||
protected void Waiting(ERR_TownGarrison town, float now, string reason)
|
||||
@@ -109,7 +119,7 @@
|
||||
float angle = ((first + direction) * 15) * Math.DEG2RAD;
|
||||
float radius = Math.Min(ring * 40, 185);
|
||||
vector anchor = ERR_Actors.Ground(town.Centre + Vector(Math.Cos(angle) * radius, 0, Math.Sin(angle) * radius));
|
||||
- if (!ERR_TownSpawnRules.Safe(anchor, players, 710)) continue;
|
||||
+ if (!ERR_TownSpawnRules.Safe(anchor, players, SpawnDistance() + 10)) continue;
|
||||
if (navmesh && !navmesh.IsTileLoaded(anchor)) { navmesh.LoadTileIn(anchor); continue; }
|
||||
positions.Clear();
|
||||
map<int, vector> reserved = new map<int, vector>();
|
||||
@@ -121,7 +131,7 @@
|
||||
vector navigable;
|
||||
if (!path.GetClosestPositionOnNavmesh(point, "3 3 3", navigable)) break;
|
||||
point = ERR_Actors.Ground(navigable);
|
||||
- if (vector.DistanceXZ(point, town.Centre) > ERR_TownSpawnRules.TOWN_RADIUS || !ERR_TownSpawnRules.Safe(point, players, 702) || !m_Placement.Clear(point, reserved)) break;
|
||||
+ if (vector.DistanceXZ(point, town.Centre) > ERR_TownSpawnRules.TOWN_RADIUS || !ERR_TownSpawnRules.Safe(point, players, SpawnDistance() + 2) || !m_Placement.Clear(point, reserved)) break;
|
||||
positions.Insert(point); reserved.Set(slot, point);
|
||||
}
|
||||
if (positions.Count() == town.Count) return true;
|
||||
@@ -130,7 +140,7 @@
|
||||
}
|
||||
protected void Attempt(ERR_TownGarrison town, array<vector> players, float now)
|
||||
{
|
||||
- if (town.Finished || !ERR_TownSpawnRules.Approached(town.Centre, players)) return;
|
||||
+ if (town.Finished || !ERR_TownSpawnRules.Approached(town.Centre, players, ActivationDistance())) return;
|
||||
if (m_Mode.Forces().Count() >= 250) { Waiting(town, now, "mission force budget is full"); return; }
|
||||
if (!town.Group)
|
||||
{
|
||||
@@ -142,7 +152,7 @@
|
||||
town.Group.SetPermanentLOD(0);
|
||||
}
|
||||
array<vector> positions = {};
|
||||
- if (!Plan(town, players, positions)) { Waiting(town, now, "no clear navigable town position at least 700 m from every player"); return; }
|
||||
+ if (!Plan(town, players, positions)) { Waiting(town, now, "no clear site position outside the player exclusion distance"); return; }
|
||||
Resource profile = Resource.Load(m_Mode.FactionSelection().Choice("enemy").Group);
|
||||
array<ResourceName> roster = {};
|
||||
IEntitySource source;
|
||||
@@ -158,17 +168,17 @@
|
||||
}
|
||||
Players(players);
|
||||
foreach (vector planned : positions)
|
||||
- if (!ERR_TownSpawnRules.Safe(planned, players)) { Waiting(town, now, "a player approached during preparation"); return; }
|
||||
+ if (!ERR_TownSpawnRules.Safe(planned, players, SpawnDistance())) { Waiting(town, now, "a player approached during preparation"); return; }
|
||||
town.Finished = true;
|
||||
float nearest = 1e20;
|
||||
for (int index = 0; index < positions.Count(); index++)
|
||||
{
|
||||
Players(players);
|
||||
- if (!ERR_TownSpawnRules.Safe(positions[index], players)) { Fail(town, "player entered the exclusion area during creation"); return; }
|
||||
+ if (!ERR_TownSpawnRules.Safe(positions[index], players, SpawnDistance())) { Fail(town, "player entered the exclusion area during creation"); return; }
|
||||
IEntity actor = ERR_Actors.Spawn(roster[index % roster.Count()], positions[index]);
|
||||
if (!actor) { Fail(town, "native soldier creation failed"); return; }
|
||||
m_Mode.Own(actor);
|
||||
- if (!ERR_TownSpawnRules.Safe(actor.GetOrigin(), players) || !ERR_Actors.SetFaction(actor, m_Mode.EnemyFaction()) || !town.Group.AddAIEntityToGroup(actor))
|
||||
+ if (!ERR_TownSpawnRules.Safe(actor.GetOrigin(), players, SpawnDistance()) || !ERR_Actors.SetFaction(actor, m_Mode.EnemyFaction()) || !town.Group.AddAIEntityToGroup(actor))
|
||||
{ ERR_Actors.DeleteSpawned(actor); Fail(town, "native soldier placement or group admission failed"); return; }
|
||||
foreach (vector observer : players) nearest = Math.Min(nearest, vector.DistanceXZ(actor.GetOrigin(), observer));
|
||||
}
|
||||
@@ -178,8 +188,10 @@
|
||||
town.Admitted = true;
|
||||
town.Hold = AIWaypoint.Cast(ERR_Actors.Spawn(ERR_Resources.DefendWaypoint(), positions[0]));
|
||||
if (town.Hold) { m_Mode.Own(town.Hold); town.Hold.SetCompletionRadius(60); town.Group.AddWaypoint(town.Hold); }
|
||||
- m_Mode.RegisterGroup(town.Group); town.Group.ActivateAI();
|
||||
- ERR_HQ.Event("TOWN GARRISON", string.Format("%1 at %2: spawned %3 enemy soldiers; nearest player at creation %4 m. All report to VirtualHQ and are available for orders. One squad this round; no replacements.", town.Name, town.Centre, town.Count, Math.Round(nearest)));
|
||||
+ m_Mode.RegisterGroup(town.Group); Admitted(town); town.Group.ActivateAI();
|
||||
+ string role = "VirtualHQ response";
|
||||
+ if (town.FixedGuard) role = "fixed local guard; reports to VirtualHQ";
|
||||
+ ERR_HQ.Event("TOWN GARRISON", string.Format("%1 at %2: spawned %3 soldiers; nearest player %4 m; role=%5; post=%6. No replacements this round.", town.Name, town.Centre, town.Count, Math.Round(nearest), role, positions[0]));
|
||||
}
|
||||
protected void Fail(ERR_TownGarrison town, string reason)
|
||||
{
|
||||
@@ -191,6 +203,15 @@
|
||||
{
|
||||
if (m_Stopped || !Replication.IsServer() || !m_Mode.Active() || m_Mode.Phase() <= ERR_Phase.PRISON || now < m_Next) return;
|
||||
m_Next = now + 2000;
|
||||
+ if (!ObjectsOnly())
|
||||
+ {
|
||||
+ if (!m_Objects)
|
||||
+ {
|
||||
+ m_Objects = new ERR_ObjectGarrisons(m_Mode);
|
||||
+ m_Objects.ConfigureCount(m_ObjectGuardCount);
|
||||
+ }
|
||||
+ m_Objects.Tick(now);
|
||||
+ }
|
||||
array<vector> players = {}; Players(players);
|
||||
if (players.IsEmpty()) return;
|
||||
Discover(players);
|
||||
@@ -200,13 +221,14 @@
|
||||
{
|
||||
m_Cursor = m_Cursor % m_Towns.Count();
|
||||
ERR_TownGarrison town = m_Towns[m_Cursor++];
|
||||
- if (town.Finished || !ERR_TownSpawnRules.Approached(town.Centre, players)) continue;
|
||||
+ if (town.Finished || !ERR_TownSpawnRules.Approached(town.Centre, players, ActivationDistance())) continue;
|
||||
Attempt(town, players, now); break;
|
||||
}
|
||||
}
|
||||
void Stop()
|
||||
{
|
||||
m_Stopped = true;
|
||||
+ if (m_Objects) m_Objects.Stop();
|
||||
foreach (ERR_TownGarrison town : m_Towns)
|
||||
{
|
||||
if (town.Hold) { if (town.Group) town.Group.RemoveWaypoint(town.Hold); ERR_Actors.DeleteSpawned(town.Hold); town.Hold = null; }
|
||||
@@ -215,3 +237,223 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
+
|
||||
+class ERR_GuardedObjectSite
|
||||
+{
|
||||
+ vector Centre;
|
||||
+ string Id;
|
||||
+ ref array<IEntity> Structures = {};
|
||||
+}
|
||||
+
|
||||
+class ERR_ObjectGuardRules
|
||||
+{
|
||||
+ static int Fixed(int total) { return (total + 1) / 2; }
|
||||
+ static bool Structure(string prefab, int type)
|
||||
+ {
|
||||
+ prefab.ToLower();
|
||||
+ // Industrial crates, barrels and military equipment are not guarded sites.
|
||||
+ if (prefab.Contains("/props/") || prefab.Contains("/weapons/") || prefab.Contains("/characters/") || prefab.Contains("/vehicles/") || prefab.Contains("/buildingparts/") || prefab.Contains("/flags/") || prefab.Contains("/ruins/")) return false;
|
||||
+ if (prefab.Contains("factory") || prefab.Contains("industrial") || prefab.Contains("warehouse") || prefab.Contains("chimney") || prefab.Contains("watchtower") || prefab.Contains("watertower") || prefab.Contains("military") || prefab.Contains("powerplant")) return true;
|
||||
+ return type == EMapDescriptorType.MDT_STACK || type == EMapDescriptorType.MDT_TOWER
|
||||
+ || type == EMapDescriptorType.MDT_WATERTOWER || type == EMapDescriptorType.MDT_FUELSTATION
|
||||
+ || type == EMapDescriptorType.MDT_TRANSMITTER || type == EMapDescriptorType.MDT_FORTRESS
|
||||
+ || type == EMapDescriptorType.MDT_BUNKER || type == EMapDescriptorType.MDT_PORT;
|
||||
+ }
|
||||
+ static bool Support(float fraction, float normalY, float delta)
|
||||
+ {
|
||||
+ return ERR_ForceRules.Finite(fraction) && fraction >= 0 && fraction < 1
|
||||
+ && ERR_ForceRules.Finite(normalY) && normalY >= 0.85 && ERR_ForceRules.Finite(delta) && Math.AbsFloat(delta) <= 0.2;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+// Static structure surfaces only. Never turn a chimney's bounding-box top into
|
||||
+// an assumed platform: every footprint corner must hit actual solid geometry.
|
||||
+class ERR_ObjectGuardPlacement
|
||||
+{
|
||||
+ protected int m_Traces;
|
||||
+ void Reset() { m_Traces = 128; }
|
||||
+ protected float Trace(TraceParam params, bool staticOnly = false)
|
||||
+ {
|
||||
+ if (m_Traces <= 0) return -1;
|
||||
+ m_Traces--;
|
||||
+ if (staticOnly) return GetGame().GetWorld().TraceMove(params, StaticSurface);
|
||||
+ return GetGame().GetWorld().TraceMove(params, null);
|
||||
+ }
|
||||
+ protected bool StaticSurface(IEntity entity, vector start = "0 0 0", vector direction = "0 0 0")
|
||||
+ {
|
||||
+ return !Vehicle.Cast(entity) && !ChimeraCharacter.Cast(entity);
|
||||
+ }
|
||||
+ bool Clear(vector feet)
|
||||
+ {
|
||||
+ if (!ERR_ForceRules.FiniteVector(feet) || ChimeraWorldUtils.TryGetWaterSurfaceSimple(GetGame().GetWorld(), feet)) return false;
|
||||
+ for (int x = -1; x <= 1; x++)
|
||||
+ for (int z = -1; z <= 1; z++)
|
||||
+ {
|
||||
+ TraceParam floor = new TraceParam();
|
||||
+ vector sample = feet + Vector(x * 0.45, 0, z * 0.45);
|
||||
+ floor.Start = sample + "0 0.25 0"; floor.End = sample - "0 0.45 0";
|
||||
+ floor.Flags = TraceFlags.WORLD | TraceFlags.ENTS;
|
||||
+ float fraction = Trace(floor, true);
|
||||
+ float surfaceY = floor.Start[1] - fraction * 0.7;
|
||||
+ if (!ERR_ObjectGuardRules.Support(fraction, floor.TraceNorm[1], surfaceY - (feet[1] - 0.1))) return false;
|
||||
+ }
|
||||
+ TraceBox body = new TraceBox();
|
||||
+ body.Start = feet + "0 0.05 0"; body.End = body.Start + "0 0.01 0";
|
||||
+ body.Mins = "-0.45 0 -0.45"; body.Maxs = "0.45 1.8 0.45";
|
||||
+ body.Flags = TraceFlags.WORLD | TraceFlags.ENTS;
|
||||
+ if (Trace(body) < 1) return false;
|
||||
+ // Reject enclosed flues and cramped interior pockets with no useful outlook.
|
||||
+ int open;
|
||||
+ for (int side = 0; side < 4; side++)
|
||||
+ {
|
||||
+ float angle = side * 90 * Math.DEG2RAD;
|
||||
+ TraceParam view = new TraceParam(); view.Start = feet + "0 1.5 0";
|
||||
+ view.End = view.Start + Vector(Math.Sin(angle) * 3, 0, Math.Cos(angle) * 3);
|
||||
+ view.Flags = TraceFlags.WORLD | TraceFlags.ENTS;
|
||||
+ if (Trace(view) >= 1) open++;
|
||||
+ }
|
||||
+ return open >= 2;
|
||||
+ }
|
||||
+ bool Find(IEntity structure, array<vector> players, int offset, out vector position)
|
||||
+ {
|
||||
+ if (!structure || m_Traces <= 0) return false;
|
||||
+ vector low, high; structure.GetWorldBounds(low, high);
|
||||
+ if (!ERR_ForceRules.FiniteVector(low) || !ERR_ForceRules.FiniteVector(high) || high[1] - low[1] > 150) return false;
|
||||
+ for (int cell = 0; cell < 9; cell++)
|
||||
+ {
|
||||
+ int index = (cell + offset) % 9;
|
||||
+ vector seed = (low + high) * 0.5;
|
||||
+ int column = index % 3;
|
||||
+ int row = index / 3;
|
||||
+ seed[0] = seed[0] + (column - 1) * Math.Min((high[0] - low[0]) * 0.3, 8);
|
||||
+ seed[2] = seed[2] + (row - 1) * Math.Min((high[2] - low[2]) * 0.3, 8);
|
||||
+ if (!ERR_TownSpawnRules.Safe(seed, players, 1002)) continue;
|
||||
+ float ceiling = high[1] + 2;
|
||||
+ // Roof first, then up to three lower floors/platforms inside the structure.
|
||||
+ for (int floorIndex = 0; floorIndex < 4; floorIndex++)
|
||||
+ {
|
||||
+ TraceParam down = new TraceParam(); down.Start = Vector(seed[0], ceiling, seed[2]);
|
||||
+ down.End = Vector(seed[0], low[1] - 0.5, seed[2]); down.Flags = TraceFlags.WORLD | TraceFlags.ENTS;
|
||||
+ float fraction = Trace(down, true);
|
||||
+ if (fraction >= 1 || fraction < 0) break;
|
||||
+ vector point = down.Start + (down.End - down.Start) * fraction + "0 0.1 0";
|
||||
+ // Ground beside a building is not an elevated/interior post. Keep looking
|
||||
+ // for a platform; ordinary ground fallback must pass the navmesh planner.
|
||||
+ float ground = GetGame().GetWorld().GetSurfaceY(point[0], point[2]);
|
||||
+ if (point[1] >= ground + 0.6 && Clear(point)) { position = point; return true; }
|
||||
+ ceiling = point[1] - 0.6;
|
||||
+ if (ceiling <= low[1]) break;
|
||||
+ }
|
||||
+ }
|
||||
+ return false;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+// Reuse the town service's synchronous creation, final all-player distance
|
||||
+// checks, native faction roster, force ledger and once-per-round lifecycle.
|
||||
+class ERR_ObjectGarrisons : ERR_TownGarrisons
|
||||
+{
|
||||
+ protected int m_Count;
|
||||
+ protected float m_DiscoverAt;
|
||||
+ protected int m_QueryCount;
|
||||
+ protected ref array<ref ERR_GuardedObjectSite> m_Sites = {};
|
||||
+ protected ref ERR_ObjectGuardPlacement m_Posts = new ERR_ObjectGuardPlacement();
|
||||
+ void ERR_ObjectGarrisons(ERR_GameMode mode) { m_Mode = mode; m_Count = mode.Settings().Get("objectGuardCount"); }
|
||||
+ // Parent snapshots the setting at round setup, before the prison opens.
|
||||
+ void ConfigureCount(int count) { m_Count = count; }
|
||||
+ override protected bool ObjectsOnly() { return true; }
|
||||
+ override protected float SpawnDistance() { return 1000; }
|
||||
+ override protected float ActivationDistance() { return 1400; }
|
||||
+ override protected bool Settlement(IEntity entity)
|
||||
+ {
|
||||
+ if (!entity || Vehicle.Cast(entity) || ChimeraCharacter.Cast(entity)) return false;
|
||||
+ string prefab;
|
||||
+ if (entity.GetPrefabData()) prefab = entity.GetPrefabData().GetPrefabName();
|
||||
+ MapDescriptorComponent descriptor = MapDescriptorComponent.Cast(entity.FindComponent(MapDescriptorComponent));
|
||||
+ int type = -1; if (descriptor) type = descriptor.GetBaseType();
|
||||
+ return ERR_ObjectGuardRules.Structure(prefab, type);
|
||||
+ }
|
||||
+ override protected bool Remember(IEntity entity)
|
||||
+ {
|
||||
+ if (++m_QueryCount > 256) return false;
|
||||
+ vector centre = entity.GetOrigin();
|
||||
+ ERR_GuardedObjectSite site;
|
||||
+ foreach (ERR_GuardedObjectSite known : m_Sites)
|
||||
+ if (vector.DistanceXZ(known.Centre, centre) < 250) { site = known; break; }
|
||||
+ if (site)
|
||||
+ {
|
||||
+ if (site.Structures.Count() < 24 && !site.Structures.Contains(entity)) site.Structures.Insert(entity);
|
||||
+ return true;
|
||||
+ }
|
||||
+ if (m_Sites.Count() >= 32) return true;
|
||||
+ site = new ERR_GuardedObjectSite(); site.Centre = centre; site.Id = "object-" + m_Sites.Count().ToString();
|
||||
+ site.Structures.Insert(entity); m_Sites.Insert(site);
|
||||
+ int fixed = ERR_ObjectGuardRules.Fixed(m_Count);
|
||||
+ // Each fixed sentry has its own post/defend group: a rooftop sentry must not
|
||||
+ // be ordered down toward a shared ground-level squad leader.
|
||||
+ for (int i = 0; i <= fixed; i++)
|
||||
+ {
|
||||
+ int count = 1; if (i == fixed) count = m_Count - fixed;
|
||||
+ if (count == 0) continue;
|
||||
+ ERR_TownGarrison entry = new ERR_TownGarrison();
|
||||
+ entry.ObjectSite = site; entry.Centre = centre; entry.Count = count; entry.FixedGuard = i < fixed; entry.GuardIndex = i;
|
||||
+ entry.Id = site.Id + "-post-" + i.ToString(); entry.Name = entry.Id;
|
||||
+ m_Towns.Insert(entry);
|
||||
+ }
|
||||
+ ERR_HQ.Event("OBJECT GUARDS", string.Format("%1 at %2: planned %3 fixed guards and %4 HQ responders; activation 1400m, spawn exclusion 1000m", site.Id, centre, fixed, m_Count - fixed));
|
||||
+ return true;
|
||||
+ }
|
||||
+ override protected void Discover(array<vector> players)
|
||||
+ {
|
||||
+ float now = GetGame().GetWorld().GetWorldTime();
|
||||
+ if (m_Count <= 0 || now < m_DiscoverAt) return;
|
||||
+ m_DiscoverAt = now + 10000;
|
||||
+ foreach (vector player : players)
|
||||
+ {
|
||||
+ m_QueryCount = 0;
|
||||
+ GetGame().GetWorld().QueryEntitiesByAABB(player - "1400 5000 1400", player + "1400 5000 1400", Remember, Settlement, EQueryEntitiesFlags.ALL);
|
||||
+ }
|
||||
+ }
|
||||
+ protected bool Tower(IEntity entity)
|
||||
+ {
|
||||
+ if (!entity) return false;
|
||||
+ string prefab; if (entity.GetPrefabData()) prefab = entity.GetPrefabData().GetPrefabName();
|
||||
+ prefab.ToLower();
|
||||
+ if (prefab.Contains("tower") || prefab.Contains("chimney")) return true;
|
||||
+ MapDescriptorComponent descriptor = MapDescriptorComponent.Cast(entity.FindComponent(MapDescriptorComponent));
|
||||
+ if (!descriptor) return false;
|
||||
+ int type = descriptor.GetBaseType();
|
||||
+ return type == EMapDescriptorType.MDT_STACK || type == EMapDescriptorType.MDT_TOWER || type == EMapDescriptorType.MDT_WATERTOWER;
|
||||
+ }
|
||||
+ override protected bool Plan(ERR_TownGarrison town, array<vector> players, out array<vector> positions)
|
||||
+ {
|
||||
+ if (town.FixedGuard && town.ObjectSite)
|
||||
+ {
|
||||
+ m_Posts.Reset();
|
||||
+ int count = town.ObjectSite.Structures.Count();
|
||||
+ int checked;
|
||||
+ // Prefer tower/chimney platforms before roofs on the rest of the compound.
|
||||
+ for (int priority = 0; priority < 2; priority++)
|
||||
+ for (int i = 0; i < count && checked < 8; i++)
|
||||
+ {
|
||||
+ IEntity structure = town.ObjectSite.Structures[(i + town.GuardIndex) % count];
|
||||
+ bool tower = Tower(structure);
|
||||
+ if ((priority == 0 && !tower) || (priority == 1 && tower)) continue;
|
||||
+ checked++;
|
||||
+ vector point;
|
||||
+ if (!m_Posts.Find(structure, players, town.GuardIndex, point)) continue;
|
||||
+ // Keep each structure associated with its original compound.
|
||||
+ if (vector.DistanceXZ(point, town.Centre) > 250) continue;
|
||||
+ positions.Clear(); positions.Insert(point); return true;
|
||||
+ }
|
||||
+ }
|
||||
+ return super.Plan(town, players, positions);
|
||||
+ }
|
||||
+ override protected void Admitted(ERR_TownGarrison town)
|
||||
+ {
|
||||
+ if (!town.FixedGuard) return;
|
||||
+ ERR_HQ hq = ERR_HQ.Cast(m_Mode.Command());
|
||||
+ if (hq) hq.Dedicate(town.Group, town.ObjectSite.Id);
|
||||
+ if (town.Hold) town.Hold.SetCompletionRadius(2);
|
||||
+ }
|
||||
+}
|
||||
--- before/addons/core/UI/layouts/ERR/AdminMenu.layout
|
||||
+++ after/addons/core/UI/layouts/ERR/AdminMenu.layout
|
||||
@@ -145,26 +145,31 @@
|
||||
TextWidgetClass { Name "Saved_roadblockCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 232 OffsetTop 232 SizeX 456 OffsetRight -964 SizeY 20 OffsetBottom -252 } Color 0.9 0.92 0.94 1 Text "Waiting for saved value" "Font Size" 16 "Min Font Size" 16 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } }
|
||||
TextWidgetClass { Name "Help_roadblockCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 252 OffsetTop 252 SizeX 456 OffsetRight -964 SizeY 14 OffsetBottom -266 } Color 0.9 0.92 0.94 1 Text "Four guards per post. Unsuitable sites are skipped." "Font Size" 12 "Min Font Size" 12 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } }
|
||||
TextWidgetClass {
|
||||
- Name "WeaponRetentionLabel" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 264 OffsetTop 264 SizeX 500 OffsetRight -528 SizeY 32 OffsetBottom -296 }
|
||||
+ Name "WeaponRetentionLabel" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 278 OffsetTop 278 SizeX 444 OffsetRight -472 SizeY 24 OffsetBottom -302 }
|
||||
Color 0.9 0.92 0.94 1 Text "Keep weapon when unconscious" "Font Size" 20 "Min Font Size" 20
|
||||
FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" }
|
||||
}
|
||||
TextWidgetClass {
|
||||
- Name "Saved_keepWeaponOnUnconscious" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 308 OffsetTop 308 SizeX 936 OffsetRight -964 SizeY 26 OffsetBottom -334 }
|
||||
+ Name "Saved_keepWeaponOnUnconscious" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 346 OffsetTop 346 SizeX 444 OffsetRight -472 SizeY 20 OffsetBottom -366 }
|
||||
Color 0.9 0.92 0.94 1 Text "Waiting for saved value" "Font Size" 17 "Min Font Size" 17 Wrap 1
|
||||
FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" }
|
||||
}
|
||||
ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" {
|
||||
- Name "KeepWeaponOn" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 660 OffsetLeft 660 PositionY 264 OffsetTop 264 SizeX 140 OffsetRight -800 SizeY 42 OffsetBottom -306 }
|
||||
+ Name "KeepWeaponOn" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 306 OffsetTop 306 SizeX 140 OffsetRight -168 SizeY 36 OffsetBottom -342 }
|
||||
components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Enabled" } }
|
||||
}
|
||||
ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" {
|
||||
- Name "KeepWeaponOff" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 812 OffsetLeft 812 PositionY 264 OffsetTop 264 SizeX 152 OffsetRight -964 SizeY 42 OffsetBottom -306 }
|
||||
+ Name "KeepWeaponOff" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 180 OffsetLeft 180 PositionY 306 OffsetTop 306 SizeX 152 OffsetRight -332 SizeY 36 OffsetBottom -342 }
|
||||
components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Disabled" } }
|
||||
}
|
||||
-TextWidgetClass {
|
||||
- Name "MissionHelp" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 340 OffsetTop 340 SizeX 936 OffsetRight -964 SizeY 42 OffsetBottom -382 }
|
||||
- Color 0.9 0.92 0.94 1 Text "Enabled: your held firearm stays with you and is equipped after revival. Disabled: normal weapon dropping. Applies from the next knockout; existing casualties keep their chosen rule." "Font Size" 19 "Min Font Size" 19 Wrap 1
|
||||
+TextWidgetClass { Name "Label_objectGuardCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 278 OffsetTop 278 SizeX 456 OffsetRight -964 SizeY 24 OffsetBottom -302 } Color 0.9 0.92 0.94 1 Text "Guards per object site (0-16; 0 off)" "Font Size" 20 "Min Font Size" 20 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } }
|
||||
+ButtonWidgetClass : "{DA43C77A0D1E59F8}UI/layouts/ERR/AdminValue.layout" { Name "objectGuardCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 306 OffsetTop 306 SizeX 100 OffsetRight -608 SizeY 36 OffsetBottom -342 } components { SCR_EditBoxComponent "{547290FFBD5B33E9}" { m_sLabel "" } } }
|
||||
+ButtonWidgetClass : "{75C912A1C89BE6C2}UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout" { Name "Apply_objectGuardCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 620 OffsetLeft 620 PositionY 306 OffsetTop 306 SizeX 112 OffsetRight -732 SizeY 36 OffsetBottom -342 } components { SCR_ButtonTextComponent "{5548F0143AE99095}" { m_sText "Apply guards" } } }
|
||||
+TextWidgetClass { Name "Saved_objectGuardCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 346 OffsetTop 346 SizeX 456 OffsetRight -964 SizeY 20 OffsetBottom -366 } Color 0.9 0.92 0.94 1 Text "Waiting for saved value" "Font Size" 16 "Min Font Size" 16 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } }
|
||||
+TextWidgetClass { Name "Help_objectGuardCount" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 508 OffsetLeft 508 PositionY 370 OffsetTop 370 SizeX 456 OffsetRight -964 SizeY 16 OffsetBottom -386 } Color 0.9 0.92 0.94 1 Text "Half hold posts, half HQ. Spawn 1 km away. Next round." "Font Size" 12 "Min Font Size" 12 FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" } }
|
||||
+TextWidgetClass {
|
||||
+ Name "MissionHelp" Slot FrameWidgetSlot { Anchor 0 0 0 0 PositionX 28 OffsetLeft 28 PositionY 370 OffsetTop 370 SizeX 444 OffsetRight -472 SizeY 16 OffsetBottom -386 }
|
||||
+ Color 0.9 0.92 0.94 1 Text "Applies next knockout; existing casualties keep their rule." "Font Size" 12 "Min Font Size" 12 Wrap 1
|
||||
FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" }
|
||||
}
|
||||
TextWidgetClass {
|
||||
--- before/docs/town-garrisons.md
|
||||
+++ after/docs/town-garrisons.md
|
||||
@@ -19,3 +19,19 @@
|
||||
`tests/test_town_garrisons.py` executes the actual distance/activation policy with exact boundaries, split players, empty/invalid observations and a player crossing the exclusion distance. `tests/test_intel_registration.py` checks the actual HQ registration method's town radio selection and unrestricted order eligibility. The isolated `town-garrisons` Workbench fixture exercises native map descriptors, navigation, three- and ten-member physical squads, blocked placement with a second observer in town, HQ binding and no replacement after elimination. It is not a live dedicated-server playtest.
|
||||
|
||||
The 24 September 2026 local Workbench test completed with **12 passing assertions and no script/runtime failures**. Minimum player distances at creation were 718 m for the three-man squad and 720 m for the ten-man squad. Repository checks passed. Existing RHS/WCS localization and vanilla resource keyword errors remain in the native log. The runner hit a transient exiting-process classification error during cleanup; a separate read-only follow-up confirmed that its private prefix was idle and addon sources were unchanged. Original runner results are preserved alongside the follow-up in `.local/analysis/town-garrisons-2026-09-24`.
|
||||
+
|
||||
+## Factory and infrastructure guards
|
||||
+
|
||||
+The Mission menu now has **Object guards per site** (`objectGuardCount`, or `/esc mission objectguards set N`). The range is 0–16 soldiers per site, default 8; zero disables these additional guards. The setting is captured when the round's HQ is created and changes apply next round. Existing town populations keep their separate 3–10 soldier / 700 m rules.
|
||||
+
|
||||
+After the prison opens, the service discovers nearby industrial, military and infrastructure structures from their prefab paths or map descriptor types. It groups structures within 250 m into one site, rather than spawning a squad for each building. Props, vehicles, weapons, characters, building fragments, flags and ruins are excluded. Custom terrain objects need a recognizable structure path or descriptor; unlabelled custom assets are not guaranteed to be discovered.
|
||||
+
|
||||
+Sites activate within 1,400 m, but every actual guard spawn must remain at least **1,000 m horizontally from every controlled player**. Unsafe or unnavigable sites wait, and rapid approaches or split players may prevent some guards from spawning. There are at most 32 discovered sites, 24 stored structures per site and one group attempt per two seconds in this service, subject to the shared mission force budget. Discovery runs every ten seconds.
|
||||
+
|
||||
+Half the soldiers stay as fixed guards (the extra soldier stays when the count is odd). Each has its own small defend post and is reserved from general HQ retasking. The other half form a mobile squad that VirtualHQ can order away. Both use the selected enemy faction and the existing equipment, radio and observation systems; proximity activation does not tell HQ where players are.
|
||||
+
|
||||
+Fixed guards first try tower and chimney platforms, then other roofs or raised interior floors. Placement traces require solid support under the whole footprint, sufficient standing space and an open outlook. Narrow rims, holes, steep surfaces and enclosed flues are rejected. If no usable post is found within the bounded search, the guard uses the ordinary navigable ground planner. Responders always use navigable ground. These are finite formations with no replacement waves after casualties and no distance-based respawn cycle.
|
||||
+
|
||||
+`OBJECT GUARDS` logs identify site discovery and the planned fixed/response split. `TOWN GARRISON` admission logs include the role, post coordinate and minimum player distance. The setting persistence, boundaries, fixed/response split, support rules and fixed-post HQ admission hook are exercised by the repository tests. Native validation evidence for this addition is recorded separately in `docs/evidence/object-guards-2026-10-06`.
|
||||
+
|
||||
+The 6 October 2026 isolated Linux engine test spawned eight soldiers at a real Everon industrial compound: four fixed guards on four separate light-tower platforms approximately 15.11 m above ground, and four mobile ground soldiers. All eight survived the 33-second observation after AI release. Each tower guard received a physical HQ manpack, all four fixed groups were reserved, and the response group remained eligible for HQ orders. Geometry probes also tested 80 real structures. This proves the exercised placement/registration path, not every custom terrain, chimney asset or a multiplayer firefight.
|
||||
--- before/tests/test_admin_menu.py
|
||||
+++ after/tests/test_admin_menu.py
|
||||
@@ -10,7 +10,7 @@
|
||||
layout = BASE / 'addons/core/UI/layouts/ERR/AdminMenu.layout'
|
||||
keys = re.findall(r'"([A-Za-z]+)"', body(source, 'static array<string> Keys('))
|
||||
settings = re.findall(r'"([A-Za-z]+)"', body(BASE / 'addons/core/Scripts/Game/ERR/00_Core/ERR_Settings.c', 'static array<string> Keys('))
|
||||
-assert len(keys) == 19 and set(settings) - set(keys) == {"automaticConvoyEnabled", "keepWeaponOnUnconscious", "automaticEquipmentChancePercent"}
|
||||
+assert len(keys) == 20 and set(settings) - set(keys) == {"automaticConvoyEnabled", "keepWeaponOnUnconscious", "automaticEquipmentChancePercent"}
|
||||
assert set(keys) <= set(settings) # Every menu field must have a server setting.
|
||||
# Native layouts place child widget declarations inside an anonymous Children
|
||||
# block. A missing brace can preserve most widget names yet prevent menu load.
|
||||
@@ -48,7 +48,7 @@
|
||||
assert len(names) == len(set(names)), 'Menu widget names must be unique'
|
||||
for key in keys:
|
||||
assert all(name in names for name in (key, 'Apply_' + key, 'Saved_' + key, 'Help_' + key))
|
||||
- if key not in ('startMode','civilianTrafficCount','roadblockCount','hunterSpawnDistanceMetres'): assert ('Default_' if key == 'viewDistanceMetres' else 'Random_') + key in names
|
||||
+ if key not in ('startMode','civilianTrafficCount','roadblockCount','hunterSpawnDistanceMetres','objectGuardCount'): assert ('Default_' if key == 'viewDistanceMetres' else 'Random_') + key in names
|
||||
else: assert 'Random_startMode' not in names
|
||||
for name in ('Close', 'SettingsPage', 'HQPage', 'JournalPage', 'JournalText', 'JournalContent', 'JournalScroll', 'PauseJournal', 'LatestJournal', 'Status'):
|
||||
assert name in names
|
||||
@@ -99,7 +99,7 @@
|
||||
{"intelRevealChancePercent","intel reveal"},{"startTimeMinutes","mission time"},
|
||||
{"timeMultiplier","mission speed"},{"startDateCode","mission date"},
|
||||
{"weatherProfile","mission weather"},{"viewDistanceMetres","mission viewdistance"},{"reportIntervalSeconds","hq interval"},
|
||||
- {"hunterSpawnDistanceMetres","mission hunterdistance"},{"roadblockCount","mission roadblocks"},{"civilianTrafficCount","mission traffic"},{"heliTimerMinutes","hq heli timer"},{"supportSquadLimit","hq squads"},{"responseRadiusMetres","hq radius"},{"convoyCount","hq convoy count"},{"antiAirChancePercent","hq aa"},{"antiPersonnelMineChancePercent","hq mines"}};
|
||||
+ {"objectGuardCount","mission objectguards"},{"hunterSpawnDistanceMetres","mission hunterdistance"},{"roadblockCount","mission roadblocks"},{"civilianTrafficCount","mission traffic"},{"heliTimerMinutes","hq heli timer"},{"supportSquadLimit","hq squads"},{"responseRadiusMetres","hq radius"},{"convoyCount","hq convoy count"},{"antiAirChancePercent","hq aa"},{"antiPersonnelMineChancePercent","hq mines"}};
|
||||
for(auto pair:cases){
|
||||
assert(Fields::Command(pair.first," 42 ")==pair.second+" set 42");
|
||||
assert(Fields::Command(pair.first,"Random")==pair.second+" set Random");
|
||||
@@ -114,7 +114,7 @@
|
||||
for(string key:{"automaticEquipmentChancePercent","heliTimer","prisonDistance","stingerChance","mission abandon","","bad"}){
|
||||
assert(Fields::Command(key,"1").empty());assert(!Fields::Available(key,true,true));
|
||||
}
|
||||
- for(string key:{"heliTimerMinutes","reportIntervalSeconds","supportSquadLimit","responseRadiusMetres","convoyCount","antiAirChancePercent","antiPersonnelMineChancePercent"}){
|
||||
+ for(string key:{"objectGuardCount","heliTimerMinutes","reportIntervalSeconds","supportSquadLimit","responseRadiusMetres","convoyCount","antiAirChancePercent","antiPersonnelMineChancePercent"}){
|
||||
assert(!Fields::Available(key,false,true));assert(Fields::Available(key,true,false));
|
||||
}
|
||||
assert(!Fields::Available("aiIntelChancePercent",true,false));
|
||||
@@ -122,7 +122,7 @@
|
||||
for(string key:{"intelRevealChancePercent","radioDefenceSeconds","startTimeMinutes","timeMultiplier","startDateCode","weatherProfile"}) assert(Fields::Available(key,false,false));
|
||||
}
|
||||
''')
|
||||
-print('PASS: actual menu command routing covers all nineteen settings, rejects unsupported keys, gates companions, and matches unique authored widgets')
|
||||
+print('PASS: actual menu command routing covers all twenty settings, rejects unsupported keys, gates companions, and matches unique authored widgets')
|
||||
|
||||
assert all(name in names for name in ('KeepWeaponOn', 'KeepWeaponOff', 'Saved_keepWeaponOnUnconscious'))
|
||||
click=body(source,'protected void OnButton(')
|
||||
--- before/tests/test_admin_setting_policy.py
|
||||
+++ after/tests/test_admin_setting_policy.py
|
||||
@@ -13,6 +13,10 @@
|
||||
int main(){
|
||||
assert(CoreSetting("intel","reveal")=="intelRevealChancePercent");
|
||||
assert(CoreSetting("mission","radio")=="radioDefenceSeconds");
|
||||
+ assert(CoreSetting("mission","objectguards")=="objectGuardCount");
|
||||
+ assert(CoreSetting("hq","objectguards").empty());
|
||||
+ assert(Valid("objectGuardCount",0)&&Valid("objectGuardCount",8)&&Valid("objectGuardCount",16));
|
||||
+ assert(!Valid("objectGuardCount",-1)&&!Valid("objectGuardCount",17));
|
||||
for(std::string section:{"", "hq", "mission", "intel", "unknown"})
|
||||
for(std::string option:{"", "interval", "carrying", "radio", "reveal", "unknown"}){
|
||||
bool recognized=(section=="intel"&&option=="reveal")||(section=="mission"&&option=="radio");
|
||||
--- before/tests/test_start_settings.py
|
||||
+++ after/tests/test_start_settings.py
|
||||
@@ -56,6 +56,14 @@
|
||||
disk["old"]={{"reportIntervalSeconds",10},{"supportSquadLimit",4},{"responseRadiusMetres",2000},{"aiIntelChancePercent",60},{"intelRevealChancePercent",15},{"radioDefenceSeconds",180}};
|
||||
ERR_Settings settings;assert(settings.Read("old",settings.m_Values)&&settings.Get("startMode")==0);
|
||||
for(float bad:{-1.f,-2.f,2.f,.5f}){disk["bad"]=disk["old"];disk["bad"]["startMode"]=bad;Values ignored;assert(!settings.Read("bad",ignored));}
|
||||
+ assert(settings.Get("objectGuardCount")==8);
|
||||
+ assert(!ERR_Settings::Randomizable("objectGuardCount"));
|
||||
+ assert(!settings.Set("objectGuardCount",-1)&&!settings.Set("objectGuardCount",17));
|
||||
+ for(int guards:{0,1,8,16}){
|
||||
+ assert(settings.Set("objectGuardCount",guards));
|
||||
+ ERR_Settings savedGuards;assert(savedGuards.Read("settings",savedGuards.m_Values)&&savedGuards.Get("objectGuardCount")==guards);
|
||||
+ }
|
||||
+ failSave=true;assert(!settings.Set("objectGuardCount",8)&&settings.Get("objectGuardCount")==16);failSave=false;
|
||||
assert(settings.Get("hunterSpawnDistanceMetres")==1000);
|
||||
assert(!ERR_Settings::Randomizable("hunterSpawnDistanceMetres"));
|
||||
assert(!settings.Set("hunterSpawnDistanceMetres",799)&&!settings.Set("hunterSpawnDistanceMetres",3001));
|
||||
--- before/tests/test_town_garrisons.py
|
||||
+++ after/tests/test_town_garrisons.py
|
||||
@@ -26,6 +26,82 @@
|
||||
split[0]={699.99f,0,0}; assert(!Safe(origin,&split)); // Crossing boundary before birth rejects it
|
||||
split[0]={std::numeric_limits<float>::quiet_NaN(),0,0}; assert(!Safe(origin,&split));
|
||||
assert(!Safe(split[0],&edge)&&!Approached(split[0],&edge));
|
||||
+ Array<Vec> objectEdge={{1000,0,0}},approaching={{1400,0,0}},outside={{1401,0,0}};
|
||||
+ assert(Safe(origin,&objectEdge,1000)&&!Safe(origin,&objectEdge,1002));
|
||||
+ assert(Approached(origin,&approaching,1400)&&!Approached(origin,&outside,1400));
|
||||
+ objectEdge.push_back({999.9f,0,0});assert(!Safe(origin,&objectEdge,1000));
|
||||
+
|
||||
}
|
||||
''')
|
||||
print('PASS: town trigger and hard 700m exclusion for all observers, empty/invalid positions and final-check crossings')
|
||||
+
|
||||
+# Execute the production guard split and geometric support policy, including
|
||||
+# unsafe chimney openings, steep faces and invalid trace values.
|
||||
+guards=body(p,'static int Fixed(')+'\n'+body(p,'static bool Support(')
|
||||
+guards=guards.replace('ERR_ForceRules.Finite','std::isfinite').replace('Math.AbsFloat','std::fabs')
|
||||
+run(r'''
|
||||
+#include <cassert>
|
||||
+#include <cmath>
|
||||
+#include <limits>
|
||||
+'''+guards+r'''
|
||||
+int main(){
|
||||
+ for(int count=0;count<=16;++count){
|
||||
+ int fixed=Fixed(count),response=count-fixed;
|
||||
+ assert(fixed+response==count&&fixed>=response&&fixed-response<=1);
|
||||
+ }
|
||||
+ assert(Fixed(8)==4&&Fixed(1)==1&&Fixed(0)==0);
|
||||
+ assert(Support(.5f,1.f,0.f));
|
||||
+ assert(!Support(1.f,1.f,0.f)); // No floor below this footprint corner
|
||||
+ assert(!Support(-1.f,1.f,0.f)); // Exhausted trace budget
|
||||
+ assert(!Support(.5f,.84f,0.f)); // Steep/sloped face
|
||||
+ assert(!Support(.5f,1.f,.21f)); // Edge/hole: corner is on a different floor
|
||||
+ auto nan=std::numeric_limits<float>::quiet_NaN();
|
||||
+ assert(!Support(nan,1.f,0.f)&&!Support(.5f,nan,0.f)&&!Support(.5f,1.f,nan));
|
||||
+}
|
||||
+''')
|
||||
+print('PASS: object guard split, hard 1000m exclusion / 1400m activation, footprint support, slopes, holes and invalid traces')
|
||||
+
|
||||
+# Fixed sentries use the real admission hook; responders keep normal HQ eligibility.
|
||||
+admitted=body(p,'override protected void Admitted(').replace('override protected ','').replace('ERR_TownGarrison town','Town* town').replace('town.','town->').replace('town->ObjectSite.Id','town->ObjectSite->Id').replace('town->Hold.SetCompletionRadius','town->Hold->SetCompletionRadius').replace('ERR_HQ hq = ERR_HQ.Cast(m_Mode.Command());','HQ* hq = currentHQ;').replace('hq.Dedicate','hq->Dedicate')
|
||||
+run(r'''
|
||||
+#include <cassert>
|
||||
+struct Site{int Id=17;};
|
||||
+struct Hold{float radius=60;void SetCompletionRadius(float value){radius=value;}};
|
||||
+struct Town{bool FixedGuard=false;Site*ObjectSite;Hold*Hold;int Group=19;};
|
||||
+struct HQ{int calls=0;void Dedicate(int group,int site){assert(group==19&&site==17);calls++;}};
|
||||
+HQ*currentHQ;
|
||||
+'''.replace('Hold*Hold','struct Hold*Hold')+admitted+r'''
|
||||
+int main(){
|
||||
+ HQ hq;currentHQ=&hq;Site site;Hold post;Town response{false,&site,&post};
|
||||
+ Admitted(&response);assert(hq.calls==0&&post.radius==60);
|
||||
+ Town fixed{true,&site,&post};Admitted(&fixed);assert(hq.calls==1&&post.radius==2);
|
||||
+}
|
||||
+''')
|
||||
+print('PASS: actual fixed-post admission reserves only stationary guards from HQ retasking and tightens their defend radius')
|
||||
+
|
||||
+import re
|
||||
+structure=body(p,'static bool Structure(').replace('EMapDescriptorType.', 'EMapDescriptorType::')
|
||||
+labels=sorted(set(re.findall(r'EMapDescriptorType::(\w+)',structure)))
|
||||
+run(r'''
|
||||
+#include <cassert>
|
||||
+#include <string>
|
||||
+#include <algorithm>
|
||||
+#include <cctype>
|
||||
+struct string:std::string{
|
||||
+ using std::string::string;
|
||||
+ void ToLower(){std::transform(begin(),end(),begin(),[](unsigned char c){return std::tolower(c);});}
|
||||
+ bool Contains(const char*s){return find(s)!=npos;}
|
||||
+};
|
||||
+namespace EMapDescriptorType{enum {'''+','.join(labels)+r'''};}
|
||||
+'''+structure+r'''
|
||||
+int main(){
|
||||
+ assert(Structure("Prefabs/Structures/Industrial/Houses/Workshop.et",-1));
|
||||
+ assert(Structure("Prefabs/Structures/Watchtower.et",-1));
|
||||
+ assert(Structure("Prefabs/Custom/FactoryChimney.et",-1));
|
||||
+ assert(Structure("UnknownMod/Asset.et",EMapDescriptorType::MDT_TOWER));
|
||||
+ assert(!Structure("UnknownMod/Asset.et",-1));
|
||||
+ for(const char*path:{"Prefabs/Props/Industrial/Barrel.et","Prefabs/Structures/BuildingParts/Industrial/Wall.et","Prefabs/Structures/Military/Flags/Flag.et","Prefabs/Structures/Ruins/House_Chimney.et","Prefabs/Vehicles/Military/Truck.et"})
|
||||
+ assert(!Structure(path,-1));
|
||||
+}
|
||||
+''')
|
||||
+print('PASS: production site classification accepts structures/descriptors and excludes industrial props, fragments, flags, ruins and vehicles')
|
||||
@@ -0,0 +1,4 @@
|
||||
PASS: town trigger and hard 700m exclusion for all observers, empty/invalid positions and final-check crossings
|
||||
PASS: object guard split, hard 1000m exclusion / 1400m activation, footprint support, slopes, holes and invalid traces
|
||||
PASS: actual fixed-post admission reserves only stationary guards from HQ retasking and tightens their defend radius
|
||||
PASS: production site classification accepts structures/descriptors and excludes industrial props, fragments, flags, ruins and vehicles
|
||||
@@ -0,0 +1,663 @@
|
||||
---------------------------------------------
|
||||
Log /home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/profile/logs/logs_2026-10-06_17-07-26/console.log started at 2026-10-06 17:07:26 (2026-10-06 15:07:26 UTC)
|
||||
|
||||
17:07:26.862 ENGINE : FileSystem: Adding relative directory '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/profile/logs/logs_2026-10-06_17-07-26' to filesystem under name logs
|
||||
17:07:26.862 ENGINE : FileSystem: Adding relative directory '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/profile/profile' to filesystem under name profile
|
||||
17:07:26.862 ENGINE : FileSystem: Current working directory: '/tmp/runtime/'
|
||||
17:07:26.863 ENGINE : Initializing engine, version 192142
|
||||
17:07:26.863 ENGINE : CLI Params: -server {C1E20667DCE324ED}Missions/ERR_Everon.conf -addonsDir /home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons -addons 2528466DE220D91C,70C981A53E02B64F -profile /home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/profile -noBackend -noSound -bindIP 127.0.0.1 -bindPort 2001 -maxFPS 30 -logconsole -noSplash -noThrow -disableCrashReporter
|
||||
17:07:26.866 ENGINE : Addon dirs:
|
||||
17:07:26.866 ENGINE : dir: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons'
|
||||
17:07:26.866 ENGINE : dir: './addons'
|
||||
17:07:26.866 ENGINE : dir: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/profile/addons'
|
||||
17:07:26.866 ENGINE : Available addons:
|
||||
17:07:26.866 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_1337C0DE5DABBEEF/addon.gproj' guid: '1337C0DE5DABBEEF' (packed)
|
||||
17:07:26.866 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_595F2BF2F44836FB/addon.gproj' guid: '595F2BF2F44836FB' (packed)
|
||||
17:07:26.866 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_5E389BB9F58B79A6/addon.gproj' guid: '5E389BB9F58B79A6' (packed)
|
||||
17:07:26.866 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_5E524E4FEECCA92B/addon.gproj' guid: '5E524E4FEECCA92B' (packed)
|
||||
17:07:26.866 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_629B2BA37EFFD577/addon.gproj' guid: '629B2BA37EFFD577' (packed)
|
||||
17:07:26.866 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_65930CB4CD0237B2/addon.gproj' guid: '65930CB4CD0237B2' (packed)
|
||||
17:07:26.866 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_BADC0DEDABBEDA5E/addon.gproj' guid: 'BADC0DEDABBEDA5E' (packed)
|
||||
17:07:26.866 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERR_Core/addon.gproj' guid: '2528466DE220D91C'
|
||||
17:07:26.866 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/Nogova/addon.gproj' guid: '70C981A53E02B64F'
|
||||
17:07:26.866 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed)
|
||||
17:07:26.866 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed)
|
||||
17:07:26.866 ENGINE : FileSystem: Adding relative directory '/home/jakub/devel/gabreta/addons/NogovaReforger' to filesystem under name NogovaReforger
|
||||
17:07:26.866 ENGINE : FileSystem: Adding relative directory '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/source' to filesystem under name ERR_Core
|
||||
17:07:26.866 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_65930CB4CD0237B2/' (pak count: 1) to filesystem under name Parachutes
|
||||
17:07:26.866 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_5E524E4FEECCA92B/' (pak count: 1) to filesystem under name WCS_BMP-1
|
||||
17:07:26.867 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_5E389BB9F58B79A6/' (pak count: 1) to filesystem under name WCS_SpaceCore
|
||||
17:07:26.868 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_629B2BA37EFFD577/' (pak count: 1) to filesystem under name WCS_Armaments
|
||||
17:07:26.872 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_595F2BF2F44836FB/' (pak count: 1) to filesystem under name RHS_Core
|
||||
17:07:26.873 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_BADC0DEDABBEDA5E/' (pak count: 2) to filesystem under name RHS_Content_02
|
||||
17:07:26.876 ENGINE : FileSystem: Adding package '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_1337C0DE5DABBEEF/' (pak count: 4) to filesystem under name RHS_Content_01
|
||||
17:07:26.984 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger
|
||||
17:07:26.986 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core
|
||||
17:07:26.986 ENGINE : CPU vendor : AuthenticAMD
|
||||
17:07:26.986 ENGINE : CPU type : 2
|
||||
17:07:26.986 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor
|
||||
17:07:26.986 ENGINE : CPU cache info : Unknown cache
|
||||
17:07:26.986 ENGINE : CPU count logical : 16
|
||||
17:07:26.986 ENGINE : CPU count physical : 8
|
||||
17:07:26.986 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2
|
||||
17:07:26.986 RESOURCES : ResourceDB: loading cache (id=0 name=NogovaReforger path=/home/jakub/devel/gabreta/addons/NogovaReforger/resourceDatabase.rdb)
|
||||
17:07:26.996 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Core path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/source/resourceDatabase.rdb)
|
||||
17:07:26.996 RESOURCES : ResourceDB: loading cache (id=2 name=Parachutes path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_65930CB4CD0237B2/resourceDatabase.rdb)
|
||||
17:07:26.996 RESOURCES : ResourceDB: loading cache (id=3 name=WCS_BMP-1 path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_5E524E4FEECCA92B/resourceDatabase.rdb)
|
||||
17:07:26.996 RESOURCES : ResourceDB: loading cache (id=4 name=WCS_SpaceCore path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_5E389BB9F58B79A6/resourceDatabase.rdb)
|
||||
17:07:26.996 RESOURCES : ResourceDB: loading cache (id=5 name=WCS_Armaments path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_629B2BA37EFFD577/resourceDatabase.rdb)
|
||||
17:07:26.998 RESOURCES : ResourceDB: loading cache (id=6 name=RHS_Core path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_595F2BF2F44836FB/resourceDatabase.rdb)
|
||||
17:07:27.007 RESOURCES : ResourceDB: loading cache (id=7 name=RHS_Content_02 path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_BADC0DEDABBEDA5E/resourceDatabase.rdb)
|
||||
17:07:27.008 RESOURCES : ResourceDB: loading cache (id=8 name=RHS_Content_01 path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_1337C0DE5DABBEEF/resourceDatabase.rdb)
|
||||
17:07:27.013 RESOURCES : ResourceDB: loading cache (id=9 name=ArmaReforger path=./addons/data/resourceDatabase.rdb)
|
||||
17:07:27.133 RESOURCES : ResourceDB: loading cache (id=10 name=core path=./addons/core/resourceDatabase.rdb)
|
||||
17:07:27.134 RESOURCES : ResourceDB: loading cache (id=11 name=profile path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/profile/profile/resourceDatabase.rdb)
|
||||
17:07:27.134 RESOURCES : ResourceDB: loading cache (id=12 name=logs path=/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/profile/logs/logs_2026-10-06_17-07-26/resourceDatabase.rdb)
|
||||
17:07:27.300 ENGINE : GameProject load
|
||||
17:07:27.300 ENGINE : Loaded addons:
|
||||
17:07:27.300 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C'
|
||||
17:07:27.300 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859'
|
||||
17:07:27.300 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_1337C0DE5DABBEEF/addon.gproj' guid: '1337C0DE5DABBEEF'
|
||||
17:07:27.300 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_BADC0DEDABBEDA5E/addon.gproj' guid: 'BADC0DEDABBEDA5E'
|
||||
17:07:27.300 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_595F2BF2F44836FB/addon.gproj' guid: '595F2BF2F44836FB'
|
||||
17:07:27.300 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_629B2BA37EFFD577/addon.gproj' guid: '629B2BA37EFFD577'
|
||||
17:07:27.300 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_5E389BB9F58B79A6/addon.gproj' guid: '5E389BB9F58B79A6'
|
||||
17:07:27.300 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_5E524E4FEECCA92B/addon.gproj' guid: '5E524E4FEECCA92B'
|
||||
17:07:27.300 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_65930CB4CD0237B2/addon.gproj' guid: '65930CB4CD0237B2'
|
||||
17:07:27.300 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERR_Core/addon.gproj' guid: '2528466DE220D91C'
|
||||
17:07:27.300 ENGINE : gproj: '/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/Nogova/addon.gproj' guid: '70C981A53E02B64F'
|
||||
17:07:27.301 ENGINE : GameProject load
|
||||
17:07:27.301 INIT : GameProject load project data @"/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_595F2BF2F44836FB/addon.gproj"
|
||||
17:07:27.301 RESOURCES (E): Wrong GUID/name for resource @"{0AFDD005CD669892}Language/rhs_localization.st" in property "StringTableSource"
|
||||
17:07:27.301 INIT : GameProject load project data @"/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_629B2BA37EFFD577/addon.gproj"
|
||||
17:07:27.301 RESOURCES (E): Wrong GUID/name for resource @"{41FA2A08B6971D4C}Language/wcs_armament_localization.st" in property "StringTableSource"
|
||||
17:07:27.301 INIT : GameProject load project data @"/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_5E389BB9F58B79A6/addon.gproj"
|
||||
17:07:27.301 RESOURCES (E): Wrong GUID/name for resource @"{84270E09F7A4A7A0}Language/wcs_spacecore_localization.st" in property "StringTableSource"
|
||||
17:07:27.301 INIT : GameProject load project data @"/home/jakub/devel/escapistsrereintroduced/.local/uaz-test-tmp/native/object-guards-20261006-final/addons/ERRI_5E524E4FEECCA92B/addon.gproj"
|
||||
17:07:27.301 RESOURCES (E): Wrong GUID/name for resource @"{E50E557B468C7073}Language/wcs_bmp1_localization.st" in property "StringTableSource"
|
||||
17:07:27.302 ENGINE : Loading custom engine user config '$profile:.save/settings/ReforgerEngineSettings.conf'
|
||||
17:07:27.302 ENGINE : No Enfusion settings file loaded. Continuing with defaults
|
||||
17:07:27.302 RENDER : Basic screen setup:
|
||||
17:07:27.302 RENDER : Back buffer width x height: 0x0
|
||||
17:07:27.302 RENDER : Back buffer format : TEXFMT_UNKNOWN (0)
|
||||
17:07:27.302 RENDER : MSAA : none
|
||||
17:07:27.302 RENDER : GPU_DUMMY (0xFFFF) (Enfusion dummy render) with 1 GPU detected, VRAM 128MB (fast 128MB), shared 128MB, driver version Unknown version
|
||||
17:07:27.302 RENDER : Detected output devices:
|
||||
17:07:27.302 RENDER : * 1 device/s connected to Dummy:
|
||||
17:07:27.302 RENDER : Dummy output (Dummy device for our dummy render.), 1920x1080 (offset 0x0), 60Hz
|
||||
17:07:27.302 RENDER : Concurrent frames limit 2
|
||||
17:07:27.302 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7
|
||||
17:07:27.313 PROFILING : Settings changed took: 0.015000 ms
|
||||
17:07:27.315 ENGINE : Initializing inputs.
|
||||
17:07:27.321 NETWORK : Initializing networking.
|
||||
17:07:27.321 NETWORK : Using new GameRplScheduler.
|
||||
17:07:27.321 SCRIPT : SCRIPT : Initializing scripts
|
||||
17:07:27.321 SCRIPT : SCRIPT : ScriptProjectManager init
|
||||
17:07:27.321 PROFILING : ScriptProjectManager init took: 0.007000 ms
|
||||
17:07:27.336 PROFILING : Initializing scripts took: 15.060000 ms
|
||||
17:07:27.336 BACKEND : Backend Services are disabled.
|
||||
17:07:27.336 ENGINE : Enfusion engine successfully created.
|
||||
17:07:27.338 GUI : Using default language (en_us)
|
||||
17:07:27.338 GUI : Loading 'en_us' localization file.
|
||||
17:07:27.338 INIT : INIT : Loading StringTable
|
||||
17:07:27.360 PROFILING : Loading StringTable took: 22.037000 ms
|
||||
17:07:27.360 SCRIPT : SCRIPT : Compiling GameLib scripts
|
||||
17:07:27.386 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 654K of static memory; defines: "PLATFORM_LINUX,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb
|
||||
17:07:27.387 PROFILING : Compiling GameLib scripts took: 26.346000 ms
|
||||
17:07:27.387 SCRIPT : SCRIPT : Compiling Game scripts
|
||||
17:07:28.056 SCRIPT : Compiling Game scripts
|
||||
17:07:28.056 SCRIPT (W): @"Scripts/Game/Parachutes/ParachuteDeployed.c,7": Pointer type 'Physics' can only be used with local variables
|
||||
17:07:28.444 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete
|
||||
17:07:28.444 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete
|
||||
17:07:28.716 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_SiteService.c,359": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly.
|
||||
17:07:28.728 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed
|
||||
17:07:28.767 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete
|
||||
17:07:28.910 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete
|
||||
17:07:28.910 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete
|
||||
17:07:28.910 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete
|
||||
17:07:28.910 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete
|
||||
17:07:28.942 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead
|
||||
17:07:28.990 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete
|
||||
17:07:28.999 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete
|
||||
17:07:28.999 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete
|
||||
17:07:29.001 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete
|
||||
17:07:29.054 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly.
|
||||
17:07:29.055 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly.
|
||||
17:07:29.056 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api.
|
||||
17:07:29.056 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api.
|
||||
17:07:29.107 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete
|
||||
17:07:29.300 SCRIPT : Module: Game; loaded 6729x files; 13510x classes; used 33438K of static memory; defines: "PLATFORM_LINUX,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG,WCS_DEFINES_ARMAMENTS,WCS_DEFINES_SPACECORE"; CRC32: c596ded4
|
||||
17:07:29.327 PROFILING : Compiling Game scripts took: 1940.524000 ms
|
||||
17:07:29.327 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC.
|
||||
17:07:29.359 ENGINE : Game successfully created.
|
||||
17:07:29.420 PLATFORM : Save data from container 'settings' have been loaded
|
||||
17:07:29.519 PLATFORM : Save data from container 'sessions' have been loaded
|
||||
17:07:29.519 PLATFORM : System language differs from the saved one - using new language {new: 'en_us'; old: ''}
|
||||
17:07:29.519 PLATFORM : Save data transaction to 'settings' started.
|
||||
17:07:29.520 NETWORK : Starting local multiplayer server using command line args.
|
||||
17:07:29.619 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'.
|
||||
17:07:29.620 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent'
|
||||
17:07:30.608 PROFILING : Entities load took: 988.290000 ms
|
||||
17:07:30.609 WORLD : WORLD : Game::LoadEntities
|
||||
17:07:30.609 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf"
|
||||
17:07:30.611 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits.
|
||||
17:07:30.611 WORLD : WORLD : CreateEntities
|
||||
17:07:30.611 WORLD : WORLD : CreateEntities
|
||||
17:07:30.611 WORLD : WORLD : NotifyBeforeEntitiesCreated
|
||||
17:07:30.612 RESOURCES : Loaded mission headers from 11 addon(s)!
|
||||
17:07:30.612 PROFILING : NotifyBeforeEntitiesCreated took: 1.707000 ms
|
||||
17:07:30.612 WORLD : WORLD : Wait for preloading data
|
||||
17:07:31.324 PROFILING : Wait for preloading data took: 711.852000 ms
|
||||
17:07:31.392 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et"
|
||||
17:07:31.392 PROFILING : PROFILING : Terrain load
|
||||
17:07:32.681 PROFILING : Terrain load took: 1288.769000 ms
|
||||
17:07:35.172 WORLD : Game::LoadEntities
|
||||
17:07:35.172 WORLD : CreateEntities
|
||||
17:07:35.172 WORLD : CreateEntities
|
||||
17:07:35.172 ENTITY : Create entity @"ENTITY:610406" ('StaticModelEntity','Assets/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.xob') at <1931.796021 81.777000 5138.725098> @"{6A004A8F0571D456}Prefabs/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.et"
|
||||
17:07:35.172 ENTITY : CreateComponent 'ScriptedRadioComponent'
|
||||
17:07:35.172 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent.
|
||||
17:07:39.841 ENTITY : Create entity @"ENTITY:2305843009213693956" ('Factions', SCR_FactionManager) at <0.000000 0.000000 0.000000> @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et"
|
||||
17:07:39.841 RESOURCES : GetResourceObject @"{442939C9617DF228}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_FIA.et"
|
||||
17:07:39.841 WORLD : Entity prefab load @"{442939C9617DF228}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_FIA.et"
|
||||
17:07:39.841 RESOURCES : GetResourceObject @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
|
||||
17:07:39.841 WORLD : Entity prefab load @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
|
||||
17:07:39.841 RESOURCES : GetResourceObject @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
|
||||
17:07:39.841 WORLD : Entity prefab load @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
|
||||
17:07:39.841 WORLD (E): Unknown keyword/data 'Parent' at offset 35955(0x8c73)
|
||||
17:07:39.841 WORLD (E): Unknown keyword/data 'Parent' at offset 36915(0x9033)
|
||||
17:07:39.842 RESOURCES : GetResourceObject @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et"
|
||||
17:07:39.842 WORLD : Entity prefab load @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et"
|
||||
17:07:39.842 RESOURCES : GetResourceObject @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et"
|
||||
17:07:39.842 WORLD : Entity prefab load @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et"
|
||||
17:07:39.842 RESOURCES : GetResourceObject @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
|
||||
17:07:39.842 WORLD : Entity prefab load @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
|
||||
17:07:39.842 RESOURCES : GetResourceObject @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
|
||||
17:07:39.842 WORLD : Entity prefab load @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
|
||||
17:07:39.842 WORLD (E): Unknown keyword/data 'Parent' at offset 42646(0xa696)
|
||||
17:07:39.842 WORLD (E): Unknown keyword/data 'Parent' at offset 43645(0xaa7d)
|
||||
17:07:39.842 WORLD (E): Unknown keyword/data 'Parent' at offset 44617(0xae49)
|
||||
17:07:39.842 WORLD (E): Unknown keyword/data 'Parent' at offset 45590(0xb216)
|
||||
17:07:39.923 RESOURCES : GetResourceObject @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et"
|
||||
17:07:39.923 WORLD : Entity prefab load @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et"
|
||||
17:07:39.923 RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
|
||||
17:07:39.923 WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
|
||||
17:07:39.923 RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
|
||||
17:07:39.923 WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
|
||||
17:07:39.923 RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
|
||||
17:07:39.923 WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
|
||||
17:07:39.924 WORLD (E): Unknown keyword/data 'SlidingTrackMaterial' at offset 19441(0x4bf1)
|
||||
17:07:40.282 WORLD : WORLD : NotifyBeforeEntitiesInitialized
|
||||
17:07:40.282 PROFILING : NotifyBeforeEntitiesInitialized took: 0.032000 ms
|
||||
17:07:40.282 WORLD : InitEntities 'world'
|
||||
17:07:40.282 ENTITY : Init entity @"ENTITY:3" ('SCR_MapEntity1', SCR_MapEntity) at <6400.000000 0.000000 6400.000000> @"{E1B88C66BF6CA1F9}Prefabs/World/Game/Eden/MapEntity_Everon.et"
|
||||
17:07:40.282 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default.
|
||||
17:07:40.758 WORLD : InitEntities 'world'
|
||||
17:07:40.758 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Reintroduced', ERR_GameMode) at <60.452000 1.000000 213.136002> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et"
|
||||
17:07:40.758 SCRIPT : Reintroduced [config]: using $profile:Escapists.json; legacy files retained but no longer used.
|
||||
17:07:40.762 WORLD : WORLD : NotifyEntitiesInitialized
|
||||
17:07:40.762 TERRAIN : TERRAIN : Initializing road networks...
|
||||
17:07:40.764 PROFILING : Initializing road networks... took: 1.888000 ms
|
||||
17:07:40.810 SCRIPT : Reintroduced [terrain selection]: discovered 46 playable scenario headers; truncated=0
|
||||
17:07:40.810 DEFAULT : DEFAULT : WorldVolumesCollection
|
||||
17:07:40.858 PROFILING : WorldVolumesCollection took: 47.712000 ms
|
||||
17:07:40.858 INIT : INIT : SoundWorldInit
|
||||
17:07:40.870 PROFILING : SoundWorldInit took: 12.291000 ms
|
||||
17:07:40.870 PROFILING : NotifyEntitiesInitialized took: 107.841000 ms
|
||||
17:07:40.870 PROFILING : CreateEntities took: 10259.374000 ms
|
||||
17:07:40.870 PROFILING : CreateEntities took: 10259.389000 ms
|
||||
17:07:40.870 WORLD : WORLD : EOnActivate
|
||||
17:07:40.899 PROFILING : EOnActivate took: 29.352000 ms
|
||||
17:07:40.900 PROFILING : Game::LoadEntities took: 10290.152000 ms
|
||||
17:07:40.966 NETWORK : Starting RPL server, listening on address 0.0.0.0:2001, fastValidation=false
|
||||
17:07:41.443 DEFAULT : Entered online game state.
|
||||
17:07:41.443 PROFILING : Settings changed took: 0.382000 ms
|
||||
17:07:44.089 SCRIPT : Map load time: 1622ms
|
||||
17:07:44.156 WORLD : Frame start
|
||||
17:07:44.156 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated.
|
||||
17:07:44.162 WORLD : UpdateEntities
|
||||
17:07:44.162 WORLD : Frame
|
||||
17:07:44.162 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME
|
||||
17:07:45.518 SCRIPT : Co10 Escape Reintroduced factions: players=US enemy=USSR independent=FIA
|
||||
17:07:48.219 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-prison-1 position=<4834.65,51.1307,5277.51> heading=238.422 attempts=1001 fallback=0
|
||||
17:07:49.558 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-radio-1 position=<3231.33,114.77,5214.61> heading=41.0352 attempts=1810 fallback=0
|
||||
17:07:49.821 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-mortar-1 position=<4940.57,36.8018,9211.61> heading=180.698 attempts=203 fallback=0
|
||||
17:07:50.090 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-mortar-2 position=<4761.56,27.8638,11117.9> heading=202.264 attempts=435 fallback=0
|
||||
17:07:53.557 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-mortar-3 position=<5599.96,86.1137,5621.27> heading=325.799 attempts=4437 fallback=0
|
||||
17:07:53.818 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-mortar-4 position=<5230.59,1.09632,12181.2> heading=209.538 attempts=16 fallback=0
|
||||
17:07:55.686 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-medical-1 position=<5096.53,28.3466,9890.54> heading=17.1941 attempts=2470 fallback=0
|
||||
17:07:55.957 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-outpost-1 position=<11083.8,21.145,11914> heading=306.055 attempts=494 fallback=0
|
||||
17:07:56.223 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-medical-2 position=<4952.69,2.2075,3873.95> heading=41.7493 attempts=335 fallback=0
|
||||
17:07:58.621 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-medical-3 position=<3326.7,161.603,5908.78> heading=63.8655 attempts=2907 fallback=0
|
||||
17:07:58.886 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-camp-2 position=<4855.76,164.825,7224.83> heading=57.7129 attempts=197 fallback=0
|
||||
17:08:00.750 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-camp-3 position=<7262.29,123.95,5302.51> heading=4.29579 attempts=2238 fallback=0
|
||||
17:08:03.691 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-camp-4 position=<6269.11,86.9424,5668.53> heading=231.028 attempts=3932 fallback=0
|
||||
17:08:04.222 SCRIPT : Co10 Escape Reintroduced [generated site]: id=everon-camp-5 position=<2630.97,86.4755,6035.73> heading=80.9937 attempts=519 fallback=0
|
||||
17:08:04.228 SCRIPT : Reintroduced [sites]: authored everon-prison-1 at <4834.65,51.3634,5277.51>
|
||||
17:08:04.228 SCRIPT : Reintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1
|
||||
17:08:04.233 SCRIPT : Reintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050>
|
||||
17:08:04.234 ENTITY : SpawnEntityPrefab @"{B3949F6D215A9F78}Prefabs/Props/Military/Antennas/Antenna_FIA_02/Antenna_FIA_02_base.et"
|
||||
17:08:04.234 ENTITY : Create entity @"ENTITY:4611686018427388511" ('GenericEntity','Assets/Props/Military/Antennas/Antenna_FIA_02/Antenna_FIA_02.xob') at <3227.365479 114.997459 5220.718262> @"{B3949F6D215A9F78}Prefabs/Props/Military/Antennas/Antenna_FIA_02/Antenna_FIA_02_base.et"
|
||||
17:08:04.234 ENTITY : CreateComponent 'ScriptedRadioComponent'
|
||||
17:08:04.234 DEFAULT (W): BaseRadioComponent does not have any transceiver. (Entity: @"ENTITY:4611686018427388511" ('GenericEntity','Assets/Props/Military/Antennas/Antenna_FIA_02/Antenna_FIA_02.xob') at <3227.365479 114.997459 5220.718262> @"{B3949F6D215A9F78}Prefabs/Props/Military/Antennas/Antenna_FIA_02/Antenna_FIA_02_base.et"). Only printing this message once. There're possibly more nodes with this requirement.
|
||||
17:08:04.236 SCRIPT : Reintroduced [sites]: authored everon-radio-1 at <3231.33,114.892,5214.61>
|
||||
17:08:04.261 SCRIPT : Reintroduced [sites]: authored everon-extraction-1 at <4800.95,27.8202,11487.4>
|
||||
17:08:04.267 SCRIPT : Reintroduced [sites]: authored everon-medical-1 at <5096.53,28.623,9890.54>
|
||||
17:08:04.270 SCRIPT : Reintroduced [sites]: authored everon-outpost-1 at <11083.8,21.225,11914>
|
||||
17:08:04.271 SCRIPT : Reintroduced [sites]: authored everon-mortar-1 at <4940.57,36.9377,9211.61>
|
||||
17:08:04.271 SCRIPT : Reintroduced [sites]: authored everon-mortar-2 at <4761.56,27.9438,11117.9>
|
||||
17:08:04.271 SCRIPT : Reintroduced [sites]: authored everon-mortar-3 at <5599.96,86.3181,5621.27>
|
||||
17:08:04.271 SCRIPT : Reintroduced [sites]: authored everon-mortar-4 at <5230.59,1.69375,12181.2>
|
||||
17:08:04.273 SCRIPT : Reintroduced [sites]: authored everon-medical-2 at <4952.69,2.2875,3873.95>
|
||||
17:08:04.275 SCRIPT : Reintroduced [sites]: authored everon-medical-3 at <3326.7,161.934,5908.78>
|
||||
17:08:04.278 SCRIPT : Reintroduced [sites]: authored everon-camp-2 at <4855.76,165.034,7224.83>
|
||||
17:08:04.280 SCRIPT : Reintroduced [sites]: authored everon-camp-3 at <7262.29,124.462,5302.51>
|
||||
17:08:04.283 SCRIPT : Reintroduced [sites]: authored everon-camp-4 at <6269.11,87.3278,5668.53>
|
||||
17:08:04.285 SCRIPT : Reintroduced [sites]: authored everon-camp-5 at <2630.97,86.6515,6035.73>
|
||||
17:08:04.285 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<4800.95,27.8202,11487.4> up=1
|
||||
17:08:04.285 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0
|
||||
17:08:04.285 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=12450.3
|
||||
17:08:04.285 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4800.95,28.1168,11489.7>
|
||||
17:08:04.286 SCRIPT : ERR GEAR TERRAIN: bottom=<4800.95,27.8168,11489.7> terrainY=27.7202 tireTerrainGap=0.0965805
|
||||
17:08:04.286 SCRIPT : ERR GEAR SUPPORT: center=<4800.95,28.1168,11489.7> radius=0.3 bottom=<4800.95,27.8168,11489.7> fraction=0.893554 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.0965824
|
||||
17:08:04.286 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.68,28.585,11485.4>
|
||||
17:08:04.286 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.68,28.135,11485.4> terrainY=27.8121 tireTerrainGap=0.322891
|
||||
17:08:04.286 SCRIPT : ERR GEAR SUPPORT: center=<4798.68,28.585,11485.4> radius=0.45 bottom=<4798.68,28.135,11485.4> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.120001
|
||||
17:08:04.286 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.23,28.585,11485.4>
|
||||
17:08:04.286 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.23,28.135,11485.4> terrainY=27.649 tireTerrainGap=0.485987
|
||||
17:08:04.286 SCRIPT : ERR GEAR SUPPORT: center=<4803.23,28.585,11485.4> radius=0.45 bottom=<4803.23,28.135,11485.4> fraction=1 normal=<0,0,0> self=0 dynamic=0 supported=0 gap=0.120001
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-prison-1 requested=5 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-supply-1 requested=5 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=4 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=2 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=4 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=2 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=4 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=2 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=4 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=2 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=4 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=2 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=4 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=2 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=4 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=2 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=4 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:04.286 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=2 physical=0 conscious=0 nativeComplete=0
|
||||
17:08:05.017 SCRIPT : Reintroduced [guards]: initial site=everon-prison-1 requested=5 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:05.017 SCRIPT : Reintroduced [guards]: initial site=everon-supply-1 requested=5 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:05.017 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:05.017 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:05.283 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<4801.01,27.5867,11487.4> up=0.997286
|
||||
17:08:05.283 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.698351 angularSpeed=0.149792
|
||||
17:08:05.283 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.3
|
||||
17:08:05.283 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.07,27.9689,11489.6>
|
||||
17:08:05.283 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.07,27.6689,11489.6> terrainY=27.7165 tireTerrainGap=-0.0476418
|
||||
17:08:05.283 SCRIPT : ERR GEAR SUPPORT: center=<4801.07,27.9689,11489.6> radius=0.3 bottom=<4801.07,27.6689,11489.6> fraction=0.23796 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.0476494
|
||||
17:08:05.283 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.71,28.229,11485.4>
|
||||
17:08:05.283 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.71,27.779,11485.4> terrainY=27.8104 tireTerrainGap=-0.0314217
|
||||
17:08:05.283 SCRIPT : ERR GEAR SUPPORT: center=<4798.71,28.229,11485.4> radius=0.45 bottom=<4798.71,27.779,11485.4> fraction=0.311623 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.0314426
|
||||
17:08:05.283 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.25,28.081,11485.3>
|
||||
17:08:05.283 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.25,27.631,11485.3> terrainY=27.6483 tireTerrainGap=-0.0173302
|
||||
17:08:05.283 SCRIPT : ERR GEAR SUPPORT: center=<4803.25,28.081,11485.3> radius=0.45 bottom=<4803.25,27.631,11485.3> fraction=0.375755 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.017334
|
||||
17:08:05.284 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
|
||||
17:08:05.550 SCRIPT : Reintroduced [guards]: initial site=everon-prison-1 requested=5 physical=2 conscious=2 nativeComplete=0
|
||||
17:08:05.550 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=4 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:05.550 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=4 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:05.550 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=2 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:06.084 SCRIPT : Reintroduced [guards]: initial site=everon-supply-1 requested=5 physical=2 conscious=2 nativeComplete=0
|
||||
17:08:06.084 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0
|
||||
17:08:06.084 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0
|
||||
17:08:06.084 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=4 physical=2 conscious=2 nativeComplete=0
|
||||
17:08:06.351 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.03,27.595,11487.4> up=0.996383
|
||||
17:08:06.351 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.186161 angularSpeed=0.0650714
|
||||
17:08:06.351 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.3
|
||||
17:08:06.351 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.09,28.0266,11489.6>
|
||||
17:08:06.351 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.09,27.7267,11489.6> terrainY=27.716 tireTerrainGap=0.0106773
|
||||
17:08:06.351 SCRIPT : ERR GEAR SUPPORT: center=<4801.09,28.0266,11489.6> radius=0.3 bottom=<4801.09,27.7267,11489.6> fraction=0.503088 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.0106792
|
||||
17:08:06.351 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.73,28.2653,11485.4>
|
||||
17:08:06.351 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.73,27.8153,11485.4> terrainY=27.8094 tireTerrainGap=0.00590515
|
||||
17:08:06.351 SCRIPT : ERR GEAR SUPPORT: center=<4798.73,28.2653,11485.4> radius=0.45 bottom=<4798.73,27.8153,11485.4> fraction=0.481322 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=0.0058918
|
||||
17:08:06.351 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.28,28.105,11485.3>
|
||||
17:08:06.351 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.28,27.655,11485.3> terrainY=27.6474 tireTerrainGap=0.00759125
|
||||
17:08:06.351 SCRIPT : ERR GEAR SUPPORT: center=<4803.28,28.105,11485.3> radius=0.45 bottom=<4803.28,27.655,11485.3> fraction=0.489071 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.00759506
|
||||
17:08:06.351 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
|
||||
17:08:06.617 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=2 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:06.617 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=2 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:06.617 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=4 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:06.617 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=2 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:06.883 SCRIPT : Reintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake
|
||||
17:08:07.151 SCRIPT : Reintroduced [guards]: initial site=everon-prison-1 requested=5 physical=3 conscious=3 nativeComplete=0
|
||||
17:08:07.151 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0
|
||||
17:08:07.151 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=4 physical=2 conscious=2 nativeComplete=0
|
||||
17:08:07.151 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=2 physical=2 conscious=2 nativeComplete=1
|
||||
17:08:07.417 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.08,27.5865,11487.4> up=0.996169
|
||||
17:08:07.417 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0649724 angularSpeed=0.0595655
|
||||
17:08:07.417 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
|
||||
17:08:07.417 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.15,28.0131,11489.6>
|
||||
17:08:07.417 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.15,27.7131,11489.6> terrainY=27.7139 tireTerrainGap=-0.000822067
|
||||
17:08:07.417 SCRIPT : ERR GEAR SUPPORT: center=<4801.15,28.0131,11489.6> radius=0.3 bottom=<4801.15,27.7131,11489.6> fraction=0.450805 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.000822067
|
||||
17:08:07.417 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.77,28.2527,11485.4>
|
||||
17:08:07.417 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.77,27.8027,11485.4> terrainY=27.8078 tireTerrainGap=-0.00513268
|
||||
17:08:07.417 SCRIPT : ERR GEAR SUPPORT: center=<4798.77,28.2527,11485.4> radius=0.45 bottom=<4798.77,27.8027,11485.4> fraction=0.431051 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.00516891
|
||||
17:08:07.417 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.32,28.0913,11485.3>
|
||||
17:08:07.417 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.32,27.6413,11485.3> terrainY=27.6464 tireTerrainGap=-0.00510025
|
||||
17:08:07.417 SCRIPT : ERR GEAR SUPPORT: center=<4803.32,28.0913,11485.3> radius=0.45 bottom=<4803.32,27.6413,11485.3> fraction=0.431337 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00510597
|
||||
17:08:07.417 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
|
||||
17:08:07.684 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0
|
||||
17:08:07.684 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=4 physical=3 conscious=3 nativeComplete=0
|
||||
17:08:07.684 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=2 physical=2 conscious=2 nativeComplete=1
|
||||
17:08:07.684 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=4 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:08.217 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=2 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:08.217 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=4 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:08.217 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=2 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:08.217 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=4 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:08.484 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.1,27.5903,11487.4> up=0.996035
|
||||
17:08:08.484 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0
|
||||
17:08:08.484 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
|
||||
17:08:08.484 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.19,28.0146,11489.6>
|
||||
17:08:08.484 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.19,27.7146,11489.6> terrainY=27.7128 tireTerrainGap=0.00188828
|
||||
17:08:08.484 SCRIPT : ERR GEAR SUPPORT: center=<4801.19,28.0146,11489.6> radius=0.3 bottom=<4801.19,27.7146,11489.6> fraction=0.463118 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.00188637
|
||||
17:08:08.484 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.79,28.2545,11485.4>
|
||||
17:08:08.484 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.79,27.8045,11485.4> terrainY=27.8069 tireTerrainGap=-0.00236511
|
||||
17:08:08.484 SCRIPT : ERR GEAR SUPPORT: center=<4798.79,28.2545,11485.4> radius=0.45 bottom=<4798.79,27.8045,11485.4> fraction=0.443758 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.00237274
|
||||
17:08:08.484 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.34,28.0932,11485.3>
|
||||
17:08:08.484 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.34,27.6432,11485.3> terrainY=27.6458 tireTerrainGap=-0.00258255
|
||||
17:08:08.484 SCRIPT : ERR GEAR SUPPORT: center=<4803.34,28.0932,11485.3> radius=0.45 bottom=<4803.34,27.6432,11485.3> fraction=0.442787 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00258636
|
||||
17:08:08.484 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
|
||||
17:08:08.751 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=2 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:08.751 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=4 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:08.751 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=2 physical=2 conscious=2 nativeComplete=1
|
||||
17:08:08.751 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=4 physical=2 conscious=2 nativeComplete=0
|
||||
17:08:09.284 SCRIPT : Reintroduced [guards]: initial site=everon-supply-1 requested=5 physical=3 conscious=3 nativeComplete=0
|
||||
17:08:09.284 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0
|
||||
17:08:09.285 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=2 physical=2 conscious=2 nativeComplete=1
|
||||
17:08:09.285 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=4 physical=3 conscious=3 nativeComplete=0
|
||||
17:08:09.550 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.1,27.5903,11487.4> up=0.996035
|
||||
17:08:09.550 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0
|
||||
17:08:09.550 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
|
||||
17:08:09.550 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.19,28.0146,11489.6>
|
||||
17:08:09.550 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.19,27.7146,11489.6> terrainY=27.7128 tireTerrainGap=0.00188828
|
||||
17:08:09.550 SCRIPT : ERR GEAR SUPPORT: center=<4801.19,28.0146,11489.6> radius=0.3 bottom=<4801.19,27.7146,11489.6> fraction=0.463118 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.00188637
|
||||
17:08:09.550 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.79,28.2545,11485.4>
|
||||
17:08:09.550 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.79,27.8045,11485.4> terrainY=27.8069 tireTerrainGap=-0.00236511
|
||||
17:08:09.550 SCRIPT : ERR GEAR SUPPORT: center=<4798.79,28.2545,11485.4> radius=0.45 bottom=<4798.79,27.8045,11485.4> fraction=0.443758 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.00237274
|
||||
17:08:09.550 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.34,28.0932,11485.3>
|
||||
17:08:09.550 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.34,27.6432,11485.3> terrainY=27.6458 tireTerrainGap=-0.00258255
|
||||
17:08:09.550 SCRIPT : ERR GEAR SUPPORT: center=<4803.34,28.0932,11485.3> radius=0.45 bottom=<4803.34,27.6432,11485.3> fraction=0.442787 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00258636
|
||||
17:08:09.550 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
|
||||
17:08:09.817 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0
|
||||
17:08:09.817 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=4 physical=2 conscious=2 nativeComplete=0
|
||||
17:08:09.817 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=2 physical=2 conscious=2 nativeComplete=1
|
||||
17:08:09.817 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=4 physical=2 conscious=2 nativeComplete=0
|
||||
17:08:10.351 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=2 physical=2 conscious=2 nativeComplete=1
|
||||
17:08:10.351 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=4 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:10.351 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=2 physical=1 conscious=1 nativeComplete=0
|
||||
17:08:10.351 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=4 physical=2 conscious=2 nativeComplete=0
|
||||
17:08:10.617 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.1,27.5903,11487.4> up=0.996035
|
||||
17:08:10.617 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0
|
||||
17:08:10.617 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
|
||||
17:08:10.617 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.19,28.0146,11489.6>
|
||||
17:08:10.617 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.19,27.7146,11489.6> terrainY=27.7128 tireTerrainGap=0.00188828
|
||||
17:08:10.617 SCRIPT : ERR GEAR SUPPORT: center=<4801.19,28.0146,11489.6> radius=0.3 bottom=<4801.19,27.7146,11489.6> fraction=0.463118 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.00188637
|
||||
17:08:10.617 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.79,28.2545,11485.4>
|
||||
17:08:10.617 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.79,27.8045,11485.4> terrainY=27.8069 tireTerrainGap=-0.00236511
|
||||
17:08:10.617 SCRIPT : ERR GEAR SUPPORT: center=<4798.79,28.2545,11485.4> radius=0.45 bottom=<4798.79,27.8045,11485.4> fraction=0.443758 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.00237274
|
||||
17:08:10.617 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.34,28.0932,11485.3>
|
||||
17:08:10.617 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.34,27.6432,11485.3> terrainY=27.6458 tireTerrainGap=-0.00258255
|
||||
17:08:10.617 SCRIPT : ERR GEAR SUPPORT: center=<4803.34,28.0932,11485.3> radius=0.45 bottom=<4803.34,27.6432,11485.3> fraction=0.442787 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00258636
|
||||
17:08:10.617 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
|
||||
17:08:10.884 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=2 physical=2 conscious=2 nativeComplete=1
|
||||
17:08:10.884 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=4 physical=2 conscious=2 nativeComplete=0
|
||||
17:08:10.884 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=4 physical=3 conscious=3 nativeComplete=0
|
||||
17:08:10.884 SCRIPT : Reintroduced [guards]: initial site=everon-camp-5 requested=4 physical=4 conscious=4 nativeComplete=1
|
||||
17:08:11.417 SCRIPT : Reintroduced [guards]: initial site=everon-prison-1 requested=5 physical=4 conscious=4 nativeComplete=0
|
||||
17:08:11.418 SCRIPT : Reintroduced [guards]: initial site=everon-supply-1 requested=5 physical=4 conscious=4 nativeComplete=0
|
||||
17:08:11.418 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0
|
||||
17:08:11.418 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0
|
||||
17:08:11.683 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.1,27.5903,11487.4> up=0.996035
|
||||
17:08:11.683 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0
|
||||
17:08:11.683 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
|
||||
17:08:11.683 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.19,28.0146,11489.6>
|
||||
17:08:11.683 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.19,27.7146,11489.6> terrainY=27.7128 tireTerrainGap=0.00188828
|
||||
17:08:11.684 SCRIPT : ERR GEAR SUPPORT: center=<4801.19,28.0146,11489.6> radius=0.3 bottom=<4801.19,27.7146,11489.6> fraction=0.463118 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.00188637
|
||||
17:08:11.684 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.79,28.2545,11485.4>
|
||||
17:08:11.684 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.79,27.8045,11485.4> terrainY=27.8069 tireTerrainGap=-0.00236511
|
||||
17:08:11.684 SCRIPT : ERR GEAR SUPPORT: center=<4798.79,28.2545,11485.4> radius=0.45 bottom=<4798.79,27.8045,11485.4> fraction=0.443758 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.00237274
|
||||
17:08:11.684 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.34,28.0932,11485.3>
|
||||
17:08:11.684 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.34,27.6432,11485.3> terrainY=27.6458 tireTerrainGap=-0.00258255
|
||||
17:08:11.684 SCRIPT : ERR GEAR SUPPORT: center=<4803.34,28.0932,11485.3> radius=0.45 bottom=<4803.34,27.6432,11485.3> fraction=0.442787 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00258636
|
||||
17:08:11.684 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
|
||||
17:08:11.951 SCRIPT : Reintroduced [guards]: initial site=everon-medical-1 requested=4 physical=4 conscious=4 nativeComplete=1
|
||||
17:08:11.951 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=4 physical=3 conscious=3 nativeComplete=0
|
||||
17:08:11.951 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=4 physical=3 conscious=3 nativeComplete=0
|
||||
17:08:11.951 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=4 physical=2 conscious=2 nativeComplete=0
|
||||
17:08:12.484 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=2 physical=2 conscious=2 nativeComplete=1
|
||||
17:08:12.484 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=4 physical=3 conscious=3 nativeComplete=0
|
||||
17:08:12.484 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=4 physical=3 conscious=3 nativeComplete=0
|
||||
17:08:12.484 SCRIPT : Reintroduced [guards]: initial site=everon-camp-4 requested=4 physical=4 conscious=4 nativeComplete=1
|
||||
17:08:12.750 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.1,27.5903,11487.4> up=0.996035
|
||||
17:08:12.750 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0
|
||||
17:08:12.750 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
|
||||
17:08:12.750 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.19,28.0146,11489.6>
|
||||
17:08:12.750 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.19,27.7146,11489.6> terrainY=27.7128 tireTerrainGap=0.00188828
|
||||
17:08:12.750 SCRIPT : ERR GEAR SUPPORT: center=<4801.19,28.0146,11489.6> radius=0.3 bottom=<4801.19,27.7146,11489.6> fraction=0.463118 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.00188637
|
||||
17:08:12.750 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.79,28.2545,11485.4>
|
||||
17:08:12.750 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.79,27.8045,11485.4> terrainY=27.8069 tireTerrainGap=-0.00236511
|
||||
17:08:12.750 SCRIPT : ERR GEAR SUPPORT: center=<4798.79,28.2545,11485.4> radius=0.45 bottom=<4798.79,27.8045,11485.4> fraction=0.443758 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.00237274
|
||||
17:08:12.750 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.34,28.0932,11485.3>
|
||||
17:08:12.750 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.34,27.6432,11485.3> terrainY=27.6458 tireTerrainGap=-0.00258255
|
||||
17:08:12.750 SCRIPT : ERR GEAR SUPPORT: center=<4803.34,28.0932,11485.3> radius=0.45 bottom=<4803.34,27.6432,11485.3> fraction=0.442787 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00258636
|
||||
17:08:12.750 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
|
||||
17:08:13.017 SCRIPT : Reintroduced [guards]: initial site=everon-prison-1 requested=5 physical=5 conscious=5 nativeComplete=1
|
||||
17:08:13.017 SCRIPT : Reintroduced [guards]: initial site=everon-supply-1 requested=5 physical=5 conscious=5 nativeComplete=1
|
||||
17:08:13.017 SCRIPT : Reintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1
|
||||
17:08:13.017 SCRIPT : Reintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1
|
||||
17:08:13.551 SCRIPT : Reintroduced [guards]: initial site=everon-outpost-1 requested=4 physical=4 conscious=4 nativeComplete=1
|
||||
17:08:13.551 SCRIPT : Reintroduced [guards]: initial site=everon-medical-2 requested=4 physical=4 conscious=4 nativeComplete=1
|
||||
17:08:13.551 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=4 physical=3 conscious=3 nativeComplete=0
|
||||
17:08:13.551 SCRIPT : Reintroduced [guards]: initial site=everon-camp-2 requested=4 physical=4 conscious=4 nativeComplete=1
|
||||
17:08:13.817 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<4801.1,27.5903,11487.4> up=0.996035
|
||||
17:08:13.817 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0
|
||||
17:08:13.817 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=12450.4
|
||||
17:08:13.817 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<4801.19,28.0146,11489.6>
|
||||
17:08:13.817 SCRIPT : ERR GEAR TERRAIN: bottom=<4801.19,27.7146,11489.6> terrainY=27.7128 tireTerrainGap=0.00188828
|
||||
17:08:13.817 SCRIPT : ERR GEAR SUPPORT: center=<4801.19,28.0146,11489.6> radius=0.3 bottom=<4801.19,27.7146,11489.6> fraction=0.463118 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=0.00188637
|
||||
17:08:13.817 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<4798.79,28.2545,11485.4>
|
||||
17:08:13.818 SCRIPT : ERR GEAR TERRAIN: bottom=<4798.79,27.8045,11485.4> terrainY=27.8069 tireTerrainGap=-0.00236511
|
||||
17:08:13.818 SCRIPT : ERR GEAR SUPPORT: center=<4798.79,28.2545,11485.4> radius=0.45 bottom=<4798.79,27.8045,11485.4> fraction=0.443758 normal=<0.0468236,0.998903,0> self=0 dynamic=0 supported=1 gap=-0.00237274
|
||||
17:08:13.818 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<4803.34,28.0932,11485.3>
|
||||
17:08:13.818 SCRIPT : ERR GEAR TERRAIN: bottom=<4803.34,27.6432,11485.3> terrainY=27.6458 tireTerrainGap=-0.00258255
|
||||
17:08:13.818 SCRIPT : ERR GEAR SUPPORT: center=<4803.34,28.0932,11485.3> radius=0.45 bottom=<4803.34,27.6432,11485.3> fraction=0.442787 normal=<0.0312348,0.999512,0> self=0 dynamic=0 supported=1 gap=-0.00258636
|
||||
17:08:13.818 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1
|
||||
17:08:14.085 SCRIPT : Reintroduced [guards]: initial site=everon-medical-3 requested=4 physical=4 conscious=4 nativeComplete=1
|
||||
17:08:14.085 SCRIPT : Reintroduced [guards]: initial site=everon-camp-3 requested=4 physical=4 conscious=4 nativeComplete=1
|
||||
17:08:14.085 SCRIPT : Reintroduced [sites]: transport parking=<6150,202.725,7038> radius=4 terrainRange=0.625 obstructed=0 clear=1
|
||||
17:08:14.109 SCRIPT : Reintroduced [sites]: 16 sites and 240 physical stock items ready
|
||||
17:08:14.619 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=1 position=<9720.43,294.636,2509.84> heading=0
|
||||
17:08:15.155 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=2 position=<8176.13,329.335,2570> heading=135
|
||||
17:08:15.421 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=3 position=<10105.4,103.428,620.724> heading=0
|
||||
17:08:15.955 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=4 position=<7901.75,120.309,5229.46> heading=135
|
||||
17:08:16.753 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=5 position=<7300.99,183.597,2813.37> heading=45
|
||||
17:08:17.019 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=6 position=<9357.71,107.903,4523.19> heading=270
|
||||
17:08:17.285 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=7 position=<8770.63,130.449,930.499> heading=90
|
||||
17:08:17.289 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=8 position=<5410.39,150.937,7500.62> heading=45
|
||||
17:08:17.553 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=9 position=<10146.1,78.776,3623.94> heading=90
|
||||
17:08:17.821 SCRIPT : Co10 Escape Reintroduced [scout survey]: post=10 position=<4704.49,79.1969,4471.62> heading=225
|
||||
17:08:29.551 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-1 faction=USSR group=<0x0000000067B8E440> SCR_AIGroup position=<9720.43,294.604,2509.84> living=1
|
||||
17:08:29.551 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<9720.43,294.636,2509.84> backpack magazines=40
|
||||
17:08:29.551 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-2 faction=USSR group=<0x0000000067BA5750> SCR_AIGroup position=<8176.13,329.875,2570> living=1
|
||||
17:08:29.551 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<8176.13,329.335,2570> backpack magazines=40
|
||||
17:08:30.084 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-3 faction=USSR group=<0x0000000067BBC920> SCR_AIGroup position=<10105.4,103.335,620.724> living=1
|
||||
17:08:30.084 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<10105.4,103.428,620.724> backpack magazines=40
|
||||
17:08:30.084 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-4 faction=USSR group=<0x0000000067BD3A60> SCR_AIGroup position=<7901.75,120.262,5229.46> living=1
|
||||
17:08:30.084 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<7901.75,120.309,5229.46> backpack magazines=40
|
||||
17:08:30.617 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-5 faction=USSR group=<0x0000000067D0FF60> SCR_AIGroup position=<7300.99,183.497,2813.37> living=1
|
||||
17:08:30.617 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<7300.99,183.597,2813.37> backpack magazines=40
|
||||
17:08:30.617 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-6 faction=USSR group=<0x0000000067EE06E0> SCR_AIGroup position=<9357.71,108.064,4523.19> living=1
|
||||
17:08:30.617 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<9357.71,107.903,4523.19> backpack magazines=40
|
||||
17:08:31.151 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-7 faction=USSR group=<0x0000000067FA60F0> SCR_AIGroup position=<8770.63,130.349,930.499> living=1
|
||||
17:08:31.151 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<8770.63,130.449,930.499> backpack magazines=40
|
||||
17:08:31.151 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-8 faction=USSR group=<0x0000000067FBEE30> SCR_AIGroup position=<5410.39,150.926,7500.62> living=1
|
||||
17:08:31.151 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<5410.39,150.937,7500.62> backpack magazines=40
|
||||
17:08:31.684 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-9 faction=USSR group=<0x0000000068082F30> SCR_AIGroup position=<10146.1,78.676,3623.94> living=1
|
||||
17:08:31.684 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<10146.1,78.776,3623.94> backpack magazines=40
|
||||
17:08:31.684 SCRIPT : Reintroduced [SPAWN GROUP]: source=hill-scout-10 faction=USSR group=<0x000000006809E5A0> SCR_AIGroup position=<4704.49,79.0969,4471.62> living=1
|
||||
17:08:31.684 SCRIPT : Co10 Escape Reintroduced [scout ready]: position=<4704.49,79.1969,4471.62> backpack magazines=40
|
||||
17:08:34.643 SCRIPT : Reintroduced [SPAWN GROUP]: source=roadblock-0 faction=USSR group=<0x0000000068A459F0> SCR_AIGroup position=<6921.42,44.0579,8870.08> living=4
|
||||
17:08:34.643 SCRIPT : Reintroduced [roadblocks]: roadblock-0 at <6921.01,44.5146,8862.47> guards=4 roadPassage=open HQ=registered
|
||||
17:08:39.177 SCRIPT : Reintroduced [SPAWN GROUP]: source=roadblock-1 faction=USSR group=<0x0000000068A455F0> SCR_AIGroup position=<3990.91,19.8181,8904.83> living=4
|
||||
17:08:39.177 SCRIPT : Reintroduced [roadblocks]: roadblock-1 at <3981.95,19.4962,8905.82> guards=4 roadPassage=open HQ=registered
|
||||
17:08:41.578 SCRIPT : Reintroduced [SPAWN GROUP]: source=roadblock-2 faction=USSR group=<0x00000000690F4EE0> SCR_AIGroup position=<11333,64.8879,11179.3> living=4
|
||||
17:08:41.578 SCRIPT : Reintroduced [roadblocks]: roadblock-2 at <11325.7,64.35,11177.3> guards=4 roadPassage=open HQ=registered
|
||||
17:08:43.949 SCRIPT : Reintroduced [roadblocks]: placed=3 requested=4 attempts=120 roadCandidates=24 clearPlans=3; bounded search complete; unsuitable locations skipped
|
||||
17:08:43.950 SCRIPT : Reintroduced [mortars]: preparing everon-mortar-1 location=<4940.57,36.9377,9211.61> authored=<4940.57,36.8018,9211.61>
|
||||
17:08:43.953 SCRIPT : Reintroduced [mortars]: preparing everon-mortar-2 location=<4761.56,27.9438,11117.9> authored=<4761.56,27.8638,11117.9>
|
||||
17:08:43.955 SCRIPT : Reintroduced [mortars]: preparing everon-mortar-3 location=<5599.96,86.3181,5621.27> authored=<5599.96,86.1137,5621.27>
|
||||
17:08:43.956 SCRIPT : Reintroduced [mortars]: preparing everon-mortar-4 location=<5230.59,1.69375,12181.2> authored=<5230.59,1.09632,12181.2>
|
||||
17:08:43.959 SCRIPT : Reintroduced [environment]: date=authored weather=authored
|
||||
17:08:43.960 SCRIPT : Reintroduced [time]: started at 14:00 with 1x progression
|
||||
17:08:43.960 SCRIPT : Reintroduced [mission]: phase 0 -> 1
|
||||
17:08:43.960 SCRIPT : Reintroduced [prison]: owned composition raw={BE6B8D56349038A6}Prefabs/ERR/Prison.et resolved={BE6B8D56349038A6}Prefabs/ERR/Prison.et position=<4834.65,51.1307,5277.51>
|
||||
17:08:43.960 SCRIPT : Reintroduced [prison]: gate candidate raw= resolved={67F17696FF278AE0}Prefabs/Structures/BuildingParts/Doors/Door_Metal_A_RIGHT_EXT_COV_B.et lock=1 door=1 position=<4840.06,51.1307,5280.06>
|
||||
17:08:43.960 SCRIPT : Reintroduced [prison]: one intact successor lock in owned prison
|
||||
17:08:44.362 SCRIPT : ERR OBJECT PROBE candidates=80
|
||||
17:08:44.363 SCRIPT : ERR OBJECT PROBE structure={E30E1250FD927736}Prefabs/Structures/Industrial/Houses/PortableCabin_E_01/PortableCabin_E_01_beige.et origin=<11886.5,5.504,1281.34> found=1 point=<11885.3,8.88543,1279.29> aboveGround=3.37426
|
||||
17:08:44.363 SCRIPT : ERR OBJECT PROBE structure={E30E1250FD927736}Prefabs/Structures/Industrial/Houses/PortableCabin_E_01/PortableCabin_E_01_beige.et origin=<11234.2,16.7957,2738.26> found=1 point=<11232.1,20.1712,2736.72> aboveGround=3.52702
|
||||
17:08:44.363 SCRIPT : ERR OBJECT PROBE structure={501A020C34E2FB63}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_3fp_Camo.et origin=<11369.9,70.7314,1858.16> found=1 point=<11369.8,74.723,1858.27> aboveGround=4.41885
|
||||
17:08:44.363 SCRIPT : ERR OBJECT PROBE structure={501A020C34E2FB63}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_3fp_Camo.et origin=<11157.7,80.7068,2189.45> found=1 point=<11157.6,84.6984,2189.3> aboveGround=4.75336
|
||||
17:08:44.364 SCRIPT : ERR OBJECT PROBE structure={CFF7F6F7042AFFEF}Prefabs/Structures/Industrial/Houses/Workshop_01/Workshop_01_Main.et origin=<10985.4,24.0813,11840.4> found=1 point=<10981.1,27.8374,11840.6> aboveGround=3.75729
|
||||
17:08:44.364 SCRIPT : ERR OBJECT PROBE structure={BE5D5CFA90224646}Prefabs/Structures/Military/Camps/TentUSSR_01/TentUSSR_01_base.et origin=<11079.8,21.225,11912> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.364 SCRIPT : ERR OBJECT PROBE structure={01AE5FD77A9A4C21}Prefabs/Structures/Military/Camps/TentSmallUS_01/TentSmallUS_01.et origin=<11085.1,21.225,11919.3> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.364 SCRIPT : ERR OBJECT PROBE structure={EE5219B38424AB12}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_3fp.et origin=<11013.9,9.49034,8607.47> found=1 point=<11013.7,13.4819,8607.56> aboveGround=4.27941
|
||||
17:08:44.364 SCRIPT : ERR OBJECT PROBE structure={CFF7F6F7042AFFEF}Prefabs/Structures/Industrial/Houses/Workshop_01/Workshop_01_Main.et origin=<10977.4,24.0853,11834.7> found=1 point=<10977.3,27.8449,11830.4> aboveGround=3.8184
|
||||
17:08:44.365 SCRIPT : ERR OBJECT PROBE structure={5F00FD9BDAD8C1A5}Prefabs/Structures/Industrial/Houses/Workshop_01/Workshop_01_Garage.et origin=<10954.9,23.258,11802.4> found=1 point=<10954.7,27.3379,11799.6> aboveGround=4.19914
|
||||
17:08:44.365 SCRIPT : ERR OBJECT PROBE structure={F9F2F6D2BD65B719}Prefabs/Structures/Industrial/Houses/Workshop_01/Workshop_01_Side.et origin=<10959.4,23.2512,11797.7> found=1 point=<10959.4,27.2505,11795.3> aboveGround=4.18799
|
||||
17:08:44.365 SCRIPT : ERR OBJECT PROBE structure={EE5219B38424AB12}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_3fp.et origin=<10927.2,4.45699,8486.37> found=1 point=<10927,8.44852,8486.52> aboveGround=3.9868
|
||||
17:08:44.365 SCRIPT : ERR OBJECT PROBE structure={4DC0293EF161C898}Prefabs/Structures/Industrial/Houses/Workshop_02/Workshop_02.et origin=<10778,13.3976,11811.1> found=1 point=<10774.8,17.6468,11808.2> aboveGround=4.61299
|
||||
17:08:44.366 SCRIPT : ERR OBJECT PROBE structure={389D6DF9941FF22D}Prefabs/Structures/Industrial/Containers/FuelTanks/FuelTank_01/FuelTank_01_grey.et origin=<10660.8,2.34975,11817.9> found=1 point=<10660.7,9.59975,11817.9> aboveGround=7.256
|
||||
17:08:44.366 SCRIPT : ERR OBJECT PROBE structure={389D6DF9941FF22D}Prefabs/Structures/Industrial/Containers/FuelTanks/FuelTank_01/FuelTank_01_grey.et origin=<10666,2.34875,11824> found=1 point=<10666,9.59875,11824> aboveGround=7.255
|
||||
17:08:44.366 SCRIPT : ERR OBJECT PROBE structure={5F00FD9BDAD8C1A5}Prefabs/Structures/Industrial/Houses/Workshop_01/Workshop_01_Garage.et origin=<10677.3,2.55704,11780.1> found=1 point=<10675.4,6.54965,11777.7> aboveGround=4.2059
|
||||
17:08:44.371 SCRIPT : ERR OBJECT PROBE structure={A4D0B331414901A5}Prefabs/Structures/Commercial/FuelStations/FuelStation_E_01/HouseAddons/FuelStation_E_01_tankpistol.et origin=<10646.4,2.38404,11800.4> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.375 SCRIPT : ERR OBJECT PROBE structure= origin=<10645.4,2.38478,11803.3> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.375 SCRIPT : ERR OBJECT PROBE structure={EE5219B38424AB12}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_3fp.et origin=<10304.6,45.4499,497.566> found=1 point=<10304.4,49.4414,495.68> aboveGround=3.92551
|
||||
17:08:44.375 SCRIPT : ERR OBJECT PROBE structure={AAB10C30EE97D12D}Prefabs/Structures/Industrial/Containers/FuelTanks/FuelTank_03/FuelTank_03_grey.et origin=<10168.5,6.0975,1623.74> found=1 point=<10163.1,15.4701,1623.3> aboveGround=9.28255
|
||||
17:08:44.376 SCRIPT : ERR OBJECT PROBE structure={80DF3BD810D032AF}Prefabs/Structures/Industrial/Towers/LightTower_01/LightTower_01.et origin=<10173.1,2.533,1526.76> found=1 point=<10173,17.7178,1526.49> aboveGround=15.1866
|
||||
17:08:44.376 SCRIPT : ERR OBJECT PROBE structure={80DF3BD810D032AF}Prefabs/Structures/Industrial/Towers/LightTower_01/LightTower_01.et origin=<10209.6,2.563,1519.8> found=1 point=<10209.3,17.7478,1519.81> aboveGround=15.1853
|
||||
17:08:44.376 SCRIPT : ERR OBJECT PROBE structure={80DF3BD810D032AF}Prefabs/Structures/Industrial/Towers/LightTower_01/LightTower_01.et origin=<10199.9,2.498,1457.7> found=1 point=<10199.7,17.6828,1457.92> aboveGround=15.1841
|
||||
17:08:44.376 SCRIPT : ERR OBJECT PROBE structure={44B2776836744D69}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_1fp.et origin=<10214.4,16.043,795.79> found=1 point=<10212,20.0345,795.73> aboveGround=3.45723
|
||||
17:08:44.376 SCRIPT : ERR OBJECT PROBE structure={AAB10C30EE97D12D}Prefabs/Structures/Industrial/Containers/FuelTanks/FuelTank_03/FuelTank_03_grey.et origin=<10139.5,6.1065,1631.71> found=1 point=<10133.8,15.4544,1631.25> aboveGround=9.26687
|
||||
17:08:44.377 SCRIPT : ERR OBJECT PROBE structure={80DF3BD810D032AF}Prefabs/Structures/Industrial/Towers/LightTower_01/LightTower_01.et origin=<10108.1,9.877,1647.85> found=1 point=<10108,25.0618,1647.58> aboveGround=15.1868
|
||||
17:08:44.377 SCRIPT : ERR OBJECT PROBE structure={1350F724723AAC87}Prefabs/Structures/Industrial/Houses/Warehouse_01/Warehouse_01_V3.et origin=<10085.6,3.15807,1576.45> found=1 point=<10093,8.97054,1567.21> aboveGround=6.07671
|
||||
17:08:44.377 SCRIPT : ERR OBJECT PROBE structure={80A5B37A1472B084}Prefabs/Structures/Industrial/Garages/Garage_E_02/Garage_E_02.et origin=<10049.6,2.51425,1551.25> found=1 point=<10049.8,8.29026,1543.85> aboveGround=5.75901
|
||||
17:08:44.377 SCRIPT : ERR OBJECT PROBE structure={AAB10C30EE97D12D}Prefabs/Structures/Industrial/Containers/FuelTanks/FuelTank_03/FuelTank_03_grey.et origin=<10133.2,6.1145,1610.38> found=1 point=<10132.8,15.4593,1604.68> aboveGround=9.30562
|
||||
17:08:44.377 SCRIPT : ERR OBJECT PROBE structure={D39297A56E6648F0}Prefabs/Structures/Industrial/Containers/FuelTanks/FuelTank_03/FuelTank_03_green.et origin=<10162.5,6.09759,1602.29> found=1 point=<10162.2,15.4356,1596.53> aboveGround=9.31062
|
||||
17:08:44.377 SCRIPT : ERR OBJECT PROBE structure={4DC0293EF161C898}Prefabs/Structures/Industrial/Houses/Workshop_02/Workshop_02.et origin=<10104.2,9.80398,1610.26> found=1 point=<10102.7,13.8018,1606.85> aboveGround=5.00909
|
||||
17:08:44.377 SCRIPT : ERR OBJECT PROBE structure={74FAABE8512145EF}Prefabs/Structures/Industrial/Repair/RampVehicle_01/RampVehicle_01_metal.et origin=<10086.3,2.53225,1544.35> found=1 point=<10085,3.5325,1544.57> aboveGround=1.00125
|
||||
17:08:44.377 SCRIPT : ERR OBJECT PROBE structure={BE70E3BA6C1911A9}Prefabs/Structures/Industrial/Houses/Warehouse_01/Warehouse_01_Workshop.et origin=<10110.1,2.96628,1570.09> found=1 point=<10110.1,7.31566,1566.47> aboveGround=4.37697
|
||||
17:08:44.378 SCRIPT : ERR OBJECT PROBE structure={BBCEDBF2C4E3E896}Prefabs/Structures/Industrial/Houses/Warehouse_01/Warehouse_01_Office.et origin=<10084.5,2.53525,1529.15> found=1 point=<10093.5,8.30651,1519.52> aboveGround=5.9549
|
||||
17:08:44.378 SCRIPT : ERR OBJECT PROBE structure={80DF3BD810D032AF}Prefabs/Structures/Industrial/Towers/LightTower_01/LightTower_01.et origin=<10129.2,2.532,1535.15> found=1 point=<10129.1,17.7168,1534.88> aboveGround=15.1856
|
||||
17:08:44.378 SCRIPT : ERR OBJECT PROBE structure={80DF3BD810D032AF}Prefabs/Structures/Industrial/Towers/LightTower_01/LightTower_01.et origin=<10157.7,2.501,1408.06> found=1 point=<10157.5,17.6858,1408.27> aboveGround=15.1858
|
||||
17:08:44.378 SCRIPT : ERR OBJECT PROBE structure={80DF3BD810D032AF}Prefabs/Structures/Industrial/Towers/LightTower_01/LightTower_01.et origin=<10104.4,2.501,1344.27> found=1 point=<10104.2,17.6858,1344.48> aboveGround=15.1858
|
||||
17:08:44.379 SCRIPT : ERR OBJECT PROBE structure={7E2380494811A5FB}Prefabs/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_medium.et origin=<9945.22,316.529,2260.76> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.379 SCRIPT : ERR OBJECT PROBE structure={E30E1250FD927736}Prefabs/Structures/Industrial/Houses/PortableCabin_E_01/PortableCabin_E_01_beige.et origin=<9945.9,315.123,2283.39> found=1 point=<9943.93,318.508,2282.23> aboveGround=3.42587
|
||||
17:08:44.379 SCRIPT : ERR OBJECT PROBE structure={BBCEDBF2C4E3E896}Prefabs/Structures/Industrial/Houses/Warehouse_01/Warehouse_01_Office.et origin=<9951.08,4.11791,1633.87> found=1 point=<9941.47,9.86464,1624.88> aboveGround=6.11464
|
||||
17:08:44.379 SCRIPT : ERR OBJECT PROBE structure={BBCEDBF2C4E3E896}Prefabs/Structures/Industrial/Houses/Warehouse_01/Warehouse_01_Office.et origin=<9964.18,2.53125,1568.75> found=1 point=<9973.06,8.39978,1559.08> aboveGround=5.86853
|
||||
17:08:44.380 SCRIPT : ERR OBJECT PROBE structure={A33B68467443EBAF}Prefabs/Structures/Industrial/Houses/Office_E_01/Office_E_01_ENP.et origin=<10004.1,2.53025,1555.73> found=1 point=<10004.1,10.0838,1549.98> aboveGround=7.55252
|
||||
17:08:44.380 SCRIPT : ERR OBJECT PROBE structure={CCE6A451A226AF4E}Prefabs/Structures/Military/Houses/GuardHouse_01/GuardHouse_01_beige.et origin=<10019.5,2.55525,1566.72> found=1 point=<10019.7,6.28016,1564.16> aboveGround=3.74891
|
||||
17:08:44.380 SCRIPT : ERR OBJECT PROBE structure={55CB1994CF02E52E}Prefabs/Structures/Industrial/Sheds/ShedMetal_02/ShedMetal_02_short_walls.et origin=<10029.6,2.6875,1594.32> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.380 SCRIPT : ERR OBJECT PROBE structure={CF7E43120709D9BE}Prefabs/Structures/Industrial/Houses/Workshop_02/Workshop_02_grey.et origin=<9902.8,2.66725,1544.57> found=1 point=<9901.58,7.55695,1545.5> aboveGround=5.0257
|
||||
17:08:44.380 SCRIPT : ERR OBJECT PROBE structure={389D6DF9941FF22D}Prefabs/Structures/Industrial/Containers/FuelTanks/FuelTank_01/FuelTank_01_grey.et origin=<9930.06,2.67175,1552.42> found=1 point=<9930,9.92175,1550.96> aboveGround=7.453
|
||||
17:08:44.380 SCRIPT : ERR OBJECT PROBE structure={389D6DF9941FF22D}Prefabs/Structures/Industrial/Containers/FuelTanks/FuelTank_01/FuelTank_01_grey.et origin=<9928.89,2.67125,1565.35> found=1 point=<9928.82,9.92125,1563.89> aboveGround=7.43033
|
||||
17:08:44.380 SCRIPT : ERR OBJECT PROBE structure={389D6DF9941FF22D}Prefabs/Structures/Industrial/Containers/FuelTanks/FuelTank_01/FuelTank_01_grey.et origin=<9930.65,2.67175,1545.94> found=1 point=<9930.58,9.92175,1544.48> aboveGround=7.453
|
||||
17:08:44.381 SCRIPT : ERR OBJECT PROBE structure={389D6DF9941FF22D}Prefabs/Structures/Industrial/Containers/FuelTanks/FuelTank_01/FuelTank_01_grey.et origin=<9929.48,2.67175,1558.86> found=1 point=<9929.41,9.92175,1557.4> aboveGround=7.453
|
||||
17:08:44.381 SCRIPT : ERR OBJECT PROBE structure={C7A59DCCFF7BF19F}Prefabs/Structures/Industrial/Containers/FuelTanks/FuelTank_02/FuelTank_02_Base.et origin=<9916.22,2.60425,1578.31> found=1 point=<9915.31,5.52264,1577.02> aboveGround=2.99139
|
||||
17:08:44.381 SCRIPT : ERR OBJECT PROBE structure={55CB1994CF02E52E}Prefabs/Structures/Industrial/Sheds/ShedMetal_02/ShedMetal_02_short_walls.et origin=<9907.36,2.42725,1562.36> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.381 SCRIPT : ERR OBJECT PROBE structure={80DF3BD810D032AF}Prefabs/Structures/Industrial/Towers/LightTower_01/LightTower_01.et origin=<9870.73,2.444,1509.09> found=1 point=<9870.95,17.6288,1508.91> aboveGround=15.1919
|
||||
17:08:44.381 SCRIPT : ERR OBJECT PROBE structure={3F91DEEC9C78E473}Prefabs/Structures/Military/Houses/GuardHouse_01/GuardHouse_01.et origin=<9882.12,2.76366,1528.52> found=1 point=<9882.54,6.49311,1525.63> aboveGround=4.04398
|
||||
17:08:44.381 SCRIPT : ERR OBJECT PROBE structure={EE5219B38424AB12}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_3fp.et origin=<10022.4,20.4477,938.725> found=1 point=<10019.8,24.4392,938.657> aboveGround=3.52926
|
||||
17:08:44.382 SCRIPT : ERR OBJECT PROBE structure={EE5219B38424AB12}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_3fp.et origin=<9716.93,8.55212,5436.36> found=1 point=<9716.81,12.5436,5436.21> aboveGround=4.13332
|
||||
17:08:44.382 SCRIPT : ERR OBJECT PROBE structure={EE5219B38424AB12}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_3fp.et origin=<9743.37,15.5312,5264.4> found=1 point=<9743.18,19.5227,5262.56> aboveGround=4.23269
|
||||
17:08:44.382 SCRIPT : ERR OBJECT PROBE structure={44B2776836744D69}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_1fp.et origin=<9736.48,7.25867,5159.78> found=1 point=<9734.28,11.4504,5159.67> aboveGround=4.06663
|
||||
17:08:44.382 SCRIPT : ERR OBJECT PROBE structure={EE5219B38424AB12}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_3fp.et origin=<9766.16,13.4014,4878.55> found=1 point=<9766.06,17.3929,4878.39> aboveGround=3.9807
|
||||
17:08:44.382 SCRIPT : ERR OBJECT PROBE structure={EE5219B38424AB12}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_3fp.et origin=<9794.58,10.9013,4695.81> found=1 point=<9794.39,14.8928,4693.8> aboveGround=3.95826
|
||||
17:08:44.382 SCRIPT : ERR OBJECT PROBE structure={C7A59DCCFF7BF19F}Prefabs/Structures/Industrial/Containers/FuelTanks/FuelTank_02/FuelTank_02_Base.et origin=<9727.4,22.5475,1728.38> found=1 point=<9728.82,25.4659,1726.98> aboveGround=2.90339
|
||||
17:08:44.382 SCRIPT : ERR OBJECT PROBE structure= origin=<9714.16,22.524,1713.57> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.383 SCRIPT : ERR OBJECT PROBE structure={A4D0B331414901A5}Prefabs/Structures/Commercial/FuelStations/FuelStation_E_01/HouseAddons/FuelStation_E_01_tankpistol.et origin=<9720.21,22.5222,1720.34> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.383 SCRIPT : ERR OBJECT PROBE structure={A4D0B331414901A5}Prefabs/Structures/Commercial/FuelStations/FuelStation_E_01/HouseAddons/FuelStation_E_01_tankpistol.et origin=<9718.39,22.5483,1721.98> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.383 SCRIPT : ERR OBJECT PROBE structure={A4D0B331414901A5}Prefabs/Structures/Commercial/FuelStations/FuelStation_E_01/HouseAddons/FuelStation_E_01_tankpistol.et origin=<9712.33,22.5497,1715.21> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.383 SCRIPT : ERR OBJECT PROBE structure={80DF3BD810D032AF}Prefabs/Structures/Industrial/Towers/LightTower_01/LightTower_01.et origin=<9814.3,1.986,1542.44> found=1 point=<9814.26,17.1708,1542.15> aboveGround=15.4232
|
||||
17:08:44.383 SCRIPT : ERR OBJECT PROBE structure={4DC0293EF161C898}Prefabs/Structures/Industrial/Houses/Workshop_02/Workshop_02.et origin=<9783.84,0.994319,1525.29> found=1 point=<9781.18,5.2408,1522.18> aboveGround=4.9308
|
||||
17:08:44.384 SCRIPT : ERR OBJECT PROBE structure={5F00FD9BDAD8C1A5}Prefabs/Structures/Industrial/Houses/Workshop_01/Workshop_01_Garage.et origin=<9811.1,1.55053,1527.21> found=1 point=<9809.26,5.56483,1524.84> aboveGround=4.44679
|
||||
17:08:44.384 SCRIPT : ERR OBJECT PROBE structure={E30E1250FD927736}Prefabs/Structures/Industrial/Houses/PortableCabin_E_01/PortableCabin_E_01_beige.et origin=<9775.65,1.457,1541.12> found=1 point=<9773.65,4.84045,1539.92> aboveGround=3.51913
|
||||
17:08:44.384 SCRIPT : ERR OBJECT PROBE structure={5F00FD9BDAD8C1A5}Prefabs/Structures/Industrial/Houses/Workshop_01/Workshop_01_Garage.et origin=<9801.68,5.21975,1411.35> found=1 point=<9801.75,8.77503,1408.19> aboveGround=3.52503
|
||||
17:08:44.384 SCRIPT : ERR OBJECT PROBE structure={F9F2F6D2BD65B719}Prefabs/Structures/Industrial/Houses/Workshop_01/Workshop_01_Side.et origin=<9799.3,5.21975,1417.42> found=1 point=<9799.3,8.82455,1415.24> aboveGround=3.6058
|
||||
17:08:44.384 SCRIPT : ERR OBJECT PROBE structure={F9F2F6D2BD65B719}Prefabs/Structures/Industrial/Houses/Workshop_01/Workshop_01_Side.et origin=<9841.11,4.98288,1335.48> found=1 point=<9838.82,8.56318,1333.14> aboveGround=3.62568
|
||||
17:08:44.384 SCRIPT : ERR OBJECT PROBE structure={F9F2F6D2BD65B719}Prefabs/Structures/Industrial/Houses/Workshop_01/Workshop_01_Side.et origin=<9836.5,4.9575,1332.72> found=1 point=<9836.5,8.36642,1330.39> aboveGround=3.42892
|
||||
17:08:44.385 SCRIPT : ERR OBJECT PROBE structure={EE5219B38424AB12}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_3fp.et origin=<9544.64,10.2429,5390.8> found=1 point=<9542.58,14.2345,5390.75> aboveGround=8.14857
|
||||
17:08:44.386 SCRIPT : ERR OBJECT PROBE structure={EE5219B38424AB12}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_3fp.et origin=<9680.18,13.1501,5180.37> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.386 SCRIPT : ERR OBJECT PROBE structure={5608B9078BF2AC5A}Prefabs/Structures/Military/Fortifications/Dragontooth_01/Dragonsteeth_01_old_V1.et origin=<9548.54,11.0272,5209.89> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.386 SCRIPT : ERR OBJECT PROBE structure={5608B9078BF2AC5A}Prefabs/Structures/Military/Fortifications/Dragontooth_01/Dragonsteeth_01_old_V1.et origin=<9554.29,10.9248,5223.12> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.386 SCRIPT : ERR OBJECT PROBE structure={5608B9078BF2AC5A}Prefabs/Structures/Military/Fortifications/Dragontooth_01/Dragonsteeth_01_old_V1.et origin=<9543.21,11.1109,5204.43> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.386 SCRIPT : ERR OBJECT PROBE structure={5608B9078BF2AC5A}Prefabs/Structures/Military/Fortifications/Dragontooth_01/Dragonsteeth_01_old_V1.et origin=<9552.17,10.8919,5213.92> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.386 SCRIPT : ERR OBJECT PROBE structure={EE5219B38424AB12}Prefabs/Structures/Military/Bunkers/Bunker_01/Bunker_01_3fp.et origin=<9658.25,8.47875,4924.61> found=1 point=<9658.12,12.4703,4924.47> aboveGround=3.96317
|
||||
17:08:44.386 SCRIPT : ERR OBJECT PROBE structure={5608B9078BF2AC5A}Prefabs/Structures/Military/Fortifications/Dragontooth_01/Dragonsteeth_01_old_V1.et origin=<9413.19,23.7119,5046.04> found=0 point=<0,0,0> aboveGround=0
|
||||
17:08:44.386 SCRIPT : ERR OBJECT GEOMETRY COMPLETE: tested=80 elevated=62
|
||||
17:08:44.386 SCRIPT : ERR OBJECT SETUP sites=1 groups=5 structures=14
|
||||
17:08:44.399 SCRIPT : Reintroduced [SPAWN GROUP]: source=object-0-post-0 faction=USSR group=<0x000000006966DDA0> SCR_AIGroup position=<10173,17.7178,1526.49> living=1
|
||||
17:08:44.407 SCRIPT : Reintroduced [SPAWN GROUP]: source=object-0-post-1 faction=USSR group=<0x00000000696F6A00> SCR_AIGroup position=<10209.3,17.7478,1519.81> living=1
|
||||
17:08:44.418 SCRIPT : Reintroduced [SPAWN GROUP]: source=object-0-post-2 faction=USSR group=<0x0000000069765630> SCR_AIGroup position=<10199.7,17.6828,1457.92> living=1
|
||||
17:08:44.429 SCRIPT : Reintroduced [SPAWN GROUP]: source=object-0-post-3 faction=USSR group=<0x00000000698E5A20> SCR_AIGroup position=<10129.1,17.7168,1534.88> living=1
|
||||
17:08:44.545 SCRIPT : Reintroduced [SPAWN GROUP]: source=object-0-post-4 faction=USSR group=<0x0000000069955BA0> SCR_AIGroup position=<10168.6,2.63125,1523.76> living=4
|
||||
17:08:46.251 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-prison-1 faction=USSR group=<0x000000004CFCE890> SCR_AIGroup position=<4816.32,51.9201,5307.32> living=5
|
||||
17:08:46.251 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-supply-1 faction=FIA group=<0x000000004D0A00F0> SCR_AIGroup position=<6168,202.217,7050> living=5
|
||||
17:08:46.251 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-radio-1 faction=USSR group=<0x000000004D1B82C0> SCR_AIGroup position=<3253.96,114.951,5194.92> living=6
|
||||
17:08:46.252 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-extraction-1 faction=USSR group=<0x000000006264CAB0> SCR_AIGroup position=<4830.95,28.2904,11487.4> living=6
|
||||
17:08:46.252 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-medical-1 faction=USSR group=<0x00000000641FD310> SCR_AIGroup position=<5107.99,28.3805,9886.99> living=4
|
||||
17:08:46.252 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-medical-1-responders faction=USSR group=<0x0000000064215520> SCR_AIGroup position=<5085.06,28.6354,9894.08> living=2
|
||||
17:08:46.253 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-outpost-1 faction=USSR group=<0x000000006423F4E0> SCR_AIGroup position=<11090.8,21.228,11923.7> living=4
|
||||
17:08:46.253 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-outpost-1-responders faction=USSR group=<0x0000000064252850> SCR_AIGroup position=<11076.7,21.2665,11904.3> living=2
|
||||
17:08:46.253 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-medical-2 faction=USSR group=<0x000000006427CB00> SCR_AIGroup position=<4961.64,2.1875,3865.96> living=4
|
||||
17:08:46.254 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-medical-2-responders faction=USSR group=<0x0000000064293580> SCR_AIGroup position=<4943.74,2.1875,3881.94> living=2
|
||||
17:08:46.254 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-medical-3 faction=USSR group=<0x00000000642B53E0> SCR_AIGroup position=<3331.99,161.929,5898> living=4
|
||||
17:08:46.254 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-medical-3-responders faction=USSR group=<0x00000000642CC510> SCR_AIGroup position=<3321.42,161.623,5919.55> living=2
|
||||
17:08:46.255 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-camp-2 faction=USSR group=<0x00000000642F0330> SCR_AIGroup position=<4862.17,165.239,7214.69> living=4
|
||||
17:08:46.255 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-camp-2-responders faction=USSR group=<0x0000000064307DC0> SCR_AIGroup position=<4849.35,164.91,7234.98> living=2
|
||||
17:08:46.255 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-camp-3 faction=USSR group=<0x000000006432C5E0> SCR_AIGroup position=<7274.26,124.17,5301.61> living=4
|
||||
17:08:46.255 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-camp-3-responders faction=USSR group=<0x0000000064454040> SCR_AIGroup position=<7250.33,124.493,5303.41> living=2
|
||||
17:08:46.256 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-camp-4 faction=USSR group=<0x00000000644792E0> SCR_AIGroup position=<6261.57,87.1025,5677.86> living=4
|
||||
17:08:46.256 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-camp-4-responders faction=USSR group=<0x0000000064490D70> SCR_AIGroup position=<6276.66,87.4603,5659.2> living=2
|
||||
17:08:46.256 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-camp-5 faction=USSR group=<0x00000000644B6A00> SCR_AIGroup position=<2632.85,86.7678,6023.88> living=4
|
||||
17:08:46.257 SCRIPT : Reintroduced [SPAWN GROUP]: source=everon-camp-5-responders faction=USSR group=<0x00000000644CE5D0> SCR_AIGroup position=<2629.09,86.6021,6047.58> living=2
|
||||
17:08:56.441 SCRIPT : ERR OBJECT ACTOR id=object-0-post-0 fixed=1 alive=1 radio=2 height=15.1116 point=<10173,17.6428,1526.49>
|
||||
17:08:56.441 SCRIPT : ERR OBJECT ACTOR id=object-0-post-1 fixed=1 alive=1 radio=2 height=15.1103 point=<10209.3,17.6728,1519.81>
|
||||
17:08:56.441 SCRIPT : ERR OBJECT ACTOR id=object-0-post-2 fixed=1 alive=1 radio=2 height=15.1091 point=<10199.7,17.6078,1457.92>
|
||||
17:08:56.441 SCRIPT : ERR OBJECT ACTOR id=object-0-post-3 fixed=1 alive=1 radio=2 height=15.1106 point=<10129.1,17.6418,1534.88>
|
||||
17:08:56.441 SCRIPT : ERR OBJECT ACTOR id=object-0-post-4 fixed=0 alive=1 radio=1 height=0 point=<10168.6,2.53125,1523.76>
|
||||
17:08:56.441 SCRIPT : ERR OBJECT ACTOR id=object-0-post-4 fixed=0 alive=1 radio=2 height=0 point=<10171.6,2.53125,1523.76>
|
||||
17:08:56.441 SCRIPT : ERR OBJECT ACTOR id=object-0-post-4 fixed=0 alive=1 radio=1 height=0 point=<10174.6,2.53125,1523.76>
|
||||
17:08:56.441 SCRIPT : ERR OBJECT ACTOR id=object-0-post-4 fixed=0 alive=1 radio=1 height=-1.19209e-06 point=<10176,2.53125,1523.76>
|
||||
17:08:56.441 SCRIPT : ERR OBJECT COUNTS total=8 fixed=4 radios=8 elevated=4 release=1
|
||||
17:08:56.441 SCRIPT : ERR OBJECT HQ id=object-0-post-0 fixed=1 reserved=1 eligible=0
|
||||
17:08:56.441 SCRIPT : ERR OBJECT HQ id=object-0-post-1 fixed=1 reserved=1 eligible=0
|
||||
17:08:56.441 SCRIPT : ERR OBJECT HQ id=object-0-post-2 fixed=1 reserved=1 eligible=0
|
||||
17:08:56.441 SCRIPT : ERR OBJECT HQ id=object-0-post-3 fixed=1 reserved=1 eligible=0
|
||||
17:08:56.441 SCRIPT : ERR OBJECT HQ id=object-0-post-4 fixed=0 reserved=0 eligible=1
|
||||
17:09:22.650 SCRIPT : Co10 Escape Reintroduced [AI / air recon]: airport structure={8746DE528BA26F02}Prefabs/Structures/Airport/LightRunway_01/LightRunway_01_white.et position=<4791.88,26.461,11880.5>
|
||||
17:09:29.549 SCRIPT : ERR OBJECT ACTOR id=object-0-post-0 fixed=1 alive=1 radio=2 height=15.1116 point=<10173,17.6428,1526.49>
|
||||
17:09:29.550 SCRIPT : ERR OBJECT ACTOR id=object-0-post-1 fixed=1 alive=1 radio=2 height=15.1103 point=<10209.2,17.6728,1519.85>
|
||||
17:09:29.550 SCRIPT : ERR OBJECT ACTOR id=object-0-post-2 fixed=1 alive=1 radio=2 height=15.1091 point=<10199.7,17.6078,1457.92>
|
||||
17:09:29.550 SCRIPT : ERR OBJECT ACTOR id=object-0-post-3 fixed=1 alive=1 radio=2 height=15.1106 point=<10129.1,17.6418,1534.93>
|
||||
17:09:29.550 SCRIPT : ERR OBJECT ACTOR id=object-0-post-4 fixed=0 alive=1 radio=1 height=0 point=<10187.5,2.53125,1486.51>
|
||||
17:09:29.550 SCRIPT : ERR OBJECT ACTOR id=object-0-post-4 fixed=0 alive=1 radio=2 height=-0.000470161 point=<10206.5,2.69892,1534.26>
|
||||
17:09:29.550 SCRIPT : ERR OBJECT ACTOR id=object-0-post-4 fixed=0 alive=1 radio=1 height=0 point=<10200.7,2.53125,1495.17>
|
||||
17:09:29.550 SCRIPT : ERR OBJECT ACTOR id=object-0-post-4 fixed=0 alive=1 radio=1 height=-2.6226e-06 point=<10140.3,2.53125,1524.93>
|
||||
17:09:29.550 SCRIPT : ERR OBJECT COUNTS total=8 fixed=4 radios=8 elevated=4 release=0
|
||||
17:09:29.550 SCRIPT : ERR OBJECT HQ id=object-0-post-0 fixed=1 reserved=1 eligible=0
|
||||
17:09:29.550 SCRIPT : ERR OBJECT HQ id=object-0-post-1 fixed=1 reserved=1 eligible=0
|
||||
17:09:29.550 SCRIPT : ERR OBJECT HQ id=object-0-post-2 fixed=1 reserved=1 eligible=0
|
||||
17:09:29.550 SCRIPT : ERR OBJECT HQ id=object-0-post-3 fixed=1 reserved=1 eligible=0
|
||||
17:09:29.550 SCRIPT : ERR OBJECT HQ id=object-0-post-4 fixed=0 reserved=0 eligible=1
|
||||
17:09:29.550 SCRIPT : ERR OBJECT PROBE COMPLETE: native spawn / HQ role / 30-second post observation
|
||||
@@ -0,0 +1,142 @@
|
||||
class ERR_ObjectProbeScanner
|
||||
{
|
||||
protected int m_ObjectProbeCount;
|
||||
protected int m_ObjectProbeElevated;
|
||||
ref array<IEntity> m_ObjectProbeCandidates = {};
|
||||
protected bool ObjectProbeFilter(IEntity entity)
|
||||
{
|
||||
if (!entity || Vehicle.Cast(entity) || ChimeraCharacter.Cast(entity)) return false;
|
||||
string prefab;
|
||||
if (entity.GetPrefabData()) prefab = entity.GetPrefabData().GetPrefabName();
|
||||
MapDescriptorComponent descriptor = MapDescriptorComponent.Cast(entity.FindComponent(MapDescriptorComponent));
|
||||
int type = -1; if (descriptor) type = descriptor.GetBaseType();
|
||||
return ERR_ObjectGuardRules.Structure(prefab, type);
|
||||
}
|
||||
protected bool ObjectProbeRemember(IEntity entity)
|
||||
{
|
||||
m_ObjectProbeCandidates.Insert(entity);
|
||||
return m_ObjectProbeCandidates.Count() < 80;
|
||||
}
|
||||
void Run(BaseWorld world)
|
||||
{
|
||||
world.QueryEntitiesByAABB("0 -1000 0", "14000 1000 14000", ObjectProbeRemember, ObjectProbeFilter, EQueryEntitiesFlags.ALL);
|
||||
PrintFormat("ERR OBJECT PROBE candidates=%1", m_ObjectProbeCandidates.Count());
|
||||
foreach (IEntity entity : m_ObjectProbeCandidates)
|
||||
{
|
||||
ERR_ObjectGuardPlacement posts = new ERR_ObjectGuardPlacement(); posts.Reset();
|
||||
array<vector> players = {entity.GetOrigin() + "1200 0 0"};
|
||||
vector point; bool found = posts.Find(entity, players, 0, point);
|
||||
float height; if (found) height = point[1] - world.GetSurfaceY(point[0], point[2]);
|
||||
string prefab; if (entity.GetPrefabData()) prefab = entity.GetPrefabData().GetPrefabName();
|
||||
PrintFormat("ERR OBJECT PROBE structure=%1 origin=%2 found=%3 point=%4 aboveGround=%5", prefab, entity.GetOrigin(), found, point, height);
|
||||
if (found && height > 2) m_ObjectProbeElevated++;
|
||||
m_ObjectProbeCount++;
|
||||
}
|
||||
PrintFormat("ERR OBJECT GEOMETRY COMPLETE: tested=%1 elevated=%2", m_ObjectProbeCount, m_ObjectProbeElevated);
|
||||
ERR_HQ hq = ERR_HQ.Cast(ERR_GameMode.Get().Command());
|
||||
foreach (IEntity candidate : m_ObjectProbeCandidates)
|
||||
{
|
||||
string name; if (candidate.GetPrefabData()) name = candidate.GetPrefabData().GetPrefabName();
|
||||
if (!name.Contains("LightTower_01")) continue;
|
||||
hq.ObjectProbeStart(candidate, m_ObjectProbeCandidates); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
modded class SCR_ChimeraAIAgent
|
||||
{
|
||||
void ObjectProbeRelease() { ERR_PrisonPhaseChanged(ERR_Phase.PRISON, ERR_Phase.RADIO_SEARCH); SetPermanentLOD(0); ActivateAI(); }
|
||||
}
|
||||
modded class ERR_ObjectGarrisons
|
||||
{
|
||||
protected ref array<vector> m_ProbeObservers = {};
|
||||
protected ref array<vector> m_ProbeStarts = {};
|
||||
override protected void Players(out array<vector> positions)
|
||||
{
|
||||
if (m_ProbeObservers.IsEmpty()) { super.Players(positions); return; }
|
||||
positions.Copy(m_ProbeObservers);
|
||||
}
|
||||
void ObjectProbeSetup(IEntity first, array<IEntity> nearby)
|
||||
{
|
||||
ConfigureCount(8); Remember(first);
|
||||
foreach (IEntity other : nearby) if (vector.DistanceXZ(first.GetOrigin(), other.GetOrigin()) < 120) Remember(other);
|
||||
m_ProbeObservers.Insert(first.GetOrigin() + "1200 0 0");
|
||||
PrintFormat("ERR OBJECT SETUP sites=%1 groups=%2 structures=%3", m_Sites.Count(), m_Towns.Count(), m_Sites[0].Structures.Count());
|
||||
}
|
||||
override void ObjectProbeSpawn(float now)
|
||||
{
|
||||
foreach (ERR_TownGarrison entry : m_Towns) Attempt(entry, m_ProbeObservers, now);
|
||||
}
|
||||
override void ObjectProbeInspect(bool release)
|
||||
{
|
||||
int total, fixed, radios, elevated;
|
||||
foreach (ERR_TownGarrison entry : m_Towns)
|
||||
{
|
||||
if (!entry.Admitted) { PrintFormat("ERR OBJECT WAIT id=%1", entry.Id); continue; }
|
||||
array<AIAgent> agents = {}; entry.Group.GetAgents(agents);
|
||||
foreach (AIAgent agent : agents)
|
||||
{
|
||||
IEntity actor = agent.GetControlledEntity(); if (!actor) continue;
|
||||
vector point = actor.GetOrigin();
|
||||
float height = point[1] - GetGame().GetWorld().GetSurfaceY(point[0], point[2]);
|
||||
int radio = ERR_HQRadio.Capability(actor);
|
||||
bool alive = ERR_Actors.Alive(actor);
|
||||
PrintFormat("ERR OBJECT ACTOR id=%1 fixed=%2 alive=%3 radio=%4 height=%5 point=%6", entry.Id, entry.FixedGuard, alive, radio, height, point);
|
||||
total++; if (entry.FixedGuard) fixed++; if (radio > 0) radios++; if (height > 2) elevated++;
|
||||
SCR_ChimeraAIAgent soldier = SCR_ChimeraAIAgent.Cast(agent);
|
||||
if (release && soldier) soldier.ObjectProbeRelease();
|
||||
}
|
||||
}
|
||||
PrintFormat("ERR OBJECT COUNTS total=%1 fixed=%2 radios=%3 elevated=%4 release=%5", total, fixed, radios, elevated, release);
|
||||
}
|
||||
}
|
||||
modded class ERR_TownGarrisons
|
||||
{
|
||||
void ObjectProbeStart(IEntity first, array<IEntity> nearby)
|
||||
{
|
||||
m_Objects = new ERR_ObjectGarrisons(m_Mode); m_Objects.ObjectProbeSetup(first, nearby);
|
||||
}
|
||||
void ObjectProbeSpawn(float now) { if (m_Objects) m_Objects.ObjectProbeSpawn(now); }
|
||||
void ObjectProbeInspect(bool release) { if (m_Objects) m_Objects.ObjectProbeInspect(release); }
|
||||
}
|
||||
modded class ERR_HQ
|
||||
{
|
||||
void ObjectProbeStart(IEntity first, array<IEntity> nearby) { m_Towns.ObjectProbeStart(first, nearby); }
|
||||
void ObjectProbeSpawn(float now) { m_Towns.ObjectProbeSpawn(now); m_Equipment.Tick(now); }
|
||||
void ObjectProbeInspect(bool release)
|
||||
{
|
||||
m_Towns.ObjectProbeInspect(release);
|
||||
foreach (ERR_HQUnit unit : m_Units)
|
||||
if (unit.ForceSourceId.StartsWith("object-")) PrintFormat("ERR OBJECT HQ id=%1 fixed=%2 reserved=%3 eligible=%4", unit.ForceSourceId, unit.HomeGuard, unit.ReservedForSupport, unit.Eligible(m_Mode));
|
||||
}
|
||||
}
|
||||
modded class ArmaReforgerScripted
|
||||
{
|
||||
protected int m_ObjectProbePhase;
|
||||
protected float m_ObjectProbeStarted;
|
||||
protected float m_ObjectProbeNext;
|
||||
override void OnUpdate(BaseWorld world, float timeslice)
|
||||
{
|
||||
super.OnUpdate(world, timeslice);
|
||||
ERR_GameMode mode = ERR_GameMode.Get();
|
||||
if (!mode || mode.Phase() < ERR_Phase.PRISON || m_ObjectProbePhase == 3) return;
|
||||
float now = world.GetWorldTime(); if (now < m_ObjectProbeNext) return; m_ObjectProbeNext = now + 1000;
|
||||
ERR_HQ hq = ERR_HQ.Cast(mode.Command());
|
||||
if (m_ObjectProbePhase == 0)
|
||||
{
|
||||
ERR_ObjectProbeScanner scanner = new ERR_ObjectProbeScanner(); scanner.Run(world);
|
||||
m_ObjectProbePhase = 1; m_ObjectProbeStarted = now; return;
|
||||
}
|
||||
if (m_ObjectProbePhase == 1)
|
||||
{
|
||||
hq.ObjectProbeSpawn(now);
|
||||
if (now - m_ObjectProbeStarted < 12000) return;
|
||||
hq.ObjectProbeInspect(true); m_ObjectProbePhase = 2; return;
|
||||
}
|
||||
hq.ObjectProbeSpawn(now);
|
||||
if (now - m_ObjectProbeStarted < 45000) return;
|
||||
hq.ObjectProbeInspect(false); m_ObjectProbePhase = 3;
|
||||
Print("ERR OBJECT PROBE COMPLETE: native spawn / HQ role / 30-second post observation");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
from pathlib import Path
|
||||
import os,sys,json,shutil,subprocess,time,signal
|
||||
ROOT=Path('/home/jakub/devel/escapistsrereintroduced');sys.path.insert(0,str(ROOT/'tools'))
|
||||
from external_addons import policy,prepare_profile
|
||||
from source_manifest import addon_manifest
|
||||
from dedicated_native import PROBE
|
||||
base=ROOT/'.local/uaz-test-tmp/native';base.mkdir(exist_ok=True)
|
||||
run=base/sys.argv[1];run.mkdir();source=run/'source';source.mkdir()
|
||||
for rel in addon_manifest(ROOT):
|
||||
dest=source/Path(rel).relative_to('addons/core');dest.parent.mkdir(parents=True,exist_ok=True);dest.symlink_to(ROOT/rel)
|
||||
if sys.argv[1]=='baseline': shutil.copy2('/tmp/erri-automatic-launcher-native/selected/source/Scripts/Game/ERR/00_Core/ERR_TerrainTakeoverPresentation.c',source/'Scripts/Game/ERR/00_Core/ERR_TerrainTakeoverPresentation.c')
|
||||
shutil.copy2('/tmp/erri-takeover-pair-source32/resourceDatabase.rdb',source/'resourceDatabase.rdb')
|
||||
shutil.copy2(ROOT/'.local/object-guards-20261006/probe.c',source/'Scripts/Game/ERR/00_Core/ERR_ZProfileProbe.c')
|
||||
|
||||
if 'before' in sys.argv[1]:
|
||||
dest=source/'Scripts/Game/ERR/10_AI/ERR_CivilianTraffic.c';dest.unlink();shutil.copy2(ROOT/'.local/mission-review-20261005/before/ERR_CivilianTraffic.c',dest)
|
||||
addons=run/'addons';addons.mkdir();steam=Path.home()/'.local/share/Steam'
|
||||
prepare_profile(addons,steam/'steamapps/compatdata/1874880/pfx/drive_c/users/steamuser/Documents/My Games/ArmaReforger/addons',policy(ROOT),run/'external-cache.json');(addons/'ERR_Core').symlink_to(source,target_is_directory=True)
|
||||
(addons/'Nogova').symlink_to('/home/jakub/devel/gabreta/addons/NogovaReforger',target_is_directory=True)
|
||||
profile=run/'profile/profile';profile.mkdir(parents=True)
|
||||
(run/'network.py').write_text(PROBE)
|
||||
runtime=Path('/tmp/erri-takeover-dedicated-runtime')
|
||||
engine=['/tmp/runtime/ArmaReforgerServer','-server','{C1E20667DCE324ED}Missions/ERR_Everon.conf','-addonsDir',str(addons),'-addons','2528466DE220D91C,70C981A53E02B64F','-profile',str(run/'profile'),'-noBackend','-noSound','-bindIP','127.0.0.1','-bindPort','2001','-maxFPS','30','-logconsole','-noSplash','-noThrow','-disableCrashReporter']
|
||||
cmd=['bwrap','--unshare-net','--unshare-pid','--unshare-ipc','--unshare-uts','--die-with-parent','--cap-drop','ALL','--ro-bind','/','/','--tmpfs','/tmp','--ro-bind',str(runtime),'/tmp/runtime','--bind',str(run),str(run),'--ro-bind',str(source),str(source),'--proc','/proc','--dev','/dev','--chdir','/tmp/runtime','python',str(run/'network.py'),os.readlink('/proc/self/ns/net')]+engine
|
||||
with (run/'stdout.log').open('w') as log:
|
||||
p=subprocess.Popen(cmd,stdout=log,stderr=subprocess.STDOUT,start_new_session=True)
|
||||
reason='timeout';start=time.monotonic()
|
||||
try:
|
||||
while time.monotonic()-start<260:
|
||||
files=sorted((run/'profile/logs').glob('logs_*/console.log'));text=files[-1].read_text(errors='replace') if files else ''
|
||||
if 'ERR OBJECT PROBE COMPLETE' in text:reason='completed';break
|
||||
if "Can't compile" in text:reason='compile-failed';break
|
||||
if p.poll() is not None:reason='exit';break
|
||||
time.sleep(.3)
|
||||
finally:
|
||||
if p.poll() is None:
|
||||
os.killpg(p.pid,signal.SIGTERM)
|
||||
try:p.wait(timeout=8)
|
||||
except subprocess.TimeoutExpired:os.killpg(p.pid,signal.SIGKILL);p.wait()
|
||||
(run/'result.json').write_text(json.dumps({'reason':reason,'exit':p.returncode}));print(reason)
|
||||
print('\n'.join(line for line in text.splitlines() if 'ERR TERRAIN LOOKUP' in line or 'SCRIPT (E)' in line or 'ERR OBJECT PROBE' in line))
|
||||
@@ -0,0 +1,791 @@
|
||||
PASS: traffic distance/grace, all-observer veto, player claims, foreign custody, bounded spawn cadence, failure/stall retention and shutdown preserve nearby/claimed entities
|
||||
PASS: actual observer collection includes spectator targets and controlled bodies; missing views/controllers and open editor cameras veto spawn/cleanup
|
||||
PASS: civilian traffic defaults to three; menu command resolves to persisted 0..6 setting with zero disabling new cars
|
||||
PASS: bounded exit-road selection can turn along a coastline when the opposite road is unavailable; no-route case is withheld
|
||||
PASS: managed traffic pins both native garbage entries; release/retirement removes only those pins, including partial creation
|
||||
PASS: exhausted/blocked terrain opening falls back to checked objective roads; bounds, player clearance, separation, force cap and retry delay retained
|
||||
PASS: separated rear vehicle approaches, opposite infantry sectors, radio-gated ownership, failed-order preservation, visual cover or bounded supported reconnaissance, bounded dismount/search/regroup and loss cleanup
|
||||
PASS: production dismount/boarding allocation, all crew allowances, waypoint ownership, one-time vehicle detach/restore and capture/teardown guards
|
||||
PASS: covering support requires the original conscious turret gunner, valid mounted driver, live crew and delivered assignment
|
||||
PASS: only original fit loaded healthy uncaptured gunners stay mounted; driver can leave; infantry readiness excludes the retained gunner but regroup requires all survivors
|
||||
PASS: actual HQ allocator selects reachable reports, distinct cover/flanks, simultaneous fronts, bounded reservations and failed-radio/placement rollback
|
||||
PASS: shared own-force attack spacing, own-group refresh, exact release, expiry/deletion, finite capacity and fresh confirmed sighting-only flank permission
|
||||
PASS: actual convoy foot transport detachment is idempotent; regroup restores only its live friendly uncaptured original truck
|
||||
PASS: opposing native flank orders are transactional; arrived teams sweep twice, travelling/boarding teams retain orders, failed redirects retry and replayed contacts are ignored
|
||||
PASS: expired-report approach, arrival-only search, completion, newer/older/replayed reports, visual priority, interrupted search and bounded travel
|
||||
PASS: nearest reported idle team, blocked teams, guards, active/pending orders, combat, radio routes, stale status and distance limit
|
||||
PASS: six editor listeners transferred idempotently, unrelated handlers retained, authority guard and lifecycle ordering
|
||||
PASS: takeover reconnect creates only missing managers, restores native roles, never grants non-admin access, skips stale/disconnected/client states
|
||||
PASS: Game Master button becomes enabled on native permission arrival and disabled on revocation; no permission bypass
|
||||
PASS: shared config transaction rejects client writes, preserves first-save/prior/fallback state across open, write, backup, partial-copy, readback and mismatch failures
|
||||
PASS: actual Save/Commit preserves semantically valid backup across unrelated menu edits and repairs; unknown fields/default sections retained; actual terrain parser; other parsers, catalog and disk doubled
|
||||
.....TTS request rejected: authentication failed (403)
|
||||
TTS request completed (200)
|
||||
...TTS request completed (200)
|
||||
TTS request completed (200)
|
||||
..
|
||||
----------------------------------------------------------------------
|
||||
Ran 10 tests in 0.512s
|
||||
|
||||
OK
|
||||
PASS: actual welcome tick waits for URL/readiness/server permit, preserves local once-only state across worlds and refuses stopped callbacks
|
||||
PASS: account greeting survives client/controller/round changes; owner validation, delayed readiness, idempotent retry, stale replies and bounded ledger
|
||||
PASS: original body/equipment retained past old timeout; expiry, death, canonical account/body, occupied controller, failed handoff and no replacement life
|
||||
PASS: actual view buffer validates samples, follows position/roll/FOV, rejects stale/foreign/reordered data, interpolates without drift and expires gaps
|
||||
PASS: actual relay rejects noncanonical sources, live/foreign/stale viewers, invalid/replayed/fast packets; bounds leases and owner-only target delivery
|
||||
PASS: native head/helmet fade is local, target-scoped, restored on exit/switch and does not overwrite a later camera owner
|
||||
PASS: production TTS settings/test/enable/failure/disable/timeout flows preserve fallback, secrets, authorization, saved state and late-callback cancellation
|
||||
PASS: TTS admin authorization, limits, case preservation and menu control contract
|
||||
PASS: actual objective overlay lifecycle preserves separate ownership, late readiness/reopen, data refresh, pan/zoom/culling, supported sibling/shared-frame parents, coordinate offsets, native task-clear isolation and terminal cleanup; native rendering remains unverified
|
||||
PASS: actual map element initializes each widget, retries missing widgets, updates position and changes only stale text/icon data; no native image-load claim
|
||||
PASS: actual native fixture root/config ownership and idempotent cleanup preserve foreign map, selector excludes ordinary route, fixed budgets/screenshots/UGC boundaries retained; native operations not executed
|
||||
PASS: actual full Inspect rejects canvas parenting, wrong active container/canvas, omitted origin offset, wrong rendered box and stale coordinates; differing origins and DPI accepted
|
||||
PASS: actual long-warning phases retain visible label through1500ms checkpoint then restore radio before close; synthetic marker separated from unmoved player
|
||||
PASS: actual Center places marker100screenpx left of pan center at both fixture zooms without altering disclosed coordinates
|
||||
PASS: missing, child-only, malformed, zero and duplicate prefab root IDs rejected
|
||||
PASS: delayed scene/inventory arrival, deferred preload, identity checks, stale replies, timeout and observer cleanup
|
||||
PASS: actual inventory manifest, delayed/missing/wrong-owner item links, finite cap, consumed-stock refresh and preload ordering
|
||||
PASS: spawn scene remains held through final acknowledgement and nearby use; leaving, reassignment, disconnect and teardown release it
|
||||
PASS: production prison AI hold/release, repeat activation, authority/faction/player exclusion, dead actor and stop cleanup
|
||||
PASS: actual protected/capped damage plus exact-actor terminal fixture bypass through delayed native damage, fail-closed ownership and untouched ordinary actor; no native claim
|
||||
PASS: actual full planner selection/commit body, 360 equivalence scenarios, orders/reservations/cooldowns identical; one128-unit scan vs >10000 repeated unit visits; no FPS claim
|
||||
PASS: actual observer monitor/recovery/cleanup rejects retained old controller, preserves new camera/editor/hints/timer, restarts once and retains normal recovery; native effects modeled from SDK, no runtime claim
|
||||
PASS: former chat controller releases only its own callbacks and preserves replacement menu; current-owner stop/scope and repeated teardown remain intact
|
||||
PASS: wrong observer fixture selector rejected before runtime/profile setup; no engine launched
|
||||
PASS: actual depot mixed-roster worker/item selection, ownership/refusal and radio/planning/two-leg state transitions, fixed deadline, late proof quarantine, finite import and no adoption after Stop
|
||||
PASS: actual depot HQ lifecycle, existing planner priority, server/mode/owner gates, idempotent polling and owner replacement
|
||||
PASS: actual HQ mine/magazine claim separation, real demand methods, exact token cleanup and original authority gates; native availability doubled
|
||||
PASS: actual full magazine/inert-PMN4 depot leaf, exact custody, isolated callbacks, finite reservation, false/unknown and Stop quarantine, once-only delivery and caps; native movement unqualified
|
||||
PASS: actual mine/magazine provenance and separated finite mine imports; actual authored identity capture, READY-only detached provenance, same shared stock admission, completed exact two-leg proof, lifetime caps and Stop no late adoption
|
||||
PASS: road width/bridge/length checks, prison and post spacing, setting bounds/default, finite startup and owned HQ admission
|
||||
PASS: actual crash geometry, detached definition setup, frozen server choice and guarded phase policy; integration/source ordering checked
|
||||
PASS: actual GameMode readiness admission and common full-footprint survey require crash authorization and both surveyed areas
|
||||
PASS: actual start defaults/parse/save, failure retention and authorized command wiring; current/next feedback, aliases and no random choice; native UI and core mode freezing are separate
|
||||
PASS: actual immutable measured footprint/root/attachment matching, bounds/transforms, moving geometry, seated-body and cargo reciprocity, finite hierarchy caps; native geometry doubled
|
||||
PASS: actual BMP singleton geometry and typed current order; one survey, full straight segment, width, known history, reservations, settlement/clearance and work caps; placement/footprint tested separately
|
||||
PASS: actual five random-radius diagnostic wrappers, disabled transparency, cached opt-in, exact zero and exclusion branch, native arguments/returns/outarg preservation, single superclass call and shared16-log cap
|
||||
PASS: zero-radius trace disabled by default, scoped before setup, exact opt-in emission; no native launch
|
||||
PASS: complete actual supply-travel probe, immutable 6+2 formations and 25 actors, admission/travel deadlines, six observed native-boundary moves, stop/ownership/partial-substitution refusals
|
||||
PASS: actual distinct supply-travel hook, fixed420s selector, original observer protection/restoration, failure/terminal cleanup and no legacy convoy setup
|
||||
PASS: actual supply-travel selector requires Chat, one round and480s; existing outcomes unaffected; no native launch
|
||||
usage: test_native_mounted_intercept.py [-h] [--steam STEAM]
|
||||
[--external-addons EXTERNAL_ADDONS]
|
||||
--compat COMPAT --profile PROFILE
|
||||
[--smoke {crash-start,crash-geometry,normal-escape-route,escape-route,optional-site-skip,infantry-combat,medical-combat,hunter-faction,unconscious-camera,objective-map,town-garrisons,site-garrisons,radio-interaction,enemy-loadout,aggression,air-logistics,air-assault,air-recon,airfield-markers,opening-tools,mortar-station,generated-sites,hq-local-handoff,infantry-transfer,hq-body,convoy,supply-convoys,supply-travel,mounted-ammo,alarm-hearing,hq-memory,hq-awareness,aircraft-field,aircraft-route,native-end-active,native-end-preparing,aircraft-control,aircraft-cancel,aircraft-translate,map-ownership,mortar-refresh,mortar-salvo,mortar-courier,station-teardown,inventory-hitzone,prison-breach,powered-flight,powered-translate,local-admission,mortar-expiry,mortar-transfer,mortar-fire,patrol-hq,victory,lost-helicopter,player-death,radio-network,hq-response,mortar-inventory,startup-failure,site-survey,cache-loss,extraction-capacity,early-helicopter-loss,extraction-startup-failure,extraction-boundary-failure,transport-loss,transport-survey,lifecycle,objective-ui,recovery,prisoner-kit,medical,casualty-load,casualty-direct,casualty-bench,casualty-remove,environment,environment-restart,patrols,radio-document-loss,radio-document-loss-partial,guard-cancel,casualty-service}]
|
||||
[--trace-random-radius]
|
||||
[--maintenance-refuel]
|
||||
[--mounted-swap-eligibility]
|
||||
[--mounted-bmp] [--mine-stock]
|
||||
[--mounted-courier]
|
||||
[--mounted-intercept] [--convoy-cover]
|
||||
[--field-terrain-audit]
|
||||
[--field-service-cancel]
|
||||
[--route-service-cancel]
|
||||
[--station-teardown-diagnostics]
|
||||
[--flight-autohover]
|
||||
[--flight-action-inputs]
|
||||
[--flight-input-diagnostics]
|
||||
[--recon-takeover-only]
|
||||
[--body-recovery-only]
|
||||
[--rounds ROUNDS] [--timeout TIMEOUT]
|
||||
[--project {core,chat}]
|
||||
test_native_mounted_intercept.py: error: --mounted-intercept requires Chat --smoke convoy, one round and timeout at least900 seconds
|
||||
usage: test_native_mounted_intercept.py [-h] [--steam STEAM]
|
||||
[--external-addons EXTERNAL_ADDONS]
|
||||
--compat COMPAT --profile PROFILE
|
||||
[--smoke {crash-start,crash-geometry,normal-escape-route,escape-route,optional-site-skip,infantry-combat,medical-combat,hunter-faction,unconscious-camera,objective-map,town-garrisons,site-garrisons,radio-interaction,enemy-loadout,aggression,air-logistics,air-assault,air-recon,airfield-markers,opening-tools,mortar-station,generated-sites,hq-local-handoff,infantry-transfer,hq-body,convoy,supply-convoys,supply-travel,mounted-ammo,alarm-hearing,hq-memory,hq-awareness,aircraft-field,aircraft-route,native-end-active,native-end-preparing,aircraft-control,aircraft-cancel,aircraft-translate,map-ownership,mortar-refresh,mortar-salvo,mortar-courier,station-teardown,inventory-hitzone,prison-breach,powered-flight,powered-translate,local-admission,mortar-expiry,mortar-transfer,mortar-fire,patrol-hq,victory,lost-helicopter,player-death,radio-network,hq-response,mortar-inventory,startup-failure,site-survey,cache-loss,extraction-capacity,early-helicopter-loss,extraction-startup-failure,extraction-boundary-failure,transport-loss,transport-survey,lifecycle,objective-ui,recovery,prisoner-kit,medical,casualty-load,casualty-direct,casualty-bench,casualty-remove,environment,environment-restart,patrols,radio-document-loss,radio-document-loss-partial,guard-cancel,casualty-service}]
|
||||
[--trace-random-radius]
|
||||
[--maintenance-refuel]
|
||||
[--mounted-swap-eligibility]
|
||||
[--mounted-bmp] [--mine-stock]
|
||||
[--mounted-courier]
|
||||
[--mounted-intercept] [--convoy-cover]
|
||||
[--field-terrain-audit]
|
||||
[--field-service-cancel]
|
||||
[--route-service-cancel]
|
||||
[--station-teardown-diagnostics]
|
||||
[--flight-autohover]
|
||||
[--flight-action-inputs]
|
||||
[--flight-input-diagnostics]
|
||||
[--recon-takeover-only]
|
||||
[--body-recovery-only]
|
||||
[--rounds ROUNDS] [--timeout TIMEOUT]
|
||||
[--project {core,chat}]
|
||||
test_native_mounted_intercept.py: error: --mounted-intercept requires Chat --smoke convoy, one round and timeout at least900 seconds
|
||||
usage: test_native_mounted_intercept.py [-h] [--steam STEAM]
|
||||
[--external-addons EXTERNAL_ADDONS]
|
||||
--compat COMPAT --profile PROFILE
|
||||
[--smoke {crash-start,crash-geometry,normal-escape-route,escape-route,optional-site-skip,infantry-combat,medical-combat,hunter-faction,unconscious-camera,objective-map,town-garrisons,site-garrisons,radio-interaction,enemy-loadout,aggression,air-logistics,air-assault,air-recon,airfield-markers,opening-tools,mortar-station,generated-sites,hq-local-handoff,infantry-transfer,hq-body,convoy,supply-convoys,supply-travel,mounted-ammo,alarm-hearing,hq-memory,hq-awareness,aircraft-field,aircraft-route,native-end-active,native-end-preparing,aircraft-control,aircraft-cancel,aircraft-translate,map-ownership,mortar-refresh,mortar-salvo,mortar-courier,station-teardown,inventory-hitzone,prison-breach,powered-flight,powered-translate,local-admission,mortar-expiry,mortar-transfer,mortar-fire,patrol-hq,victory,lost-helicopter,player-death,radio-network,hq-response,mortar-inventory,startup-failure,site-survey,cache-loss,extraction-capacity,early-helicopter-loss,extraction-startup-failure,extraction-boundary-failure,transport-loss,transport-survey,lifecycle,objective-ui,recovery,prisoner-kit,medical,casualty-load,casualty-direct,casualty-bench,casualty-remove,environment,environment-restart,patrols,radio-document-loss,radio-document-loss-partial,guard-cancel,casualty-service}]
|
||||
[--trace-random-radius]
|
||||
[--maintenance-refuel]
|
||||
[--mounted-swap-eligibility]
|
||||
[--mounted-bmp] [--mine-stock]
|
||||
[--mounted-courier]
|
||||
[--mounted-intercept] [--convoy-cover]
|
||||
[--field-terrain-audit]
|
||||
[--field-service-cancel]
|
||||
[--route-service-cancel]
|
||||
[--station-teardown-diagnostics]
|
||||
[--flight-autohover]
|
||||
[--flight-action-inputs]
|
||||
[--flight-input-diagnostics]
|
||||
[--recon-takeover-only]
|
||||
[--body-recovery-only]
|
||||
[--rounds ROUNDS] [--timeout TIMEOUT]
|
||||
[--project {core,chat}]
|
||||
test_native_mounted_intercept.py: error: --mounted-intercept requires Chat --smoke convoy, one round and timeout at least900 seconds
|
||||
usage: test_native_mounted_intercept.py [-h] [--steam STEAM]
|
||||
[--external-addons EXTERNAL_ADDONS]
|
||||
--compat COMPAT --profile PROFILE
|
||||
[--smoke {crash-start,crash-geometry,normal-escape-route,escape-route,optional-site-skip,infantry-combat,medical-combat,hunter-faction,unconscious-camera,objective-map,town-garrisons,site-garrisons,radio-interaction,enemy-loadout,aggression,air-logistics,air-assault,air-recon,airfield-markers,opening-tools,mortar-station,generated-sites,hq-local-handoff,infantry-transfer,hq-body,convoy,supply-convoys,supply-travel,mounted-ammo,alarm-hearing,hq-memory,hq-awareness,aircraft-field,aircraft-route,native-end-active,native-end-preparing,aircraft-control,aircraft-cancel,aircraft-translate,map-ownership,mortar-refresh,mortar-salvo,mortar-courier,station-teardown,inventory-hitzone,prison-breach,powered-flight,powered-translate,local-admission,mortar-expiry,mortar-transfer,mortar-fire,patrol-hq,victory,lost-helicopter,player-death,radio-network,hq-response,mortar-inventory,startup-failure,site-survey,cache-loss,extraction-capacity,early-helicopter-loss,extraction-startup-failure,extraction-boundary-failure,transport-loss,transport-survey,lifecycle,objective-ui,recovery,prisoner-kit,medical,casualty-load,casualty-direct,casualty-bench,casualty-remove,environment,environment-restart,patrols,radio-document-loss,radio-document-loss-partial,guard-cancel,casualty-service}]
|
||||
[--trace-random-radius]
|
||||
[--maintenance-refuel]
|
||||
[--mounted-swap-eligibility]
|
||||
[--mounted-bmp] [--mine-stock]
|
||||
[--mounted-courier]
|
||||
[--mounted-intercept] [--convoy-cover]
|
||||
[--field-terrain-audit]
|
||||
[--field-service-cancel]
|
||||
[--route-service-cancel]
|
||||
[--station-teardown-diagnostics]
|
||||
[--flight-autohover]
|
||||
[--flight-action-inputs]
|
||||
[--flight-input-diagnostics]
|
||||
[--recon-takeover-only]
|
||||
[--body-recovery-only]
|
||||
[--rounds ROUNDS] [--timeout TIMEOUT]
|
||||
[--project {core,chat}]
|
||||
test_native_mounted_intercept.py: error: --mounted-intercept requires Chat --smoke convoy, one round and timeout at least900 seconds
|
||||
usage: test_native_mounted_intercept.py [-h] [--steam STEAM]
|
||||
[--external-addons EXTERNAL_ADDONS]
|
||||
--compat COMPAT --profile PROFILE
|
||||
[--smoke {crash-start,crash-geometry,normal-escape-route,escape-route,optional-site-skip,infantry-combat,medical-combat,hunter-faction,unconscious-camera,objective-map,town-garrisons,site-garrisons,radio-interaction,enemy-loadout,aggression,air-logistics,air-assault,air-recon,airfield-markers,opening-tools,mortar-station,generated-sites,hq-local-handoff,infantry-transfer,hq-body,convoy,supply-convoys,supply-travel,mounted-ammo,alarm-hearing,hq-memory,hq-awareness,aircraft-field,aircraft-route,native-end-active,native-end-preparing,aircraft-control,aircraft-cancel,aircraft-translate,map-ownership,mortar-refresh,mortar-salvo,mortar-courier,station-teardown,inventory-hitzone,prison-breach,powered-flight,powered-translate,local-admission,mortar-expiry,mortar-transfer,mortar-fire,patrol-hq,victory,lost-helicopter,player-death,radio-network,hq-response,mortar-inventory,startup-failure,site-survey,cache-loss,extraction-capacity,early-helicopter-loss,extraction-startup-failure,extraction-boundary-failure,transport-loss,transport-survey,lifecycle,objective-ui,recovery,prisoner-kit,medical,casualty-load,casualty-direct,casualty-bench,casualty-remove,environment,environment-restart,patrols,radio-document-loss,radio-document-loss-partial,guard-cancel,casualty-service}]
|
||||
[--trace-random-radius]
|
||||
[--maintenance-refuel]
|
||||
[--mounted-swap-eligibility]
|
||||
[--mounted-bmp] [--mine-stock]
|
||||
[--mounted-courier]
|
||||
[--mounted-intercept] [--convoy-cover]
|
||||
[--field-terrain-audit]
|
||||
[--field-service-cancel]
|
||||
[--route-service-cancel]
|
||||
[--station-teardown-diagnostics]
|
||||
[--flight-autohover]
|
||||
[--flight-action-inputs]
|
||||
[--flight-input-diagnostics]
|
||||
[--recon-takeover-only]
|
||||
[--body-recovery-only]
|
||||
[--rounds ROUNDS] [--timeout TIMEOUT]
|
||||
[--project {core,chat}]
|
||||
test_native_mounted_intercept.py: error: --mounted-intercept and --convoy-cover are mutually exclusive
|
||||
PASS: actual native interception witness requires real radio cursor/lineage, original actor identities, fixed movement/hold/expiry/resume and immutable deadline; no movement/delivery injection
|
||||
PASS: actual CLI rejects wrong mode/project/rounds/899s/conflict before runtime; valid flag and terminal branch identify synthetic-observation qualification
|
||||
PASS: visible base hook and actual fixture override delegate once; delivery proof uses retained pre-super route only on successful production transition
|
||||
actual mounted HQ dispatch planning, radio, ownership and lifecycle checks passed
|
||||
PASS: actual mounted intercept eligibility/order chronology, fixed destinations, native road selection bounds, width, segment heading, clearance and settlement delegation; no native driving claim
|
||||
PASS: actual paired arc geometry,40m/80m spacing, separate original polylines, both-position validation and128road/4096segment budget; no native driving proof
|
||||
PASS: actual typed original BMP singleton, loss/footprint/custody guards and native cancellation, UAZ-only pair admission, rollback, native allocation/revocation boundaries, per-member ownership, hold and expiry
|
||||
PASS: actual Tick clock initialization admits fractional first ticks and expires without extending the original start
|
||||
PASS: actual finite conservation/deadline/callback policies; read-only selection, bounded once-only inventory submission and no can refill; native transfer not executed
|
||||
PASS: actual exact-context membership, bounded identity/reach gates, native start/cache/eligibility ordering and no duplicate/foreign action start; fuel manager identity and empty-can headroom guards checked
|
||||
PASS: actual detached node/value snapshot and conservation refuse mismatched lengths before indexed reads, retain original identities under native out-array aliasing and log bounded counts once; native cause remains unknown
|
||||
PASS: actual mine evidence sealing/recovery, historical coarse publication, caps, canonical ownership, marker join retry/owner-change/stop; native arming and replicated vector-array transport untested
|
||||
PASS: actual full document recovery retains authored/sealed targets, one shared spent ledger, retry/exhaustion semantics and canonical multi-player ownership alongside supplemental mine intel
|
||||
PASS: actual infantry search suspension, quiet grace, finite resume, expiry/replacement and defensive/ownership boundaries
|
||||
PASS: infantry combat gate precedes radio delivery and preserves non-task transports
|
||||
PASS: actual HQ contact transition wakes only fit squad members, cancels only task orders and logs changes once
|
||||
PASS: actual finite medicine grants, authored stock deduction, full-backpack refusal/pouch fallback, no loot replenishment, unresolved-operation quarantine and ownership/stop guards
|
||||
PASS: only recent native detected/identified threats suspend hunter travel; stale/disarmed/destroyed contacts cannot strand patrols
|
||||
PASS: actual hunter combat transition cancels only its travel once, holds through renewed contact and resumes after quiet; unregistered startup preserved
|
||||
PASS: captured sighting retention, immutable details, expiry, replay rejection, bounded sound uncertainty/cooldown, radio loss, priority and overdue-status fairness
|
||||
PASS: arrow press/release, held keys, opposing keys, disabled/menu input and firearm-only retention
|
||||
PASS: town trigger and hard 700m exclusion for all observers, empty/invalid positions and final-check crossings
|
||||
PASS: object guard split, hard 1000m exclusion / 1400m activation, footprint support, slopes, holes and invalid traces
|
||||
PASS: exact finite site squads, invalid roster/count rejection, committed-site spacing and safe fallback boundary
|
||||
PASS: mortar couriers use the mobile site team and refuse permanent-only garrisons
|
||||
PASS: omitted preferred mortar depot selects a surviving owned camp/mobile team; no camp, foreign cache and permanent-only sites are unavailable; historical priority retained
|
||||
PASS: real-session mortar deadline, failed-support convoy admission and hunter survivor/recovery gates
|
||||
PASS: native-route retry preserves delivered target, limits attempts and suspends during combat
|
||||
PASS: stale/deleted AI utility cannot receive Complete; mortar HQ preflight withholds unsafe orders; mounted convoy cover never creates infantry Defend
|
||||
PASS: flight crew affiliation and group precede native boarding; preparation remains bounded even while passengers wait
|
||||
PASS: factionless/deleted map targets do not abort perception; faction lookup tolerates teardown; deleting helicopter releases without capture/engine access
|
||||
PASS: shoot adapter waits for a physical round; bounded same-shell retries, interrupted/never-started loads, committed no-retry, order/owner changes and normal native delegation
|
||||
PASS: missing/invalid faction crew defers before any native spawn or allowance insertion; all registered RHS factions have explicit soldier and medic profiles
|
||||
PASS: vehicle radio issued once; pending, refusal and looting cannot duplicate or fabricate a physical radio link
|
||||
PASS: actual vehicle-radio link requires the original seated crew, physical manpack and live uncaptured mission vehicle; looting, dismount, release and teardown remove it
|
||||
PASS: actual hunter release preserves survivors/HQ, releases driving ownership once, delegates capture/teardown, and excludes prison/patrol/mortar from generic objective defence
|
||||
PASS: actual player-entry hook latches original hunter capture before native callbacks; both release layers cancel ownership without new entities/refund; bounded current-owner guards and prior-release policy
|
||||
PASS: real opening road geometry enforces wide azimuths; fresh delivered contact preempts patrol cooldown, respects radio failures and does not starve in-flight interception
|
||||
PASS: delivered ground search survives the 60-second mortar cutoff, with five-minute/500m uncertainty bounds and no live target reads; mortar policy unchanged
|
||||
PASS: actual scoped 10% tighter REGULAR aim error and alert perception; preserves equipment multiplier and restores vanilla behavior when unbound
|
||||
PASS: physical inspection and parent-wreck retention; server-only searched/report delivery unlocks native cleanup once with a 300-second delay
|
||||
PASS: bounded same-group empty-spawn retries, no casualty refill, queue retirement, delivery-gated intel, prepared-team reuse, throttled diagnostics and LOD release
|
||||
PASS: production airborne memory confidence, persistence, ground coverage, confirmed losses, artillery veto, cooldown and invalid-input rules
|
||||
PASS: production cover retains the carried HQ target until its deadline; airport reload waits until the drop pass and cover have finished
|
||||
PASS: air logistics reservation preserves delivered search until radio handoff, excludes guards/combat/in-flight orders, and quarantines unresolved native loads/moves
|
||||
PASS: actual ammunition cargo selector handles empty rifle/machinegun/sniper magazines, preserves loaded variants, excludes auxiliary launchers and tolerates missing native metadata
|
||||
PASS: original 15-minute launch/loss cadence, active/captured timer disarm, saved delay reset, stop, 300m orbit and bounded close-contact standoff at 30/60/120 Hz
|
||||
PASS: actual aircraft-removal notification guards owner/server/active/stop and schedules one full delay without replay extension
|
||||
PASS: actual helicopter delay applies resolved Random values, preserves countdown on save failure, and leaves active flights running
|
||||
PASS: hill prominence/elevation, actual road edges/heights/bends and server-only finite scout admission, pending stock, timeout and no replacements/refills
|
||||
PASS: mortar duty scope excludes players, other crews, stopped/client/inactive states; only destruction releases an active assignment, while the gunner may approach the gun
|
||||
PASS: random mode restrictions, full numeric ranges, independent calendar dates and strict daylight boundaries
|
||||
PASS: actual killais eligibility includes the 1000m boundary, excludes players/retained bodies/dead/non-character entities and checks full 3D distance
|
||||
PASS: actual generation scheduler bounds each tick, enforces deadline/candidate ceiling, validates fallback, commits only accepted positions, skips only dispensable sites, preserves required objectives/intel, and resets the next search budget
|
||||
PASS: terrain placement samples world bounds, retains streaming candidates, bounds waits/work, rejects foreign fallbacks, preserves objectives/intel and validates completion
|
||||
PASS: actual navigation readiness supports static meshes, yields only for loadable streaming tiles and refuses unreachable positions
|
||||
PASS: real sampling handles absent airports and extraction clearance preserves geometry/navigation/flatness while selecting the correct aircraft survey
|
||||
PASS: universal connector, embedded/standalone exports, multiple terrains, stable IDs, native nav configs, missing-nav visibility, path validation and overwrite protection
|
||||
PASS: airfield detection accepts physical runways/towers and bounded authored markers, rejects unrelated props, water and out-of-world markers, and samples terrain height
|
||||
PASS: configured airport parsing, bounded readiness, stale admission rejection and cleanup wiring
|
||||
PASS: automatic default, explicit header/CLI opt-out, editor/authored-mode guards, optional airport override precedence and fresh-round saving guard
|
||||
PASS: singleton identity guards, paired faction deserialization and client world-cleanup wiring
|
||||
PASS: task/map/respawn getters survive delayed old destruction and preserve ordinary-mode behavior
|
||||
PASS: replication hierarchy refuses absent/aliased nodes and establishes delivery dependencies idempotently
|
||||
PASS: standalone old faction delegates collected once, with null/deleted owners ignored
|
||||
PASS: actual terrain takeover startup skips mode-less/menu worlds, always forwards super, retains eligible/unsupported/authored/client/editor semantics
|
||||
PASS: native name callback preserves authored modes, opt-outs and failures; terrain suffix follows world changes, cached resolution and confirmed takeover metadata restores on cleanup without changing scenario resource or overwriting later titles
|
||||
PASS: actual terrain parent traversal, Armenhof/Nogova names, Everon alias, missing-resource fallback, empty names and bounded cycles/depth
|
||||
PASS: actual loading title hooks follow late takeover/terrain changes, keep native initialization/progress updates, bound refreshes and tolerate missing headers/widgets/game
|
||||
PASS: saved terrain GUIDs, defaults, restart persistence, clearing, backup recovery, corrupt-file preservation, write failures, and client write denial
|
||||
PASS: startup terrain capture protects client/editor/menu worlds, default behavior, same-map loads and reload-loop recovery
|
||||
PASS: actual transition waits for native startup, disconnects without bans, requires an empty session, retains every loaded mod, bounds waiting and consumes requests once
|
||||
PASS: actual faction resolution reserves explicit roles, samples without replacement, substitutes disabled selections, and rejects duplicate/unknown/missing choices and insufficient pools
|
||||
PASS: Random all submits persistent random roles immediately; manual mixed choices, stale/unauthorized UI guards and debounce preserved
|
||||
PASS: actual content policy gates parent packs, individual factions, faction identity and finite group rotation with vanilla fallback
|
||||
PASS: actual delivered road eligibility, ahead projection without chords, reservations, stock road query bounds, terrain/water/obstruction refusal and clean outputs
|
||||
PASS: actual delivered-task lineage, expiry, old-order retention, native commit, release, road precision expiry and duplicate delivery
|
||||
PASS: actual original-roster local handoff,100m3D bound,busy carrier/budget exclusion,origin interruption including deletedsource,normal radio delivery and per-source replay history
|
||||
PASS: actual visual intake retains source/time/position/id, rejects replay, prefers usable own route, excludes simultaneous callers and conservatively resets negative-sweep dwell
|
||||
PASS: actual fixture local/radio gating, immutable source/time/position, interrupted-report exclusion and exact-owner cleanup
|
||||
PASS: local-handoff runner refuses wrong project/round count/insufficient deadline before runtime work
|
||||
PASS: actual fixture allocator terminal/unsubmitted guard, original-group lookup and both candidate gates
|
||||
PASS: actual report-derived waypoint insertion/order and tighter positive radii; no formation navigation claim
|
||||
PASS: actual Place/Stop waits native pose update, bounds four attempts, preserves original position, restores pending/settled placement and respects ownership/accepted-move quarantine
|
||||
PASS: actual fixture current/original recipient ownership, unresolved transfer cleanup, exact-token release and idempotent Stop
|
||||
PASS: actual fixture phased-cargo readiness, bounded callbacks, captured-stock mixed-caliber selection/continuation, reservation cleanup and component magazine counts
|
||||
PASS: actual inventory-fixture setup uses ordinary prison unlock before constructing its convoy-waiting probe; failed unlock cannot run fixture
|
||||
PASS: actual authored storage anchors, native trace flags, own-hierarchy exclusion, external wall/vehicle obstruction, range, unknown geometry and bounded context refusal
|
||||
PASS: actual Compatible and bounded stock preflight before report/claim consumption, later compatible truck, launcher controls, convoy binding, finite identities, disjoint tokens, shared report replay/cooldown, original recipients and HQ cleanup
|
||||
PASS: actual finite convoy supply pool; immutable slots, shared demand state, sparse/capped discovery and permanent shutdown
|
||||
PASS: actual HQ rotates finite donors, skips unavailable/contacted trucks, uses delivered reports and dispatches at most one trip per planning cadence
|
||||
PASS: actual original turret identity, native/canonical guards, scoped maximum-skill profile, reset, dismount/reboard, requested-skill preservation and restoration
|
||||
PASS: bounded HQ startup/memory windows and outcome-specific full-route deadlines
|
||||
PASS: explicit escape-route skips only administrator stress, preserving original full-fixture wait/failure paths
|
||||
PASS: normal escape route keeps ordinary catalog and generated placement; historical selectors remain unchanged
|
||||
PASS: actual patrol fixture leaves prison before responder HQ proof, followed by separate permanent-patrol observation
|
||||
PASS: exact patrol-hq finite responder preparation and native search-radius receipt verification
|
||||
PASS: actual read migrates old valid settings, preserves explicit disabled state, rejects invalid data; next-round feedback and fixed menu remain honest
|
||||
PASS: actual automatic convoy timing/authority/admission/one-attempt/manual-task/stop policy; native deployment unproved
|
||||
PASS: late authoritative failure reason refreshes open result; detach, mode change and success subscriptions preserved
|
||||
infantry resupply actual rules, radio transitions, owned cleanup and unresolved-operation tests passed
|
||||
PASS: actual resupply Roster preserves permanent release, original slot mapping and bounded ownership
|
||||
PASS: actual designated zero/one original carrier selection, settled startup, shared finite claims, no refund after submission
|
||||
PASS: actual HQ startup grant readiness forwarding is authoritative and fail-closed
|
||||
PASS: actual finite PMN4 designated-zero/one entitlement, pinned original ownership, shared commit, physical custody, callback quarantine/deletion and no retry
|
||||
PASS: actual bounded empty-return and finite delivery; phase-isolated callbacks, exact ownership proof, stop quarantine and original actor/vehicle boundaries
|
||||
PASS: actual shared finite identity reservation; competing consumers, submission permanence, stale cleanup and96-item bound
|
||||
PASS: actual carried-mounted swap, shared committed claim, physical slot reach, exact two-way proof, uncertainty and terminal cleanup
|
||||
PASS: actual mounted pickup, exact finite ownership, pre-submission commit, physical custody, bounded callback and quarantine lifecycle; no native coverage claim
|
||||
PASS: actual mounted courier admission, radio, individual orders, two-stage transfer, reboarding, token cleanup and quarantine lifecycle
|
||||
PASS: actual scoped crew permit and native board completion/failure preserves foreign seats without teleport fallback
|
||||
PASS: actual shared mounted stock/history ownership, atomic exact HQ pair claim, and bounded stopped-owner proof polling
|
||||
PASS: actual carried/mounted early ammunition policy and status-first shared uplink; complete threshold, phases, cooldown, failures requested check-ins and non-urgent detached carried-mine status
|
||||
PASS: actual group radio startup preservation, finite native grants, callback quarantine, frozen selection/actor ownership and bounded observation
|
||||
PASS: actual maintenance native-stock check rejects missing/duplicate/wrong-identity/unowned/depleted/malformed stock and is read-only; native runtime not executed
|
||||
..................
|
||||
----------------------------------------------------------------------
|
||||
Ran 18 tests in 0.231s
|
||||
|
||||
OK
|
||||
PASS: actual radio node rejects current incapacitation, death, ownership and faction changes despite cached inventory; one-second capability refresh remains explicit
|
||||
PASS: Southern finite maintenance stock preserves weapons/clues and optional transport, historical Western fixture stays separate; native capacity/consumption untested
|
||||
PASS: optional transport deferred behind required readiness, bounded once-only spawn/omission, isolated cleanup, occupied-candidate retention and required-default preservation
|
||||
PASS: actual diagnostic fallback runs only on failed missing-context call, derives unique native pilot door, preserves stock eligibility and restores prior index on success/failure; diagnostics mutate no game state.
|
||||
PASS: actual native-prelude cleanup restores only original changed damage, refuses stale/incapacitated/aboard teleport; bounded five-seat/four-door fixture wiring checked. Native execution remains pending.
|
||||
PASS: actual CreateTransport requires successful scoped Configure after handbrake, preserves ordinary vehicles, tracks spawned entity before failures and never treats failed lock registration as ready.
|
||||
PASS: actual preparation Configure guards/idempotence/breach preservation, security eligibility/final current-body server mutation and all scoped action guards; all five seat/four door resource overrides. Native hold, prefab merge, replication and boarding remain unverified.
|
||||
PASS: production vehicle alarm single trigger/replica completion/no replay, fixed deadline/readiness wait, failed audio, dedicated server, moving exact handle, destruction/native end/deletion/clock and mission teardown. Native sound and multiplayer delivery require engine qualification.
|
||||
PASS: production alarm emitter/receiver original time/location, explicit native queue only, 32-entry cap, 50m local witness eligibility, bound perception, native-super preservation; actual engine broadcast/hearing remains unverified.
|
||||
PASS: actual optional candidate barrier, exact callback/custody proof and unchanged mine/primary snapshots; no native transfer claim
|
||||
Native finite mine-stock runner: parser, scope, exclusions and command pass
|
||||
PASS: actual bounded native mounted proof/detached payload/deadline/cleanup methods, production-only setup and isolated runner selector
|
||||
PASS: actual one-existing-convoy candidate readiness, sender-root identity, incomplete cargo refusal and fixed three-candidate bound
|
||||
PASS: actual BMP capture requires complete armed exact original resource; pinned delivery/slot checks and isolated CLI flag
|
||||
PASS: actual opt-in pre-unlock isolation refuses wrong mode/phase/flag and existing hunters; no baseline service changes
|
||||
PASS: actual once-only native dry query, exact before/after slots, native refusal, shutdown; shared bounded discovery and distinct opt-in verdict
|
||||
PASS: actual completion selector and pre-cleanup variant capture preserve separate radio and eligibility verdicts
|
||||
PASS: actual cargo diagnostic stages separate absent/foreign magazines, used/empty/invalid rounds, well mismatch and exact truck storage/attachment without mutation
|
||||
PASS: actual native courier witness rejects missing radio/custody/swap/reboard evidence; CLI opt-in bounded; native success remains unqualified
|
||||
PASS: actual courier constructor/Tick waits for preparation, returns before physical checks, preserves fixed deadline and sticky stop/failure; Enfusion startup awaits native verification
|
||||
PASS: actual arranged native alarm fixture deadline, single emit, natural-route observation, original timestamp/area/detail assertions, natural observer proximity/activation wait, failure cleanup and independent canonical-body restoration; native delivery itself remains unqualified.
|
||||
PASS: actual convoy cover observation/snapshot/uplink/HOLD/RESUME/cleanup transitions; native boundaries mocked, non-convoy runner opt-in refused
|
||||
Enemy optics actual-service ownership, preservation, callback, deadline and bounded-inspection policies passed
|
||||
PASS: actual delivered cover freshness/lineage/replay and canonical executor; owned waypoint-only hold, one resume at preserved route index, invalid ownership/crew/ledger refusal and fail-closed native recreation
|
||||
PASS: actual Stinger show/set/help state precise actor-roll effects; read-only help, bounded values, malformed syntax and failed-save preservation; no rerolls/gameplay edits and no native persistence claim
|
||||
PASS: new/retasked search and radio delivery ammo gates; active tasks and delivered release preserved
|
||||
HQ convoy delivered-report planning and downlink regressions passed
|
||||
PASS: actual own-inventory ammo inspection deduplicates loaded/carried/shared wells, separates chambers/launchers, freezes scalar snapshots and treats unsupported/capped/foreign inventory as unknown
|
||||
PASS: actual carried PMN4 inventory, original-owner guards, bounded deduplication, independent unknown state and detached counts
|
||||
PASS: actual mounted hierarchy sampling, ownership exclusion, deduplication, completeness/caps, quarter threshold and detached validation; no runtime policy or ammunition mutation
|
||||
PASS: WORKBENCH opt-in diagnostics distinguish cycles/cap/storage/manager/mount failures without repeated native traversal
|
||||
PASS: actual HQ original convoy-root admission rejects wrong force/server/group and never supplies replacement lookup
|
||||
PASS: production mounted structural seat scan ignores >128 carried/cargo descendants, shares exact native mount/magazine ownership, preserves attachment seats and exact occupants, rejects unknown/cyclic/oversize structures; native binding still requires qualification.
|
||||
PASS: native body fixture uses existing immutable actors, real production LOS/queued uplink, pre-delivery isolation, actual status overlap, bounded cleanup and no fabricated reports/spawns
|
||||
PASS: actual native fixture lookup selects exact BODY kind/identity/message from bounded evaluations, never sighting-only Get
|
||||
PASS: actual ammo snapshot comparison checks every scalar/category flag; native probe requires real roster rescan, loaded-round lower bound and separate immutable pending/Watch objects
|
||||
PASS: actual delivered slot-union bodies preserve overlap/disjoint evidence, replay idempotence, status subset integrity, full-wipe closure and formation-local bounds
|
||||
test_review_added_allowed_media_invalidates_snapshot (__main__.ReviewTests.test_review_added_allowed_media_invalidates_snapshot) ... ok
|
||||
test_review_added_source_directory_rejected (__main__.ReviewTests.test_review_added_source_directory_rejected) ... ok
|
||||
test_review_loose_root_resource_and_symlink_rejected (__main__.ReviewTests.test_review_loose_root_resource_and_symlink_rejected) ... ok
|
||||
test_review_metadata_media_and_sidecars_remain_allowed_and_bound (__main__.ReviewTests.test_review_metadata_media_and_sidecars_remain_allowed_and_bound) ... ok
|
||||
test_review_missing_link_rejected (__main__.ReviewTests.test_review_missing_link_rejected) ... ok
|
||||
test_review_package_guard_sees_new_scripts (__main__.ReviewTests.test_review_package_guard_sees_new_scripts) ... ok
|
||||
test_review_retargeted_private_link_rejected (__main__.ReviewTests.test_review_retargeted_private_link_rejected) ... ok
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 7 tests in 0.062s
|
||||
|
||||
OK
|
||||
PASS: actual report methods reproduce old starvation; status-first scheduler delivers check-ins and requires 30s without combat or actual visible contacts before negative reports
|
||||
PASS: actual actor group lookup retains controlled character membership when seated/inherited vehicle agents differ; missing control or parent refuses
|
||||
.................
|
||||
----------------------------------------------------------------------
|
||||
Ran 17 tests in 3.812s
|
||||
|
||||
OK
|
||||
PASS: actual convoy motion thresholds, native-only proof boundaries, physical cargo/crew ownership and pre-launch runner restrictions
|
||||
PASS: actual new measured ClearFootprint 25/441 sample grids, measured extents/height, water/invalid world/terrain/trace refusal plus legacy filled rotated-footprint TraceBox and nine terrain/water samples; broad tree/cable bounds alone accepted, actual collision/nonfinite trace refused, nonzero sweep and ENTS/OCEAN flags, bounded diagnostic query and reset
|
||||
PASS: actual road interpolation/projection/orientation, six35m starts,200m forward tail, preserved bends, short/far/degenerate/nonfinite/overdense/hairpin refusal and deterministic candidate ties
|
||||
PASS: actual authenticated convoy dispatch, active/ready admission gates, canonical receipt, safe unconsumed preflight retry, pool refusal, retained partial failure and consumed no-retry
|
||||
PASS: actual native readiness exact membership, one-time per-vehicle ledger admission/reservation, partial readiness retry without duplicate records and one-pass56-item cargo allocation without replenishment
|
||||
PASS: actual per-vehicle readiness reasons, native agent/activity counts, intended-seat diagnostics, five-second throttle and read-only observation
|
||||
PASS: actual convoy dispatch validates before receipt consumption, consumes once before native mutation, retains all10 partial-failure paths, accepts the selected non-USSR enemy, and allocates exact10 bodies without capacity shrinking
|
||||
PASS: own memberless prefab disables automatic spawn before initialization; actual admission rejects populated, immediate or authored-slot templates before finite crew creation
|
||||
PASS: actual native seated-group arrival outside35m, native waypoint removal, idempotent advance, and convoy waypoint idempotence/arrival/deadline, missing/dead/captured/reparented crew refusal, failed native waypoint release, original vehicle/member preservation and no replacement
|
||||
PASS: actual convoy/team Release retains original active survivors and HQ identity, rejects takeover/terminal/unknown roster, preserves exact logistics quarantine and normal eligibility
|
||||
PASS: actual convoy receipt identity/one-use, shared60-body and128-formation caps, outstanding/native-ledger accounting, exact10-body composition, source reuse, mode/client guards and no consumed receipt refunds
|
||||
PASS: actual supply route cycling/arrival/stops, finite startup bounds, contact freshness, dismount hold, quiet interval, interrupted boarding, timeout and lost-truck release
|
||||
PASS: moving-convoy perception boundaries and scoped individual/group abandonment priorities
|
||||
PASS: actual supply startup reasons expose unchanged body budget/requirement, journal only failure changes, preserve retry cadence/caps and report the true final refusal
|
||||
PASS: actual combat start releases only exact intercept claims before owning route/orders; foreign claim defers combat takeover
|
||||
PASS: actual StartOne plus actual pool preserve unconsumed receipt retry, reject consumed replay, skip impossible new-budget surveys, retain equality, retry caps and journal dedup; no FPS claim
|
||||
PASS: actual admission seeds use exact installed loaded prefab, reject replacement/foreign/projectile paths and preserve bounded immutable identity
|
||||
PASS: actual primary-before-mounted one-shot batch, shared96/128 caps, physical snapshot headroom, original ownership, callback refusal and admission pinning
|
||||
PASS: actual bounded HQ query validates only existing original binding without admission or replacement lookup
|
||||
PASS: exact optional PMN4 startup, primary callback independence, original owner,128 capacity/callback limits, terminal no-retry and callback-proven freeze
|
||||
PASS: production convoy spacing, physical arrival, stable follower targets, supply ownership, leader promotion and bounded stuck recovery
|
||||
PASS: convoy combat keeps native manoeuvres for unchanged contacts and refreshes when contact moves
|
||||
PASS: native convoy proof excludes pre-departure movement and ends via explicit fixture reset, not prohibited player death
|
||||
PASS: boarding retries only after approach/seat progress stops, capped at three, with delayed native reissue and completed-team preservation
|
||||
PASS: slow only owned vehicles near fit dismounted infantry; ignore passengers, casualties and released teams/vehicles
|
||||
PASS: restore missing native driving registration only for healthy owned seated crews; preserve existing association and refuse invalid/released vehicles
|
||||
PASS: actual convoy support preserves visual cover and ongoing approach, retries masked arrived positions, withholds unsafe moves and preserves ammo withdrawal
|
||||
PASS: actual body observer enforces owned physical roster, local death-only candidates, native trace gating, budget/cadence/caps, immutable body-only snapshots, radio retries and confirmed suppression
|
||||
PASS: own initial roster, explicit retained corpse evidence, unconscious/missing/ref transfer guards, fixed strength, no replacement adoption, detached samples, surviving radio sender, immutable convoy root/ledger, mounted capture release and lost-root unknown
|
||||
PASS: delivered-only status snapshots, two missed check-ins/reply deadline, last reported coordinates, episode/replay guards, confirmed-loss idempotence, detached/validated mounted payload replacement 256-record cap and detached carried-mine radio delivery/chronology
|
||||
PASS: actual failed-retask deadline rollback plus assignment cancellation/release preserves radio ownership, native waypoint lifecycle and failed-order retry boundaries
|
||||
PASS: actual force ledger, finite casualties/identity/cap, routes/arrival/elevation/overshoot, server and physical guards, staggered 256-record simulated hour without world queries
|
||||
PASS: actual equipment coordinator registration dedupe, startup delay, five member scans, finite component retries, unregister/stop terminal behavior and 256-group bound
|
||||
PASS: actual percentage selection, native/preferred launcher preservation, failure/removal fallback, pending-operation quarantine, capture, finite two-mine grants and no replenishment
|
||||
PASS: automatic inventory one-shot roll, exact item ownership, finite compatible ammo, rejection, capture/stop, deletion, loot and late callback quarantine
|
||||
PASS: enabled/valid catalog eligibility, category restrictions, content filtering, GUID deduplication across factions and bounded catalogs
|
||||
PASS: actual engineer native group-envelope admission and phase cancellation, preparation/deadline, original custody/identity, once-only callback removal, cancellation quarantine, withdrawal/clearance, native refusal and owned-action cleanup; native execution untested
|
||||
PASS: actual mine selector respects road and settlement flank safety; native boundaries doubled
|
||||
PASS: actual HQ and post ledger: second delivered post, one query/tick,2 active/32 jobs,4 consumed lifetime attempts, no-stock/query refusal consumption, pending old job and original identity constraints
|
||||
PASS: actual mine post ledger immutable history, strict chronology/evidence, aliases, >160m separation, detached sites and finite4/32 consumed attempts
|
||||
PASS: actual objective heading/threat/approach rules, persistent doctrine weight, fresh-contact coverage invalidation, stale-sweep rejection and atomic radio retask ownership
|
||||
PASS: actual bounded delivered-negative coverage, replay/freshness/expiry/invalid guards, oldest eviction, small-circle and nearest-unswept selection, reserved-cell exclusion and cleanup
|
||||
PASS: actual HQ active/pending reservations, interruption, committed replacement, bounded coverage and unchanged force counts
|
||||
PASS: actual bounded pursuit roles/objectives/scores, stale search degradation, physical/busy/home guards, finite lifetime and two-bearing escape gap; no hidden player reads or spawning
|
||||
PASS: actual finite45..110 radius and both ordinary search queue snapshot expressions
|
||||
PASS: actual HQ memory rules/service preserve delivered snapshots, chronology, replay bounds, decay, motion limits, identity and negative-search revisions
|
||||
..........
|
||||
----------------------------------------------------------------------
|
||||
Ran 10 tests in 0.198s
|
||||
|
||||
OK
|
||||
PASS: actual session Tick + journal router delivers each grant completion and new HQ line once, without repeats on empty/unavailable feeds or unauthorized ticks
|
||||
.....
|
||||
----------------------------------------------------------------------
|
||||
Ran 5 tests in 0.484s
|
||||
|
||||
OK
|
||||
PASS: actual current-controller/admin/mode authorization, per-round anti-replay, token-rotation refusal, command/snapshot throttles and client scope; owner-only replies and player-tool cleanup wiring
|
||||
PASS: mission provider registration is idempotent, optional dispatch is ordered, status aggregates, journals preserve cursors, aliases stay with their addons and topic help is bounded
|
||||
PASS: actual menu command routing covers all twenty settings, rejects unsupported keys, gates companions, and matches unique authored widgets
|
||||
PASS: explicit weapon retention buttons use the same ready/authorized server command path
|
||||
PASS: item editor, preset controls and dynamic item-row layout are structurally valid
|
||||
PASS: catalog requests use authenticated sessions, independent admin page selections, loaded-mod allowlisting, bounded pages and allowlisted item mutations
|
||||
PASS: actual item rules, shared-source conflicts, missing/returning mods, bulk reset, independent named presets, bounds, malformed data and failed-save state preservation
|
||||
PASS: actual summaries preserve queued/delivered meaning, clear counts and IDs; raw records, legacy display, cursor gaps and RPC limits remain intact
|
||||
PASS: actual admin body authorization, god restoration, vanilla item deposit, callback completion/failure, timeout quarantine and stop/revocation paths
|
||||
PASS: same-body revoke/regrant preserves pending insertions and timeout quarantine; new-body binding isolates late callbacks and never inherits god mode
|
||||
PASS: actual Intel commands distinguish status/start/failure, preserve authorization gate and reject malformed requests; spent ledger is idempotent, server-only and bounded
|
||||
PASS: actual reroll snapshot, authority, cancellation, ownership, accepted operations, quarantine, bounded work and stop methods; no native runtime claim
|
||||
PASS: production Intel feedback coalescing, rough secrecy, rate limit, bounded dedupe, local/remote delivery and round cleanup; native UI/RPC not exercised
|
||||
PASS: actual per-squad bounded report selector rotates visible targets, survives ordering/turnover, records only queued attempts, and preserves radio intake ordering
|
||||
PASS: actual action denial/clearing, server request failure, single submitted-result feedback, current rescuer identity and terminal/stop suppression; native UI/RPC pending
|
||||
PASS: actual physical denial precedence and transport-seat occupancy/reservation/access/lock checks
|
||||
PASS: actual initial admission exhaustion and ServerTick grace; new/pending/empty/controller/life guards, normal death preserved
|
||||
......................
|
||||
----------------------------------------------------------------------
|
||||
Ran 22 tests in 0.234s
|
||||
|
||||
OK
|
||||
......................
|
||||
----------------------------------------------------------------------
|
||||
Ran 22 tests in 24.338s
|
||||
|
||||
OK
|
||||
..................
|
||||
----------------------------------------------------------------------
|
||||
Ran 18 tests in 2.936s
|
||||
|
||||
OK
|
||||
.........
|
||||
----------------------------------------------------------------------
|
||||
Ran 9 tests in 2.276s
|
||||
|
||||
OK
|
||||
...............
|
||||
----------------------------------------------------------------------
|
||||
Ran 15 tests in 1.028s
|
||||
|
||||
OK
|
||||
PASS: actual field result/braking observer and Chat dispatch rules; one finite fixed candidate, deferred callback failure and guarded cleanup; no native measurement
|
||||
PASS: actual opt-in terrain audit records one fixed1681-point grid, preserves original survey refusal/success and exact no-allocation scope; malformed heights stop without retry; no native data acquired
|
||||
....
|
||||
----------------------------------------------------------------------
|
||||
Ran 4 tests in 0.573s
|
||||
|
||||
OK
|
||||
PASS: actual field PI/ramp/vector caps, antiwindup, braking hypothesis, immutable admission limits and segment bounds; no native physics tested
|
||||
PASS: actual100m whole-field survey sampling/4096cap, rotated coverage, all-node terrain and native trace refusal; original certificate lineage retained; no native qualification
|
||||
PASS: actual QualifyField preserves original identity/footprint/time, orders complete surveys before issuance, and refuses failed stages/moved body/expired or changed world; native boundaries faked
|
||||
PASS: WORKBENCH first-refusal diagnostics preserve ordinary predicates, query order/count/budget and opt-in scope; no native logging run
|
||||
PASS: actual field startup delegation, immutable lease/target, braking/settling/cancel transitions, early abort, callback scope, physical terminal policy and shared landing demand; native boundaries faked
|
||||
PASS: actual inherited airborne pre-CLIMB cancellation enables verified native autohover once, refuses failed enable and never writes after capture
|
||||
PASS: actual Core maintenance/default/tick/stop methods; empty/populated authority, terminal reentry, no tactical resume or new scheduler; native boundaries substituted
|
||||
PASS: actual finite registration, unique claims/tokens, retention/cancel/stop, readiness gating, capture/expiry retirement and bounded cross-kind order history and typed field/route construction; native boundaries faked
|
||||
PASS: actual WORKBENCH route observer returns exact retained route subtype and refuses absent/field controllers
|
||||
.....
|
||||
----------------------------------------------------------------------
|
||||
Ran 5 tests in 0.696s
|
||||
|
||||
OK
|
||||
......................
|
||||
----------------------------------------------------------------------
|
||||
Ran 22 tests in 0.190s
|
||||
|
||||
OK
|
||||
................
|
||||
----------------------------------------------------------------------
|
||||
Ran 16 tests in 9.715s
|
||||
|
||||
OK
|
||||
......
|
||||
----------------------------------------------------------------------
|
||||
Ran 6 tests in 0.020s
|
||||
|
||||
OK
|
||||
PASS: actual production bridge lookup, lease/world/mode/seat/capture guards, no allocation, native super ordering and read-only fixture hooks
|
||||
...............
|
||||
----------------------------------------------------------------------
|
||||
Ran 15 tests in 0.053s
|
||||
|
||||
OK
|
||||
.............
|
||||
----------------------------------------------------------------------
|
||||
Ran 13 tests in 4.794s
|
||||
|
||||
OK
|
||||
PASS: actual route gain/caps/braking, callback selection, old landing/cancellation control and matching read-only telemetry
|
||||
..............................
|
||||
----------------------------------------------------------------------
|
||||
Ran 30 tests in 0.374s
|
||||
|
||||
OK
|
||||
..............
|
||||
----------------------------------------------------------------------
|
||||
Ran 14 tests in 0.219s
|
||||
|
||||
OK
|
||||
.........
|
||||
----------------------------------------------------------------------
|
||||
Ran 9 tests in 0.108s
|
||||
|
||||
OK
|
||||
PASS: actual gate observer binds native registered action/context and current life, reads accumulated progress, refuses stale bindings and never revives outside original bounds
|
||||
PASS: actual read-only look observer methods enforce explicit scope, pinned native camera/body/identity, normalized pose, terminal cancellation and original sample/time bounds
|
||||
...........
|
||||
----------------------------------------------------------------------
|
||||
Ran 11 tests in 0.067s
|
||||
|
||||
OK
|
||||
.......................
|
||||
----------------------------------------------------------------------
|
||||
Ran 23 tests in 0.029s
|
||||
|
||||
OK
|
||||
PASS: actual initial WAITING task/guide copy, configured duration, unchanged interruption and rounded progress; native task assertion pending
|
||||
........
|
||||
----------------------------------------------------------------------
|
||||
Ran 8 tests in 0.012s
|
||||
|
||||
OK
|
||||
PASS: actual inventory adapter scope, grid placement, sole compatible host, refresh reuse, rollback, foreign hierarchy refusal and exactly-once native delegation; native compatibility pending
|
||||
.................................................................................
|
||||
----------------------------------------------------------------------
|
||||
Ran 81 tests in 0.499s
|
||||
|
||||
OK
|
||||
......
|
||||
----------------------------------------------------------------------
|
||||
Ran 6 tests in 0.068s
|
||||
|
||||
OK
|
||||
.................
|
||||
----------------------------------------------------------------------
|
||||
Ran 17 tests in 0.004s
|
||||
|
||||
OK
|
||||
...........
|
||||
----------------------------------------------------------------------
|
||||
Ran 11 tests in 0.095s
|
||||
|
||||
OK
|
||||
.........
|
||||
----------------------------------------------------------------------
|
||||
Ran 9 tests in 0.378s
|
||||
|
||||
OK
|
||||
PASS: actual observer nonce, admission pins, baseline/menu sequencing, snapshots, bounded clocks/samples, cleanup and one-attempt latch; native untested
|
||||
PASS: actual corridor caps/height/hold and whole-rectangle survey bounds, terrain refusal, native trace refusal and exact certificate lineage; native route unqualified
|
||||
PASS: actual route entry, fixed corridor/target, hover hold, cancellation landing freeze, shared lease/capture/deadline gate and unchanged native startup/tick sequence
|
||||
PASS: finite opt-in route fixture, original native input order, meaningful physical-arrival evidence and guarded cleanup; no native launch
|
||||
PASS: actual Chat route step result dispatch and scoped completion/cleanup wiring; six real early-parser refusal paths leave no prefix/profile output
|
||||
PASS: actual retained-service fixture entry, immutable controller/token/deadline/count bindings, observer getter and cleanup ownership ordering; native route validation pending
|
||||
PASS: actual measured cancellation gate, one-shot retained service Stop, no premature drain, immutable lease, fresh real controller readback and separate physical cancellation result policy
|
||||
PASS: actual rough-intel objective selection, exact precedence, source grid dimensions and unchanged other-phase dispatch; native UI pending
|
||||
.................................
|
||||
----------------------------------------------------------------------
|
||||
Ran 33 tests in 0.118s
|
||||
|
||||
OK
|
||||
...............
|
||||
----------------------------------------------------------------------
|
||||
Ran 15 tests in 0.030s
|
||||
|
||||
OK
|
||||
PASS: actual preparation status scope, persistent updates, spinner restoration, placeholder replacement/deletion/destruction, native observation persistence/timeout; rendering remains native-pending
|
||||
PASS: replaced respawn system receives frame updates, disabled updater wakes, stale/non-Escape binding refused; terminal and stale preload leases release black overlay
|
||||
PASS: actual guide ownership and scoped timer cancellation, current-controller preservation/reacquisition, hint retry/dedup and observer boundaries; native UI not exercised
|
||||
PASS: actual native-end shutdown, existing terminal snapshots, reentrancy, unchanged native end data and stale preparation guards
|
||||
....
|
||||
----------------------------------------------------------------------
|
||||
Ran 4 tests in 1.296s
|
||||
|
||||
OK
|
||||
PASS: actual three-state result wording and UI refresh; stale winner IDs never manufacture escape
|
||||
...........
|
||||
----------------------------------------------------------------------
|
||||
Ran 11 tests in 0.115s
|
||||
|
||||
OK
|
||||
PASS: actual immutable target, bounded autohover demand, drift refusal, five-second hold and unchanged qualification/deadline
|
||||
PASS: actual admission attempt budget bounds blocked/missing prerequisites; preparation, spent life and async pending remain protected
|
||||
PASS: delayed admission retry retains controller ownership across same-account recycled connection IDs
|
||||
PASS: actual scene deadline overrides delayed native preload only for rejection; late completion cannot assign, ordinary verified admission preserved
|
||||
PASS: actual action permission matrix unchanged; useful phase/intel/consciousness denials, stale reason cleared, native door denial preserved; no native UI claim
|
||||
.....
|
||||
----------------------------------------------------------------------
|
||||
Ran 5 tests in 0.223s
|
||||
|
||||
OK
|
||||
PASS: actual aircraft cancellation/stage rules, ground-only completion, expiry/capture faults, input ownership and no physical shortcuts
|
||||
PASS: actual exact-instance single-use qualification, native-clock staleness/movement refusal, footprint bounds and ownership-safe ground/fault cleanup
|
||||
PASS: actual optional screenshot helper flag/identity/world/life revalidation, one queued attempt, delayed capture and mission/world cleanup; no native image/presentation claim
|
||||
PASS: actual yard diagnostic exact registered prison ownership, eight native-bound corner projections, no root-sibling escape, bounded duplicate/deep/wide hierarchy traversal; native projection/mask still unmeasured
|
||||
PASS: actual CurrentActor, SpawnPosition and observer-selection methods reject pending/unregistered/replaced/recycled/foreign bodies; canonical live selection and roster-corpse cycling, unconscious following and prison/geometry fallback preserved; native boundaries adapted
|
||||
PASS: actual native-map fixture ownership, cleanup and callback evidence fail closed; native execution remains separate
|
||||
PASS: actual shared-map callbacks bind exact map/config/root, preserve replacement UI/camera, defer focus, and remove only owned delayed work
|
||||
PASS: actual Intel/HQ methods and one-shot qualified readiness handoff deliver late actors once; duplicate readiness, accepted spawn, pickup/drop, death and original negative rolls do not mint assignments
|
||||
PASS: Workbench-only read accessor rejects unknown/nonserver identities; Chat observes all distinct ready crew before existing shell-depletion mutation
|
||||
PASS: actual native-event latch survives deselection, requires exact activity/order, detaches before cleanup, preserves failure/timeout and never infers completion from physical shot count
|
||||
.........
|
||||
----------------------------------------------------------------------
|
||||
Ran 9 tests in 0.115s
|
||||
|
||||
OK
|
||||
PASS: actual refresh-fixture gates pin immutable observations/actual downlinks/original activity, reject unaccepted or relabelled commits, stop queueing early and require all queued contacts claimed before replay
|
||||
..........................
|
||||
----------------------------------------------------------------------
|
||||
Ran 26 tests in 0.201s
|
||||
|
||||
OK
|
||||
PASS: actual refresh scheduler/delivery/cancellation/projectile methods reject interrupted or replayed reports, retain committed ownership, preserve immutable snapshots/aim geometry and isolate stopped or replaced orders; native radio/crew behavior remains separate
|
||||
.....................
|
||||
----------------------------------------------------------------------
|
||||
Ran 21 tests in 0.037s
|
||||
|
||||
OK
|
||||
...........
|
||||
----------------------------------------------------------------------
|
||||
Ran 11 tests in 0.039s
|
||||
|
||||
OK
|
||||
PASS: actual full-salvo gates require eight fresh committed physical launches, natural closure and exact finite inventory; reject partial/extra/replayed events
|
||||
PASS: actual reason/availability guidance and refresh matrix; no-target copy omits cycling, hint retry retained, existing command/admin paths unchanged; native UI pending
|
||||
PASS: actual client camera policy closes immediately on healing or mission end; late unconscious metadata cannot keep the view active
|
||||
PASS: actual input dispatch, one press per edge, menu-held suppression; actual revival camera handoff with editor close/retry, missing camera, replacement body and stopped round
|
||||
................usage: test_native_package.py [-h] [--project {core}] --session SESSION
|
||||
--compat COMPAT [--steam STEAM]
|
||||
[--timeout TIMEOUT]
|
||||
[--external-addons EXTERNAL_ADDONS]
|
||||
[--silent-workbench | --exit-after-init]
|
||||
[--continue-on-failure]
|
||||
test_native_package.py: error: argument --exit-after-init: not allowed with argument --silent-workbench
|
||||
................................
|
||||
----------------------------------------------------------------------
|
||||
Ran 48 tests in 13.594s
|
||||
|
||||
OK
|
||||
.......
|
||||
----------------------------------------------------------------------
|
||||
Ran 7 tests in 0.264s
|
||||
|
||||
OK
|
||||
...............
|
||||
----------------------------------------------------------------------
|
||||
Ran 15 tests in 2.864s
|
||||
|
||||
OK
|
||||
....
|
||||
----------------------------------------------------------------------
|
||||
Ran 4 tests in 0.329s
|
||||
|
||||
OK
|
||||
....
|
||||
----------------------------------------------------------------------
|
||||
Ran 4 tests in 0.067s
|
||||
|
||||
OK
|
||||
PASS: actual finite-courier age, token, exact ownership/callback and delivered-status admission reject stale, replayed, captured, canceled and ambiguous work
|
||||
PASS: actual native-gun ownership gate rejects player/foreign/replaced/dead occupant, faction change, missing seat and missing registry
|
||||
PASS: four-battery courier selection preserves pending trip/report/transfer identity, skips unavailable crews, and selects the next depleted battery without new stock
|
||||
PASS: 64 bounded distinct storage candidates; native gates, five-store barrier and finite-stock ownership retained; native placement pending
|
||||
PASS: 128 coarse+80 local refinement+169 airport grid candidates retain all native clearance gates; real terrain untested
|
||||
PASS: actual prison registration/crossing policies reject missing/duplicate/destroyed initial gate, incomplete ownership/scan, outside-only body, jumps and stale samples; physical exit independent of later gate damage
|
||||
PASS: actual prison door execution blocks direct AI/UI bypass while locked and delegates unchanged native action once after unlock and permission approval
|
||||
..................
|
||||
----------------------------------------------------------------------
|
||||
Ran 18 tests in 2.105s
|
||||
|
||||
OK
|
||||
.....
|
||||
----------------------------------------------------------------------
|
||||
Ran 5 tests in 1.080s
|
||||
|
||||
OK
|
||||
PASS: native local-admission snapshot rejects changed life/key/body/participant/pending state; authentication is not simulated
|
||||
PASS: actual mortar report ledger prevents duplicate response after cancellation, expiry and interleaved reports; native scheduler separate
|
||||
.........
|
||||
----------------------------------------------------------------------
|
||||
Ran 9 tests in 0.012s
|
||||
|
||||
OK
|
||||
....
|
||||
----------------------------------------------------------------------
|
||||
Ran 4 tests in 0.148s
|
||||
|
||||
OK
|
||||
PASS: actual aim renewal requires fresh same-report solve and original-command equivalence; native firing untested
|
||||
.........
|
||||
----------------------------------------------------------------------
|
||||
Ran 9 tests in 0.045s
|
||||
|
||||
OK
|
||||
PASS: actual startup/generation/ownership/timeout/callback policies and native-counter wait; integration preserves one-shot allocation and pending-crew cancellation
|
||||
PASS: rapid mortar cycle counts eight physical rounds once and waits for native completion without a ninth aim or shell
|
||||
PASS: actual probe binds native events to fresh immutable commits, permits delayed emission, rejects unrelated expiry closure and premature stop
|
||||
PASS: actual noSplash Load body requires both explicit diagnostic and noSplash, preserves vanilla otherwise, and handles repeated Load/reload
|
||||
PASS: actual fixture method permits one native resilience operation and restores either prior protection state, including failure paths
|
||||
PASS: actual safe-exit boundary policy, native action/door selection, stop/cache cleanup, separate old mechanism and opt-in runner contracts
|
||||
PASS: actual one-shot deadline/stability policies and preparation ownership, fuel, cleanup integration contracts
|
||||
PASS: pending-only cancellation retires copied instance intent, preserves physical/control actors, and stops once
|
||||
PASS: actual short-cast hit, upward support normal, no self support and no dynamic support
|
||||
PASS: actual committed-ticket structure preserves reservation after death, rejects missing bodies/seats and ends at observation expiry
|
||||
PASS: actual pending callback expires an empty-server reservation once, preserves its full lease, and cancels on completion/Stop
|
||||
PASS: rescue lease expiry/reordering, fresh five-second settling, independent rescue ranges and grounded upright aircraft motion boundaries
|
||||
PASS: requested guard population requires complete physical conscious membership before deadline
|
||||
......................................
|
||||
----------------------------------------------------------------------
|
||||
Ran 38 tests in 0.023s
|
||||
|
||||
OK
|
||||
..........
|
||||
----------------------------------------------------------------------
|
||||
Ran 10 tests in 0.004s
|
||||
|
||||
OK
|
||||
.....
|
||||
----------------------------------------------------------------------
|
||||
Ran 5 tests in 0.893s
|
||||
|
||||
OK
|
||||
PASS: authored radio/optional-site bounds and physical horizontal/vertical boundaries
|
||||
...
|
||||
----------------------------------------------------------------------
|
||||
Ran 3 tests in 0.001s
|
||||
|
||||
OK
|
||||
PASS: all phase transitions, terminal states, defence boundaries, stale/future observations, intel discovery
|
||||
PASS: Core document-discovery alias, companion-only alias exclusion, strict integer parsing and setting boundaries
|
||||
PASS: player admission phase/life/identity/controller matrix, preload displacement limits, pending reservation overlap and owner exclusion
|
||||
PASS: actual gate and pre-inventory document guards reject noncanonical/faction/life/disconnect/server mismatches; canonical reconnect and unconscious carried intel preserved
|
||||
PASS: WB-only native fault injection restores both body mutations before checks/returns and requires eligible held-document negative/positive proof; runtime pending
|
||||
PASS: actual discovery coordinates disclose stable 500m cell center until identified, then exact point, including negative/boundary coordinates
|
||||
PASS: actual local admission context/selection/latch, same-round late identity, replacement/mode failure, fresh round and untouched network path
|
||||
PASS: prison search packs 16 unique 3m-spaced inside-wall centers, prioritizes inner/edge positions and never bypasses clearance
|
||||
PASS: physical body occupancy rejects overlap, permits diagonal neighboring slots, and excludes own body and unrelated broad-phase bounds
|
||||
PASS: recovery state excludes dead bodies, preserves reservations, requires controlled rescuers and distinguishes empty/all-dead teams
|
||||
PASS: actual native-probe lifecycle/counters with doubled boundaries; fixed deadline, exact seven sources, true forwarding, async close, no late updates and selector wiring
|
||||
PASS: actual one-argument adapter, explicit refresh, native initialization flag, duplicate/blood ownership, rebind/detach/destruction and foreign-mode transparency
|
||||
PASS: authority-scoped slow recovery, bleeding pauses resilience, medicine unaffected, player-only lethal damage cap without healing
|
||||
PASS: bleeding severity survives low health, retains armour, causes no knockout and restores the actual damage/blood-loss cap
|
||||
PASS: viable passive recovery survives native delay; bleeding, disabled/full effects and low-blood resilience do not block defeat
|
||||
PASS: every minute round-trips, malformed clocks rejected, defaults limited to added keys, progression bounds and day duration aligned
|
||||
PASS: native settings policy matches calendar boundaries 1900-2050, date/profile parsing is strict, authored defaults preserve old worlds
|
||||
PASS: view-distance bounds, default, save failures, command parsing, temporary ownership, server/platform limits and lifecycle wiring
|
||||
.....
|
||||
----------------------------------------------------------------------
|
||||
Ran 5 tests in 0.609s
|
||||
|
||||
OK
|
||||
.
|
||||
----------------------------------------------------------------------
|
||||
Ran 1 test in 0.364s
|
||||
|
||||
OK
|
||||
PASS: radio authorization/discovery/phase matrix, exact distance limits, defender handover, interruption, empty samples, clock regression and duration boundary
|
||||
PASS: actual radio feedback policy, initial wait, interruption persistence, resumption and terminal/new-round reset
|
||||
...............
|
||||
----------------------------------------------------------------------
|
||||
Ran 15 tests in 2.047s
|
||||
|
||||
OK
|
||||
..............................................
|
||||
----------------------------------------------------------------------
|
||||
Ran 46 tests in 0.937s
|
||||
|
||||
OK
|
||||
PASS: legacy values preserved, unsupported fields reported, invalid data rejected, existing files protected, runtime bounds aligned
|
||||
PASS: failed initial settings promotion leaves defaults writable after restart; prior/fallback saves survive copy, readback and mismatch faults
|
||||
PASS: real-carrier shortest-hop paths, 500m boundary, three-hop cap, no-manpack failure, three-second originating-call interruption, unchanged downlink hop timing, completed-hop survival, interrupted final uplink, radio loss, capture, motion, timeout, reset and network bounds
|
||||
PASS: migrated aircraft availability policy (controller migration still pending)
|
||||
PASS: migrated salvo offsets are deterministic, spread and bounded (native firing and complete salvo qualification are separate)
|
||||
PASS: 37 prefabs have unique saved root entity IDs
|
||||
PASS: 299 original script entries tracked across 18 unfinished responsibilities
|
||||
PASS: 1 isolated addons, acyclic dependencies, 59 unique resources, exact vanilla/authorized external references
|
||||
All repository checks passed. Native compilation and multiplayer tests are separate requirements.
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"date": "2026-10-06",
|
||||
"task": "Configurable factory/infrastructure guards with elevated fixed posts and mobile HQ response half",
|
||||
"default_count": 8,
|
||||
"range": [
|
||||
0,
|
||||
16
|
||||
],
|
||||
"activation_metres": 1400,
|
||||
"minimum_player_distance_metres": 1000,
|
||||
"repository_checks": "passed",
|
||||
"targeted_policy_checks": "passed, including additional final classification/admission and admin-alias regressions",
|
||||
"native_result": {
|
||||
"reason": "completed",
|
||||
"exit": -15
|
||||
},
|
||||
"native_fixture": {
|
||||
"terrain": "Everon",
|
||||
"sites": 1,
|
||||
"stored_structures": 14,
|
||||
"total_soldiers": 8,
|
||||
"fixed_guards": 4,
|
||||
"hq_response_soldiers": 4,
|
||||
"fixed_guard_post": "four separate light-tower platforms approximately 15.11 metres above terrain",
|
||||
"all_survived": true,
|
||||
"all_have_physical_radios": true,
|
||||
"each_fixed_guard_has_manpack": true,
|
||||
"fixed_groups_reserved_from_general_hq_orders": true,
|
||||
"response_group_hq_eligible": true,
|
||||
"observation_after_ai_release_seconds": 33,
|
||||
"script_errors": 0
|
||||
},
|
||||
"limits": [
|
||||
"Private fixture supplied synthetic distant observers and exercised production spawning, placement, registration and equipment fitting.",
|
||||
"No live multiplayer combat or all-terrain certification.",
|
||||
"Native menu rendering was not tested; authored layout structure and command routing were checked.",
|
||||
"Chimney/interior suitability depends on actual solid geometry; unsuitable posts fall back to navigable ground."
|
||||
],
|
||||
"sha256": {
|
||||
"README.md": "1703cd089a5883dfd505ab77d02c789e6c9593e5b7b4397887857ade6aca2866",
|
||||
"addons/core/Scripts/Game/ERR/00_Core/ERR_AdminMenu.c": "5de56c5f8ddc333f9b9f9e93cc3b05b0e4f2e4e4d2a9884a9f7c3ae14fbf5ac5",
|
||||
"addons/core/Scripts/Game/ERR/00_Core/ERR_AdminService.c": "5efeb5395ebf4b23706f9897f6df246293b483394b8f7ac7704345f4845ecb5a",
|
||||
"addons/core/Scripts/Game/ERR/00_Core/ERR_Settings.c": "e4a70957964c775bb47dccb43a69caa1261fd8725cd9c2f5ec7e97a3f853b7eb",
|
||||
"addons/core/Scripts/Game/ERR/10_AI/ERR_TownGarrisons.c": "1740dbf7b6862b4ca3fbb8d1b9b55b91bcdb44bb069752160d7b496118f21382",
|
||||
"addons/core/UI/layouts/ERR/AdminMenu.layout": "dcf02adf26d692b9bf6ec7a98d37e5ca1fd4a5790c72c4997de723f294877b49",
|
||||
"docs/town-garrisons.md": "bc43c4aa9c89ba131fba53b434572f301422ee3fb3f7d28040d490ce3fa83818",
|
||||
"tests/test_admin_menu.py": "e9b198c463bc65111f8cf9d38c337a632e164e79a60a906c03d5c8419ca578d9",
|
||||
"tests/test_admin_setting_policy.py": "9718cee001d8e56954e4191a72bdf9521df0ed164eb27e8628726723933bec9f",
|
||||
"tests/test_start_settings.py": "a4945a19d0e54f9e9dd167689eaed8a5ffd8c985e0efa86fd03bdefc73ee61cd",
|
||||
"tests/test_town_garrisons.py": "ee530bf004dbd06f7ff119f327f5697ac3bf070d87449f08ab3a16b5cadad3c0"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user