feat: 유저장의 수뇌 임명 불가 penalty

This commit is contained in:
2024-06-08 15:55:26 +00:00
parent fba5fbdb6b
commit 552d73430c
2 changed files with 111 additions and 98 deletions
+27 -15
View File
@@ -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);
+1
View File
@@ -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';
} }