Integrate radio-delivered convoy cover and conservative squad ammunition reports
This commit is contained in:
@@ -11,6 +11,7 @@ class ERR_HQStatusReport
|
||||
int Fit;
|
||||
int ConfirmedLosses;
|
||||
ref array<int> DeathSlots = {};
|
||||
ref ERR_HQAmmoSnapshot AmmoState;
|
||||
float ObservedAt = -1;
|
||||
}
|
||||
|
||||
@@ -23,6 +24,7 @@ class ERR_HQWatchRules
|
||||
if (!ERR_HQPursuitRules.PositionValid(report.Position) || !ERR_HQPursuitRules.Finite(report.ObservedAt)
|
||||
|| !ERR_HQPursuitRules.Finite(now) || report.ObservedAt < 0 || now < report.ObservedAt
|
||||
|| now - report.ObservedAt > 120000) return false;
|
||||
if (report.AmmoState && !report.AmmoState.Valid(report.Count)) return false;
|
||||
return report.Strength > 0 && report.Strength <= 32 && report.Count >= 0
|
||||
&& report.Count <= report.Strength && report.Fit >= 0 && report.Fit <= report.Count
|
||||
&& report.ConfirmedLosses >= 0 && report.ConfirmedLosses <= report.Strength - report.Count;
|
||||
@@ -62,6 +64,7 @@ class ERR_HQWatchEntry
|
||||
int Count = -1;
|
||||
int Fit = -1;
|
||||
int ConfirmedLosses;
|
||||
ref ERR_HQAmmoSnapshot AmmoState;
|
||||
ref ERR_HQDeliveredCasualties Casualties = new ERR_HQDeliveredCasualties();
|
||||
float LastBodyDeliveredAt = -1;
|
||||
float ObservedAt = -1;
|
||||
@@ -87,6 +90,15 @@ class ERR_HQWatch
|
||||
}
|
||||
int ConfirmedLosses() { return m_ConfirmedLosses; }
|
||||
int SquadLimit(int baseline) { return ERR_HQWatchRules.SquadLimit(baseline, m_ConfirmedLosses); }
|
||||
// Conservative new-task veto, never a live inventory query or an active-order cancellation.
|
||||
// A fresh complete own-roster check-in is required; silence or new bodily losses make no new ammo claims.
|
||||
bool ArmedSearchBlocked(string sourceId, float now)
|
||||
{
|
||||
ERR_HQWatchEntry entry = Find(sourceId);
|
||||
return entry && !entry.Closed && entry.AmmoState && entry.AmmoState.Members == entry.Count
|
||||
&& ERR_HQPursuitRules.Finite(now) && entry.ObservedAt >= 0 && now >= entry.ObservedAt
|
||||
&& now - entry.ObservedAt <= 180000 && entry.AmmoState.KnownSmallArmsEmpty();
|
||||
}
|
||||
protected ERR_HQWatchEntry Create(string sourceId, int strength)
|
||||
{
|
||||
// Closed identities remain tombstones: replays cannot recreate a formation.
|
||||
@@ -130,6 +142,8 @@ class ERR_HQWatch
|
||||
if (!entry.Casualties.AcceptStatus(report.DeathSlots, report.ConfirmedLosses, report.Count)) return false;
|
||||
entry.MessageId = report.MessageId; entry.Position = report.Position;
|
||||
entry.Count = report.Count; entry.Fit = report.Fit;
|
||||
entry.AmmoState = null;
|
||||
if (report.AmmoState) entry.AmmoState = report.AmmoState.Snapshot();
|
||||
entry.ObservedAt = report.ObservedAt; entry.LastDeliveredAt = now;
|
||||
entry.AskedAt = -1; entry.NextAttempt = 0; entry.Investigating = false;
|
||||
ApplyLosses(entry);
|
||||
|
||||
Reference in New Issue
Block a user