From 7cffa68d04f3b082d1bd378feb4809d15410995d Mon Sep 17 00:00:00 2001 From: Hide_D Date: Tue, 21 Jan 2025 16:02:24 +0000 Subject: [PATCH] =?UTF-8?q?UnitConstBase=20=EC=A0=81=EC=9A=A9=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/sammo/GameUnitConstBase.php | 78 ++++++++++--------- hwe/sammo/GameUnitConstraint/Impossible.php | 18 +++++ hwe/sammo/GameUnitConstraint/ReqCities.php | 5 +- .../GameUnitConstraint/ReqMinRelYear.php | 24 +----- hwe/sammo/GameUnitConstraint/ReqRegions.php | 4 +- hwe/sammo/GameUnitConstraint/ReqTech.php | 1 + 6 files changed, 69 insertions(+), 61 deletions(-) create mode 100644 hwe/sammo/GameUnitConstraint/Impossible.php diff --git a/hwe/sammo/GameUnitConstBase.php b/hwe/sammo/GameUnitConstBase.php index 5ed2cc98..c8d23b22 100644 --- a/hwe/sammo/GameUnitConstBase.php +++ b/hwe/sammo/GameUnitConstBase.php @@ -1,6 +1,14 @@ 1.2], ['성벽입니다.','생성할 수 없습니다.'], null, ['che_선제사격시도', 'che_선제사격발동'], null @@ -45,7 +53,7 @@ class GameUnitConstBase{ [ 1100, self::T_FOOTMAN, '보병', 100, 150, 7, 10, 0, 9, 9, - 0, null, null, 0, + [], [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8], ['표준적인 보병입니다.','보병은 방어특화이며,','상대가 회피하기 어렵습니다.'], @@ -54,7 +62,7 @@ class GameUnitConstBase{ [ 1101, self::T_FOOTMAN, '청주병', 100, 200, 7, 10, 0, 10, 11, - 1000, null, ['중원'], 0, + [new ReqTech(1000), new ReqRegions('중원')], [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8], ['저렴하고 튼튼합니다.'], @@ -63,7 +71,7 @@ class GameUnitConstBase{ [ 1102, self::T_FOOTMAN, '수병', 150, 150, 7, 10, 0, 11, 10, - 1000, null, ['오월'], 0, + [new ReqTech(1000), new ReqRegions('오월')], [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8], ['저렴하고 강력합니다.'], @@ -72,7 +80,7 @@ class GameUnitConstBase{ [ 1103, self::T_FOOTMAN, '자객병', 100, 150, 8, 20, 0, 10, 10, - 2000, ['저'], null, 0, + [new ReqTech(2000), new ReqCities('저')], [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8], ['은밀하고 날쌥니다.'], @@ -81,7 +89,7 @@ class GameUnitConstBase{ [ 1104, self::T_FOOTMAN, '근위병', 150, 200, 7, 10, 0, 12, 12, - 3000, ['낙양'], null, 0, + [new ReqTech(3000), new ReqCities('낙양')], [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8], ['최강의 보병입니다.'], @@ -90,7 +98,7 @@ class GameUnitConstBase{ [ 1105, self::T_FOOTMAN, '등갑병', 100, 225, 7, 5, 0, 13, 10, - 1000, null, ['남중'], 0, + [new ReqTech(1000), new ReqRegions('남중')], [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8], ['등갑을 두른 보병입니다.'], @@ -99,7 +107,7 @@ class GameUnitConstBase{ [ 1106, self::T_FOOTMAN, '백이병', 175, 175, 7, 5, 0, 13, 11, - 3000, ['성도'], null, 0, + [new ReqTech(3000), new ReqCities('성도')], [self::T_ARCHER=>1.1, self::T_CAVALRY=>0.9, self::T_SIEGE=>1.1], [self::T_ARCHER=>0.9, self::T_CAVALRY=>1.1, self::T_SIEGE=>0.9], ['정예 보병입니다. 불리한 싸움도 버텨냅니다.'], @@ -109,7 +117,7 @@ class GameUnitConstBase{ [ 1200, self::T_ARCHER, '궁병', 100, 100, 7, 10, 0, 10, 10, - 0, null, null, 0, + [], [self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2], [self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8], ['표준적인 궁병입니다.','궁병은 선제사격을 하는 병종입니다.'], @@ -118,7 +126,7 @@ class GameUnitConstBase{ [ 1201, self::T_ARCHER, '궁기병', 100, 100, 8, 20, 0, 11, 12, - 1000, null, ['동이'], 0, + [new ReqTech(1000), new ReqRegions('동이')], [self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.9, self::T_SIEGE=>1.2], [self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.1, self::T_SIEGE=>0.8], ['말을 타고 잘 피합니다. 특히 다른 궁병보다 보병에게 조금 더 강합니다.'], @@ -127,7 +135,7 @@ class GameUnitConstBase{ [ 1202, self::T_ARCHER, '연노병', 150, 100, 8, 10, 0, 12, 11, - 1000, null, ['서촉'], 0, + [new ReqTech(1000), new ReqRegions('서촉')], [self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2], [self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8], ['화살을 연사합니다.'], @@ -136,7 +144,7 @@ class GameUnitConstBase{ [ 1203, self::T_ARCHER, '강궁병', 150, 150, 7, 10, 0, 13, 13, - 3000, ['양양'], null, 0, + [new ReqTech(3000), new ReqCities('양양')], [self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2], [self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8], ['강건한 궁병입니다.'], @@ -145,7 +153,7 @@ class GameUnitConstBase{ [ 1204, self::T_ARCHER, '석궁병', 200, 100, 7, 10, 0, 13, 13, - 3000, ['건업'], null, 0, + [new ReqTech(3000), new ReqCities('건업')], [self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2], [self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8], ['강력한 화살을 쏩니다.'], @@ -155,7 +163,7 @@ class GameUnitConstBase{ [ 1300, self::T_CAVALRY, '기병', 150, 100, 7, 5, 0, 11, 11, - 0, null, null, 0, + [], [self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2], [self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8], ['표준적인 기병입니다.','기병은 공격특화입니다.'], @@ -164,7 +172,7 @@ class GameUnitConstBase{ [ 1301, self::T_CAVALRY, '백마병', 200, 100, 7, 5, 0, 12, 13, - 1000, null, ['하북'], 0, + [new ReqTech(1000), new ReqRegions('하북')], [self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2], [self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8], ['백마의 위용을 보여줍니다.'], @@ -173,7 +181,7 @@ class GameUnitConstBase{ [ 1302, self::T_CAVALRY, '중장기병', 150, 150, 7, 5, 0, 13, 12, - 1000, null, ['서북'], 0, + [new ReqTech(1000), new ReqRegions('서북')], [self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2], [self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8], ['갑주를 두른 기병입니다.'], @@ -182,7 +190,7 @@ class GameUnitConstBase{ [ 1303, self::T_CAVALRY, '돌격기병', 200, 100, 8, 5, 0, 13, 11, - 2000, ['흉노'], null, 0, + [new ReqTech(2000), new ReqCities('흉노')], [self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2], [self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8], ['저돌적으로 공격합니다.'], @@ -191,7 +199,7 @@ class GameUnitConstBase{ [ 1304, self::T_CAVALRY, '철기병', 100, 250, 7, 5, 0, 11, 13, - 2000, ['강'], null, 0, + [new ReqTech(2000), new ReqCities('강')], [self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2], [self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8], ['철갑을 두른 기병입니다.'], @@ -200,7 +208,7 @@ class GameUnitConstBase{ [ 1305, self::T_CAVALRY, '수렵기병', 150, 100, 8, 15, 0, 12, 12, - 2000, ['산월'], null, 0, + [new ReqTech(2000), new ReqCities('산월')], [self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2], [self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8], ['날쎄고 빠른 기병입니다.'], @@ -209,7 +217,7 @@ class GameUnitConstBase{ [ 1306, self::T_CAVALRY, '맹수병', 250, 175, 6, 0, 0, 16, 16, - 2000, ['남만'], null, 0, + [new ReqTech(2000), new ReqCities('남만')], [self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2], [self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8], ['어느 누구보다 강력합니다.'], @@ -218,7 +226,7 @@ class GameUnitConstBase{ [ 1307, self::T_CAVALRY, '호표기병', 200, 150, 7, 5, 0, 14, 14, - 3000, ['허창'], null, 0, + [new ReqTech(3000), new ReqCities('허창')], [self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2], [self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8], ['정예 기병입니다.'], @@ -228,7 +236,7 @@ class GameUnitConstBase{ [ 1400, self::T_WIZARD, '귀병', 80, 80, 7, 5, 0.5, 9, 9, - 0, null, null, 0, + [], [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['계략을 사용하는 병종입니다.'], @@ -237,7 +245,7 @@ class GameUnitConstBase{ [ 1401, self::T_WIZARD, '신귀병', 80, 80, 7, 20, 0.6, 10, 10, - 1000, null, ['초'], 0, + [new ReqTech(1000), new ReqRegions('초')], [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['신출귀몰한 귀병입니다.'], @@ -246,7 +254,7 @@ class GameUnitConstBase{ [ 1402, self::T_WIZARD, '백귀병', 80, 130, 7, 5, 0.6, 9, 11, - 2000, ['오환'], null, 0, + [new ReqTech(2000), new ReqRegions('오환')], [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['저렴하고 튼튼합니다.'], @@ -255,7 +263,7 @@ class GameUnitConstBase{ [ 1403, self::T_WIZARD, '흑귀병', 130, 80, 7, 5, 0.6, 11, 9, - 2000, ['왜'], null, 0, + [new ReqTech(2000), new ReqRegions('왜')], [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['저렴하고 강력합니다.'], @@ -264,7 +272,7 @@ class GameUnitConstBase{ [ 1404, self::T_WIZARD, '악귀병', 130, 130, 7, 0, 0.6, 12, 12, - 3000, ['장안'], null, 0, + [new ReqTech(3000), new ReqCities('장안')], [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['백병전에도 능숙합니다.'], @@ -273,7 +281,7 @@ class GameUnitConstBase{ [ 1405, self::T_WIZARD, '남귀병', 60, 60, 7, 10, 0.8, 8, 8, - 1000, null, null, 0, + [new ReqTech(1000)], [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['전투를 포기하고 계략에 몰두합니다.'], @@ -282,7 +290,7 @@ class GameUnitConstBase{ [ 1406, self::T_WIZARD, '황귀병', 110, 110, 7, 0, 0.8, 13, 10, - 3000, ['낙양'], null, 0, + [new ReqTech(3000), new ReqCities('낙양')], [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['고도로 훈련된 귀병입니다.'], @@ -291,7 +299,7 @@ class GameUnitConstBase{ [ 1407, self::T_WIZARD, '천귀병', 80, 130, 7, 15, 0.6, 11, 12, - 3000, ['성도'], null, 0, + [new ReqTech(3000), new ReqCities('성도')], [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['갑주를 두른 귀병입니다.'], @@ -300,7 +308,7 @@ class GameUnitConstBase{ [ 1408, self::T_WIZARD, '마귀병', 130, 80, 7, 15, 0.6, 12, 11, - 3000, ['업'], null, 0, + [new ReqTech(3000), new ReqCities('업')], [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['날카로운 무기를 가진 귀병입니다.'], @@ -310,7 +318,7 @@ class GameUnitConstBase{ [ 1500, self::T_SIEGE, '정란', 100, 100, 6, 0, 0, 14, 5, - 0, null, null, 3, + [new ReqMinRelYear(3)], [self::T_FOOTMAN=>1.25, self::T_ARCHER=>1.25, self::T_CAVALRY=>1.25, self::T_WIZARD=>1.25, self::T_CASTLE=>1.8, 1106=>1.112], [self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2, 1106=>1.067], ['높은 구조물 위에서 공격합니다. 첫 공격은 성벽을 향합니다.'], @@ -319,7 +327,7 @@ class GameUnitConstBase{ [ 1501, self::T_SIEGE, '충차', 150, 100, 6, 0, 0, 18, 5, - 1000, null, null, 3, + [new ReqTech(1000), new ReqMinRelYear(3)], [self::T_FOOTMAN=>0.8, self::T_ARCHER=>0.8, self::T_CAVALRY=>0.8, self::T_WIZARD=>0.8, self::T_CASTLE=>2.4], [self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2], ['엄청난 위력으로 성벽을 부수어버립니다.'], @@ -328,7 +336,7 @@ class GameUnitConstBase{ [ 1502, self::T_SIEGE, '벽력거', 150, 100, 6, 5, 0, 20, 5, - 3000, ['업'], null, 0, + [new ReqTech(3000), new ReqCities('업')], [self::T_FOOTMAN=>1.25, self::T_ARCHER=>1.25, self::T_CAVALRY=>1.25, self::T_WIZARD=>1.25, self::T_CASTLE=>1.8, 1106=>1.112], [self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2, 1106=>1.067], ['상대에게 돌덩이를 날립니다. 첫 공격은 성벽을 향합니다.'], @@ -337,7 +345,7 @@ class GameUnitConstBase{ [ 1503, self::T_SIEGE, '목우', 50, 200, 5, 0, 0, 15, 5, - 3000, ['성도'], null, 0, + [new ReqTech(3000), new ReqCities('성도')], [self::T_FOOTMAN=>1, self::T_ARCHER=>1, self::T_CAVALRY=>1, self::T_WIZARD=>1, self::T_CASTLE=>1.8], [self::T_FOOTMAN=>1, self::T_ARCHER=>1, self::T_CAVALRY=>1, self::T_WIZARD=>1, 1106=>1], ['상대를 저지하는 특수병기입니다.'], diff --git a/hwe/sammo/GameUnitConstraint/Impossible.php b/hwe/sammo/GameUnitConstraint/Impossible.php new file mode 100644 index 00000000..aaf5283f --- /dev/null +++ b/hwe/sammo/GameUnitConstraint/Impossible.php @@ -0,0 +1,18 @@ +reqCities = $reqCities; } public function test(General $general, array $ownCities, array $ownRegions, int $relativeYear, int $tech, array $nationAux): bool @@ -16,7 +18,6 @@ class ReqCities extends BaseGameUnitConstraint { foreach ($this->reqCities as $city) { if (key_exists($city, $ownCities)) { return true; - break; } } diff --git a/hwe/sammo/GameUnitConstraint/ReqMinRelYear.php b/hwe/sammo/GameUnitConstraint/ReqMinRelYear.php index 836c4321..9083793e 100644 --- a/hwe/sammo/GameUnitConstraint/ReqMinRelYear.php +++ b/hwe/sammo/GameUnitConstraint/ReqMinRelYear.php @@ -19,26 +19,4 @@ class ReqMinRelYear extends BaseGameUnitConstraint { { return "{$this->reqMinRelYear}년 경과 후 사용 가능"; } -} - -/* - - if($reqTech > 0){ - $info[] = "기술력 {$reqTech} 이상 필요"; - } - - if($reqCities !== null){ - $reqCities = array_map(function($reqCity) use (&$info){ - $info[] = "{$reqCity} 소유시 가능"; - return CityConst::byName($reqCity)->id; - }, $reqCities); - } - - if($reqRegions !== null){ - $reqRegions = array_map(function($reqRegion) use (&$info){ - $info[] = "{$reqRegion} 지역 소유시 가능"; - return CityConst::$regionMap[$reqRegion]; - }, $reqRegions); - } - -*/ \ No newline at end of file +} \ No newline at end of file diff --git a/hwe/sammo/GameUnitConstraint/ReqRegions.php b/hwe/sammo/GameUnitConstraint/ReqRegions.php index da3b4456..0b4d5933 100644 --- a/hwe/sammo/GameUnitConstraint/ReqRegions.php +++ b/hwe/sammo/GameUnitConstraint/ReqRegions.php @@ -7,8 +7,10 @@ use sammo\General; class ReqRegions extends BaseGameUnitConstraint { - public function __construct(public readonly array $reqRegions) + public readonly array $reqRegions; + public function __construct(...$reqRegions) { + $this->reqRegions = $reqRegions; } public function test(General $general, array $ownCities, array $ownRegions, int $relativeYear, int $tech, array $nationAux): bool diff --git a/hwe/sammo/GameUnitConstraint/ReqTech.php b/hwe/sammo/GameUnitConstraint/ReqTech.php index 2297bd59..adba70c7 100644 --- a/hwe/sammo/GameUnitConstraint/ReqTech.php +++ b/hwe/sammo/GameUnitConstraint/ReqTech.php @@ -16,6 +16,7 @@ class ReqTech extends BaseGameUnitConstraint { if ($tech < $this->reqTech) { return false; } + return true; } public function getInfo(): string