재야에서는 국메가 안보내지던 버그 수정

일반장이 국메를 보낼 수 없던 버그 수정
외교 서신 클래스 에러 수정
This commit is contained in:
2018-04-16 23:29:17 +09:00
parent 4b33461c70
commit 9b79d12521
8 changed files with 54 additions and 414 deletions
+45 -45
View File
@@ -2,7 +2,7 @@
namespace sammo\Engine;
use \sammo\DB;
use \sammo\DiplomacticMessage;
use \sammo\DiplomaticMessage;
//NOTE: A가 B에게 항복, 통합 서신을 보냈을 때 통합 후 대상이 A이므로 A가 주체임.
class Diplomacy{
@@ -73,8 +73,8 @@ class Diplomacy{
//항복시 : 양국 다 외교제한이 지나지 않았어야함. 국력, 장수수가 적절해야함. 인접한 국가여야함. 서로 교전중이어선 안됨.
// 송신자가 선포, 전쟁중이어선 안됨. 송신자가 C국과 불가침인데 수신자가 C국과 전쟁중이면 안됨
protected function checkValidNation(array $prev = [DiplomacticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomacticMessage::ACCEPTED){
protected function checkValidNation(array $prev = [DiplomaticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomaticMessage::ACCEPTED){
return $prev;
}
@@ -83,39 +83,39 @@ class Diplomacy{
}
if($this->srcNation['level'] == 0 || $this->destNation['level'] == 0){
return [DiplomacticMessage::DECLINED, '방랑군과 외교룰 수행할 수 없습니다.'];
return [DiplomaticMessage::DECLINED, '방랑군과 외교룰 수행할 수 없습니다.'];
}
return $prev;
}
protected function checkNotWar(array $prev = [DiplomacticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomacticMessage::ACCEPTED){
protected function checkNotWar(array $prev = [DiplomaticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomaticMessage::ACCEPTED){
return $prev;
}
if($this->srcToDestDiplomacy['state'] == 0 || $this->srcToDestDiplomacy['state'] == 0
||$this->destToSrcDiplomacy['state'] == 1 || $this->destToSrcDiplomacy['state'] == 1){
return [DiplomacticMessage::DECLINED, '상대국과 선포, 전쟁 중입니다.'];
return [DiplomaticMessage::DECLINED, '상대국과 선포, 전쟁 중입니다.'];
}
return $prev;
}
protected function checkNonAggressionTreaty(array $prev = [DiplomacticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomacticMessage::ACCEPTED){
protected function checkNonAggressionTreaty(array $prev = [DiplomaticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomaticMessage::ACCEPTED){
return $prev;
}
if($this->srcToDestDiplomacy['state'] !== 7 || $this->destToSrcDiplomacy['state'] !== 7){
return [DiplomacticMessage::DECLINED, '상대국과 불가침 중이 아닙니다.'];
return [DiplomaticMessage::DECLINED, '상대국과 불가침 중이 아닙니다.'];
}
return $prev;
}
protected function checkInWar(array $prev = [DiplomacticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomacticMessage::ACCEPTED){
protected function checkInWar(array $prev = [DiplomaticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomaticMessage::ACCEPTED){
return $prev;
}
@@ -124,64 +124,64 @@ class Diplomacy{
return $prev;
}
return [DiplomacticMessage::DECLINED, '상대국과 선포, 전쟁 중이 아닙니다.'];
return [DiplomaticMessage::DECLINED, '상대국과 선포, 전쟁 중이 아닙니다.'];
}
protected function checkDiplomacyLimit(array $prev = [DiplomacticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomacticMessage::ACCEPTED){
protected function checkDiplomacyLimit(array $prev = [DiplomaticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomaticMessage::ACCEPTED){
return $prev;
}
if($this->destNation['surlimit'] > 0){
return [DiplomacticMessage::DECLINED, '본국의 외교 기한이 남아있습니다.'];
return [DiplomaticMessage::DECLINED, '본국의 외교 기한이 남아있습니다.'];
}
if($this->srcNation['surlimit'] > 0){
return [DiplomacticMessage::DECLINED, '상대국의 외교 기한이 남아있습니다.'];
return [DiplomaticMessage::DECLINED, '상대국의 외교 기한이 남아있습니다.'];
}
return $prev;
}
protected function checkStrictlyAdjacent(array $prev = [DiplomacticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomacticMessage::ACCEPTED){
protected function checkStrictlyAdjacent(array $prev = [DiplomaticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomaticMessage::ACCEPTED){
return $prev;
}
if(!\sammo\isClose($this->srcNation['nation'], $this->destNation['nation'], false)){
return [DiplomacticMessage::DECLINED, '상대국의 도시들과 보급선이 이어지지 않았습니다.'];
return [DiplomaticMessage::DECLINED, '상대국의 도시들과 보급선이 이어지지 않았습니다.'];
}
return $prev;
}
protected function checkAdjacent(array $prev = [DiplomacticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomacticMessage::ACCEPTED){
protected function checkAdjacent(array $prev = [DiplomaticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomaticMessage::ACCEPTED){
return $prev;
}
if(!\sammo\isClose($this->srcNation['nation'], $this->destNation['nation'], true)){
return [DiplomacticMessage::DECLINED, '상대국의 도시와 인접하지 않았습니다.'];
return [DiplomaticMessage::DECLINED, '상대국의 도시와 인접하지 않았습니다.'];
}
return $prev;
}
protected function checkAlreadyMerging(array $prev = [DiplomacticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomacticMessage::ACCEPTED){
protected function checkAlreadyMerging(array $prev = [DiplomaticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomaticMessage::ACCEPTED){
return $prev;
}
if((3 <= $this->srcToDestDiplomacy['state'] && $this->srcToDestDiplomacy['state'] <= 6)
||(3 <= $this->destToSrcDiplomacy['state'] && $this->destToSrcDiplomacy['state'] <= 6)){
return [DiplomacticMessage::DECLINED, '상대국과 합병 중입니다.'];
return [DiplomaticMessage::DECLINED, '상대국과 합병 중입니다.'];
}
return $prev;
}
protected function checkSrcNationHasNeutralDiplomacy(array $prev = [DiplomacticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomacticMessage::ACCEPTED){
protected function checkSrcNationHasNeutralDiplomacy(array $prev = [DiplomaticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomaticMessage::ACCEPTED){
return $prev;
}
@@ -195,18 +195,18 @@ class Diplomacy{
foreach($states as $state){
if($state == 0 || $state == 1){
return [DiplomacticMessage::DECLINED, '상대국이 전쟁 중입니다.'];
return [DiplomaticMessage::DECLINED, '상대국이 전쟁 중입니다.'];
}
if(3 <= $state && $state <= 6){
return [DiplomacticMessage::DECLINED, '상대국이 합병 중입니다.'];
return [DiplomaticMessage::DECLINED, '상대국이 합병 중입니다.'];
}
}
return $prev;
}
protected function checkContradictoryDiplomacy(array $prev = [DiplomacticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomacticMessage::ACCEPTED){
protected function checkContradictoryDiplomacy(array $prev = [DiplomaticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomaticMessage::ACCEPTED){
return $prev;
}
@@ -221,26 +221,26 @@ class Diplomacy{
);
if($cnt > 0){
return [DiplomacticMessage::DECLINED, '상대국이 본국의 교전국과 불가침중입니다.'];
return [DiplomaticMessage::DECLINED, '상대국이 본국의 교전국과 불가침중입니다.'];
}
return $prev;
}
protected function checkMorePower(array $prev = [DiplomacticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomacticMessage::ACCEPTED){
protected function checkMorePower(array $prev = [DiplomaticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomaticMessage::ACCEPTED){
return $prev;
}
if($this->srcNation['power'] < $this->destNation['power'] * 3){
return [DiplomacticMessage::DECLINED, '상대국과 국력차가 크지 않습니다.'];
return [DiplomaticMessage::DECLINED, '상대국과 국력차가 크지 않습니다.'];
}
return $prev;
}
protected function checkMergePower(array $prev = [DiplomacticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomacticMessage::ACCEPTED){
protected function checkMergePower(array $prev = [DiplomaticMessage::ACCEPTED, '']){
if($prev[0] !== DiplomaticMessage::ACCEPTED){
return $prev;
}
@@ -257,13 +257,13 @@ class Diplomacy{
$mergedPower = ($this->srcNation['power'] + $this->destNation['power'])/2;
$ZPower = ($mergedPower - $powerAvg) / $powerStddev;
if($ZPower >= -0.25){
return [DiplomacticMessage::DECLINED, '두 국가의 국력 평균이 상위 60% 보다 높습니다.'];
return [DiplomaticMessage::DECLINED, '두 국가의 국력 평균이 상위 60% 보다 높습니다.'];
}
$mergedGeneral = ($this->srcNation['gennum'] + $this->destNation['gennum'])/2;
$ZGeneral = ($mergedGeneral - $genAvg) / $genStddev;
if($ZGeneral >= -0.67){
return [DiplomacticMessage::DECLINED, '두 국가의 장수수 평균이 상위 75% 보다 높습니다.'];
return [DiplomaticMessage::DECLINED, '두 국가의 장수수 평균이 상위 75% 보다 높습니다.'];
}
return $prev;
@@ -275,7 +275,7 @@ class Diplomacy{
$chk = $this->checkAlreadyMerging($chk);
list($result, $reason) = $chk;
if($result !== DiplomacticMessage::ACCEPTED){
if($result !== DiplomaticMessage::ACCEPTED){
return $chk;
}
@@ -297,7 +297,7 @@ class Diplomacy{
$chk = $this->checkNonAggressionTreaty($chk);
list($result, $reason) = $chk;
if($result !== DiplomacticMessage::ACCEPTED){
if($result !== DiplomaticMessage::ACCEPTED){
return $chk;
}
@@ -319,7 +319,7 @@ class Diplomacy{
$chk = $this->checkInWar($chk);
list($result, $reason) = $chk;
if($result !== DiplomacticMessage::ACCEPTED){
if($result !== DiplomaticMessage::ACCEPTED){
return $chk;
}
@@ -345,7 +345,7 @@ class Diplomacy{
$chk = $this->checkMergePower($chk);
list($result, $reason) = $chk;
if($result !== DiplomacticMessage::ACCEPTED){
if($result !== DiplomaticMessage::ACCEPTED){
return $chk;
}
@@ -378,7 +378,7 @@ class Diplomacy{
$chk = $this->checkMorePower($chk);
list($result, $reason) = $chk;
if($result !== DiplomacticMessage::ACCEPTED){
if($result !== DiplomaticMessage::ACCEPTED){
return $chk;
}