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
namespace sammo;
use sammo\Enums\GeneralColumn;
use sammo\Enums\GeneralLiteQueryMode;
use sammo\Enums\GeneralQueryMode;
use sammo\Enums\MessageType;
@@ -24,9 +26,10 @@ $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$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'];
$nationID = $me['nation'];
$myPenalty = Json::decode($me['penalty'] ?? '{}');
//수뇌가 아니면 아무것도 할 수 없음
if ($myOfficerLevel < 5) {
@@ -46,8 +49,7 @@ if($action === '추방' && $destGeneralID==0){
if ($destGeneralID == 0) {
$general = new DummyGeneral(true);
$general->setVar('nation', $nationID);
}
else{
} else {
$general = General::createObjFromDB($destGeneralID);
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();
$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);
if ($targetOfficerLevel === 11) {
}
else if($targetOfficerLevel % 2 == 0){
} else if ($targetOfficerLevel % 2 == 0) {
if ($general->getVar('strength') < GameConst::$chiefStatMin) {
return '무력이 부족합니다.';
}
}
else{
} else {
if ($general->getVar('intel') < GameConst::$chiefStatMin) {
return '지력이 부족합니다.';
}
@@ -123,7 +128,10 @@ function do수뇌임명(General $general, int $targetOfficerLevel):?string{
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();
$db = DB::db();
@@ -132,6 +140,10 @@ function do도시임명(General $general, int $cityID, int $targetOfficerLevel):
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);
if ($officerSet === null) {
return '아국 도시가 아닙니다';
@@ -170,12 +182,13 @@ function do도시임명(General $general, int $cityID, int $targetOfficerLevel):
return null;
}
function do추방(General $general, int $myOfficerLevel):?string{
function do추방(General $general, int $myOfficerLevel): ?string
{
$generalID = $general->getID();
$generalName = $general->getVar('name');
$nationID = $general->getNationID();
if($general->hasPenalty(PenaltyKey::NoBanGeneral)){
if ($myPenalty[PenaltyKey::NoBanGeneral->value] ?? false) {
return '추방할 수 없는 상태입니다.';
}
@@ -225,8 +238,7 @@ function do추방(General $general, int $myOfficerLevel):?string{
// 명성/공헌 N*10%감소
if ($env['year'] <= $env['startyear'] && $general->getNPCType() < 2) {
$general->setVar('makelimit', $oldMakeLimit);
}
else{
} else {
$betrayCnt = $general->getVar('betray');
$general->addExperience(-$general->getVar('experience') * 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 NoBanGeneral = 'noBanGeneral';
case NoChiefTurnInput = 'noChiefTurnInput';
case NoChiefChange = 'noChiefChange';
}