diff --git a/app/GameMessages/BattleReport.php b/app/GameMessages/BattleReport.php index b076f519d..979172ed7 100644 --- a/app/GameMessages/BattleReport.php +++ b/app/GameMessages/BattleReport.php @@ -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)) { @@ -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; @@ -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, @@ -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, diff --git a/app/GameMissions/AttackMission.php b/app/GameMissions/AttackMission.php index 6a62ef083..b76a8a17b 100644 --- a/app/GameMissions/AttackMission.php +++ b/app/GameMissions/AttackMission.php @@ -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[] = [ diff --git a/resources/lang/en/t_ingame.php b/resources/lang/en/t_ingame.php index a47653488..7bcfb9671 100644 --- a/resources/lang/en/t_ingame.php +++ b/resources/lang/en/t_ingame.php @@ -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', diff --git a/resources/lang/it/t_ingame.php b/resources/lang/it/t_ingame.php index 520006f73..2e90bef0a 100644 --- a/resources/lang/it/t_ingame.php +++ b/resources/lang/it/t_ingame.php @@ -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', diff --git a/resources/lang/nl/t_ingame.php b/resources/lang/nl/t_ingame.php index e5b42c3a4..ad75b5c05 100644 --- a/resources/lang/nl/t_ingame.php +++ b/resources/lang/nl/t_ingame.php @@ -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', diff --git a/resources/views/ingame/messages/templates/battle_report_full.blade.php b/resources/views/ingame/messages/templates/battle_report_full.blade.php index a0ceb6081..3e06d447b 100644 --- a/resources/views/ingame/messages/templates/battle_report_full.blade.php +++ b/resources/views/ingame/messages/templates/battle_report_full.blade.php @@ -425,6 +425,44 @@ class="txt_link">[{{ $defender_planet_coords }}] @endif +@if ($wreckage_count > 0 && !$viewer_is_attacker) +
+
+
+ {{ __('t_ingame.messages.battle_wreckage_created') }}: {{ $wreckage_count }} +
+ +@endif + +@if ($attacker_wreckage_count > 0 && $viewer_is_attacker) +
+
+
+ {{ __('t_ingame.messages.battle_attacker_wreckage') }}: {{ $attacker_wreckage_count }} +
+ +@endif +