Skip to content
31 changes: 31 additions & 0 deletions app/GameMessages/BattleReport.php
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,17 @@ private function getBattleReportParams(): array
$defenderReapersUsed = $reaperCargoCapacity > 0 ? (int)ceil($defenderCollectedDebrisResources->sum() / $reaperCargoCapacity) : 0;
$totalReapersUsed = $attackerReapersUsed + $defenderReapersUsed;

$wreckageCount = 0;
$wreckageUnits = new UnitCollection();
if (!empty($this->battleReportModel->wreckage)) {
foreach ($this->battleReportModel->wreckage as $machine_name => $count) {
$wreckageCount += $count;
if ($count > 0) {
$wreckageUnits->addUnit(ObjectService::getUnitObjectByMachineName($machine_name), $count);
}
}
}

$repairedDefensesCount = 0;
$repairedDefenses = new UnitCollection();
if (!empty($this->battleReportModel->repaired_defenses)) {
Expand All @@ -277,6 +288,17 @@ private function getBattleReportParams(): array
}
}

$attackerWreckageCount = 0;
$attackerWreckageUnits = new UnitCollection();
if (!empty($this->battleReportModel->general['attacker_wreckage'])) {
foreach ($this->battleReportModel->general['attacker_wreckage'] as $machine_name => $count) {
$attackerWreckageCount += $count;
if ($count > 0) {
$attackerWreckageUnits->addUnit(ObjectService::getUnitObjectByMachineName($machine_name), $count);
}
}
}

$moonExisted = false;
$moonChance = 0;
$moonCreated = false;
Expand Down Expand Up @@ -375,9 +397,14 @@ private function getBattleReportParams(): array
}
}

// Determine if the message recipient is the attacker or the defender.
// This is used to show only the relevant wreckage section to each player.
$viewerIsAttacker = (int)$this->message->user_id === (int)$this->battleReportModel->attacker['player_id'];

