fix: 궁병이 아닌 경우에도 '맞 선제'가 정상 작동하도록 수정
- 궁병선제사격을 선제사격시도, 선제사격발동으로 분리 - 맞선제의 기준을 궁병이 아니라 '선제'의 활성화 여부로 구분
This commit is contained in:
@@ -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_궁병선제사격']
|
||||
null, ['che_선제사격시도', 'che_선제사격발동']
|
||||
],
|
||||
[
|
||||
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_궁병선제사격']
|
||||
null, ['che_선제사격시도', 'che_선제사격발동']
|
||||
],
|
||||
[
|
||||
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_궁병선제사격']
|
||||
null, ['che_선제사격시도', 'che_선제사격발동']
|
||||
],
|
||||
[
|
||||
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_궁병선제사격']
|
||||
null, ['che_선제사격시도', 'che_선제사격발동']
|
||||
],
|
||||
[
|
||||
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_궁병선제사격']
|
||||
null, ['che_선제사격시도', 'che_선제사격발동']
|
||||
],
|
||||
|
||||
[
|
||||
@@ -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],
|
||||
['높은 구조물 위에서 공격합니다.'],
|
||||
['che_성벽부상무효'], ['che_궁병선제사격']
|
||||
['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동']
|
||||
],
|
||||
[
|
||||
1501, 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=>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_선제사격발동']
|
||||
],
|
||||
[
|
||||
1503, self::T_SIEGE, '목우',
|
||||
|
||||
@@ -12,6 +12,7 @@ use sammo\GameUnitDetail;
|
||||
use sammo\Util;
|
||||
use sammo\ObjectTrigger;
|
||||
|
||||
/** @deprecated che_선제사격시도, che_선제사격발동 으로 이전*/
|
||||
class che_궁병선제사격 extends BaseWarUnitTrigger
|
||||
{
|
||||
protected $priority = ObjectTrigger::PRIORITY_BEGIN + 50;
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\WarUnitTrigger;
|
||||
|
||||
use sammo\ActionLogger;
|
||||
use sammo\BaseWarUnitTrigger;
|
||||
use sammo\GameUnitConst;
|
||||
use sammo\WarUnitGeneral;
|
||||
use sammo\WarUnitCity;
|
||||
use sammo\WarUnit;
|
||||
use sammo\GameUnitDetail;
|
||||
use sammo\Util;
|
||||
use sammo\ObjectTrigger;
|
||||
|
||||
class che_선제사격발동 extends BaseWarUnitTrigger
|
||||
{
|
||||
protected $priority = ObjectTrigger::PRIORITY_BEGIN + 51;
|
||||
|
||||
protected function actionWar(WarUnit $self, WarUnit $oppose, array &$selfEnv, array &$opposeEnv): bool
|
||||
{
|
||||
assert($self instanceof WarUnitGeneral, 'General만 발동 가능');
|
||||
if (!$self->hasActivatedSkill('선제')) {
|
||||
return true;
|
||||
}
|
||||
if ($oppose->hasActivatedSkill('선제') && $oppose->isAttacker()){
|
||||
//맞 선제라면 공격자가 처리
|
||||
return true;
|
||||
}
|
||||
|
||||
$self->addPhase(-1);
|
||||
$oppose->addPhase(-1);
|
||||
if ($oppose->hasActivatedSkill('선제')) {
|
||||
$self->multiplyWarPowerMultiply(2/3);
|
||||
$oppose->multiplyWarPowerMultiply(2/3);
|
||||
$oppose->getLogger()->pushGeneralBattleDetailLog('서로 <C>선제 사격</>을 주고 받았다!</>', ActionLogger::PLAIN);
|
||||
$self->getLogger()->pushGeneralBattleDetailLog('서로 <C>선제 사격</>을 주고 받았다!</>', ActionLogger::PLAIN);
|
||||
return true;
|
||||
}
|
||||
|
||||
$oppose->multiplyWarPowerMultiply(0);
|
||||
$self->multiplyWarPowerMultiply(2/3);
|
||||
$self->activateSkill('회피불가', '필살불가', '계략불가');
|
||||
$oppose->activateSkill('회피불가', '필살불가', '격노불가', '계략불가');
|
||||
|
||||
$oppose->getLogger()->pushGeneralBattleDetailLog('상대에게 <R>선제 사격</>을 받았다!</>', ActionLogger::PLAIN);
|
||||
$self->getLogger()->pushGeneralBattleDetailLog('상대에게 <C>선제 사격</>을 했다!</>', ActionLogger::PLAIN);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\WarUnitTrigger;
|
||||
|
||||
use sammo\ActionLogger;
|
||||
use sammo\BaseWarUnitTrigger;
|
||||
use sammo\GameUnitConst;
|
||||
use sammo\WarUnitGeneral;
|
||||
use sammo\WarUnitCity;
|
||||
use sammo\WarUnit;
|
||||
use sammo\GameUnitDetail;
|
||||
use sammo\Util;
|
||||
use sammo\ObjectTrigger;
|
||||
|
||||
class che_선제사격시도 extends BaseWarUnitTrigger
|
||||
{
|
||||
protected $priority = ObjectTrigger::PRIORITY_BEGIN + 50;
|
||||
|
||||
protected function actionWar(WarUnit $self, WarUnit $oppose, array &$selfEnv, array &$opposeEnv): bool
|
||||
{
|
||||
assert($self instanceof WarUnitGeneral, 'General만 발동 가능');
|
||||
if ($self->getPhase() !== 0 && $oppose->getPhase() !== 0) {
|
||||
return true;
|
||||
}
|
||||
if ($self->hasActivatedSkill('선제')) {
|
||||
return true;
|
||||
}
|
||||
if ($self->hasActivatedSkillOnLog('선제')) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$self->activateSkill('특수', '선제');
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user