Raid Attacker Retreated Workflow

Version: 1.0.0 Category: gameplay Description: Detailed workflow for handling attackerRetreated raid outcome


Workflow: Handle Attacker Retreated Status

Step 1: Initiate Raid

Start raid on target planet.

Action: raid

Request:

{
  "action": "raid",
  "type": "raid",
  "target": "2-1",
  "fleetId": "9-1",
  "verify": {
    "playerOnline": true,
    "fleetAway": true,
    "commandShipOnline": true,
    "proofOfWork": true
  }
}

Step 2: Wait for Raid Completion

Wait for raid to complete (may result in retreat).

Polling:

Parameter Value
Endpoint GET /structs/planet/{planetId}
Interval 2 seconds
Max Attempts 60
Check Field planet.raidStatus

Step 3: Check Raid Outcome

Query raid outcome status.

Endpoint: GET /structs/planet/{planetId}

Expected Fields:

Field Expected Value
planet.raidStatus complete
planet.raidOutcome.status attackerRetreated

Step 4: Handle Attacker Retreated Status

Process attackerRetreated outcome.

Property Value
Resources Gained false
Resources Lost false
Fleet Intact true

Actions:

  1. No resources transferred
  2. Fleet remains intact
  3. No damage to attacker or defender
  4. Raid considered incomplete

Step 5: Verify Fleet Status

Confirm fleet is intact and ready.

Endpoint: GET /structs/fleet/{fleetId}

Expected Fields:

Field Expected Value
fleet.status away
fleet.ships intact
fleet.commandShip online

Step 6: Verify Resource Status

Confirm no resources were transferred.

Attacker ResourcesGET /structs/player/{attackerId}:

Field Expected Value
player.alphaMatter unchanged
player.ore unchanged

Defender ResourcesGET /structs/player/{defenderId}:

Field Expected Value
player.alphaMatter unchanged
player.ore unchanged

Raid Outcome Scenarios

attackerRetreated

Attacker retreated from raid before completion.

Property Value
Resources Gained false
Resources Lost false
Fleet Intact true
Raid Complete false

Example Response:

{
  "status": "raidComplete",
  "outcome": {
    "status": "attackerRetreated",
    "victory": false,
    "alphaMatterGained": 0,
    "oreStolen": 0,
    "unitsDestroyed": [],
    "resourcesLost": {
      "ore": 0
    }
  }
}

victory

Attacker successfully completed raid.

Property Value
Resources Gained true
Resources Lost false
Fleet Intact true
Raid Complete true

Example Response:

{
  "status": "raidComplete",
  "outcome": {
    "status": "victory",
    "victory": true,
    "alphaMatterGained": 5,
    "oreStolen": 10,
    "unitsDestroyed": ["enemy-struct-id"]
  }
}

defeat

Attacker lost the raid.

Property Value
Resources Gained false
Resources Lost false
Fleet Intact false
Raid Complete true

Example Response:

{
  "status": "raidComplete",
  "outcome": {
    "status": "defeat",
    "victory": false,
    "alphaMatterGained": 0,
    "oreStolen": 0,
    "unitsDestroyed": ["attacker-struct-id"]
  }
}

Retreat Handling Patterns

Pattern 1: Strategic Retreat

Pattern 2: Tactical Withdrawal

Pattern 3: Change of Plans


Resource Management on Retreat

When an attacker retreats, no resources are transferred between attacker and defender.

Attacker

Resource Status
Alpha Matter unchanged
Ore unchanged
Fleet intact
Losses none

Defender

Resource Status
Alpha Matter unchanged
Ore unchanged
Defenses intact
Losses none

Outcome Comparison

Outcome Attacker Alpha Matter Attacker Ore Attacker Fleet Defender Resources Lost Defender Defenses
victory positive positive (stolen) intact positive (ore lost) possibly damaged
defeat 0 0 possibly damaged 0 intact
attackerRetreated 0 0 intact 0 intact

Status Checking

Check Raid Status

Endpoint: GET /structs/planet/{planetId}

Fields to check:

Check if Attacker Retreated

const isAttackerRetreated = (raidOutcome) => raidOutcome.status === 'attackerRetreated';
def is_attacker_retreated(raid_outcome):
    return raid_outcome.status == 'attackerRetreated'
func isAttackerRetreated(raidOutcome RaidOutcome) bool {
    return raidOutcome.Status == "attackerRetreated"
}

Handle All Outcomes

switch (raidOutcome.status) {
  case 'victory':
    handleVictory(raidOutcome);
    break;
  case 'defeat':
    handleDefeat(raidOutcome);
    break;
  case 'attackerRetreated':
    handleRetreat(raidOutcome);
    break;
}
if raid_outcome.status == 'victory':
    handle_victory(raid_outcome)
elif raid_outcome.status == 'defeat':
    handle_defeat(raid_outcome)
elif raid_outcome.status == 'attackerRetreated':
    handle_retreat(raid_outcome)

Streaming Events

PlanetRaidStatusEvent

Streaming event for raid status changes.

Event Type: PlanetRaidStatusEvent

Schema:

Field Type Values
category string raid_status
data.status string victory, defeat, attackerRetreated
data.attackerId string Player ID
data.planetId string Planet ID

Example Event:

{
  "category": "raid_status",
  "data": {
    "status": "attackerRetreated",
    "attackerId": "1-11",
    "planetId": "2-1"
  }
}

Examples

Scenario 1: Attacker Retreats Due to Strong Defenses

Scenario 2: Attacker Retreats to Preserve Fleet

Scenario 3: Attacker Retreats After Change of Plans