Compare commits

...
14 changed files with 480 additions and 308 deletions
+35
View File
@@ -326,6 +326,41 @@ function buildGeneralSpecialWarClass(?string $type):BaseSpecial{
return $obj;
}
function getActionCrewTypeClass(?string $type){
if($type === null || $type === ''){
$type = 'None';
}
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 = '휴식';
+16 -9
View File
@@ -337,13 +337,13 @@ if ($action == 'reorder') {
]);
}
usort($defenderList, function (WarUnit $lhs, WarUnit $rhs) use ($attacker) {
return - (extractBattleOrder($lhs, $attacker) <=> extractBattleOrder($rhs, $attacker));
});
$rawDefenderList = array_map(function (WarUnit $unit) {
return $unit->getRaw();
}, $defenderList);
$rawDefenderList = [];
foreach($defenderList as $unit){
if(extractBattleOrder($unit, $attacker) <= 0){
continue;
}
$rawDefenderList[] = $unit->getRaw();
}
unset($defenderList);
$db = DB::db();
@@ -405,8 +405,13 @@ function simulateBattle(
);
}
$defenderList[] = $city;
if(count($defenderList) && extractBattleOrder($city, $attacker) > 0){
$defenderList[] = $city;
}
usort($defenderList, function (WarUnit $lhs, WarUnit $rhs) use ($attacker) {
return - (extractBattleOrder($lhs, $attacker) <=> extractBattleOrder($rhs, $attacker));
});
$iterDefender = new \ArrayIterator($defenderList);
$iterDefender->rewind();
@@ -441,7 +446,9 @@ function simulateBattle(
return null;
}
$defenderRice += $defender->getVar('rice');
if($defender instanceof WarUnitGeneral){
$defenderRice += $defender->getVar('rice');
}
$iterDefender->next();
return $defender;
+38 -12
View File
@@ -42,10 +42,18 @@ function processWar(string $warSeed, General $attackerGeneral, array $rawAttacke
/** @var WarUnit[] */
$defenderList = [];
foreach($defenderGeneralList as $defenderGeneral){
$defenderList[] = new WarUnitGeneral($rng, $defenderGeneral, $rawDefenderNation, false);
$defenderCandidate = new WarUnitGeneral($rng, $defenderGeneral, $rawDefenderNation, false);
if(extractBattleOrder($defenderCandidate, $attacker) <= 0){
continue;
}
$defenderList[] = $defenderCandidate;
}
$defenderList[] = $city;
if(count($defenderList) && extractBattleOrder($city, $attacker) > 0){
$defenderList[] = $city;
}
usort($defenderList, function (WarUnit $lhs, WarUnit $rhs) use ($attacker) {
return - (extractBattleOrder($lhs, $attacker) <=> extractBattleOrder($rhs, $attacker));
@@ -183,7 +191,11 @@ function processWar(string $warSeed, General $attackerGeneral, array $rawAttacke
function extractBattleOrder(WarUnit $defender, WarUnit $attacker)
{
if($defender instanceof WarUnitCity){
return -1;
if(!($attacker instanceof WarUnitGeneral)){
return 0;
}
$attackerGeneral = $attacker->getGeneral();
return $attackerGeneral->onCalcOpposeStat($defender->getGeneral(), 'cityBattleOrder', -1);
}
$general = $defender->getGeneral();
@@ -229,6 +241,7 @@ function processWar_NG(
$attackerNationUpdate = [];
$defenderNationUpdate = [];
/** @var WarUnit */
$defender = ($getNextDefender)(null, true);
$conquerCity = false;
@@ -244,6 +257,7 @@ function processWar_NG(
$logWritten = false;
if ($defender === null) {
$defender = $city;
$defender->setSiege();
if ($city->getNationVar('rice') <= 0 && $city->getVar('supply')) {
//병량 패퇴
@@ -410,21 +424,28 @@ function processWar_NG(
$attacker->logBattleResult();
$defender->logBattleResult();
$attacker->addWin();
$defender->addLose();
if (!($defender instanceof WarUnitCity) || $defender->isSiege()){
$attacker->addWin();
$defender->addLose();
$attacker->tryWound();
$defender->tryWound();
$attacker->tryWound();
$defender->tryWound();
if ($defender === $city) {
$attacker->addLevelExp(1000);
$conquerCity = true;
break;
if ($defender === $city) {
$attacker->addLevelExp(1000);
$conquerCity = true;
break;
}
}
$josaYi = JosaUtil::pick($defender->getCrewTypeName(), '이');
if ($noRice) {
if ($defender instanceof WarUnitCity && !$defender->isSiege()){
//실제 공성을 위해 다시 초기화
$defender->setOppose(null);
}
else if ($noRice) {
$logger->pushGlobalActionLog("<Y>{$defender->getName()}</>의 {$defender->getCrewTypeName()}{$josaYi} 패퇴했습니다.");
$attacker->getLogger()->pushGeneralActionLog("<Y>{$defender->getName()}</>의 {$defender->getCrewTypeName()}{$josaYi} 패퇴했습니다.", ActionLogger::PLAIN);
$defender->getLogger()->pushGeneralActionLog("군량 부족으로 패퇴합니다.", ActionLogger::PLAIN);
@@ -459,6 +480,11 @@ function processWar_NG(
$attacker->finishBattle();
$defender->finishBattle();
if($city->getDead()){
$city->setSiege();
$city->finishBattle();
}
if ($defender instanceof WarUnitCity) {
$newConflict = $defender->addConflict();
if ($newConflict) {
+12
View File
@@ -0,0 +1,12 @@
<?php
namespace sammo\ActionCrewType;
use \sammo\iAction;
use \sammo\General;
class None implements iAction{
use \sammo\DefaultAction;
protected $id = -1;
protected $name = '-';
protected $info = '';
}
@@ -0,0 +1,20 @@
<?php
namespace sammo\ActionCrewType;
use \sammo\iAction;
use \sammo\General;
class che_성벽선제 implements iAction{
use \sammo\DefaultAction;
protected $name = '성벽선제';
protected $info = '전투 가능한 성벽이라면 선제공격을 합니다.';
public function onCalcOpposeStat(General $general, string $statName, $value, $aux = null)
{
if($statName == 'cityBattleOrder'){
// battleOrder는 스탯과 유사한 수치를 가지므로, 아주 충분히 높은값을 설정한다.
return 10000;
}
return $value;
}
}
+12
View File
@@ -37,13 +37,25 @@ class DummyGeneral extends General
}
}
public function setCrewType(?GameUnitDetail $crewType){
$this->crewType = $crewType;
}
public function getBattleInitSkillTriggerList(WarUnit $unit): ?WarUnitTriggerCaller
{
//crewType에만 반응하자
if($this->crewType !== null){
return $this->crewType->getBattleInitSkillTriggerList($unit);
}
return new WarUnitTriggerCaller();
}
public function getBattlePhaseSkillTriggerList(WarUnit $unit): ?WarUnitTriggerCaller
{
//crewType에만 반응하자
if($this->crewType !== null){
return $this->crewType->getBattlePhaseSkillTriggerList($unit);
}
return new WarUnitTriggerCaller();
}
+39 -37
View File
@@ -41,7 +41,7 @@ class GameUnitConstBase{
[],//성벽은 공격할 수 없다.
[self::T_FOOTMAN=>1.2],
['성벽입니다.','생성할 수 없습니다.'],
null, null
null, ['che_선제사격시도', 'che_선제사격발동'], 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
],
[
@@ -315,8 +315,8 @@ class GameUnitConstBase{
0, null, null, 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],
['높은 구조물 위에서 공격합니다.'],
['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, '벽력거',
@@ -333,8 +333,8 @@ class GameUnitConstBase{
3000, ['업'], null, 0,
[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_성벽선제']
],
[
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_저지발동'], null
]
];
@@ -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;
+167 -66
View File
@@ -1,7 +1,9 @@
<?php
namespace sammo;
class GameUnitDetail implements iAction{
class GameUnitDetail implements iAction
{
use DefaultAction;
public $id;
@@ -23,6 +25,8 @@ class GameUnitDetail implements iAction{
public $info;
public $initSkillTrigger;
public $phaseSkillTrigger;
/** @var iAction[]|null iActionList */
public $iActionList;
public function __construct(
int $id,
@@ -43,8 +47,9 @@ class GameUnitDetail implements iAction{
array $defenceCoef,
array $info,
?array $initSkillTrigger,
?array $phaseSkillTrigger
){
?array $phaseSkillTrigger,
?array $iActionList,
) {
$this->id = $id;
$this->name = $name;
$this->armType = $armType;
@@ -64,78 +69,91 @@ class GameUnitDetail implements iAction{
$this->info = $info;
$this->initSkillTrigger = $initSkillTrigger;
$this->phaseSkillTrigger = $phaseSkillTrigger;
$this->iActionList = [];
foreach($iActionList ?? [] as $rawAction){
$action = buildActionCrewTypeClass($rawAction);
if(!$action){
continue;
}
$this->iActionList[] = $action;
}
}
public function getInfo():string{
public function getInfo(): string
{
return join("\n<br>", $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 +161,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 +184,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 +193,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 +236,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 +255,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 +273,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;
}
}
public function onCalcStat(General $general, string $statName, $value, $aux = null)
{
if (!$this->iActionList) {
return $value;
}
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 $value;
}
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 $value;
}
foreach ($this->iActionList as $iAction) {
$value = $iAction->onCalcStrategic($turnType, $varType, $value);
}
return $value;
}
public function onCalcNationalIncome(string $type, $amount)
{
if (!$this->iActionList) {
return $amount;
}
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 $aux;
}
foreach ($this->iActionList as $iAction) {
$aux = $iAction->onArbitraryAction($general, $rng, $actionType, $phase, $aux);
}
return $aux;
}
}
+32 -97
View File
@@ -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;
}
+23 -1
View File
@@ -7,6 +7,7 @@ class WarUnitCity extends WarUnit{
protected $hp;
protected $cityTrainAtmos;
protected $onSiege = false;
function __construct(public readonly RandUtil $rng, $raw, $rawNation, int $year, int $month, int $startYear){
$general = new DummyGeneral(false);
@@ -24,6 +25,7 @@ class WarUnitCity extends WarUnit{
$this->logger = $general->getLogger();
$this->crewType = GameUnitConst::byID(GameUnitConst::CREWTYPE_CASTLE);
$general->setCrewType($this->crewType);
$this->hp = $this->getCityVar('def') * 10;
@@ -77,6 +79,20 @@ class WarUnitCity extends WarUnit{
return $this->hp;
}
function setSiege(){
$this->onSiege = true;
$this->currPhase = 0;
$this->prePhase = 0;
$this->bonusPhase = 0;
/** @var DummyGeneral $general */
$general = $this->general;
$general->setCrewType(null);
}
function isSiege(): bool{
return $this->onSiege;
}
function getDex(GameUnitDetail $crewType){
return ($this->cityTrainAtmos - 60) * 7200;
}
@@ -94,6 +110,12 @@ class WarUnitCity extends WarUnit{
function continueWar(&$noRice):bool{
//전투가 가능하면 true
$noRice = false;
//본 공성이 아닌 경우에는 한대만 맞아줌
if(!$this->onSiege){
return false;
}
if($this->getHP() <= 0){
return false;
}
@@ -109,7 +131,7 @@ class WarUnitCity extends WarUnit{
}
function finishBattle(){
if($this->isFinished){
if($this->isFinished || !$this->onSiege){
return;
}
$this->clearActivatedSkill();
+8 -8
View File
@@ -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
]
];
}
+22 -22
View File
@@ -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
],
];
}
+46 -46
View File
@@ -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
],
+10 -10
View File
@@ -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
]
];
}