return [
'subject' => $this->getSubject(),
'from' => $this->getFrom(),
'viewer_is_attacker' => $viewerIsAttacker,
'report_datetime' => $this->getDateFormatted(),
'attacker_name' => $attacker_name,
'attacker_planet_name' => $attacker_planet_name,
Expand Down Expand Up @@ -405,8 +432,12 @@ private function getBattleReportParams(): array
'remaining_debris_resources' => $remainingDebrisResources,
'remaining_debris_recyclers_needed' => $remainingDebrisRecyclersNeeded,
'total_reapers_used' => $totalReapersUsed,
'wreckage_count' => $wreckageCount,
'wreckage_units' => $wreckageUnits,
'repaired_defenses_count' => $repairedDefensesCount,
'repaired_defenses' => $repairedDefenses,
'attacker_wreckage_count' => $attackerWreckageCount,
'attacker_wreckage_units' => $attackerWreckageUnits,
'moon_existed' => $moonExisted,
'moon_chance' => $moonChance,
'moon_created' => $moonCreated,
Expand Down
29 changes: 29 additions & 0 deletions app/GameMissions/AttackMission.php
Original file line number Diff line number Diff line change
Expand Up @@ -728,6 +728,35 @@ private function createBattleReport(PlayerService $attackPlayer, PlanetService $

$report->repaired_defenses = $battleResult->repairedDefenses->toArray();

// Save defender's wreck field data (ships recoverable via Space Dock)
if (!empty($battleResult->wreckField) && ($battleResult->wreckField['formed'] ?? false)) {
$wreckageData = [];
foreach ($battleResult->wreckField['ships'] as $ship) {
$wreckageData[$ship['machine_name']] = $ship['quantity'];
}
$report->wreckage = $wreckageData;
}

// Save General class attacker's wreck field in the report.
// Shown only if the attacker is General class AND at least one ship survived
// (survivor condition ensures there is a return mission to transport the wreckage back).
if ($characterClassService->isGeneral($attackPlayer->getUser())
&& $battleResult->attackerUnitsResult->getAmount() > 0) {
$attackerUnitsLost = clone $battleResult->attackerUnitsStart;
$attackerUnitsLost->subtractCollection($battleResult->attackerUnitsResult);
$generalWreckData = $this->calculateAttackerWreckField($attackerUnitsLost, $battleResult->attackerUnitsStart);

if ($generalWreckData !== null) {
$generalWreckForReport = [];
foreach ($generalWreckData as $ship) {
$generalWreckForReport[$ship['machine_name']] = $ship['quantity'];
}
$general = $report->general;
$general['attacker_wreckage'] = $generalWreckForReport;
$report->general = $general;
}
}

$rounds = [];
foreach ($battleResult->rounds as $round) {
$rounds[] = [
Expand Down
4 changes: 3 additions & 1 deletion resources/lang/en/t_ingame.php
Original file line number Diff line number Diff line change
Expand Up @@ -618,7 +618,9 @@
'battle_defender' => 'Defender',
'battle_resources' => 'Resources',
'battle_loot' => 'Loot',
'battle_debris_new' => 'Debris field (newly created)',
'battle_debris_new' => 'Debris field (newly created)',
'battle_wreckage_created' => 'Wreckage created',
'battle_attacker_wreckage' => 'Attacker wreckage',
'battle_repaired' => 'Actually repaired',
'battle_moon_chance' => 'Moon Chance',

Expand Down
4 changes: 3 additions & 1 deletion resources/lang/it/t_ingame.php
Original file line number Diff line number Diff line change
Expand Up @@ -597,7 +597,9 @@
'battle_defender' => 'Difensore',
'battle_resources' => 'Risorse',
'battle_loot' => 'Bottino',
'battle_debris_new' => 'Campo di detriti (appena creato)',
'battle_debris_new' => 'Campo di detriti (appena creato)',
'battle_wreckage_created' => 'Relitti creati',
'battle_attacker_wreckage' => 'Relitti dell\'attaccante',
'battle_repaired' => 'Difese riparate',
'battle_moon_chance' => 'Probabilità di luna',

Expand Down
4 changes: 3 additions & 1 deletion resources/lang/nl/t_ingame.php
Original file line number Diff line number Diff line change
Expand Up @@ -597,7 +597,9 @@
'battle_defender' => 'Verdediger',
'battle_resources' => 'Grondstoffen',
'battle_loot' => 'Buit',
'battle_debris_new' => 'Puin-veld (nieuw aangemaakt)',
'battle_debris_new' => 'Puin-veld (nieuw aangemaakt)',
'battle_wreckage_created' => 'Wrakstukken ontstaan',
'battle_attacker_wreckage' => 'Aanvaller wrakstukken',
'battle_repaired' => 'Gerepareerd',
'battle_moon_chance' => 'Maankans',

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,44 @@ class="txt_link">[{{ $defender_planet_coords }}]</a></span></span>
</ul>
@endif

@if ($wreckage_count > 0 && !$viewer_is_attacker)
<div class="section_title">
<div class="c-left"></div>
<div class="c-right"></div>
<span class="title_txt">{{ __('t_ingame.messages.battle_wreckage_created') }}: {{ $wreckage_count }}</span>
Comment thread
piciolo marked this conversation as resolved.
</div>
<ul class="detail_list clearfix wreckageContainer">
@foreach ($wreckage_units->units as $unit)
<li class="detail_list_el">
<div class="wreckage_icon float_left">
<img width="28" height="28" alt="{{ $unit->unitObject->title }}" src="{{ asset('img/objects/units/' . $unit->unitObject->assets->imgMicro) }}">
</div>
<span class="detail_list_txt">{{ $unit->unitObject->title }}</span>
<span class="fright" style="margin-right: 10px">{{ $unit->amount }}</span>
</li>
@endforeach
</ul>
@endif

@if ($attacker_wreckage_count > 0 && $viewer_is_attacker)
<div class="section_title">
<div class="c-left"></div>
<div class="c-right"></div>
<span class="title_txt">{{ __('t_ingame.messages.battle_attacker_wreckage') }}: {{ $attacker_wreckage_count }}</span>
Comment thread
piciolo marked this conversation as resolved.
</div>
<ul class="detail_list clearfix attackerWreckageContainer">
@foreach ($attacker_wreckage_units->units as $unit)
<li class="detail_list_el">
<div class="wreckage_icon float_left">
<img width="28" height="28" alt="{{ $unit->unitObject->title }}" src="{{ asset('img/objects/units/' . $unit->unitObject->assets->imgMicro) }}">
</div>
<span class="detail_list_txt">{{ $unit->unitObject->title }}</span>
<span class="fright" style="margin-right: 10px">{{ $unit->amount }}</span>
</li>
@endforeach
</ul>
@endif

<!-- WF information -->
<!-- attacker WF information -->
<p class="detail_txt">
Expand Down
Loading