From 74b9e0b4a5b42575f271f591a5bbed812cdc8c74 Mon Sep 17 00:00:00 2001 From: Hide_D Date: Thu, 11 May 2023 00:50:58 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20CrewType=EC=97=90=20iAction=20=EA=B0=9C?= =?UTF-8?q?=EB=85=90=EC=9D=84=20=EB=84=A3=EA=B3=A0=20=EC=B2=98=EB=A6=AC?= =?UTF-8?q?=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20-=20GameU?= =?UTF-8?q?nitDetail=EC=97=90=20iAction=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: 누락분 수정 fix: crewtype 미지정시 기본 병종 --- hwe/func_converter.php | 35 ++++ hwe/sammo/ActionCrewType/che_성벽선제.php | 20 ++ hwe/sammo/GameUnitConstBase.php | 72 +++---- hwe/sammo/GameUnitDetail.php | 228 +++++++++++++++------- hwe/sammo/General.php | 129 +++--------- hwe/scenario/unit/basic.php | 16 +- hwe/scenario/unit/cr.php | 44 ++--- hwe/scenario/unit/ludo_rathowm.php | 92 ++++----- hwe/scenario/unit/siegetank.php | 20 +- 9 files changed, 372 insertions(+), 284 deletions(-) create mode 100644 hwe/sammo/ActionCrewType/che_성벽선제.php diff --git a/hwe/func_converter.php b/hwe/func_converter.php index 9d3b78b7..a688bc75 100644 --- a/hwe/func_converter.php +++ b/hwe/func_converter.php @@ -326,6 +326,41 @@ function buildGeneralSpecialWarClass(?string $type):BaseSpecial{ return $obj; } +function getActionCrewTypeClass(?string $type){ + if($type === null || $type === ''){ + $type = GameConst::$defaultSpecialWar; + } + + static $basePath = __NAMESPACE__.'\\ActionCrewType\\'; + $classPath = ($basePath.$type); + + if(class_exists($classPath)){ + return $classPath; + } + + $classPath = ($basePath.'che_'.$type); + if(class_exists($classPath)){ + return $classPath; + } + + throw new \InvalidArgumentException("{$type}은 올바른 병종 효과가 아님"); +} + +function buildActionCrewTypeClass(?string $type):iAction{ + static $cache = []; + if($type === null){ + $type = 'None'; + } + if(key_exists($type, $cache)){ + return $cache[$type]; + } + $class = getActionCrewTypeClass($type); + + $obj = new $class(); + $cache[$type]= $obj; + return $obj; +} + function getGeneralCommandClass(?string $type){ if($type === null || $type === ''){ $type = '휴식'; diff --git a/hwe/sammo/ActionCrewType/che_성벽선제.php b/hwe/sammo/ActionCrewType/che_성벽선제.php new file mode 100644 index 00000000..8f7081b4 --- /dev/null +++ b/hwe/sammo/ActionCrewType/che_성벽선제.php @@ -0,0 +1,20 @@ +1.2], ['성벽입니다.','생성할 수 없습니다.'], - null, null + null, null, null ], [ @@ -51,7 +51,7 @@ class GameUnitConstBase{ [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], ['표준적인 보병입니다.','보병은 방어특화이며,','상대가 회피하기 어렵습니다.'], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 1101, self::T_FOOTMAN, '청주병', @@ -60,7 +60,7 @@ class GameUnitConstBase{ [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], ['저렴하고 튼튼합니다.'], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 1102, self::T_FOOTMAN, '수병', @@ -69,7 +69,7 @@ class GameUnitConstBase{ [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], ['저렴하고 강력합니다.'], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 1103, self::T_FOOTMAN, '자객병', @@ -78,7 +78,7 @@ class GameUnitConstBase{ [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], ['은밀하고 날쌥니다.'], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 1104, self::T_FOOTMAN, '근위병', @@ -87,7 +87,7 @@ class GameUnitConstBase{ [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], ['최강의 보병입니다.'], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 1105, self::T_FOOTMAN, '등갑병', @@ -96,7 +96,7 @@ class GameUnitConstBase{ [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], ['등갑을 두른 보병입니다.'], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 1106, self::T_FOOTMAN, '백이병', @@ -105,7 +105,7 @@ class GameUnitConstBase{ [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], ['정예 보병입니다. 불리한 싸움도 버텨냅니다.'], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ @@ -115,7 +115,7 @@ class GameUnitConstBase{ [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], ['표준적인 궁병입니다.','궁병은 선제사격을 하는 병종입니다.'], - null, ['che_선제사격시도', 'che_선제사격발동'] + null, ['che_선제사격시도', 'che_선제사격발동'], null ], [ 1201, self::T_ARCHER, '궁기병', @@ -124,7 +124,7 @@ class GameUnitConstBase{ [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], ['말을 타고 잘 피합니다. 특히 다른 궁병보다 보병에게 조금 더 강합니다.'], - null, ['che_선제사격시도', 'che_선제사격발동'] + null, ['che_선제사격시도', 'che_선제사격발동'], null ], [ 1202, self::T_ARCHER, '연노병', @@ -133,7 +133,7 @@ class GameUnitConstBase{ [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], ['화살을 연사합니다.'], - null, ['che_선제사격시도', 'che_선제사격발동'] + null, ['che_선제사격시도', 'che_선제사격발동'], null ], [ 1203, self::T_ARCHER, '강궁병', @@ -142,7 +142,7 @@ class GameUnitConstBase{ [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], ['강건한 궁병입니다.'], - null, ['che_선제사격시도', 'che_선제사격발동'] + null, ['che_선제사격시도', 'che_선제사격발동'], null ], [ 1204, self::T_ARCHER, '석궁병', @@ -151,7 +151,7 @@ class GameUnitConstBase{ [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], ['강력한 화살을 쏩니다.'], - null, ['che_선제사격시도', 'che_선제사격발동'] + null, ['che_선제사격시도', 'che_선제사격발동'], null ], [ @@ -161,7 +161,7 @@ class GameUnitConstBase{ [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], ['표준적인 기병입니다.','기병은 공격특화입니다.'], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 1301, self::T_CAVALRY, '백마병', @@ -170,7 +170,7 @@ class GameUnitConstBase{ [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], ['백마의 위용을 보여줍니다.'], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 1302, self::T_CAVALRY, '중장기병', @@ -179,7 +179,7 @@ class GameUnitConstBase{ [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], ['갑주를 두른 기병입니다.'], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 1303, self::T_CAVALRY, '돌격기병', @@ -188,7 +188,7 @@ class GameUnitConstBase{ [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], ['저돌적으로 공격합니다.'], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 1304, self::T_CAVALRY, '철기병', @@ -197,7 +197,7 @@ class GameUnitConstBase{ [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], ['철갑을 두른 기병입니다.'], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 1305, self::T_CAVALRY, '수렵기병', @@ -206,7 +206,7 @@ class GameUnitConstBase{ [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], ['날쎄고 빠른 기병입니다.'], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 1306, self::T_CAVALRY, '맹수병', @@ -215,7 +215,7 @@ class GameUnitConstBase{ [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], ['어느 누구보다 강력합니다.'], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 1307, self::T_CAVALRY, '호표기병', @@ -224,7 +224,7 @@ class GameUnitConstBase{ [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], ['정예 기병입니다.'], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ @@ -234,7 +234,7 @@ class GameUnitConstBase{ [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['계략을 사용하는 병종입니다.'], - null, null + null, null, null ], [ 1401, self::T_WIZARD, '신귀병', @@ -243,7 +243,7 @@ class GameUnitConstBase{ [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['신출귀몰한 귀병입니다.'], - null, null + null, null, null ], [ 1402, self::T_WIZARD, '백귀병', @@ -252,7 +252,7 @@ class GameUnitConstBase{ [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['저렴하고 튼튼합니다.'], - null, null + null, null, null ], [ 1403, self::T_WIZARD, '흑귀병', @@ -261,7 +261,7 @@ class GameUnitConstBase{ [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['저렴하고 강력합니다.'], - null, null + null, null, null ], [ 1404, self::T_WIZARD, '악귀병', @@ -270,7 +270,7 @@ class GameUnitConstBase{ [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['백병전에도 능숙합니다.'], - null, null + null, null, null ], [ 1405, self::T_WIZARD, '남귀병', @@ -279,7 +279,7 @@ class GameUnitConstBase{ [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['전투를 포기하고 계략에 몰두합니다.'], - null, null + null, null, null ], [ 1406, self::T_WIZARD, '황귀병', @@ -288,7 +288,7 @@ class GameUnitConstBase{ [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['고도로 훈련된 귀병입니다.'], - null, null + null, null, null ], [ 1407, self::T_WIZARD, '천귀병', @@ -297,7 +297,7 @@ class GameUnitConstBase{ [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['갑주를 두른 귀병입니다.'], - null, null + null, null, null ], [ 1408, self::T_WIZARD, '마귀병', @@ -306,7 +306,7 @@ class GameUnitConstBase{ [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['날카로운 무기를 가진 귀병입니다.'], - null, null + null, null, null ], [ @@ -316,7 +316,7 @@ class GameUnitConstBase{ [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], ['높은 구조물 위에서 공격합니다.'], - ['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'] + ['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], ['che_성벽선제'] ], [ 1501, self::T_SIEGE, '충차', @@ -325,7 +325,7 @@ class GameUnitConstBase{ [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], ['엄청난 위력으로 성벽을 부수어버립니다.'], - ['che_성벽부상무효'], null + ['che_성벽부상무효'], null, null ], [ 1502, self::T_SIEGE, '벽력거', @@ -334,7 +334,7 @@ class GameUnitConstBase{ [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], ['상대에게 돌덩이를 날립니다.'], - ['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'] + ['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], null ], [ 1503, self::T_SIEGE, '목우', @@ -343,7 +343,7 @@ class GameUnitConstBase{ [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], ['상대를 저지하는 특수병기입니다.'], - ['che_성벽부상무효'], ['che_저지시도', 'che_저지발동'] + ['che_성벽부상무효'], ['che_저지시도', 'che_저지발동'], ['che_성벽선제'] ] ]; @@ -466,6 +466,7 @@ class GameUnitConstBase{ $info, $initSkillTrigger, $phaseSkillTrigger, + $iActionList, ] = $rawUnit; if($reqYear > 0){ @@ -509,7 +510,8 @@ class GameUnitConstBase{ $defenceCoef, $info, $initSkillTrigger, - $phaseSkillTrigger + $phaseSkillTrigger, + $iActionList, ); $constID[$id] = $unit; diff --git a/hwe/sammo/GameUnitDetail.php b/hwe/sammo/GameUnitDetail.php index 865df3a9..d2cf3958 100644 --- a/hwe/sammo/GameUnitDetail.php +++ b/hwe/sammo/GameUnitDetail.php @@ -1,7 +1,9 @@ id = $id; $this->name = $name; $this->armType = $armType; @@ -64,78 +69,86 @@ class GameUnitDetail implements iAction{ $this->info = $info; $this->initSkillTrigger = $initSkillTrigger; $this->phaseSkillTrigger = $phaseSkillTrigger; - + $this->iActionList = array_map(function($rawAction){ + return buildActionCrewTypeClass($rawAction); + }, $iActionList ?? []); } - public function getInfo():string{ + public function getInfo(): string + { return join("\n
", $this->info); } - public function getShortName():string{ + public function getShortName(): string + { return StringUtil::subStringForWidth($this->name, 0, 4); } - public function riceWithTech(int $tech, int $crew=100):float{ + public function riceWithTech(int $tech, int $crew = 100): float + { return $this->rice * getTechCost($tech) * $crew / 100; } - public function costWithTech(int $tech, int $crew=100):float{ + public function costWithTech(int $tech, int $crew = 100): float + { return $this->cost * getTechCost($tech) * $crew / 100; } - public function getAttackCoef(GameUnitDetail $opposeCrewType):float{ + public function getAttackCoef(GameUnitDetail $opposeCrewType): float + { $opposeCrewTypeID = $opposeCrewType->id; - if(key_exists($opposeCrewTypeID, $this->attackCoef)){ + if (key_exists($opposeCrewTypeID, $this->attackCoef)) { return $this->attackCoef[$opposeCrewTypeID]; } $opposeArmType = $opposeCrewType->armType; - return $this->attackCoef[$opposeArmType]??1; + return $this->attackCoef[$opposeArmType] ?? 1; } - public function getDefenceCoef(GameUnitDetail $opposeCrewType):float{ + public function getDefenceCoef(GameUnitDetail $opposeCrewType): float + { $opposeCrewTypeID = $opposeCrewType->id; - if(key_exists($opposeCrewTypeID, $this->defenceCoef)){ + if (key_exists($opposeCrewTypeID, $this->defenceCoef)) { return $this->defenceCoef[$opposeCrewTypeID]; } $opposeArmType = $opposeCrewType->armType; - return $this->defenceCoef[$opposeArmType]??1; + return $this->defenceCoef[$opposeArmType] ?? 1; } - public function getComputedAttack(General $general, int $tech){ - if($this->armType == GameUnitConst::T_WIZARD){ - $ratio = $general->getIntel(true, true, true)*2 - 40; - } - else if($this->armType == GameUnitConst::T_SIEGE){ - $ratio = $general->getLeadership(true, true, true)*2 - 40; - } - else if($this->armType == GameUnitConst::T_MISC){ + public function getComputedAttack(General $general, int $tech) + { + if ($this->armType == GameUnitConst::T_WIZARD) { + $ratio = $general->getIntel(true, true, true) * 2 - 40; + } else if ($this->armType == GameUnitConst::T_SIEGE) { + $ratio = $general->getLeadership(true, true, true) * 2 - 40; + } else if ($this->armType == GameUnitConst::T_MISC) { $ratio = $general->getIntel(true, true, true) + $general->getLeadership(true, true, true) + $general->getStrength(true, true, true); - $ratio = $ratio*2/3 - 40; + $ratio = $ratio * 2 / 3 - 40; + } else { + $ratio = $general->getStrength(true, true, true) * 2 - 40; } - else{ - $ratio = $general->getStrength(true, true, true)*2 - 40; - } - if($ratio < 10){ + if ($ratio < 10) { $ratio = 10; } - if($ratio > 100){ - $ratio = 50 + $ratio/2; + if ($ratio > 100) { + $ratio = 50 + $ratio / 2; } $att = $this->attack + getTechAbil($tech); return $att * $ratio / 100; } - public function getComputedDefence(General $general, int $tech){ + public function getComputedDefence(General $general, int $tech) + { $def = $this->defence + getTechAbil($tech); $crew = ($general->getVar('crew') / (7000 / 30)) + 70; return $def * $crew / 100; } - public function getCriticalRatio(General $general){ - if($this->armType == GameUnitConst::T_CASTLE){ + public function getCriticalRatio(General $general) + { + if ($this->armType == GameUnitConst::T_CASTLE) { //성벽은 필살을 사용하지 않는다. return 0; } @@ -143,22 +156,19 @@ class GameUnitDetail implements iAction{ // 무장 무력 : 65 5%, 70 10%, 75 15%, 80 20% // 지장 지력 : 65 5%, 70 8%, 75 10%, 80 13% //충차장 통솔: 65 5%, 70 8%, 75 10%, 80 13% - if($this->armType == GameUnitConst::T_WIZARD){ + if ($this->armType == GameUnitConst::T_WIZARD) { $mainstat = $general->getIntel(false, true, true, false); $coef = 0.4; - } - else if($this->armType == GameUnitConst::T_SIEGE){ + } else if ($this->armType == GameUnitConst::T_SIEGE) { $mainstat = $general->getLeadership(false, true, true, false); $coef = 0.4; - } - else if($this->armType == GameUnitConst::T_MISC){ + } else if ($this->armType == GameUnitConst::T_MISC) { $mainstat = $general->getIntel(false, true, true, false) + - $general->getLeadership(false, true, true, false) + - $general->getStrength(false, true, true, false); + $general->getLeadership(false, true, true, false) + + $general->getStrength(false, true, true, false); $mainstat /= 3; $coef = 0.4; - } - else{ + } else { $mainstat = $general->getStrength(false, true, true, false); $coef = 0.5; } @@ -169,7 +179,8 @@ class GameUnitDetail implements iAction{ return min(50, $ratio) / 100; } - public function pickScore($tech){ + public function pickScore($tech) + { $defaultWar = GameConst::$armperphase + $this->attack + $this->defence + getTechAbil($tech) * 2; $defaultWar *= 1 + $this->speed / 2; $defaultWar /= Util::valueFit(1 - $this->avoid / 100, 0.1); @@ -177,40 +188,41 @@ class GameUnitDetail implements iAction{ return $defaultWar; } - public function isValid($ownCities, $ownRegions, $relativeYear, $tech){ + public function isValid($ownCities, $ownRegions, $relativeYear, $tech) + { //음수 없음 $relativeYear = max(0, $relativeYear); - if($relativeYear < $this->reqYear){ + if ($relativeYear < $this->reqYear) { return false; } - if($tech < $this->reqTech){ + if ($tech < $this->reqTech) { return false; } - if($this->reqCities !== null){ + if ($this->reqCities !== null) { $valid = false; - foreach($this->reqCities as $reqCity){ - if(\key_exists($reqCity, $ownCities)){ + foreach ($this->reqCities as $reqCity) { + if (\key_exists($reqCity, $ownCities)) { $valid = true; break; } } - if(!$valid){ + if (!$valid) { return false; } } - if($this->reqRegions !== null){ + if ($this->reqRegions !== null) { $valid = false; - foreach($this->reqRegions as $reqRegion){ - if(\key_exists($reqRegion, $ownRegions)){ + foreach ($this->reqRegions as $reqRegion) { + if (\key_exists($reqRegion, $ownRegions)) { $valid = true; break; } } - if(!$valid){ + if (!$valid) { return false; } } @@ -219,17 +231,17 @@ class GameUnitDetail implements iAction{ } //iAction - public function getBattleInitSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{ - if(!$this->initSkillTrigger){ + public function getBattleInitSkillTriggerList(WarUnit $unit): ?WarUnitTriggerCaller + { + if (!$this->initSkillTrigger) { return null; } $triggerList = []; - foreach($this->initSkillTrigger as $triggerArgs){ - if(is_string($triggerArgs)){ + foreach ($this->initSkillTrigger as $triggerArgs) { + if (is_string($triggerArgs)) { $typeName = $triggerArgs; $triggerList[] = buildWarUnitTriggerClass($typeName, $unit); - } - else{ + } else { $typeName = $triggerArgs[0]; //WarUnit 다음 인자는 $raiseType이며, 0이어야할 것이다 $triggerArgs[0] = 0; @@ -238,17 +250,17 @@ class GameUnitDetail implements iAction{ } return new WarUnitTriggerCaller(...$triggerList); } - public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{ - if(!$this->phaseSkillTrigger){ + public function getBattlePhaseSkillTriggerList(WarUnit $unit): ?WarUnitTriggerCaller + { + if (!$this->phaseSkillTrigger) { return null; } $triggerList = []; - foreach($this->phaseSkillTrigger as $triggerArgs){ - if(is_string($triggerArgs)){ + foreach ($this->phaseSkillTrigger as $triggerArgs) { + if (is_string($triggerArgs)) { $typeName = $triggerArgs; $triggerList[] = buildWarUnitTriggerClass($typeName, $unit); - } - else{ + } else { $typeName = $triggerArgs[0]; //WarUnit 다음 인자는 $raiseType이며, 0이어야할 것이다 $triggerArgs[0] = 0; @@ -256,6 +268,90 @@ class GameUnitDetail implements iAction{ } } return new WarUnitTriggerCaller(...$triggerList); + } + public function onCalcDomestic(string $turnType, string $varType, float $value, $aux = null): float + { + if (!$this->iActionList) { + return $value; + } + + foreach ($this->iActionList as $iAction) { + $value = $iAction->onCalcDomestic($turnType, $varType, $value, $aux); + } + return $value; } -} \ No newline at end of file + + public function onCalcStat(General $general, string $statName, $value, $aux = null) + { + if (!$this->iActionList) { + return; + } + + foreach ($this->iActionList as $iAction) { + $value = $iAction->onCalcStat($general, $statName, $value, $aux); + } + return $value; + } + + public function onCalcOpposeStat(General $general, string $statName, $value, $aux = null) + { + if (!$this->iActionList) { + return; + } + + foreach ($this->iActionList as $iAction) { + $value = $iAction->onCalcOpposeStat($general, $statName, $value, $aux); + } + return $value; + } + public function onCalcStrategic(string $turnType, string $varType, $value) + { + if (!$this->iActionList) { + return; + } + + foreach ($this->iActionList as $iAction) { + $value = $iAction->onCalcStrategic($turnType, $varType, $value); + } + return $value; + } + public function onCalcNationalIncome(string $type, $amount) + { + if (!$this->iActionList) { + return; + } + + foreach ($this->iActionList as $iAction) { + $amount = $iAction->onCalcNationalIncome($type, $amount); + } + return $amount; + } + + public function getWarPowerMultiplier(WarUnit $unit): array + { + if (!$this->iActionList) { + return [1, 1]; + } + + $attack = 1; + $defence = 1; + foreach ($this->iActionList as $iAction) { + $attack *= $iAction->getWarPowerMultiplier($unit)[0]; + $defence *= $iAction->getWarPowerMultiplier($unit)[1]; + } + return [$attack, $defence]; + } + + public function onArbitraryAction(General $general, RandUtil $rng, string $actionType, ?string $phase = null, ?array $aux = null): null|array + { + if (!$this->iActionList) { + return null; + } + + foreach ($this->iActionList as $iAction) { + $aux = $iAction->onArbitraryAction($general, $rng, $actionType, $phase, $aux); + } + return $aux; + } +} diff --git a/hwe/sammo/General.php b/hwe/sammo/General.php index 867d510f..03b8b7bc 100644 --- a/hwe/sammo/General.php +++ b/hwe/sammo/General.php @@ -30,20 +30,22 @@ class General implements iAction protected $logActivatedSkill = []; protected $isFinished = false; - /** @var iAction */ + /** @var ?iAction */ protected $nationType = null; - /** @var iAction */ + /** @var ?iAction */ protected $officerLevelObj = null; - /** @var iAction */ + /** @var ?iAction */ protected $specialDomesticObj = null; - /** @var iAction */ + /** @var ?iAction */ protected $specialWarObj = null; - /** @var iAction */ + /** @var ?iAction */ protected $personalityObj = null; - /** @var iAction[] */ + /** @var ?iAction[] */ protected $itemObjs = []; - /** @var iAction */ + /** @var ?iAction */ protected $inheritBuffObj = null; + /** @var ?GameUnitDetail */ + protected $crewType = null; protected $lastTurn = null; protected $resultTurn = null; @@ -122,6 +124,8 @@ class General implements iAction $this->personalityObj = buildPersonalityClass($raw['personal']); + $this->crewType = GameUnitConst::byID($raw['crewtype'] ?? GameUnitConst::DEFAULT_CREWTYPE); + $this->itemObjs['horse'] = buildItemClass($raw['horse']); $this->itemObjs['weapon'] = buildItemClass($raw['weapon']); $this->itemObjs['book'] = buildItemClass($raw['book']); @@ -325,11 +329,10 @@ class General implements iAction function getCrewTypeObj(): GameUnitDetail { - $crewType = GameUnitConst::byID($this->getVar('crewtype')); - if ($crewType === null) { + if($this->crewType === null) { throw new \InvalidArgumentException('Invalid CrewType:' . $this->getVar('crewtype')); } - return $crewType; + return $this->crewType; } function calcRecentWarTurn(int $turnTerm): int @@ -853,18 +856,22 @@ class General implements iAction return $result; } - public function getPreTurnExecuteTriggerList(General $general): ?GeneralTriggerCaller - { - $caller = new GeneralTriggerCaller(); - foreach (array_merge([ + protected function getActionList(): array{ + return array_merge([ $this->nationType, $this->officerLevelObj, $this->specialDomesticObj, $this->specialWarObj, $this->personalityObj, - $this->getCrewTypeObj(), + $this->crewType, $this->inheritBuffObj, - ], $this->itemObjs) as $iObj) { + ], $this->itemObjs); + } + + public function getPreTurnExecuteTriggerList(General $general): ?GeneralTriggerCaller + { + $caller = new GeneralTriggerCaller(); + foreach ($this->getActionList() as $iObj) { if (!$iObj) { continue; @@ -877,15 +884,7 @@ class General implements iAction } public function onCalcDomestic(string $turnType, string $varType, float $value, $aux = null): float { - foreach (array_merge([ - $this->nationType, - $this->officerLevelObj, - $this->specialDomesticObj, - $this->specialWarObj, - $this->personalityObj, - $this->getCrewTypeObj(), - $this->inheritBuffObj, - ], $this->itemObjs) as $iObj) { + foreach ($this->getActionList() as $iObj) { if (!$iObj) { continue; } @@ -898,15 +897,7 @@ class General implements iAction public function onCalcStat(General $general, string $statName, $value, $aux = null) { //xxx: $general? - foreach (array_merge([ - $this->nationType, - $this->officerLevelObj, - $this->specialDomesticObj, - $this->specialWarObj, - $this->personalityObj, - $this->getCrewTypeObj(), - $this->inheritBuffObj, - ], $this->itemObjs) as $iObj) { + foreach ($this->getActionList() as $iObj) { if (!$iObj) { continue; } @@ -919,15 +910,7 @@ class General implements iAction public function onCalcOpposeStat(General $general, string $statName, $value, $aux = null) { //xxx: $general? - foreach (array_merge([ - $this->nationType, - $this->officerLevelObj, - $this->specialDomesticObj, - $this->specialWarObj, - $this->personalityObj, - $this->getCrewTypeObj(), - $this->inheritBuffObj, - ], $this->itemObjs) as $iObj) { + foreach ($this->getActionList() as $iObj) { if (!$iObj) { continue; } @@ -939,15 +922,7 @@ class General implements iAction public function onCalcStrategic(string $turnType, string $varType, $value) { - foreach (array_merge([ - $this->nationType, - $this->officerLevelObj, - $this->specialDomesticObj, - $this->specialWarObj, - $this->personalityObj, - $this->getCrewTypeObj(), - $this->inheritBuffObj, - ], $this->itemObjs) as $iObj) { + foreach ($this->getActionList() as $iObj) { if (!$iObj) { continue; } @@ -959,15 +934,7 @@ class General implements iAction public function onCalcNationalIncome(string $type, $amount) { - foreach (array_merge([ - $this->nationType, - $this->officerLevelObj, - $this->specialDomesticObj, - $this->specialWarObj, - $this->personalityObj, - $this->getCrewTypeObj(), - $this->inheritBuffObj, - ], $this->itemObjs) as $iObj) { + foreach ($this->getActionList() as $iObj) { if (!$iObj) { continue; } @@ -979,15 +946,7 @@ class General implements iAction public function onArbitraryAction(General $general, RandUtil $rng, string $actionType, ?string $phase = null, $aux = null): null|array { - foreach (array_merge([ - $this->nationType, - $this->officerLevelObj, - $this->specialDomesticObj, - $this->specialWarObj, - $this->personalityObj, - $this->getCrewTypeObj(), - $this->inheritBuffObj, - ], $this->itemObjs) as $iObj) { + foreach ($this->getActionList() as $iObj) { if (!$iObj) { continue; } @@ -1002,15 +961,7 @@ class General implements iAction //xxx:$unit $att = 1; $def = 1; - foreach (array_merge([ - $this->nationType, - $this->officerLevelObj, - $this->specialDomesticObj, - $this->specialWarObj, - $this->personalityObj, - $this->getCrewTypeObj(), - $this->inheritBuffObj, - ], $this->itemObjs) as $iObj) { + foreach ($this->getActionList() as $iObj) { if (!$iObj) { continue; } @@ -1024,15 +975,7 @@ class General implements iAction public function getBattleInitSkillTriggerList(WarUnit $unit): ?WarUnitTriggerCaller { $caller = new WarUnitTriggerCaller(); - foreach (array_merge([ - $this->nationType, - $this->officerLevelObj, - $this->specialDomesticObj, - $this->specialWarObj, - $this->personalityObj, - $this->getCrewTypeObj(), - $this->inheritBuffObj, - ], $this->itemObjs) as $iObj) { + foreach ($this->getActionList() as $iObj) { if (!$iObj) { continue; } @@ -1053,15 +996,7 @@ class General implements iAction new WarUnitTrigger\che_계략발동($unit), new WarUnitTrigger\che_계략실패($unit) ); - foreach (array_merge([ - $this->nationType, - $this->officerLevelObj, - $this->specialDomesticObj, - $this->specialWarObj, - $this->personalityObj, - $this->getCrewTypeObj(), - $this->inheritBuffObj, - ], $this->itemObjs) as $iObj) { + foreach ($this->getActionList() as $iObj) { if (!$iObj) { continue; } diff --git a/hwe/scenario/unit/basic.php b/hwe/scenario/unit/basic.php index 0fc8d7b1..7f939d6e 100644 --- a/hwe/scenario/unit/basic.php +++ b/hwe/scenario/unit/basic.php @@ -13,7 +13,7 @@ class GameUnitConst extends GameUnitConstBase [],//성벽은 공격할 수 없다. [self::T_FOOTMAN=>1.2], ['성벽입니다.','생성할 수 없습니다.'], - null, null + null, null, null ], [ @@ -23,7 +23,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['표준적인 보병입니다.','보병은 방어특화이며,','상대가 회피하기 어렵습니다.'], - null, null + null, null, null ], [ @@ -33,7 +33,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['표준적인 궁병입니다.','궁병은 회피특화입니다.'], - null, null + null, null, null ], [ @@ -43,7 +43,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['표준적인 기병입니다.','기병은 공격특화입니다.'], - null, null + null, null, null ], [ @@ -53,7 +53,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['계략을 사용하는 병종입니다.'], - null, null + null, null, null ], [ 1405, self::T_WIZARD, '남귀병', @@ -62,7 +62,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ['전투를 포기하고 계략에 몰두합니다.'], - null, null + null, null, null ], [ @@ -72,7 +72,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_FOOTMAN=>0.8, self::T_ARCHER=>0.8, self::T_CAVALRY=>0.8, self::T_WIZARD=>0.8, self::T_CASTLE=>1.8], [self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2], ['높은 구조물 위에서 공격합니다.'], - ['che_성벽부상무효'], null + ['che_성벽부상무효'], null, ['che_성벽선제'] ], [ 1501, self::T_SIEGE, '충차', @@ -81,7 +81,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['엄청난 위력으로 성벽을 부수어버립니다.'], - ['che_성벽부상무효'], null + ['che_성벽부상무효'], null, null ] ]; } \ No newline at end of file diff --git a/hwe/scenario/unit/cr.php b/hwe/scenario/unit/cr.php index 54df02fd..d444ce75 100644 --- a/hwe/scenario/unit/cr.php +++ b/hwe/scenario/unit/cr.php @@ -14,7 +14,7 @@ class GameUnitConst extends GameUnitConstBase [], //성벽은 공격할 수 없다. [self::T_FOOTMAN => 1.2], ['성벽입니다.', '생성할 수 없습니다.'], - null, null + null, null, null ], [ @@ -24,7 +24,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['표준적인 보병입니다.', '보병은 방어특화이며,', '상대가 회피하기 어렵습니다.'], - null, null + null, null, null ], [ 1200, self::T_ARCHER, '궁병', @@ -33,7 +33,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['표준적인 궁병입니다.', '궁병은 선제사격을 하는 병종입니다.'], - null, ['che_선제사격시도', 'che_선제사격발동'] + null, ['che_선제사격시도', 'che_선제사격발동'], null ], [ 1300, self::T_CAVALRY, '기병', @@ -42,7 +42,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['표준적인 기병입니다.', '기병은 공격특화입니다.'], - null, null + null, null, null ], [ 1104, self::T_FOOTMAN, '근위병', @@ -51,7 +51,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['최강의 보병입니다.'], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 1106, self::T_FOOTMAN, '백이병', @@ -60,7 +60,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['정예 보병입니다. 불리한 싸움도 버텨냅니다.'], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 97201, self::T_ARCHER, '화랑', @@ -69,7 +69,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['특수한 궁병입니다.'], - null, ['che_선제사격시도', 'che_선제사격발동'] + null, ['che_선제사격시도', 'che_선제사격발동'], null ], [ 1204, self::T_ARCHER, '석궁병', @@ -78,7 +78,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['강력한 화살을 쏩니다.'], - null, ['che_선제사격시도', 'che_선제사격발동'] + null, ['che_선제사격시도', 'che_선제사격발동'], null ], [ 1303, self::T_CAVALRY, '돌격기병', @@ -87,7 +87,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['저돌적으로 공격합니다.'], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 1307, self::T_CAVALRY, '호표기병', @@ -96,7 +96,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['정예 기병입니다.'], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 1306, self::T_CAVALRY, '맹수병', @@ -105,7 +105,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['어느 누구보다 강력합니다.'], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 1400, self::T_WIZARD, '귀병', @@ -114,7 +114,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE => 1.2], [self::T_SIEGE => 0.8], ['계략을 사용하는 병종입니다.'], - null, null + null, null, null ], [ 1405, self::T_WIZARD, '남귀병', @@ -123,7 +123,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE => 1.2], [self::T_SIEGE => 0.8], ['전투를 포기하고 계략에 몰두합니다.'], - null, null + null, null, null ], [ 1404, self::T_WIZARD, '악귀병', @@ -132,7 +132,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE => 1.2], [self::T_SIEGE => 0.8], ['백병전에도 능숙합니다.'], - null, null + null, null, null ], [ 1407, self::T_WIZARD, '천귀병', @@ -141,7 +141,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE => 1.2], [self::T_SIEGE => 0.8], ['갑주를 두른 귀병입니다.'], - null, null + null, null, null ], [ 1500, self::T_SIEGE, '정란', @@ -150,7 +150,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['높은 구조물 위에서 공격합니다.'], - ['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'] + ['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], null ], [ 1501, self::T_SIEGE, '충차', @@ -159,7 +159,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['엄청난 위력으로 성벽을 부수어버립니다.'], - ['che_성벽부상무효'], null + ['che_성벽부상무효'], null, null ], [ 1502, self::T_SIEGE, '벽력거', @@ -168,7 +168,7 @@ class GameUnitConst extends GameUnitConstBase [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 => 0.833, self::T_ARCHER => 0.833, self::T_CAVALRY => 0.833, self::T_WIZARD => 0.833, 1106 => 0.909], ['상대에게 돌덩이를 날립니다.'], - ['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'] + ['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], null ], [ 97101, self::T_FOOTMAN, '중장보병', @@ -177,7 +177,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['전천후 보병입니다.'], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 1202, self::T_ARCHER, '연노병', @@ -186,7 +186,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['화살을 연사합니다.'], - null, ['che_선제사격시도', 'che_선제사격발동'] + null, ['che_선제사격시도', 'che_선제사격발동'], null ], [ 1304, self::T_CAVALRY, '철기병', @@ -195,7 +195,7 @@ class GameUnitConst extends GameUnitConstBase [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], ['철갑을 두른 기병입니다.'], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 1401, self::T_WIZARD, '신귀병', @@ -204,7 +204,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE => 1.2], [self::T_SIEGE => 0.8], ['신출귀몰한 귀병입니다.'], - null, null + null, null, null ], ]; } diff --git a/hwe/scenario/unit/ludo_rathowm.php b/hwe/scenario/unit/ludo_rathowm.php index 93373e3a..d114f121 100644 --- a/hwe/scenario/unit/ludo_rathowm.php +++ b/hwe/scenario/unit/ludo_rathowm.php @@ -21,7 +21,7 @@ class GameUnitConst extends GameUnitConstBase [],//성벽은 공격할 수 없다. [self::T_FOOTMAN=>1.2], ['성벽입니다.','생성할 수 없습니다.'], - null, null + null, null, null ], [ @@ -31,7 +31,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["표준적인 보병입니다. 보병은 방어특화입니다."], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 217101, self::T_FOOTMAN, '마물병', @@ -40,7 +40,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["마군 지역 기본병종입니다. 조금더 강하지만 쌀을 많이 소비합니다."], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 217102, self::T_FOOTMAN, '중장보병', @@ -49,7 +49,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["헬만 특유의 견고한 보병입니다."], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 217103, self::T_FOOTMAN, '흑의 군 보병', @@ -58,7 +58,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["흑의 군 전통의 체계적인 훈련으로 공격력을 보완했습니다."], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 217104, self::T_FOOTMAN, '용병', @@ -67,7 +67,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["일반 보병보다 비싸지만 받은 만큼은 일해줍니다."], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 217105, self::T_FOOTMAN, '사메라이', @@ -76,7 +76,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["검으로 난무를 가하는 몬스터 보병입니다."], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 217106, self::T_FOOTMAN, '템플나이트병', @@ -85,7 +85,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["공격을 포기하고 오직 방어에만 집중합니다."], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 217107, self::T_FOOTMAN, '메이드병', @@ -94,7 +94,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["켓셀링크 휘하의 날렵한 전투메이드입니다."], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 217108, self::T_FOOTMAN, '요괴병', @@ -103,7 +103,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["단단한 육체를 믿고 적진을 돌파합니다."], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 217109, self::T_FOOTMAN, '리자스 친위병', @@ -112,7 +112,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["여왕을 수호하는 리자스 최강의 보병 정예보병입니다."], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 217110, self::T_FOOTMAN, '케이브리스 마물병', @@ -121,7 +121,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["케이브리스 직속의 마물 정예 전투보병입니다."], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ 217111, self::T_FOOTMAN, '투신', @@ -130,7 +130,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["성마교단 유적에서 발굴된 사상 최강의 보병입니다."], - null, ['che_방어력증가5p'] + null, ['che_방어력증가5p'], null ], [ @@ -140,7 +140,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1], ["표준적인 궁병입니다. 궁병은 회피특화입니다."], - null, null + null, null, null ], [ 217201, self::T_ARCHER, '투척마물병', @@ -149,7 +149,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1], ["날렵함을 포기하고 도끼를 투척합니다."], - null, null + null, null, null ], [ 217202, self::T_ARCHER, '백의 군 궁병', @@ -158,7 +158,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1], ["전략을 활용하여 치고 빠지기에 능합니다."], - null, null + null, null, null ], [ 217203, self::T_ARCHER, '벌레술사병', @@ -167,7 +167,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1], ["벌레들을 부려 몸을 보호하는 궁병입니다."], - null, null + null, null, null ], [ 217204, self::T_ARCHER, '저격암살병', @@ -176,7 +176,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1], ["독을 바른 탄환으로 적의 목숨을 앗아갑니다."], - null, null + null, null, null ], [ 217205, self::T_ARCHER, '호루스병', @@ -185,7 +185,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1], ["민첩하게 파고드는 호루스족 궁병입니다."], - null, null + null, null, null ], [ 217206, self::T_ARCHER, '튤립병', @@ -194,7 +194,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1], ["최첨단병기 튤립으로 적을 폭격합니다."], - null, null + null, null, null ], [ 217207, self::T_ARCHER, '아이스플레임 궁병', @@ -203,7 +203,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1], ["혁명을 성공으로 이끈 정예 게릴라 궁병입니다."], - null, null + null, null, null ], [ 217208, self::T_ARCHER, '카라 궁병', @@ -212,7 +212,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1], ["선조의 힘을 이어받은 최강의 카라 정예 궁병입니다."], - null, null + null, null, null ], [ @@ -222,7 +222,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["표준적인 기동병입니다. 기동병은 공격특화입니다."], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 217301, self::T_CAVALRY, '하치온나', @@ -231,7 +231,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["작은 몸으로 회피하며 따끔한 일격을 먹이는 몬스터 기동병입니다."], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 217302, self::T_CAVALRY, '적의 군 기동병', @@ -240,7 +240,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["리자스군의 자랑인 기동부대입니다."], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 217303, self::T_CAVALRY, '안드로이드 기동병', @@ -249,7 +249,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["파이아르가 개발한 최첨단 안드로이드 기동병입니다."], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 217304, self::T_CAVALRY, '파란쵸 기동병', @@ -258,7 +258,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["적진을 일점돌파하는 파란쵸왕국의 돌격 기동병입니다. "], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 217305, self::T_CAVALRY, '비행마물병', @@ -267,7 +267,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["비행마물에 올라탄 기동마물병입니다."], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 217306, self::T_CAVALRY, '마물조련사병', @@ -276,7 +276,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["무시무시한 몬스터에 올라타서 싸우는 극강의 기동병입니다."], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 217307, self::T_CAVALRY, '기마병', @@ -285,7 +285,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["JAPAN 특유의 기마에 올라타 적을 짓밟는 기동병입니다."], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ 217308, self::T_CAVALRY, '엔젤나이트', @@ -294,7 +294,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1], [ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1], ["신의 명령으로 파멸을 내리기 위해 강림했습니다."], - null, ['che_기병병종전투'] + null, ['che_기병병종전투'], null ], [ @@ -304,7 +304,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ["마법을 사용하는 병종입니다."], - null, null + null, null, null ], [ 217401, self::T_WIZARD, '마물 마법병', @@ -313,7 +313,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ["마군 지역 기본병종입니다. 조금더 강하지만 금을 많이 소비합니다."], - null, null + null, null, null ], [ 217402, self::T_WIZARD, '카라 마법병', @@ -322,7 +322,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ["신속히 움직이며 카라의 저주로 적을 공격합니다."], - null, null + null, null, null ], [ 217403, self::T_WIZARD, '제스 마법병', @@ -331,7 +331,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ["마법국가 제스의 전통있는 마법병입니다."], - null, null + null, null, null ], [ 217404, self::T_WIZARD, '무녀', @@ -340,7 +340,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ["신마법과 함께 신통한 춤으로 활력을 불어넣는 마법병입니다."], - null, null + null, null, null ], [ 217405, self::T_WIZARD, '프로즌', @@ -349,7 +349,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ["백병전에 불리한 연약한 몸으로 마법 사용에 집중하는 몬스터입니다."], - null, null + null, null, null ], [ 217406, self::T_WIZARD, '마소한 마법병', @@ -358,7 +358,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ["로브를 여러겹 둘러입은 마물마법병입니다. 직접 전투보단 마법에 집중합니다."], - null, null + null, null, null ], [ 217407, self::T_WIZARD, '신관병', @@ -367,7 +367,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ["AL교의 전투신관입니다. 몸을 보호하는 성스러운 마법을 사용합니다."], - null, null + null, null, null ], [ 217408, self::T_WIZARD, '중장마법병', @@ -376,7 +376,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ["두터운 로브를 입고 불길한 주문을 읊습니다."], - null, null + null, null, null ], [ 217409, self::T_WIZARD, '악마병', @@ -385,7 +385,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ["고대 제스 왕가의 계약에 따라 소환된 흑마법병입니다."], - null, null + null, null, null ], [ 217410, self::T_WIZARD, '호넷 마물병', @@ -394,7 +394,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ["호넷 직속의 최강 마물 마법병입니다."], - null, null + null, null, null ], [ 217411, self::T_WIZARD, 'Z가디언', @@ -403,7 +403,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_SIEGE=>1.2], [self::T_SIEGE=>0.8], ["제스의 기술력이 집약된 최고의 마법병기입니다."], - null, null + null, null, null ], [ @@ -413,7 +413,7 @@ class GameUnitConst extends GameUnitConstBase [ self::T_FOOTMAN=>0.8, self::T_ARCHER=>0.8, self::T_CAVALRY=>0.8, self::T_WIZARD=>0.8, self::T_CASTLE=>1.8], [ self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2], ["높은 구조물 위에서 공격합니다."], - ['che_성벽부상무효'], null + ['che_성벽부상무효'], null, null ], [ 217501, self::T_SIEGE, '충차', @@ -422,7 +422,7 @@ class GameUnitConst extends GameUnitConstBase [ 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], ["엄청난 위력으로 성벽을 부수어버립니다."], - ['che_성벽부상무효'], null + ['che_성벽부상무효'], null, null ], [ 217502, self::T_SIEGE, '튤립3호', @@ -431,7 +431,7 @@ class GameUnitConst extends GameUnitConstBase [ ], [ ], ["파괴적인 위력과 정말 파괴적인 비용을 자랑하는 전차입니다. "], - ['che_성벽부상무효'], null + ['che_성벽부상무효'], null, null ], diff --git a/hwe/scenario/unit/siegetank.php b/hwe/scenario/unit/siegetank.php index 317ea88d..f71f5e7d 100644 --- a/hwe/scenario/unit/siegetank.php +++ b/hwe/scenario/unit/siegetank.php @@ -13,7 +13,7 @@ class GameUnitConst extends GameUnitConstBase [],//성벽은 공격할 수 없다. [self::T_FOOTMAN=>1.2], ['성벽입니다.','생성할 수 없습니다.'], - null, null + null, null, null ], [ 1100, self::T_FOOTMAN, '보병', @@ -22,7 +22,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8], [self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2], ['표준적인 보병입니다.','보병은 방어특화이며,','상대가 회피하기 어렵습니다.'], - null, null + null, null, null ], [ @@ -32,7 +32,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8], [self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2], ['표준적인 궁병입니다.','궁병은 회피특화입니다.'], - null, null + null, null, null ], [ @@ -42,7 +42,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8], [self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2], ['표준적인 기병입니다.','기병은 공격특화입니다.'], - null, null + null, null, null ], [ @@ -52,7 +52,7 @@ class GameUnitConst extends GameUnitConstBase [], [], ['계략을 사용하는 병종입니다.'], - null, null + null, null, null ], [ 1405, self::T_WIZARD, '남귀병', @@ -61,7 +61,7 @@ class GameUnitConst extends GameUnitConstBase [], [], ['전투를 포기하고 계략에 몰두합니다.'], - null, null + null, null, null ], [ @@ -71,7 +71,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_CASTLE=>1.8], [], ['높은 구조물 위에서 공격합니다.'], - ['che_성벽부상무효'], null + ['che_성벽부상무효'], null, null ], [ 1501, self::T_SIEGE, '충차', @@ -80,7 +80,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_CASTLE=>2.4], [], ['엄청난 위력으로 성벽을 부수어버립니다.'], - ['che_성벽부상무효'], null + ['che_성벽부상무효'], null, null ], [ 1502, self::T_SIEGE, '벽력거', @@ -89,7 +89,7 @@ class GameUnitConst extends GameUnitConstBase [self::T_CASTLE=>1.8], [], ['상대에게 돌덩이를 날립니다.'], - ['che_성벽부상무효'], null + ['che_성벽부상무효'], null, null ], [ 1503, self::T_SIEGE, '목우', @@ -98,7 +98,7 @@ class GameUnitConst extends GameUnitConstBase [], [], ['상대를 저지하는 특수병기입니다.'], - ['che_성벽부상무효'], null + ['che_성벽부상무효'], null, null ] ]; } \ No newline at end of file