feat: 유저장의 수뇌 임명 불가 penalty
This commit is contained in:
+27
-15
@@ -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);
|
||||
|
||||
@@ -12,5 +12,6 @@ enum PenaltyKey: string{
|
||||
case NoAmbassador = 'noAmbassador';
|
||||
case NoBanGeneral = 'noBanGeneral';
|
||||
case NoChiefTurnInput = 'noChiefTurnInput';
|
||||
case NoChiefChange = 'noChiefChange';
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user