city의 officer를 general로 이동
This commit is contained in:
@@ -242,9 +242,6 @@ class CityConstBase{
|
||||
protected static $buildInitCommon = [
|
||||
'trust'=>50,
|
||||
'trade'=>100,
|
||||
'officer4'=>0,
|
||||
'officer3'=>0,
|
||||
'officer2'=>0
|
||||
];
|
||||
|
||||
protected static $buildInit = [
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)){
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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></>의 군주 자리를 찬탈했습니다.");
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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}*";
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -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', [
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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}*";
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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}*";
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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}*";
|
||||
}
|
||||
|
||||
|
||||
@@ -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('군주가 없음');
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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'=>'{}',
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user