재야에서는 국메가 안보내지던 버그 수정
일반장이 국메를 보낼 수 없던 버그 수정 외교 서신 클래스 에러 수정
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
class DiplomacticMessage extends Message{
|
||||
class DiplomaticMessage extends Message{
|
||||
|
||||
const ACCEPTED = 1;
|
||||
const DECLINED = -1;
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ class Message
|
||||
$this->isInboxMail = true;
|
||||
break;
|
||||
}
|
||||
if($mailbox > Message::MAILBOX_NATIONAL){
|
||||
if($mailbox >= Message::MAILBOX_NATIONAL){
|
||||
if($this->msgType === Message::MSGTYPE_DIPLOMACY){
|
||||
$this->isInboxMail = true;
|
||||
break;
|
||||
@@ -150,7 +150,7 @@ class Message
|
||||
|
||||
$action = Util::array_get($option['action'], null);
|
||||
if ($msgType === self::MSGTYPE_DIPLOMACY) {
|
||||
$objMessage = new DiplomacticMessage(...$args);
|
||||
$objMessage = new DiplomaticMessage(...$args);
|
||||
} elseif ($action === 'scout') {
|
||||
$objMessage = new ScoutMessage(...$args);
|
||||
} else {
|
||||
@@ -167,9 +167,6 @@ class Message
|
||||
if ($mailbox > self::MAILBOX_PUBLIC) {
|
||||
return false;
|
||||
}
|
||||
if ($mailbox == self::MAILBOX_NATIONAL) {
|
||||
return false;
|
||||
}
|
||||
if ($mailbox <= 0) {
|
||||
return false;
|
||||
}
|
||||
@@ -213,9 +210,12 @@ class Message
|
||||
throw new \InvalidArgumentException('올바르지 않은 $msgType');
|
||||
}
|
||||
|
||||
$date = (new \DateTime())->format('Y-m-d H:i:s');
|
||||
|
||||
$where = new \WhereClause('and');
|
||||
$where->add('mailbox = %i', $mailbox);
|
||||
$where->add('type = %s', $msgType);
|
||||
$where->add('valid_until > %s', $date);
|
||||
if ($fromSeq > 0) {
|
||||
$where->add('id > %i', $fromSeq);
|
||||
}
|
||||
@@ -239,7 +239,7 @@ class Message
|
||||
$src_id = $this->src->generalID;
|
||||
$dest_id = self::MAILBOX_PUBLIC;
|
||||
}
|
||||
else if($mailbox > self::MAILBOX_NATIONAL){
|
||||
else if($mailbox >= self::MAILBOX_NATIONAL){
|
||||
$src_id = $this->src->nationID + self::MAILBOX_NATIONAL;
|
||||
$dest_id = $this->dest->nationID + self::MAILBOX_NATIONAL;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user