From c49f6008a68c3e48b7d70fb9f4cf564cdf8477c7 Mon Sep 17 00:00:00 2001 From: hided62 Date: Sun, 23 Aug 2026 12:01:17 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=8C=80=EA=B7=9C=EB=AA=A8=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=BC=EC=A1=B1=20=EC=86=8C=ED=99=98=20=EC=A4=91=EB=8B=A8?= =?UTF-8?q?=EC=9D=84=20=EB=B0=A9=EC=A7=80=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/sammo/Event/Action/RaiseInvader.php | 12 ++++++++++++ hwe/sammo/Scenario/GeneralBuilder.php | 17 ++++++++++++----- tests/ScenarioGeneralBuilderSpecialTest.php | 10 ++++++++++ 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/hwe/sammo/Event/Action/RaiseInvader.php b/hwe/sammo/Event/Action/RaiseInvader.php index 31124777..2c545500 100644 --- a/hwe/sammo/Event/Action/RaiseInvader.php +++ b/hwe/sammo/Event/Action/RaiseInvader.php @@ -100,6 +100,17 @@ class RaiseInvader extends \sammo\Event\Action } public function run(array $env) + { + $previousIgnoreUserAbort = ignore_user_abort(true); + try { + return $this->runToCompletion($env); + } + finally { + ignore_user_abort($previousIgnoreUserAbort !== 0); + } + } + + private function runToCompletion(array $env) { $db = DB::db(); @@ -196,6 +207,7 @@ class RaiseInvader extends \sammo\Event\Action ], true); $invaderNationIDList = []; + $env = GeneralBuilder::prepareEnvironment($env); refreshNationStaticInfo(); foreach ($cities as $cityObj) { if ($cityObj->level != 4) { diff --git a/hwe/sammo/Scenario/GeneralBuilder.php b/hwe/sammo/Scenario/GeneralBuilder.php index 498152bb..89112e35 100644 --- a/hwe/sammo/Scenario/GeneralBuilder.php +++ b/hwe/sammo/Scenario/GeneralBuilder.php @@ -539,11 +539,8 @@ class GeneralBuilder{ return $this->death; } - public function build($env){ - //scenario에 life==1인 경우 수명 제한이 없어지는 모양. - - - + public static function prepareEnvironment(array $env): array + { if(!key_exists('stored_icons', $env)){ try{ $text = \file_get_contents(\sammo\ServConfig::getSharedIconPath('../hook/list.json?1')); @@ -556,6 +553,16 @@ class GeneralBuilder{ $env['stored_icons'] = $storedIcons; } + return $env; + } + + public function build($env){ + //scenario에 life==1인 경우 수명 제한이 없어지는 모양. + + + + $env = static::prepareEnvironment($env); + $isFictionMode = (Util::array_get($env['fiction'], 0)!=0); $year = $env['year']; diff --git a/tests/ScenarioGeneralBuilderSpecialTest.php b/tests/ScenarioGeneralBuilderSpecialTest.php index fe37ca8e..58f6e36f 100644 --- a/tests/ScenarioGeneralBuilderSpecialTest.php +++ b/tests/ScenarioGeneralBuilderSpecialTest.php @@ -18,6 +18,16 @@ require_once __DIR__ . '/../hwe/sammo/Scenario/GeneralBuilder.php'; final class ScenarioGeneralBuilderSpecialTest extends TestCase { + public function testPreparedStoredIconsAreReusedWithoutChangingTheEnvironment(): void + { + $environment = [ + 'stored_icons' => ['.' => ['default.jpg']], + 'icon_path' => '.', + ]; + + self::assertSame($environment, GeneralBuilder::prepareEnvironment($environment)); + } + public function testAsiaPossessionScenarioWarSpecialsUseWarSlot(): void { $scenario = json_decode(