city의 officer를 general로 이동

This commit is contained in:
2020-04-18 03:57:58 +09:00
parent b8c28e0a89
commit 16f2c9fb42
98 changed files with 680 additions and 889 deletions
-3
View File
@@ -242,9 +242,6 @@ class CityConstBase{
protected static $buildInitCommon = [
'trust'=>50,
'trade'=>100,
'officer4'=>0,
'officer3'=>0,
'officer2'=>0
];
protected static $buildInit = [
+2 -2
View File
@@ -226,8 +226,8 @@ abstract class BaseCommand{
return $this->generalObj->getNationID();
}
public function getGeneralLevel(){
return $this->generalObj->getVar('level');
public function getOfficerLevel(){
return $this->generalObj->getVar('officer_level');
}
public function getBrief():string{
+1 -1
View File
@@ -128,7 +128,7 @@ class che_강행 extends Command\GeneralCommand{
$exp = 100;
$general->setVar('city', $destCityID);
if($general->getVar('level') == 12 && $this->nation['level'] == 0){
if($general->getVar('officer_level') == 12 && $this->nation['level'] == 0){
$generalList = $db->queryFirstColumn('SELECT no FROM general WHERE nation=%i AND no!=%i', $general->getNationID(), $general->getID());
if($generalList){
+3 -2
View File
@@ -135,7 +135,7 @@ class che_거병 extends Command\GeneralCommand{
foreach(Util::range(GameConst::$maxChiefTurn) as $turnIdx){
$turnRows[] = [
'nation_id'=>$nationID,
'level'=>$chiefLevel,
'officer_level'=>$chiefLevel,
'turn_idx'=>$turnIdx,
'action'=>'휴식',
'arg'=>null,
@@ -161,7 +161,8 @@ class che_거병 extends Command\GeneralCommand{
$general->addExperience($exp);
$general->addDedication($ded);
$general->setVar('belong', 1);
$general->setVar('level', 12);
$general->setVar('officer_level', 12);
$general->setVar('officer_city', 0);
$general->setVar('nation', $nationID);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
+11 -14
View File
@@ -12,6 +12,7 @@ use \sammo\{
use function \sammo\{
function getNationStaticInfo,
tryUniqueItemLottery
};
@@ -71,32 +72,28 @@ class che_귀환 extends Command\GeneralCommand{
$env = $this->env;
$general = $this->generalObj;
$generalID = $general->getID();
$date = $general->getTurnTime($general::TURNTIME_HM);
$generalLevel = $general->getVar('level');
$target = null;
if(2 <= $generalLevel && $generalLevel <= 4){
$target = $db->queryFirstList(
'SELECT city, name FROM city WHERE %b=%i AND nation = %i',
'officer'.$general->getVar('level'), $generalID, $general->getNationID()
);
$officerLevel = $general->getVar('officer_level');
$destCityID = null;
if(2 <= $officerLevel && $officerLevel <= 4){
$destCityID = $general->getVar('officer_city');
}
if(!$target){
$target = $db->queryFirstList('SELECT city, name FROM city WHERE city=%i', $this->nation['capital']);
else{
$destCityID = $this->nation['capital'];
}
$destCityName = CityConst::byID($destCityID)->name;
[$cityID, $cityName] = $target;
$josaRo = JosaUtil::pick($cityName, '로');
$josaRo = JosaUtil::pick($destCityName, '로');
$logger = $general->getLogger();
$logger->pushGeneralActionLog("<G><b>{$cityName}</b></>{$josaRo} 귀환했습니다. <1>$date</>");
$logger->pushGeneralActionLog("<G><b>{$destCityName}</b></>{$josaRo} 귀환했습니다. <1>$date</>");
$exp = 70;
$ded = 100;
$general->setVar('city', $cityID);
$general->setVar('city', $destCityID);
$general->addExperience($exp);
$general->addDedication($ded);
+2 -2
View File
@@ -78,7 +78,7 @@ class che_등용 extends Command\GeneralCommand{
ConstraintHelper::ReqGeneralRice($reqRice),
];
if($this->destGeneralObj->getVar('level') == 12){
if($this->destGeneralObj->getVar('officer_level') == 12){
$this->runnableConstraints[] = ConstraintHelper::AlwaysFail('군주에게는 등용장을 보낼 수 없습니다.');
}
}
@@ -160,7 +160,7 @@ class che_등용 extends Command\GeneralCommand{
$db = DB::db();
$destGenerals = [];
$destRawGenerals = $db->query('SELECT no,name,npc,nation FROM general WHERE npc < 2 AND no != %i AND level != 12 ORDER BY npc,binary(name)',$this->generalObj->getID());
$destRawGenerals = $db->query('SELECT no,name,npc,nation FROM general WHERE npc < 2 AND no != %i AND officer_level != 12 ORDER BY npc,binary(name)',$this->generalObj->getID());
foreach($destRawGenerals as $destGeneral){
$destNationID = $destGeneral['nation'];
if(!key_exists($destNationID, $destGenerals)){
+7 -13
View File
@@ -92,7 +92,7 @@ class che_등용수락 extends Command\GeneralCommand{
ConstraintHelper::AllowJoinDestNation($relYear),
ConstraintHelper::ReqDestNationValue('level', '국가규모', '>', 0, '방랑군에는 임관할 수 없습니다.'),
ConstraintHelper::DifferentDestNation(),
ConstraintHelper::ReqGeneralValue('level', '직위', '!=', 12, '군주는 등용장을 수락할 수 없습니다')
ConstraintHelper::ReqGeneralValue('officer_level', '직위', '!=', 12, '군주는 등용장을 수락할 수 없습니다')
];
}
@@ -138,7 +138,6 @@ class che_등용수락 extends Command\GeneralCommand{
$destGeneral->addExperience(100);
$destGeneral->addDedication(100);
$setOriginalCityValues = [];
$setOriginalNationValues = [
'gennum'=>$db->sqleval('gennum - 1')
];
@@ -159,12 +158,9 @@ class che_등용수락 extends Command\GeneralCommand{
$general->setVar('rice', GameConst::$defaultRice);
}
$generalLevel = $general->getVar('level');
if(5 <= $generalLevel && $generalLevel <= 11){
$setOriginalNationValues["l{$generalLevel}set"] = 0;
}
else if(2 <= $generalLevel && $generalLevel <= 4){
$setOriginalCityValues['officer'.$generalLevel] = 0;
$officerLevel = $general->getVar('officer_level');
if(5 <= $officerLevel && $officerLevel <= 11){
$setOriginalNationValues["l{$officerLevel}set"] = 0;
}
// 재야가 아니면 명성N*10% 공헌N*10%감소
@@ -201,14 +197,12 @@ class che_등용수락 extends Command\GeneralCommand{
$db->update('nation', $setOriginalNationValues, 'nation=%i', $nationID);
}
$db->update('nation', $setScoutNationValues, 'nation=%i', $destNationID);
if($setOriginalCityValues){
$db->update('city', $setOriginalCityValues, 'city=%i', $cityID);
}
$general->setVar('permission', 'normal');
$general->setVar('belong', 1);
$general->setVar('level', 1);
$general->setVar('officer_level', 1);
$general->setVar('officer_city', 0);
$general->setVar('nation', $destNationID);
$general->setVar('city', $this->destNation['capital']);
$general->setVar('troop', 0);
@@ -234,7 +228,7 @@ class che_등용수락 extends Command\GeneralCommand{
$db = DB::db();
$destGenerals = [];
$destRawGenerals = $db->query('SELECT no,name,npc,nation FROM general WHERE npc < 2 AND no != %i AND level != 12 ORDER BY npc,binary(name)',$this->generalObj->getID());
$destRawGenerals = $db->query('SELECT no,name,npc,nation FROM general WHERE npc < 2 AND no != %i AND officer_level != 12 ORDER BY npc,binary(name)',$this->generalObj->getID());
foreach($destRawGenerals as $destGeneral){
$destNationID = $destGeneral['nation'];
if(!key_exists($destNationID, $destGenerals)){
@@ -110,14 +110,14 @@ class che_랜덤임관 extends Command\GeneralCommand{
if ($general->getVar('npc') >= 2 && !$env['fiction'] && 1000 <= $env['scenario'] && $env['scenario'] < 2000) {
if($notIn){
$nations = $db->query(
'SELECT nation.`name` as `name`,nation.nation as nation,scout,gennum,`affinity` FROM nation join general on general.nation = nation.nation and general.level = 12 WHERE scout=0 and gennum<%i and nation.nation not in %li',
'SELECT nation.`name` as `name`,nation.nation as nation,scout,gennum,`affinity` FROM nation join general on general.nation = nation.nation and general.officer_level = 12 WHERE scout=0 and gennum<%i and nation.nation not in %li',
$relYear<3?GameConst::$initialNationGenLimit:GameConst::$defaultMaxGeneral,
$notIn
);
}
else{
$nations = $db->query(
'SELECT nation.`name` as `name`,nation.nation as nation,scout,gennum,`affinity` FROM nation join general on general.nation = nation.nation and general.level = 12 WHERE scout=0 and gennum<%i',
'SELECT nation.`name` as `name`,nation.nation as nation,scout,gennum,`affinity` FROM nation join general on general.nation = nation.nation and general.officer_level = 12 WHERE scout=0 and gennum<%i',
$relYear<3?GameConst::$initialNationGenLimit:GameConst::$defaultMaxGeneral
);
}
@@ -239,14 +239,15 @@ class che_랜덤임관 extends Command\GeneralCommand{
}
$general->setVar('nation', $destNationID);
$general->setVar('level', 1);
$general->setVar('officer_level', 1);
$general->setVar('officer_city', 0);
$general->setVar('belong', 1);
if($this->destGeneralObj !== null){
$general->setVar('city', $this->destGeneralObj->getCityID());
}
else{
$targetCityID = $db->queryFirstField('SELECT city FROM general WHERE nation = %i AND level=12', $destNationID);
$targetCityID = $db->queryFirstField('SELECT city FROM general WHERE nation = %i AND officer_level=12', $destNationID);
$general->setVar('city', $targetCityID);
}
+6 -10
View File
@@ -70,7 +70,7 @@ class che_모반시도 extends Command\GeneralCommand{
$nationID = $general->getNationID();
$lordID = $db->queryFirstField('SELECT no FROM general WHERE nation = %i AND level = 12', $nationID);
$lordID = $db->queryFirstField('SELECT no FROM general WHERE nation = %i AND officer_level = 12', $nationID);
$lordGeneral = General::createGeneralObjFromDB($lordID);
@@ -82,16 +82,12 @@ class che_모반시도 extends Command\GeneralCommand{
$logger = $general->getLogger();
$lordLogger = $this->destGeneralObj->getLogger();
$generalLevel = $general->getVar('level');
$general->setVar('level', 12);
$lordGeneral->setVar('level', 1);
$general->setVar('officer_level', 12);
$general->setVar('officer_city', 0);
$lordGeneral->setVar('officer_level', 1);
$lordGeneral->setVar('officer_city', 0);
$lordGeneral->multiplyVar('experience', 0.7);
if(2 <= $generalLevel && $generalLevel <= 4){
$db->update('city', [
'officer'.$generalLevel=>0
], "officer{$generalLevel}=%i", $general->getID());
}
$josaYi = JosaUtil::pick($generalName, '이');
$logger->pushGlobalHistoryLog("<Y><b>【모반】</b></><Y>{$generalName}</>{$josaYi} <D><b>{$nationName}</b></>의 군주 자리를 찬탈했습니다.");
+4 -5
View File
@@ -107,17 +107,16 @@ class che_방랑 extends Command\GeneralCommand{
'makelimit'=>12
], 'nation=%i', $nationID);
$general->setVar('makelimit', 12);
$general->setVar('officer_city', 0);
$db->update('general', [
'level'=>1,
], 'nation=%i AND level < 12', $nationID);
'officer_level'=>1,
'officer_city'=>0,
], 'nation=%i AND officer_level < 12', $nationID);
$db->update('city', [
'nation'=>0,
'front'=>0,
'officer4'=>0,
'officer3'=>0,
'officer2'=>0,
'conflict'=>'{}'
], 'nation=%i', $nationID);
+6 -11
View File
@@ -109,17 +109,12 @@ class che_선양 extends Command\GeneralCommand{
$logger = $general->getLogger();
$destLogger = $destGeneral->getLogger();
$destGeneralLevel = $destGeneral->getVar('level');
$destGeneral->setVar('level', 12);
$general->setVar('level', 1);
$destGeneral->setVar('officer_level', 12);
$destGeneral->setVar('officer_city', 0);
$general->setVar('officer_level', 1);
$general->setVar('officer_city', 0);
$general->multiplyVar('experience', 0.7);
if(2 <= $destGeneralLevel && $destGeneralLevel <= 4){
$db->update('city', [
'officer'.$destGeneralLevel=>0
], "officer{$destGeneralLevel}=%i", $destGeneral->getID());
}
$josaYi = JosaUtil::pick($generalName, '이');
$logger->pushGlobalHistoryLog("<Y><b>【선양】</b></><Y>{$generalName}</>{$josaYi} <D><b>{$nationName}</b></>의 군주 자리를 <Y>{$destGeneralName}</>에게 선양했습니다.");
$logger->pushNationalHistoryLog("<Y>{$generalName}</>{$josaYi} <Y>{$destGeneralName}</>에게 선양");
@@ -143,7 +138,7 @@ class che_선양 extends Command\GeneralCommand{
//TODO: 암행부처럼 보여야...
$db = DB::db();
$destRawGenerals = $db->query('SELECT no,name,level,npc FROM general WHERE nation != 0 AND nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID());
$destRawGenerals = $db->query('SELECT no,name,officer_level,npc FROM general WHERE nation != 0 AND nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID());
ob_start();
?>
군주의 자리를 다른 장수에게 물려줍니다.<br>
@@ -155,7 +150,7 @@ class che_선양 extends Command\GeneralCommand{
$color = " style='color:{$color}'";
}
$name = $destGeneral['name'];
if($destGeneral['level'] >= 5){
if($destGeneral['officer_level'] >= 5){
$name = "*{$name}*";
}
?>
+1 -1
View File
@@ -129,7 +129,7 @@ class che_이동 extends Command\GeneralCommand{
$general->setVar('city', $destCityID);
if($general->getVar('level') == 12 && $this->nation['level'] == 0){
if($general->getVar('officer_level') == 12 && $this->nation['level'] == 0){
$generalList = $db->queryFirstColumn('SELECT no FROM general WHERE nation=%i AND no!=%i', $general->getNationID(), $general->getID());
if($generalList){
$db->update('general', [
+3 -2
View File
@@ -154,14 +154,15 @@ class che_임관 extends Command\GeneralCommand{
}
$general->setVar('nation', $destNationID);
$general->setVar('level', 1);
$general->setVar('officer_level', 1);
$general->setVar('officer_city', 0);
$general->setVar('belong', 1);
if($this->destGeneralObj !== null){
$general->setVar('city', $this->destGeneralObj->getCityID());
}
else{
$targetCityID = $db->queryFirstField('SELECT city FROM general WHERE nation = %i AND level=12', $destNationID);
$targetCityID = $db->queryFirstField('SELECT city FROM general WHERE nation = %i AND officer_level=12', $destNationID);
$general->setVar('city', $targetCityID);
}
+2 -2
View File
@@ -165,7 +165,7 @@ class che_증여 extends Command\GeneralCommand{
//TODO: 암행부처럼 보여야...
$db = DB::db();
$destRawGenerals = $db->query('SELECT no,name,level,npc,gold,rice FROM general WHERE nation != 0 AND nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID());
$destRawGenerals = $db->query('SELECT no,name,officer_level,npc,gold,rice FROM general WHERE nation != 0 AND nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID());
ob_start();
?>
자신의 자금이나 군량을 다른 장수에게 증여합니다.<br>
@@ -177,7 +177,7 @@ class che_증여 extends Command\GeneralCommand{
$color = " style='color:{$color}'";
}
$name = $destGeneral['name'];
if($destGeneral['level'] >= 5){
if($destGeneral['officer_level'] >= 5){
$name = "*{$name}*";
}
?>
+2 -1
View File
@@ -117,7 +117,8 @@ class che_하야 extends Command\GeneralCommand{
\sammo\refreshNationStaticInfo();
$general->setVar('nation', 0);
$general->setVar('level', 0);
$general->setVar('officer_level', 0);
$general->setVar('officer_city', 0);
$general->setVar('belong', 0);
$general->setVar('makelimit', 12);
+1 -1
View File
@@ -246,7 +246,7 @@ class che_화계 extends Command\GeneralCommand{
[$year, $month] = [$env['year'], $env['month']];
foreach($db->query(
'SELECT `no`,name,city,nation,level,leadership,horse,strength,weapon,intel,book,item,last_turn,injury,special,special2,injury,crew,atmos,train FROM general WHERE city = %i',
'SELECT `no`,name,city,nation,officer_level,leadership,horse,strength,weapon,intel,book,item,last_turn,injury,special,special2,injury,crew,atmos,train FROM general WHERE city = %i',
$destCityID,
$destNationID
) as $rawDestCityGeneral){
+2 -2
View File
@@ -193,7 +193,7 @@ class che_몰수 extends Command\NationCommand{
//TODO: 암행부처럼 보여야...
$db = DB::db();
$destRawGenerals = $db->query('SELECT no,name,level,npc,gold,rice FROM general WHERE nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID());
$destRawGenerals = $db->query('SELECT no,name,officer_level,npc,gold,rice FROM general WHERE nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID());
$destGeneralList = [];
foreach($destRawGenerals as $destGeneral){
$nameColor = \sammo\getNameColor($destGeneral['npc']);
@@ -202,7 +202,7 @@ class che_몰수 extends Command\NationCommand{
}
$name = $destGeneral['name'];
if($destGeneral['level'] >= 5){
if($destGeneral['officer_level'] >= 5){
$name = "*{$name}*";
}
@@ -178,7 +178,7 @@ class che_물자원조 extends Command\NationCommand{
$broadcastMessage = "<D><b>{$destNationName}</b></>{$josaRo} 금<C>{$goldAmountText}</> 쌀<C>{$riceAmountText}</>을 지원했습니다.";
$chiefList = $db->queryFirstColumn('SELECT no FROM general WHERE level >= 5 AND no != %i AND nation = %i', $generalID, $nationID);
$chiefList = $db->queryFirstColumn('SELECT no FROM general WHERE officer_level >= 5 AND no != %i AND nation = %i', $generalID, $nationID);
foreach($chiefList as $chiefID){
$chiefLogger = new ActionLogger($chiefID, $nationID, $year, $month);
$chiefLogger->pushGeneralActionLog($broadcastMessage, ActionLogger::PLAIN);
@@ -193,7 +193,7 @@ class che_물자원조 extends Command\NationCommand{
$logger->pushGeneralActionLog("<D><b>{$destNationName}</b></>{$josaRo} 물자를 지원합니다. <1>$date</>", ActionLogger::PLAIN);
$destBroadcastMessage = $broadcastMessage = "<D><b>{$nationName}</b></>에서 금<C>{$goldAmountText}</> 쌀<C>{$riceAmountText}</>을 원조했습니다.";
$destChiefList = $db->queryFirstColumn('SELECT no FROM general WHERE level >= 5 AND nation = %i', $destNationID);
$destChiefList = $db->queryFirstColumn('SELECT no FROM general WHERE officer_level >= 5 AND nation = %i', $destNationID);
foreach($destChiefList as $destChiefID){
$destChiefLogger = new ActionLogger($destChiefID, $nationID, $year, $month);
$destChiefLogger->pushGeneralActionLog($destBroadcastMessage, ActionLogger::PLAIN);
+2 -2
View File
@@ -159,7 +159,7 @@ class che_발령 extends Command\NationCommand{
{
$db = DB::db();
$destRawGenerals = $db->query('SELECT no,name,level,npc,gold,rice FROM general WHERE nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID());
$destRawGenerals = $db->query('SELECT no,name,officer_level,npc,gold,rice FROM general WHERE nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID());
$destGeneralList = [];
foreach($destRawGenerals as $destGeneral){
$nameColor = \sammo\getNameColor($destGeneral['npc']);
@@ -168,7 +168,7 @@ class che_발령 extends Command\NationCommand{
}
$name = $destGeneral['name'];
if($destGeneral['level'] >= 5){
if($destGeneral['officer_level'] >= 5){
$name = "*{$name}*";
}
+1 -1
View File
@@ -124,7 +124,7 @@ class che_천도 extends Command\NationCommand{
$nationStor = \sammo\KVStorage::getStorage(DB::db(), 'nation_env');
$general = $this->getGeneral();
$nationID = $general->getNationID();
$nationStor->setValue("last천도Trial_{$nationID}", [$general->getVar('level'), $general->getTurnTime()]);
$nationStor->setValue("last천도Trial_{$nationID}", [$general->getVar('officer_level'), $general->getTurnTime()]);
if($lastTurn->getCommand() != $commandName && $lastTurn->getArg() !== $this->arg){
$this->setResultTurn(new LastTurn(
+2 -2
View File
@@ -162,7 +162,7 @@ class che_포상 extends Command\NationCommand{
//TODO: 암행부처럼 보여야...
$db = DB::db();
$destRawGenerals = $db->query('SELECT no,name,level,npc,gold,rice FROM general WHERE nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID());
$destRawGenerals = $db->query('SELECT no,name,officer_level,npc,gold,rice FROM general WHERE nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID());
$destGeneralList = [];
foreach($destRawGenerals as $destGeneral){
$nameColor = \sammo\getNameColor($destGeneral['npc']);
@@ -171,7 +171,7 @@ class che_포상 extends Command\NationCommand{
}
$name = $destGeneral['name'];
if($destGeneral['level'] >= 5){
if($destGeneral['officer_level'] >= 5){
$name = "*{$name}*";
}
+1 -1
View File
@@ -35,7 +35,7 @@ class AllowRebellion extends Constraint{
}
$db = DB::db();
$lord = $db->queryFirstRow('SELECT no, killturn, npc FROM general WHERE nation = %i AND level = 12', $nationID);
$lord = $db->queryFirstRow('SELECT no, killturn, npc FROM general WHERE nation = %i AND officer_level = 12', $nationID);
if(!$lord){
throw new MustNotBeReachedException('군주가 없음');
+3 -3
View File
@@ -10,9 +10,9 @@ class BeChief extends Constraint{
return false;
}
if(!key_exists('level', $this->general)){
if(!key_exists('officer_level', $this->general)){
if(!$throwExeception){return false; }
throw new \InvalidArgumentException("require level in general");
throw new \InvalidArgumentException("require officer_level in general");
}
return true;
@@ -22,7 +22,7 @@ class BeChief extends Constraint{
$this->checkInputValues();
$this->tested = true;
if($this->general['level'] > 4){
if($this->general['officer_level'] > 4){
return true;
}
+3 -3
View File
@@ -10,9 +10,9 @@ class BeLord extends Constraint{
return false;
}
if(!key_exists('level', $this->general)){
if(!key_exists('officer_level', $this->general)){
if(!$throwExeception){return false; }
throw new \InvalidArgumentException("require level in general");
throw new \InvalidArgumentException("require officer_level in general");
}
return true;
@@ -22,7 +22,7 @@ class BeLord extends Constraint{
$this->checkInputValues();
$this->tested = true;
if($this->general['level'] == 12){
if($this->general['officer_level'] == 12){
return true;
}
+3 -3
View File
@@ -15,9 +15,9 @@ class NotCapital extends Constraint{
throw new \InvalidArgumentException("require city in general");
}
if(!key_exists('level', $this->general)){
if(!key_exists('officer_level', $this->general)){
if(!$throwExeception){return false; }
throw new \InvalidArgumentException("require level in general");
throw new \InvalidArgumentException("require officer_level in general");
}
if(!key_exists('capital', $this->nation)){
@@ -36,7 +36,7 @@ class NotCapital extends Constraint{
return true;
}
if($this->arg && 2 <= $this->general['level'] && $this->general['level'] <= 4){
if($this->arg && 2 <= $this->general['officer_level'] && $this->general['officer_level'] <= 4){
return true;
}
+3 -3
View File
@@ -10,9 +10,9 @@ class NotChief extends Constraint{
return false;
}
if(!key_exists('level', $this->general)){
if(!key_exists('officer_level', $this->general)){
if(!$throwExeception){return false; }
throw new \InvalidArgumentException("require level in general");
throw new \InvalidArgumentException("require officer_level in general");
}
return true;
@@ -22,7 +22,7 @@ class NotChief extends Constraint{
$this->checkInputValues();
$this->tested = true;
if($this->general['level'] <= 4){
if($this->general['officer_level'] <= 4){
return true;
}
+3 -3
View File
@@ -10,9 +10,9 @@ class NotLord extends Constraint{
return false;
}
if(!key_exists('level', $this->general)){
if(!key_exists('officer_level', $this->general)){
if(!$throwExeception){return false; }
throw new \InvalidArgumentException("require level in general");
throw new \InvalidArgumentException("require officer_level in general");
}
return true;
@@ -22,7 +22,7 @@ class NotLord extends Constraint{
$this->checkInputValues();
$this->tested = true;
if($this->general['level'] != 12){
if($this->general['officer_level'] != 12){
return true;
}
@@ -20,7 +20,7 @@ class ReqGeneralCrewMargin extends Constraint{
throw new \InvalidArgumentException("{$this->arg} is invalid crewtype");
}
foreach(['leadership','strength','intel','crew','crewtype','nation','level'] as $key){
foreach(['leadership','strength','intel','crew','crewtype','nation','officer_level'] as $key){
if(!key_exists($key, $this->general)){
if(!$throwExeception){return false; }
throw new \InvalidArgumentException("require {$key} in general");
+2 -2
View File
@@ -268,7 +268,7 @@ class DiplomaticMessage extends Message{
$gameStor = KVStorage::getStorage($db, 'game_env');
$general = $db->queryFirstRow(
'SELECT `name`, nation, `level`, `permission`, `penalty`,belong FROM general WHERE `no`=%i AND nation=%i',
'SELECT `name`, nation, `officer_level`, `permission`, `penalty`,belong FROM general WHERE `no`=%i AND nation=%i',
$receiverID,
$this->dest->nationID
);
@@ -373,7 +373,7 @@ class DiplomaticMessage extends Message{
$db = DB::db();
$general = $db->queryFirstRow(
'SELECT `name`, nation, `level`, `permission`, `penalty`,belong FROM general WHERE `no`=%i AND nation=%i',
'SELECT `name`, nation, `officer_level`, `permission`, `penalty`,belong FROM general WHERE `no`=%i AND nation=%i',
$receiverID,
$this->dest->nationID
);
+1 -1
View File
@@ -8,7 +8,7 @@ class DummyGeneral extends General{
'name'=>'Dummy',
'city'=>0,
'nation'=>0,
'level'=>0,
'officer_level'=>0,
'crewtype'=>-1,
'turntime'=>'2012-03-04 05:06:07.000000',
'experience'=>0,
+4 -15
View File
@@ -64,24 +64,13 @@ class RaiseInvader extends \sammo\Event\Action{
$db->update('general', ['city'=>$newCapital], 'nation=%i and city=%i', $nation, $oldCapital);
}
$generals = [];
foreach($db->query('SELECT officer4, officer3, officer2 from city where city in %li', $cities) as $city){
list($officer4, $officer3, $officer2) = $city;
if($officer4 != 0) $generals[]=$officer4;
if($officer3 != 0) $generals[]=$officer3;
if($officer2 != 0) $generals[]=$officer2;
}
if($generals){
$db->update('general', [
'level'=>1
], 'no in %li', $generals);
}
$db->update('general', [
'officer_level'=>1,
'officer_city'=>0
], 'officer_city in %li', $cities);
$db->update('city', [
'officer4'=>0,
'officer3'=>0,
'officer2'=>0,
'nation'=>0
], 'city in %li', $cities);
}
+22 -29
View File
@@ -10,7 +10,7 @@ class General implements iAction{
/**
* @var iAction $nationType
* @var iAction $levelObj
* @var iAction $officerLevelObj
* @var iAction $specialDomesticObj
* @var iAction $specialWarObj
* @var iAction $personalityObj
@@ -33,7 +33,7 @@ class General implements iAction{
protected $isFinished = false;
protected $nationType = null;
protected $levelObj = null;
protected $officerLevelObj = null;
protected $specialDomesticObj = null;
protected $specialWarObj = null;
protected $personalityObj = null;
@@ -62,8 +62,8 @@ class General implements iAction{
'power'=>1,
'intel'=>1,
'nation'=>2,
'level'=>1,
//NOTE: levelObj로 인해 국가의 '레벨'이 바뀌는 것도 조심해야 하나, 국가 레벨의 변경은 월 초/말에만 일어남.
'officer_level'=>1,
//NOTE: officerLevelObj로 인해 국가의 '레벨'이 바뀌는 것도 조심해야 하나, 국가 레벨의 변경은 월 초/말에만 일어남.
'special'=>1,
'special2'=>1,
'personal'=>1,
@@ -79,7 +79,7 @@ class General implements iAction{
* @param null|array $city DB city 테이블의 row값
* @param int $year 게임 연도
* @param int $month 게임 월
* @param bool $fullConstruct iAction, 및 ActionLogger 초기화 여부, false인 경우 no, name, city, nation, level 정도로 초기화 가능
* @param bool $fullConstruct iAction, 및 ActionLogger 초기화 여부, false인 경우 no, name, city, nation, officer_level 정도로 초기화 가능
*/
public function __construct(array $raw, ?array $rawRank, ?array $city, ?int $year, ?int $month, bool $fullConstruct=true){
//TODO: 밖에서 가져오도록 하면 버그 확률이 높아짐. 필요한 raw 값을 직접 구해야함.
@@ -102,7 +102,7 @@ class General implements iAction{
}
$this->nationType = buildNationTypeClass($staticNation['type']);
$this->levelObj = new TriggerGeneralLevel($this->raw, $staticNation['level'], $city);
$this->officerLevelObj = new TriggerOfficerLevel($this->raw, $staticNation['level']);
$this->specialDomesticObj = buildGeneralSpecialDomesticClass($raw['special']);
$this->specialWarObj = buildGeneralSpecialWarClass($raw['special2']);
@@ -260,8 +260,8 @@ class General implements iAction{
return $this->nationType;
}
public function getGeneralLevelObj():iAction{
return $this->levelObj;
public function getOfficerLevelObj():iAction{
return $this->officerLevelObj;
}
function getCrewTypeObj():GameUnitDetail{
@@ -379,7 +379,7 @@ class General implements iAction{
if($withIActionObj){
foreach([
$this->nationType,
$this->levelObj,
$this->officerLevelObj,
$this->specialDomesticObj,
$this->specialWarObj,
$this->personalityObj
@@ -516,18 +516,11 @@ class General implements iAction{
$generalName = $this->getName();
// 군주였으면 유지 이음
$generalLevel = $this->getVar('level');
if($generalLevel == 12) {
$officerLevel = $this->getVar('officer_level');
if($officerLevel == 12) {
nextRuler($this);
}
//도시의 태수, 군사, 종사직도 초기화
if(2 <= $generalLevel && $generalLevel <= 4){
$db->update('city', [
'officer'.$generalLevel=>0
], "officer{$generalLevel} = %i", $generalID);
}
// 부대 처리
$troopLeaderID = $this->getVar('troop');
if($troopLeaderID == $generalID){
@@ -713,7 +706,7 @@ class General implements iAction{
$caller = new GeneralTriggerCaller();
foreach(array_merge([
$this->nationType,
$this->levelObj,
$this->officerLevelObj,
$this->specialDomesticObj,
$this->specialWarObj,
$this->personalityObj,
@@ -735,7 +728,7 @@ class General implements iAction{
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
foreach(array_merge([
$this->nationType,
$this->levelObj,
$this->officerLevelObj,
$this->specialDomesticObj,
$this->specialWarObj,
$this->personalityObj,
@@ -754,7 +747,7 @@ class General implements iAction{
//xxx: $general?
foreach(array_merge([
$this->nationType,
$this->levelObj,
$this->officerLevelObj,
$this->specialDomesticObj,
$this->specialWarObj,
$this->personalityObj,
@@ -772,7 +765,7 @@ class General implements iAction{
public function onCalcStrategic(string $turnType, string $varType, $value){
foreach(array_merge([
$this->nationType,
$this->levelObj,
$this->officerLevelObj,
$this->specialDomesticObj,
$this->specialWarObj,
$this->personalityObj,
@@ -790,7 +783,7 @@ class General implements iAction{
public function onCalcNationalIncome(string $type, int $amount):int{
foreach(array_merge([
$this->nationType,
$this->levelObj,
$this->officerLevelObj,
$this->specialDomesticObj,
$this->specialWarObj,
$this->personalityObj,
@@ -811,7 +804,7 @@ class General implements iAction{
$def = 1;
foreach(array_merge([
$this->nationType,
$this->levelObj,
$this->officerLevelObj,
$this->specialDomesticObj,
$this->specialWarObj,
$this->personalityObj,
@@ -831,7 +824,7 @@ class General implements iAction{
$caller = new WarUnitTriggerCaller();
foreach(array_merge([
$this->nationType,
$this->levelObj,
$this->officerLevelObj,
$this->specialDomesticObj,
$this->specialWarObj,
$this->personalityObj,
@@ -858,7 +851,7 @@ class General implements iAction{
);
foreach(array_merge([
$this->nationType,
$this->levelObj,
$this->officerLevelObj,
$this->specialDomesticObj,
$this->specialWarObj,
$this->personalityObj,
@@ -875,16 +868,16 @@ class General implements iAction{
}
static public function mergeQueryColumn(?array $reqColumns=null, int $constructMode=2):array{
$minimumColumn = ['no', 'name', 'city', 'nation', 'level'];
$minimumColumn = ['no', 'name', 'city', 'nation', 'officer_level', 'officer_city'];
$defaultEventColumn = [
'no', 'name', 'city', 'nation', 'level',
'no', 'name', 'city', 'nation', 'officer_level', 'officer_city',
'special', 'special2', 'personal',
'horse', 'weapon', 'book', 'item', 'last_turn'
];
$fullColumn = [
'no', 'name', 'owner_name', 'picture', 'imgsvr', 'nation', 'city', 'troop', 'injury', 'affinity',
'leadership', 'leadership_exp', 'strength', 'strength_exp', 'intel', 'intel_exp', 'weapon', 'book', 'horse', 'item',
'experience', 'dedication', 'level', 'gold', 'rice', 'crew', 'crewtype', 'train', 'atmos', 'turntime',
'experience', 'dedication', 'officer_level', 'officer_city', 'gold', 'rice', 'crew', 'crewtype', 'train', 'atmos', 'turntime',
'makelimit', 'killturn', 'block', 'dedlevel', 'explevel', 'age', 'startage', 'belong',
'personal', 'special', 'special2', 'defence_train', 'tnmt', 'npc', 'npc_org', 'deadyear', 'npcmsg',
'dex1', 'dex2', 'dex3', 'dex4', 'dex5',
+34 -41
View File
@@ -1437,7 +1437,7 @@ class GeneralAI
{
$general = $this->general;
if($general->getVar('level') < 12){
if($general->getVar('officer_level') < 12){
return null;
}
@@ -1476,7 +1476,7 @@ class GeneralAI
if($lastTurn->getCommand() === 'che_천도'){
$cmd = buildNationCommandClass('che_천도', $general, $this->env, $lastTurn, $lastTurn->getArg());
if($cmd->isRunnable()){
$nationStor->setValue("last천도Trial_{$this->nation['nation']}", [$general->getVar('level'), $general->getTurnTime()]);
$nationStor->setValue("last천도Trial_{$this->nation['nation']}", [$general->getVar('officer_level'), $general->getTurnTime()]);
return $cmd;
}
}
@@ -1489,7 +1489,7 @@ class GeneralAI
date_create_immutable($general->getTurnTime())
)
);
if($timeDiffSeconds < $turnTerm * 30 && $lastTrialLevel !== $general->getVar('level')){ //0.5Turn
if($timeDiffSeconds < $turnTerm * 30 && $lastTrialLevel !== $general->getVar('officer_level')){ //0.5Turn
return null;
}
}
@@ -1597,7 +1597,7 @@ class GeneralAI
}
$nationStor->setValue("last천도Trial_{$this->nation['nation']}", [$general->getVar('level'), $general->getTurnTime()]);
$nationStor->setValue("last천도Trial_{$this->nation['nation']}", [$general->getVar('officer_level'), $general->getTurnTime()]);
return $cmd;
}
@@ -2334,6 +2334,7 @@ class GeneralAI
}
$this->categorizeNationCities();
$this->categorizeNationGeneral();
$candidateCities = [];
@@ -2452,7 +2453,7 @@ class GeneralAI
$db = DB::db();
$general = $this->general;
$lordCities = $db->queryFirstColumn('SELECT city.city as city FROM general LEFT JOIN city ON general.city = city.city WHERE general.level = 12 AND city.nation = 0');
$lordCities = $db->queryFirstColumn('SELECT city.city as city FROM general LEFT JOIN city ON general.city = city.city WHERE general.officer_level = 12 AND city.nation = 0');
$nationCities = $db->queryFirstColumn('SELECT city a FROM city WHERE nation != 0');+
$occupiedCities = [];
@@ -2580,7 +2581,7 @@ class GeneralAI
// 오랑캐는 바로 임관
if ($general->getVar('npc') == 9) {
$rulerNation = $db->queryFirstField(
'SELECT nation FROM general WHERE `level`=12 AND npc=9 and nation not in %li ORDER BY RAND() limit 1',
'SELECT nation FROM general WHERE `officer_level`=12 AND npc=9 and nation not in %li ORDER BY RAND() limit 1',
$general->getAuxVar('joinedNations') ?? [0]
);
@@ -2711,20 +2712,7 @@ class GeneralAI
$nationCity['dev'] = $dev;
$importantScore = 1;
if ($nationCity['officer4']) {
$importantScore += 1;
}
if ($nationCity['officer3']) {
$importantScore += 1;
}
if ($nationCity['officer2']) {
$importantScore += 1;
}
$nationCity['important'] = $importantScore;
$nationCity['important'] = 1;
if($nationCity['supply']){
$supplyCities[$cityID] = &$nationCity;
@@ -2785,10 +2773,14 @@ class GeneralAI
$generalID = $nationGeneral->getID();
$cityID = $nationGeneral->getCityID();
$npcType = $nationGeneral->getVar('npc');
$generalLevel = $nationGeneral->getVar('level');
$officerLevel = $nationGeneral->getVar('officer_level');
$officerCity = $nationGeneral->getVar('officer_city');
if($generalLevel > 4){
$chiefGenerals[$generalLevel] = $nationGeneral;
if($officerLevel > 4){
$chiefGenerals[$officerLevel] = $nationGeneral;
}
else if($officerLevel > 2){
$nationCities[$officerCity]['important'] += 1;
}
if (key_exists($cityID, $nationCities)) {
@@ -2855,7 +2847,7 @@ class GeneralAI
$this->categorizeNationGeneral();
$this->categorizeNationCities();
if($general->getVar('level') == 12){
if($general->getVar('officer_level') == 12){
$month = $this->env['month'];
if (in_array($month, [1, 4, 7, 10])) {
$this->choosePromotion();
@@ -2950,7 +2942,7 @@ class GeneralAI
$general->setVar('defence_train', 80);
}
if($general->getVar('level') === 12 && $this->generalPolicy->can선양){
if($general->getVar('officer_level') === 12 && $this->generalPolicy->can선양){
$result = $this->do선양($reservedCommand);
if($result !== null){
return $result;
@@ -2984,7 +2976,7 @@ class GeneralAI
return $this->do중립($reservedCommand);
}
if($npcType >= 2 && $general->getVar('level') == 12 && !$this->nation['capital']){
if($npcType >= 2 && $general->getVar('officer_level') == 12 && !$this->nation['capital']){
//방랑군 건국
$result = $this->do건국($reservedCommand);
if($result !== null){
@@ -3089,7 +3081,7 @@ class GeneralAI
foreach(Util::range(5) as $idx){
/** @var General */
$randGeneral = Util::choiceRandom($this->npcWarGenerals);
if($randGeneral->getVar('level') != 1){
if($randGeneral->getVar('officer_level') != 1){
continue;
}
@@ -3116,7 +3108,8 @@ class GeneralAI
continue;
}
$randGeneral->setVar('level', $chiefLevel);
$randGeneral->setVar('officer_level', $chiefLevel);
$randGeneral->setVar('officer_city', 0);
$randGeneral->applyDB($db);
}
}
@@ -3149,29 +3142,29 @@ class GeneralAI
$db->update('general', [
'permission' => 'ambassador',
], 'nation=%i AND npc < 2 AND level > 4', $nationID);
], 'nation=%i AND npc < 2 AND officer_level > 4', $nationID);
foreach($db->query(
'SELECT no, npc, level, killturn FROM general WHERE nation = %i AND 12 > level AND level > 4',
'SELECT no, npc, officer_level, killturn FROM general WHERE nation = %i AND 12 > officer_level AND officer_level > 4',
$nationID
) as $chief) {
if ($chief['npc'] < 2 && $chief['killturn'] < $minKillturn) {
$chiefCandidate[$chief['level']] = $chief['no'];
$userChief[$chief['no']] = $chief['level'];
$chiefCandidate[$chief['officer_level']] = $chief['no'];
$userChief[$chief['no']] = $chief['officer_level'];
}
}
$db->update('general', [
'level' => 1
], 'level < 12 AND level > 4 AND nation = %i', $nationID);
'officer_level' => 1
], 'officer_level < 12 AND officer_level > 4 AND nation = %i', $nationID);
$maxBelong = $db->queryFirstField('SELECT max(belong) FROM `general` WHERE nation=%i', $nationID);
$maxBelong = min($maxBelong - 1, 3);
if (!$userChief) {
$candUserChief = $db->queryFirstField(
'SELECT no FROM general WHERE nation = %i AND level = 1 AND killturn > %i AND npc < 2 AND belong >= %i ORDER BY leadership DESC LIMIT 1',
'SELECT no FROM general WHERE nation = %i AND officer_level = 1 AND killturn > %i AND npc < 2 AND belong >= %i ORDER BY leadership DESC LIMIT 1',
$nationID,
$minKillturn,
$maxBelong
@@ -3186,7 +3179,7 @@ class GeneralAI
if (!key_exists(11, $chiefCandidate)) {
$candChiefHead = $db->queryFirstField(
'SELECT no FROM general WHERE nation = %i AND level = 1 AND npc >= 2 AND belong >= %i ORDER BY leadership DESC LIMIT 1',
'SELECT no FROM general WHERE nation = %i AND officer_level = 1 AND npc >= 2 AND belong >= %i ORDER BY leadership DESC LIMIT 1',
$nationID,
$maxBelong
);
@@ -3199,7 +3192,7 @@ class GeneralAI
if ($minChiefLevel < 11) {
//무장 수뇌 후보
$candChiefStrength = $db->queryFirstColumn(
'SELECT no FROM general WHERE nation = %i AND strength >= %i AND level = 1 AND belong >= %i ORDER BY strength DESC LIMIT %i',
'SELECT no FROM general WHERE nation = %i AND strength >= %i AND officer_level = 1 AND belong >= %i ORDER BY strength DESC LIMIT %i',
$nationID,
GameConst::$chiefStatMin,
$maxBelong,
@@ -3207,7 +3200,7 @@ class GeneralAI
);
//지장 수뇌 후보
$candChiefIntel = $db->queryFirstColumn(
'SELECT no FROM general WHERE nation = %i AND intel >= %i AND level = 1 AND belong >= %i ORDER BY intel DESC LIMIT %i',
'SELECT no FROM general WHERE nation = %i AND intel >= %i AND officer_level = 1 AND belong >= %i ORDER BY intel DESC LIMIT %i',
$nationID,
GameConst::$chiefStatMin,
$maxBelong,
@@ -3243,7 +3236,7 @@ class GeneralAI
foreach ($chiefCandidate as $chiefLevel => $chiefID) {
$db->update('general', [
'level' => $chiefLevel
'officer_level' => $chiefLevel
], 'no=%i', $chiefID);
}
}
@@ -3298,7 +3291,7 @@ class GeneralAI
$dedicationList = array_map(function(General $general){
return $general->getRaw();
}, array_filter($this->nationGenerals, function(General $rawGeneral){
return $rawGeneral->getVar('level') != 5;
return $rawGeneral->getVar('officer_level') != 5;
}));
$goldIncome = getGoldIncome($nation['nation'], $nation['level'], $nation['rate'], $nation['capital'], $nation['type'], $cityList);
@@ -3340,7 +3333,7 @@ class GeneralAI
$dedicationList = array_map(function(General $general){
return $general->getRaw();
}, array_filter($this->nationGenerals, function(General $rawGeneral){
return $rawGeneral->getVar('level') != 5;
return $rawGeneral->getVar('officer_level') != 5;
}));
$riceIncome = getRiceIncome($nation['nation'], $nation['level'], $nation['rate'], $nation['capital'], $nation['type'], $cityList);
+1 -1
View File
@@ -406,7 +406,7 @@ class Message
//XXX: 알림을 이런식으로 보내는게 맞는가에 대한 의문 있음
DB::db()->update('general', [
'newmsg'=>1
], 'nation = %i AND (level = 12 OR permission IN (\'ambassador\', \'auditor\')) ',$this->dest->nationID);
], 'nation = %i AND (officer_level = 12 OR permission IN (\'ambassador\', \'auditor\')) ',$this->dest->nationID);
}
return $this->sendRaw($this->dest->nationID + self::MAILBOX_NATIONAL);
}
+6 -6
View File
@@ -79,7 +79,7 @@ class Scenario{
list(
$affinity, $name, $picturePath, $nationName, $locatedCity,
$leadership, $strength, $intel, $level, $birth, $death, $ego,
$leadership, $strength, $intel, $officerLevel, $birth, $death, $ego,
$char, $text
) = $rawGeneral;
@@ -104,7 +104,7 @@ class Scenario{
$leadership,
$strength,
$intel,
$level,
$officerLevel,
$birth,
$death,
$ego,
@@ -120,7 +120,7 @@ class Scenario{
list(
$affinity, $name, $picturePath, $nationName, $locatedCity,
$leadership, $strength, $intel, $level, $birth, $death, $ego,
$leadership, $strength, $intel, $officerLevel, $birth, $death, $ego,
$char, $text
) = $rawGeneral;
@@ -145,7 +145,7 @@ class Scenario{
$leadership,
$strength,
$intel,
$level,
$officerLevel,
$birth,
$death,
$ego,
@@ -162,7 +162,7 @@ class Scenario{
list(
$affinity, $name, $picturePath, $nationName, $locatedCity,
$leadership, $strength, $intel, $level, $birth, $death, $ego,
$leadership, $strength, $intel, $officerLevel, $birth, $death, $ego,
$char, $text
) = $rawGeneral;
@@ -187,7 +187,7 @@ class Scenario{
$leadership,
$strength,
$intel,
$level,
$officerLevel,
$birth,
$death,
$ego,
+7 -7
View File
@@ -22,7 +22,7 @@ class NPC{
public $leadership;
public $strength;
public $intel;
public $level;
public $officerLevel;
public $birth;
public $death;
public $ego;
@@ -67,7 +67,7 @@ class NPC{
int $leadership,
int $strength,
int $intel,
int $level = 0,
int $officerLevel = 0,
int $birth = 160,
int $death = 300,
$ego = null,
@@ -82,7 +82,7 @@ class NPC{
$this->leadership = $leadership;
$this->strength = $strength;
$this->intel = $intel;
$this->level = $level;
$this->officerLevel = $officerLevel;
$this->birth = $birth;
$this->death = $death;
$this->ego = $ego;
@@ -289,9 +289,9 @@ class NPC{
$experience = $this->experience?:$age * 100;
$dedication = $this->dedication?:$age * 100;
$level = $this->level;
if(!$level || $isNewGeneral){
$level = $nationID?1:0;
$officerLevel = $this->officerLevel;
if(!$officerLevel || $isNewGeneral){
$officerLevel = $nationID?1:0;
}
$turntime = \sammo\getRandTurn($env['turnterm'], new \DateTimeImmutable($env['turntime']));
@@ -319,7 +319,7 @@ class NPC{
'intel'=>$this->intel,
'experience'=>$experience,
'dedication'=>$dedication,
'level'=>$level,
'officer_level'=>$officerLevel,
'gold'=>$this->gold,
'rice'=>$this->rice,
'crew'=>0,
+3 -3
View File
@@ -144,10 +144,10 @@ class Nation{
], 'nation=%i', $this->id);
//군주가 없는지 확인
$hasRuler = $db->queryFirstField('SELECT count(*) FROM general WHERE nation=%i AND level=12', $this->id);
$hasRuler = $db->queryFirstField('SELECT count(*) FROM general WHERE nation=%i AND officer_level=12', $this->id);
if(!$hasRuler){
$newRuler = $db->queryFirstField('SELECT `no` FROM general WHERE nation=%i ORDER BY leadership+strength+intel DESC LIMIT 1', $this->id);
$db->update('general',['level'=>12], 'no=%i', $newRuler);
$db->update('general',['officer_level'=>12], 'no=%i', $newRuler);
}
$turnRows = [];
@@ -155,7 +155,7 @@ class Nation{
foreach(Util::range(GameConst::$maxChiefTurn) as $turnIdx){
$turnRows[] = [
'nation_id'=>$this->id,
'level'=>$chiefLevel,
'officer_level'=>$chiefLevel,
'turn_idx'=>$turnIdx,
'action'=>'휴식',
'arg'=>'{}',
+2 -2
View File
@@ -166,12 +166,12 @@ class ScoutMessage extends Message{
$db = DB::db();
$srcGeneral = $db->queryFirstRow('SELECT `name`, nation FROM general WHERE `no`=%i', $srcGeneralID);
$destGeneral = $db->queryFirstRow('SELECT `name`, nation, `level` FROM general WHERE `no`=%i', $destGeneralID);
$destGeneral = $db->queryFirstRow('SELECT `name`, nation, `officer_level` FROM general WHERE `no`=%i', $destGeneralID);
if($date === null){
$date = new \DateTime();
}
if($destGeneral['level'] == 12){
if($destGeneral['officer_level'] == 12){
if($reason !== null){
$reason = '군주에게 등용장을 보낼 수 없습니다';
}
@@ -1,30 +1,23 @@
<?php
namespace sammo;
class TriggerGeneralLevel implements iAction{
class TriggerOfficerLevel implements iAction{
use DefaultAction;
protected $generalLevel;
protected $officerLevel;
protected $nationLevel;
protected $lbonus;
public function __construct(array $general, int $nationLevel, ?array $city){
$this->generalLevel = $general['level'];
public function __construct(array $general, int $nationLevel){
$this->officerLevel = $general['officer_level'];
$this->nationLevel = $nationLevel;
if($city === null){
if(2 <= $this->generalLevel || $this->generalLevel <= 4){
$this->generalLevel = 1;
}
}
else{
if(2 <= $this->generalLevel && $this->generalLevel <= 4 && $city['officer'.$this->generalLevel] != $general['no']){
$this->generalLevel = 1;
}
if(2 <= $this->officerLevel && $this->officerLevel <= 4 && $general['officer_city'] != $general['city']){
$this->officerLevel = 1;
}
$this->lbonus = calcLeadershipBonus($this->generalLevel, $nationLevel);
$this->lbonus = calcLeadershipBonus($this->officerLevel, $nationLevel);
}
public function getLbonus():int{
@@ -33,22 +26,22 @@ class TriggerGeneralLevel implements iAction{
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
if($turnType == '농업' || $turnType == '상업'){
if(in_array($this->generalLevel, [12, 11, 9, 7, 5, 3])){
if(in_array($this->officerLevel, [12, 11, 9, 7, 5, 3])){
return $value * 1.05;
}
}
else if($turnType == '기술'){
if(in_array($this->generalLevel, [12, 11, 9, 7, 5])){
if(in_array($this->officerLevel, [12, 11, 9, 7, 5])){
return $value * 1.05;
}
}
else if($turnType == '민심' || $turnType == '인구'){
if(in_array($this->generalLevel, [12, 11, 2])){
if(in_array($this->officerLevel, [12, 11, 2])){
return $value * 1.05;
}
}
else if($turnType == '수비' || $turnType == '성벽' || $turnType == '치안'){
if(in_array($this->generalLevel, [12, 11, 10, 8, 6, 4])){
if(in_array($this->officerLevel, [12, 11, 10, 8, 6, 4])){
return $value * 1.05;
}
}
+5 -5
View File
@@ -243,15 +243,15 @@ WHERE turntime < %s ORDER BY turntime ASC, `no` ASC',
$generalCommandObj = buildGeneralCommandClass($generalCommand, $general, $env, $generalArg);
$hasNationTurn = false;
if($general->getVar('nation') != 0 && $general->getVar('level') >= 5){
if($general->getVar('nation') != 0 && $general->getVar('officer_level') >= 5){
$nationStor = KVStorage::getStorage($db, 'nation_env');
$lastNationTurnKey = "turn_last_{$general->getVar('nation')}_{$general->getVar('level')}";
$lastNationTurnKey = "turn_last_{$general->getVar('nation')}_{$general->getVar('officer_level')}";
$lastNationTurn = $nationStor->getValue($lastNationTurnKey);
//수뇌 몇 없는데 매번 left join 하는건 낭비인것 같다.
$rawNationTurn = $db->queryFirstRow(
'SELECT action, arg FROM nation_turn WHERE nation_id = %i AND level = %i AND turn_idx =0',
'SELECT action, arg FROM nation_turn WHERE nation_id = %i AND officer_level = %i AND turn_idx =0',
$general->getVar('nation'),
$general->getVar('level')
$general->getVar('officer_level')
)??[];
$hasNationTurn = true;
$nationCommand = $rawNationTurn['action']??null;
@@ -281,7 +281,7 @@ WHERE turntime < %s ORDER BY turntime ASC, `no` ASC',
}
$turnObj->processCommand($generalCommandObj);
}
pullNationCommand($general->getVar('nation'), $general->getVar('level'));
pullNationCommand($general->getVar('nation'), $general->getVar('officer_level'));
pullGeneralCommand($general->getID());
$currentTurn = $general->getTurnTime();
+8 -7
View File
@@ -153,25 +153,26 @@ class WarUnitGeneral extends WarUnit{
[$warPower,$opposeWarPowerMultiply] = parent::computeWarPower();
$general = $this->general;
$generalNo = $general->getVar('no');
$genLevel = $general->getVar('level');
$cityID = $general->getCityID();
$officerLevel = $general->getVar('officer_level');
$officerCity = $general->getVar('officer_city');
if($this->isAttacker){
if($genLevel == 12){
if($officerLevel == 12){
$warPower *= 1.10;
}
else if($genLevel == 11 | $genLevel == 10 || $genLevel == 8 || $genLevel == 6){
else if($officerLevel == 11 | $officerLevel == 10 || $officerLevel == 8 || $officerLevel == 6){
$warPower *= 1.05;
}
}
else{
if($genLevel == 12){
if($officerLevel == 12){
$opposeWarPowerMultiply *= 0.90;
}
else if($genLevel == 11 || $genLevel == 9 || $genLevel == 7 || $genLevel == 5){
else if($officerLevel == 11 || $officerLevel == 9 || $officerLevel == 7 || $officerLevel == 5){
$opposeWarPowerMultiply *= 0.95;
}
else if(2 <= $genLevel && $genLevel <= 4 && $generalNo == $this->getCityVar('officer'.$genLevel)){
else if(2 <= $officerLevel && $officerLevel <= 4 && $officerCity == $cityID){
$opposeWarPowerMultiply *= 0.95;
}
}