feat: 유저장의 수뇌 임명 불가 penalty
This commit is contained in:
+27
-15
@@ -1,6 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
|
use sammo\Enums\GeneralColumn;
|
||||||
use sammo\Enums\GeneralLiteQueryMode;
|
use sammo\Enums\GeneralLiteQueryMode;
|
||||||
use sammo\Enums\GeneralQueryMode;
|
use sammo\Enums\GeneralQueryMode;
|
||||||
use sammo\Enums\MessageType;
|
use sammo\Enums\MessageType;
|
||||||
@@ -24,9 +26,10 @@ $db = DB::db();
|
|||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$gameStor->cacheValues(['startyear', 'year', 'month', 'scenario']);
|
$gameStor->cacheValues(['startyear', 'year', 'month', 'scenario']);
|
||||||
|
|
||||||
$me = $db->queryFirstRow('SELECT no,nation,officer_level from general where owner=%i', $userID);
|
$me = $db->queryFirstRow('SELECT no,nation,officer_level,penalty from general where owner=%i', $userID);
|
||||||
$myOfficerLevel = $me['officer_level'];
|
$myOfficerLevel = $me['officer_level'];
|
||||||
$nationID = $me['nation'];
|
$nationID = $me['nation'];
|
||||||
|
$myPenalty = Json::decode($me['penalty'] ?? '{}');
|
||||||
|
|
||||||
//수뇌가 아니면 아무것도 할 수 없음
|
//수뇌가 아니면 아무것도 할 수 없음
|
||||||
if ($myOfficerLevel < 5) {
|
if ($myOfficerLevel < 5) {
|
||||||
@@ -46,8 +49,7 @@ if($action === '추방' && $destGeneralID==0){
|
|||||||
if ($destGeneralID == 0) {
|
if ($destGeneralID == 0) {
|
||||||
$general = new DummyGeneral(true);
|
$general = new DummyGeneral(true);
|
||||||
$general->setVar('nation', $nationID);
|
$general->setVar('nation', $nationID);
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$general = General::createObjFromDB($destGeneralID);
|
$general = General::createObjFromDB($destGeneralID);
|
||||||
|
|
||||||
if ($general instanceof DummyGeneral) {
|
if ($general instanceof DummyGeneral) {
|
||||||
@@ -72,7 +74,14 @@ if($officerLevel == 12){
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function do수뇌임명(General $general, int $targetOfficerLevel):?string{
|
function do수뇌임명(General $general, int $targetOfficerLevel): ?string
|
||||||
|
{
|
||||||
|
global $myPenalty;
|
||||||
|
|
||||||
|
if ($myPenalty[PenaltyKey::NoChiefChange->value] ?? false) {
|
||||||
|
return '수뇌를 임명할 수 없는 상태입니다.';
|
||||||
|
}
|
||||||
|
|
||||||
$generalID = $general->getID();
|
$generalID = $general->getID();
|
||||||
$nationID = $general->getNationID();
|
$nationID = $general->getNationID();
|
||||||
|
|
||||||
@@ -98,15 +107,11 @@ function do수뇌임명(General $general, int $targetOfficerLevel):?string{
|
|||||||
], 'nation=%i AND officer_level=%i AND no!=%i', $nationID, $targetOfficerLevel, $generalID);
|
], 'nation=%i AND officer_level=%i AND no!=%i', $nationID, $targetOfficerLevel, $generalID);
|
||||||
|
|
||||||
if ($targetOfficerLevel === 11) {
|
if ($targetOfficerLevel === 11) {
|
||||||
|
} else if ($targetOfficerLevel % 2 == 0) {
|
||||||
}
|
|
||||||
else if($targetOfficerLevel % 2 == 0){
|
|
||||||
if ($general->getVar('strength') < GameConst::$chiefStatMin) {
|
if ($general->getVar('strength') < GameConst::$chiefStatMin) {
|
||||||
return '무력이 부족합니다.';
|
return '무력이 부족합니다.';
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
}
|
|
||||||
else{
|
|
||||||
if ($general->getVar('intel') < GameConst::$chiefStatMin) {
|
if ($general->getVar('intel') < GameConst::$chiefStatMin) {
|
||||||
return '지력이 부족합니다.';
|
return '지력이 부족합니다.';
|
||||||
}
|
}
|
||||||
@@ -123,7 +128,10 @@ function do수뇌임명(General $general, int $targetOfficerLevel):?string{
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function do도시임명(General $general, int $cityID, int $targetOfficerLevel):?string{
|
function do도시임명(General $general, int $cityID, int $targetOfficerLevel): ?string
|
||||||
|
{
|
||||||
|
global $myPenalty;
|
||||||
|
|
||||||
$nationID = $general->getNationID();
|
$nationID = $general->getNationID();
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
@@ -132,6 +140,10 @@ function do도시임명(General $general, int $cityID, int $targetOfficerLevel):
|
|||||||
return '올바르지 않은 도시입니다';
|
return '올바르지 않은 도시입니다';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($general->getVar(GeneralColumn::officer_level) >= 4 && $myPenalty[PenaltyKey::NoChiefChange->value] ?? false) {
|
||||||
|
return '수뇌인 장수를 변경할 수 없는 상태입니다.';
|
||||||
|
}
|
||||||
|
|
||||||
$officerSet = $db->queryFirstField('SELECT officer_set FROM city WHERE nation=%i AND city=%i', $nationID, $cityID);
|
$officerSet = $db->queryFirstField('SELECT officer_set FROM city WHERE nation=%i AND city=%i', $nationID, $cityID);
|
||||||
if ($officerSet === null) {
|
if ($officerSet === null) {
|
||||||
return '아국 도시가 아닙니다';
|
return '아국 도시가 아닙니다';
|
||||||
@@ -170,12 +182,13 @@ function do도시임명(General $general, int $cityID, int $targetOfficerLevel):
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function do추방(General $general, int $myOfficerLevel):?string{
|
function do추방(General $general, int $myOfficerLevel): ?string
|
||||||
|
{
|
||||||
$generalID = $general->getID();
|
$generalID = $general->getID();
|
||||||
$generalName = $general->getVar('name');
|
$generalName = $general->getVar('name');
|
||||||
$nationID = $general->getNationID();
|
$nationID = $general->getNationID();
|
||||||
|
|
||||||
if($general->hasPenalty(PenaltyKey::NoBanGeneral)){
|
if ($myPenalty[PenaltyKey::NoBanGeneral->value] ?? false) {
|
||||||
return '추방할 수 없는 상태입니다.';
|
return '추방할 수 없는 상태입니다.';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,8 +238,7 @@ function do추방(General $general, int $myOfficerLevel):?string{
|
|||||||
// 명성/공헌 N*10%감소
|
// 명성/공헌 N*10%감소
|
||||||
if ($env['year'] <= $env['startyear'] && $general->getNPCType() < 2) {
|
if ($env['year'] <= $env['startyear'] && $general->getNPCType() < 2) {
|
||||||
$general->setVar('makelimit', $oldMakeLimit);
|
$general->setVar('makelimit', $oldMakeLimit);
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$betrayCnt = $general->getVar('betray');
|
$betrayCnt = $general->getVar('betray');
|
||||||
$general->addExperience(-$general->getVar('experience') * 0.15 * $betrayCnt);
|
$general->addExperience(-$general->getVar('experience') * 0.15 * $betrayCnt);
|
||||||
$general->addDedication(-$general->getVar('dedication') * 0.15 * $betrayCnt);
|
$general->addDedication(-$general->getVar('dedication') * 0.15 * $betrayCnt);
|
||||||
|
|||||||
@@ -12,5 +12,6 @@ enum PenaltyKey: string{
|
|||||||
case NoAmbassador = 'noAmbassador';
|
case NoAmbassador = 'noAmbassador';
|
||||||
case NoBanGeneral = 'noBanGeneral';
|
case NoBanGeneral = 'noBanGeneral';
|
||||||
case NoChiefTurnInput = 'noChiefTurnInput';
|
case NoChiefTurnInput = 'noChiefTurnInput';
|
||||||
|
case NoChiefChange = 'noChiefChange';
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user