fix(misc): phan
This commit is contained in:
+32
-26
@@ -15,20 +15,34 @@ return [
|
|||||||
// Note that the **only** effect of choosing `'5.6'` is to infer
|
// Note that the **only** effect of choosing `'5.6'` is to infer
|
||||||
// that functions removed in php 7.0 exist.
|
// that functions removed in php 7.0 exist.
|
||||||
// (See `backward_compatibility_checks` for additional options)
|
// (See `backward_compatibility_checks` for additional options)
|
||||||
"target_php_version" => '7.4',
|
"target_php_version" => '8.0',
|
||||||
'backward_compatibility_checks ' => true,
|
'backward_compatibility_checks ' => true,
|
||||||
'minimum_severity'=>\Phan\Issue::SEVERITY_CRITICAL,
|
'minimum_severity' => \Phan\Issue::SEVERITY_NORMAL,
|
||||||
|
|
||||||
'file_list' => [
|
'file_list' => [
|
||||||
'f_config/config.php',
|
'f_config/config.php',
|
||||||
|
'hwe/_119_b.php',
|
||||||
|
'hwe/_119.php',
|
||||||
'hwe/a_bestGeneral.php',
|
'hwe/a_bestGeneral.php',
|
||||||
'hwe/a_emperior.php',
|
'hwe/_admin1.php',
|
||||||
|
'hwe/_admin1_submit.php',
|
||||||
|
'hwe/_admin2.php',
|
||||||
|
'hwe/_admin2_submit.php',
|
||||||
|
'hwe/_admin4.php',
|
||||||
|
'hwe/_admin4_submit.php',
|
||||||
|
'hwe/_admin5.php',
|
||||||
|
'hwe/_admin5_submit.php',
|
||||||
|
'hwe/_admin7.php',
|
||||||
|
'hwe/_admin8.php',
|
||||||
|
'hwe/_admin_force_rehall.php',
|
||||||
'hwe/a_emperior_detail.php',
|
'hwe/a_emperior_detail.php',
|
||||||
|
'hwe/a_emperior.php',
|
||||||
'hwe/a_genList.php',
|
'hwe/a_genList.php',
|
||||||
'hwe/a_hallOfFame.php',
|
'hwe/a_hallOfFame.php',
|
||||||
'hwe/a_history.php',
|
'hwe/a_history.php',
|
||||||
'hwe/a_kingdomList.php',
|
'hwe/a_kingdomList.php',
|
||||||
'hwe/a_npcList.php',
|
'hwe/a_npcList.php',
|
||||||
|
'hwe/api.php',
|
||||||
'hwe/a_status.php',
|
'hwe/a_status.php',
|
||||||
'hwe/a_traffic.php',
|
'hwe/a_traffic.php',
|
||||||
'hwe/a_vote.php',
|
'hwe/a_vote.php',
|
||||||
@@ -41,13 +55,11 @@ return [
|
|||||||
'hwe/b_dipcenter.php',
|
'hwe/b_dipcenter.php',
|
||||||
'hwe/b_diplomacy.php',
|
'hwe/b_diplomacy.php',
|
||||||
'hwe/b_genList.php',
|
'hwe/b_genList.php',
|
||||||
'hwe/v_inheritPoint.php',
|
|
||||||
'hwe/b_myBossInfo.php',
|
'hwe/b_myBossInfo.php',
|
||||||
'hwe/b_myCityInfo.php',
|
'hwe/b_myCityInfo.php',
|
||||||
'hwe/b_myGenInfo.php',
|
'hwe/b_myGenInfo.php',
|
||||||
'hwe/b_myKingdomInfo.php',
|
'hwe/b_myKingdomInfo.php',
|
||||||
'hwe/b_myPage.php',
|
'hwe/b_myPage.php',
|
||||||
'hwe/b_npc_control.php',
|
|
||||||
'hwe/b_processing.php',
|
'hwe/b_processing.php',
|
||||||
'hwe/b_tournament.php',
|
'hwe/b_tournament.php',
|
||||||
'hwe/b_troop.php',
|
'hwe/b_troop.php',
|
||||||
@@ -55,7 +67,6 @@ return [
|
|||||||
'hwe/c_dipcenter.php',
|
'hwe/c_dipcenter.php',
|
||||||
'hwe/c_tournament.php',
|
'hwe/c_tournament.php',
|
||||||
'hwe/c_vote.php',
|
'hwe/c_vote.php',
|
||||||
'hwe/func.php',
|
|
||||||
'hwe/func_auction.php',
|
'hwe/func_auction.php',
|
||||||
'hwe/func_command.php',
|
'hwe/func_command.php',
|
||||||
'hwe/func_converter.php',
|
'hwe/func_converter.php',
|
||||||
@@ -64,16 +75,15 @@ return [
|
|||||||
'hwe/func_legacy.php',
|
'hwe/func_legacy.php',
|
||||||
'hwe/func_map.php',
|
'hwe/func_map.php',
|
||||||
'hwe/func_message.php',
|
'hwe/func_message.php',
|
||||||
|
'hwe/func.php',
|
||||||
'hwe/func_process.php',
|
'hwe/func_process.php',
|
||||||
'hwe/func_string.php',
|
'hwe/func_string.php',
|
||||||
'hwe/func_template.php',
|
'hwe/func_template.php',
|
||||||
'hwe/func_time_event.php',
|
'hwe/func_time_event.php',
|
||||||
'hwe/func_tournament.php',
|
'hwe/func_tournament.php',
|
||||||
'hwe/index.php',
|
'hwe/index.php',
|
||||||
'hwe/install.php',
|
|
||||||
'hwe/install_db.php',
|
'hwe/install_db.php',
|
||||||
'hwe/join.php',
|
'hwe/install.php',
|
||||||
'hwe/join_post.php',
|
|
||||||
'hwe/j_adjust_icon.php',
|
'hwe/j_adjust_icon.php',
|
||||||
'hwe/j_autoreset.php',
|
'hwe/j_autoreset.php',
|
||||||
'hwe/j_basic_info.php',
|
'hwe/j_basic_info.php',
|
||||||
@@ -92,8 +102,8 @@ return [
|
|||||||
'hwe/j_general_log_old.php',
|
'hwe/j_general_log_old.php',
|
||||||
'hwe/j_general_set_permission.php',
|
'hwe/j_general_set_permission.php',
|
||||||
'hwe/j_general_turn.php',
|
'hwe/j_general_turn.php',
|
||||||
'hwe/j_getChiefTurn.php',
|
|
||||||
'hwe/j_get_basic_general_list.php',
|
'hwe/j_get_basic_general_list.php',
|
||||||
|
'hwe/j_getChiefTurn.php',
|
||||||
'hwe/j_get_city_list.php',
|
'hwe/j_get_city_list.php',
|
||||||
'hwe/j_get_general_list.php',
|
'hwe/j_get_general_list.php',
|
||||||
'hwe/j_get_nation_general_list.php',
|
'hwe/j_get_nation_general_list.php',
|
||||||
@@ -101,11 +111,12 @@ return [
|
|||||||
'hwe/j_get_select_npc_token.php',
|
'hwe/j_get_select_npc_token.php',
|
||||||
'hwe/j_get_select_pool.php',
|
'hwe/j_get_select_pool.php',
|
||||||
'hwe/j_image_upload.php',
|
'hwe/j_image_upload.php',
|
||||||
'hwe/j_install.php',
|
|
||||||
'hwe/j_install_db.php',
|
'hwe/j_install_db.php',
|
||||||
|
'hwe/j_install.php',
|
||||||
'hwe/j_load_scenarios.php',
|
'hwe/j_load_scenarios.php',
|
||||||
'hwe/j_map.php',
|
|
||||||
'hwe/j_map_history.php',
|
'hwe/j_map_history.php',
|
||||||
|
'hwe/j_map.php',
|
||||||
|
'hwe/j_map_recent.php',
|
||||||
'hwe/j_msg_contact_list.php',
|
'hwe/j_msg_contact_list.php',
|
||||||
'hwe/j_msg_decide_opt.php',
|
'hwe/j_msg_decide_opt.php',
|
||||||
'hwe/j_msg_delete.php',
|
'hwe/j_msg_delete.php',
|
||||||
@@ -123,26 +134,20 @@ return [
|
|||||||
'hwe/j_set_npc_control.php',
|
'hwe/j_set_npc_control.php',
|
||||||
'hwe/j_simulate_battle.php',
|
'hwe/j_simulate_battle.php',
|
||||||
'hwe/j_troop.php',
|
'hwe/j_troop.php',
|
||||||
|
'hwe/j_update_picked_general.php',
|
||||||
'hwe/j_vacation.php',
|
'hwe/j_vacation.php',
|
||||||
'hwe/lib.php',
|
'hwe/lib.php',
|
||||||
'hwe/process_war.php',
|
'hwe/process_war.php',
|
||||||
|
'hwe/proc.php',
|
||||||
|
'hwe/readme.php',
|
||||||
|
'hwe/recent_map.php',
|
||||||
'hwe/select_general_from_pool.php',
|
'hwe/select_general_from_pool.php',
|
||||||
'hwe/select_npc.php',
|
'hwe/select_npc.php',
|
||||||
'hwe/t_board.php',
|
|
||||||
'hwe/t_diplomacy.php',
|
'hwe/t_diplomacy.php',
|
||||||
'hwe/_119.php',
|
'hwe/v_board.php',
|
||||||
'hwe/_119_b.php',
|
'hwe/v_inheritPoint.php',
|
||||||
'hwe/_admin1.php',
|
'hwe/v_join.php',
|
||||||
'hwe/_admin1_submit.php',
|
'hwe/v_NPCControl.php',
|
||||||
'hwe/_admin2.php',
|
|
||||||
'hwe/_admin2_submit.php',
|
|
||||||
'hwe/_admin4.php',
|
|
||||||
'hwe/_admin4_submit.php',
|
|
||||||
'hwe/_admin5.php',
|
|
||||||
'hwe/_admin5_submit.php',
|
|
||||||
'hwe/_admin7.php',
|
|
||||||
'hwe/_admin8.php',
|
|
||||||
'hwe/_admin_force_rehall.php',
|
|
||||||
],
|
],
|
||||||
|
|
||||||
// A list of directories that should be parsed for class and
|
// A list of directories that should be parsed for class and
|
||||||
@@ -179,6 +184,7 @@ return [
|
|||||||
|
|
||||||
'suppress_issue_types' => [
|
'suppress_issue_types' => [
|
||||||
'PhanUnreferencedUseNormal',
|
'PhanUnreferencedUseNormal',
|
||||||
|
'PhanTypeArraySuspiciousNullable',
|
||||||
],
|
],
|
||||||
|
|
||||||
// A list of plugin files to execute.
|
// A list of plugin files to execute.
|
||||||
|
|||||||
@@ -342,6 +342,7 @@ switch ($btn) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "랜덤턴":
|
case "랜덤턴":
|
||||||
|
$turnterm = $gameStor->turnterm;
|
||||||
foreach ($genlist as $generalID) {
|
foreach ($genlist as $generalID) {
|
||||||
$turntime = getRandTurn($turnterm);
|
$turntime = getRandTurn($turnterm);
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ class BuySpecificUnique extends \sammo\BaseAPI
|
|||||||
{
|
{
|
||||||
public function validateArgs(): ?string
|
public function validateArgs(): ?string
|
||||||
{
|
{
|
||||||
|
$availableItems = [];
|
||||||
foreach (GameConst::$allItems as $items) {
|
foreach (GameConst::$allItems as $items) {
|
||||||
foreach ($items as $itemKey => $amount) {
|
foreach ($items as $itemKey => $amount) {
|
||||||
if ($amount == 0) {
|
if ($amount == 0) {
|
||||||
|
|||||||
@@ -62,10 +62,10 @@ class ResetTurnTime extends \sammo\BaseAPI
|
|||||||
|
|
||||||
$userLogger = new UserLogger($userID);
|
$userLogger = new UserLogger($userID);
|
||||||
if($afterTurn >= 0){
|
if($afterTurn >= 0){
|
||||||
$userLogger->push(sprintf("{$reqPoint} 포인트로 턴 시간을 바꾼 결과 %02d:%02d 뒤로 밀림", intdiv($afterTurn, 60), $afterTurn%60), "inheritPoint");
|
$userLogger->push(sprintf("{$reqPoint} 포인트로 턴 시간을 바꾼 결과 %02d:%02d 뒤로 밀림", intdiv(Util::toInt($afterTurn), 60), $afterTurn%60), "inheritPoint");
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$userLogger->push(sprintf("{$reqPoint} 포인트로 턴 시간을 바꾼 결과 %02d:%02d 앞으로 당김", intdiv(-$afterTurn, 60), (-$afterTurn)%60), "inheritPoint");
|
$userLogger->push(sprintf("{$reqPoint} 포인트로 턴 시간을 바꾼 결과 %02d:%02d 앞으로 당김", intdiv(Util::toInt(-$afterTurn), 60), (-$afterTurn)%60), "inheritPoint");
|
||||||
}
|
}
|
||||||
$userLogger->flush();
|
$userLogger->flush();
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ namespace sammo;
|
|||||||
|
|
||||||
class CityHelper{
|
class CityHelper{
|
||||||
//Just Helper
|
//Just Helper
|
||||||
private static $list = null;
|
private static ?array $list = null;
|
||||||
private static $listInv = null;
|
private static ?array $listInv = null;
|
||||||
private static $listByNation = null;
|
private static ?array $listByNation = null;
|
||||||
|
|
||||||
private function __construct(){
|
private function __construct(){
|
||||||
|
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ class che_물자원조 extends Command\NationCommand{
|
|||||||
}
|
}
|
||||||
|
|
||||||
$josaRoSrc = JosaUtil::pick($nationName, '로');
|
$josaRoSrc = JosaUtil::pick($nationName, '로');
|
||||||
$destNationLogger = new ActionLogger(0, $destChiefID, $year, $month);
|
$destNationLogger = new ActionLogger(0, $destNationID, $year, $month);
|
||||||
$destNationLogger->pushNationalHistoryLog("<D><b>{$nationName}</b></>{$josaRoSrc}부터 금<C>{$goldAmountText}</> 쌀<C>{$riceAmountText}</>을 지원 받음");
|
$destNationLogger->pushNationalHistoryLog("<D><b>{$nationName}</b></>{$josaRoSrc}부터 금<C>{$goldAmountText}</> 쌀<C>{$riceAmountText}</>을 지원 받음");
|
||||||
|
|
||||||
$destNationStor = KVStorage::getStorage(DB::db(), $destNationID, 'nation_env');
|
$destNationStor = KVStorage::getStorage(DB::db(), $destNationID, 'nation_env');
|
||||||
|
|||||||
+118
-136
@@ -93,8 +93,7 @@ class GeneralAI
|
|||||||
$city = $db->queryFirstRow('SELECT * FROM city WHERE city = %i', $general->getCityID());
|
$city = $db->queryFirstRow('SELECT * FROM city WHERE city = %i', $general->getCityID());
|
||||||
$general->setRawCity($city);
|
$general->setRawCity($city);
|
||||||
$this->city = $city;
|
$this->city = $city;
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$this->city = $general->getRawCity();
|
$this->city = $general->getRawCity();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +183,6 @@ class GeneralAI
|
|||||||
$genType |= self::t통솔장;
|
$genType |= self::t통솔장;
|
||||||
}
|
}
|
||||||
return $genType;
|
return $genType;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function calcDiplomacyState()
|
protected function calcDiplomacyState()
|
||||||
@@ -219,8 +217,7 @@ class GeneralAI
|
|||||||
} else if ($warState == 1 && $warTerm < 5) {
|
} else if ($warState == 1 && $warTerm < 5) {
|
||||||
$onWarReady += 1;
|
$onWarReady += 1;
|
||||||
$warTargetNation[$warNationID] = 1;
|
$warTargetNation[$warNationID] = 1;
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$onWarYet += 1;
|
$onWarYet += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -251,7 +248,8 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function calcWarRoute(){
|
protected function calcWarRoute()
|
||||||
|
{
|
||||||
if ($this->warRoute !== null) {
|
if ($this->warRoute !== null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -570,8 +568,7 @@ class GeneralAI
|
|||||||
$generalID = $general->getID();
|
$generalID = $general->getID();
|
||||||
if ($turnList[$generalID] instanceof Command\General\che_징병) {
|
if ($turnList[$generalID] instanceof Command\General\che_징병) {
|
||||||
return true;
|
return true;
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -1222,7 +1219,7 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
$crewtype = $targetUserGeneral->getCrewTypeObj();
|
$crewtype = $targetUserGeneral->getCrewTypeObj();
|
||||||
$reqMoney = $crewtype->costWithTech($this->nation['tech'], $targetUserGeneral->getLeadership(false)) * 100 * 3 * 1.1;
|
$reqMoney = $crewtype->costWithTech($this->nation['tech'], Util::toInt($targetUserGeneral->getLeadership(false))) * 100 * 3 * 1.1;
|
||||||
if ($this->env['year'] > $this->env['startyear'] + 3) {
|
if ($this->env['year'] > $this->env['startyear'] + 3) {
|
||||||
$reqMoney = max($reqMoney, $reqHumanMinRes);
|
$reqMoney = max($reqMoney, $reqHumanMinRes);
|
||||||
}
|
}
|
||||||
@@ -1244,7 +1241,8 @@ class GeneralAI
|
|||||||
|
|
||||||
$payAmount = Util::valueFit($payAmount, 100, $this->maxResourceActionAmount);
|
$payAmount = Util::valueFit($payAmount, 100, $this->maxResourceActionAmount);
|
||||||
|
|
||||||
$candidateArgs[] = [[
|
$candidateArgs[] = [
|
||||||
|
[
|
||||||
'destGeneralID' => $targetUserGeneral->getID(),
|
'destGeneralID' => $targetUserGeneral->getID(),
|
||||||
'isGold' => $resName == 'gold',
|
'isGold' => $resName == 'gold',
|
||||||
'amount' => $payAmount
|
'amount' => $payAmount
|
||||||
@@ -1259,7 +1257,10 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
$cmd = buildNationCommandClass(
|
$cmd = buildNationCommandClass(
|
||||||
'che_포상', $this->general, $this->env, $lastTurn,
|
'che_포상',
|
||||||
|
$this->general,
|
||||||
|
$this->env,
|
||||||
|
$lastTurn,
|
||||||
Util::choiceRandomUsingWeightPair($candidateArgs)
|
Util::choiceRandomUsingWeightPair($candidateArgs)
|
||||||
);
|
);
|
||||||
if (!$cmd->hasFullConditionMet()) {
|
if (!$cmd->hasFullConditionMet()) {
|
||||||
@@ -1315,20 +1316,18 @@ class GeneralAI
|
|||||||
|
|
||||||
if (key_exists($targetUserGeneral->getID(), $this->userWarGenerals)) {
|
if (key_exists($targetUserGeneral->getID(), $this->userWarGenerals)) {
|
||||||
$isWarGeneral = true;
|
$isWarGeneral = true;
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$isWarGeneral = false;
|
$isWarGeneral = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($isWarGeneral) {
|
if ($isWarGeneral) {
|
||||||
$reqHumanMinRes = $reqHumanMinWarRes;
|
$reqHumanMinRes = $reqHumanMinWarRes;
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$reqHumanMinRes = $reqHumanMinDevelRes;
|
$reqHumanMinRes = $reqHumanMinDevelRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
$crewtype = $targetUserGeneral->getCrewTypeObj();
|
$crewtype = $targetUserGeneral->getCrewTypeObj();
|
||||||
$reqMoney = $crewtype->costWithTech($this->nation['tech'], $targetUserGeneral->getLeadership(false)) * 100 * 6 * 1.1;
|
$reqMoney = $crewtype->costWithTech($this->nation['tech'], Util::toInt($targetUserGeneral->getLeadership(false))) * 100 * 6 * 1.1;
|
||||||
if ($this->env['year'] > $this->env['startyear'] + 3) {
|
if ($this->env['year'] > $this->env['startyear'] + 3) {
|
||||||
$reqMoney = max($reqMoney, $reqHumanMinRes);
|
$reqMoney = max($reqMoney, $reqHumanMinRes);
|
||||||
}
|
}
|
||||||
@@ -1351,7 +1350,8 @@ class GeneralAI
|
|||||||
|
|
||||||
$payAmount = Util::valueFit($payAmount, 100, $this->maxResourceActionAmount);
|
$payAmount = Util::valueFit($payAmount, 100, $this->maxResourceActionAmount);
|
||||||
|
|
||||||
$candidateArgs[] = [[
|
$candidateArgs[] = [
|
||||||
|
[
|
||||||
'destGeneralID' => $targetUserGeneral->getID(),
|
'destGeneralID' => $targetUserGeneral->getID(),
|
||||||
'isGold' => $resName == 'gold',
|
'isGold' => $resName == 'gold',
|
||||||
'amount' => $payAmount
|
'amount' => $payAmount
|
||||||
@@ -1366,7 +1366,10 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
$cmd = buildNationCommandClass(
|
$cmd = buildNationCommandClass(
|
||||||
'che_포상', $this->general, $this->env, $lastTurn,
|
'che_포상',
|
||||||
|
$this->general,
|
||||||
|
$this->env,
|
||||||
|
$lastTurn,
|
||||||
Util::choiceRandomUsingWeightPair($candidateArgs)
|
Util::choiceRandomUsingWeightPair($candidateArgs)
|
||||||
);
|
);
|
||||||
if (!$cmd->hasFullConditionMet()) {
|
if (!$cmd->hasFullConditionMet()) {
|
||||||
@@ -1417,7 +1420,7 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
$crewtype = $targetNPCGeneral->getCrewTypeObj();
|
$crewtype = $targetNPCGeneral->getCrewTypeObj();
|
||||||
$reqMoney = $crewtype->costWithTech($this->nation['tech'], $targetNPCGeneral->getLeadership(false)) * 100 * 1.5;
|
$reqMoney = $crewtype->costWithTech($this->nation['tech'], Util::toInt($targetNPCGeneral->getLeadership(false))) * 100 * 1.5;
|
||||||
if ($this->env['year'] > $this->env['startyear'] + 5) {
|
if ($this->env['year'] > $this->env['startyear'] + 5) {
|
||||||
$reqMoney = max($reqMoney, $reqNPCMinWarRes);
|
$reqMoney = max($reqMoney, $reqNPCMinWarRes);
|
||||||
}
|
}
|
||||||
@@ -1440,7 +1443,8 @@ class GeneralAI
|
|||||||
|
|
||||||
$payAmount = Util::valueFit($payAmount, 100, $this->maxResourceActionAmount);
|
$payAmount = Util::valueFit($payAmount, 100, $this->maxResourceActionAmount);
|
||||||
|
|
||||||
$candidateArgs[] = [[
|
$candidateArgs[] = [
|
||||||
|
[
|
||||||
'destGeneralID' => $targetNPCGeneral->getID(),
|
'destGeneralID' => $targetNPCGeneral->getID(),
|
||||||
'isGold' => $resName == 'gold',
|
'isGold' => $resName == 'gold',
|
||||||
'amount' => $payAmount
|
'amount' => $payAmount
|
||||||
@@ -1455,7 +1459,10 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
$cmd = buildNationCommandClass(
|
$cmd = buildNationCommandClass(
|
||||||
'che_포상', $this->general, $this->env, $lastTurn,
|
'che_포상',
|
||||||
|
$this->general,
|
||||||
|
$this->env,
|
||||||
|
$lastTurn,
|
||||||
Util::choiceRandomUsingWeightPair($candidateArgs)
|
Util::choiceRandomUsingWeightPair($candidateArgs)
|
||||||
);
|
);
|
||||||
if (!$cmd->hasFullConditionMet()) {
|
if (!$cmd->hasFullConditionMet()) {
|
||||||
@@ -1509,7 +1516,7 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
$crewtype = $targetNPCGeneral->getCrewTypeObj();
|
$crewtype = $targetNPCGeneral->getCrewTypeObj();
|
||||||
$reqMoney = $crewtype->costWithTech($nation['tech'], $targetNPCGeneral->getLeadership(false)) * 100 * 3 * 1.1;
|
$reqMoney = $crewtype->costWithTech($nation['tech'], Util::toInt($targetNPCGeneral->getLeadership(false))) * 100 * 3 * 1.1;
|
||||||
if ($this->env['year'] > $this->env['startyear'] + 5) {
|
if ($this->env['year'] > $this->env['startyear'] + 5) {
|
||||||
$reqMoney = max($reqMoney, $reqNPCMinWarRes);
|
$reqMoney = max($reqMoney, $reqNPCMinWarRes);
|
||||||
}
|
}
|
||||||
@@ -1526,7 +1533,8 @@ class GeneralAI
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$candidateArgs[] = [[
|
$candidateArgs[] = [
|
||||||
|
[
|
||||||
'destGeneralID' => $targetNPCGeneral->getID(),
|
'destGeneralID' => $targetNPCGeneral->getID(),
|
||||||
'isGold' => $resName == 'gold',
|
'isGold' => $resName == 'gold',
|
||||||
'amount' => Util::valueFit($payAmount, 100, $this->maxResourceActionAmount)
|
'amount' => Util::valueFit($payAmount, 100, $this->maxResourceActionAmount)
|
||||||
@@ -1556,7 +1564,8 @@ class GeneralAI
|
|||||||
|
|
||||||
$payAmount = Util::valueFit($payAmount, 100, $this->maxResourceActionAmount);
|
$payAmount = Util::valueFit($payAmount, 100, $this->maxResourceActionAmount);
|
||||||
|
|
||||||
$candidateArgs[] = [[
|
$candidateArgs[] = [
|
||||||
|
[
|
||||||
'destGeneralID' => $targetNPCGeneral->getID(),
|
'destGeneralID' => $targetNPCGeneral->getID(),
|
||||||
'isGold' => $resName == 'gold',
|
'isGold' => $resName == 'gold',
|
||||||
'amount' => $payAmount
|
'amount' => $payAmount
|
||||||
@@ -1564,7 +1573,6 @@ class GeneralAI
|
|||||||
max(count($npcWarGenerals), count($npcCivilGenerals)) - $idx
|
max(count($npcWarGenerals), count($npcCivilGenerals)) - $idx
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$candidateArgs) {
|
if (!$candidateArgs) {
|
||||||
@@ -1572,7 +1580,10 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
$cmd = buildNationCommandClass(
|
$cmd = buildNationCommandClass(
|
||||||
'che_포상', $this->general, $this->env, $lastTurn,
|
'che_포상',
|
||||||
|
$this->general,
|
||||||
|
$this->env,
|
||||||
|
$lastTurn,
|
||||||
Util::choiceRandomUsingWeightPair($candidateArgs)
|
Util::choiceRandomUsingWeightPair($candidateArgs)
|
||||||
);
|
);
|
||||||
if (!$cmd->hasFullConditionMet()) {
|
if (!$cmd->hasFullConditionMet()) {
|
||||||
@@ -1626,7 +1637,8 @@ class GeneralAI
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$candidateArgs[] = [[
|
$candidateArgs[] = [
|
||||||
|
[
|
||||||
'destGeneralID' => $targetNPCGeneral->getID(),
|
'destGeneralID' => $targetNPCGeneral->getID(),
|
||||||
'isGold' => $resName == 'gold',
|
'isGold' => $resName == 'gold',
|
||||||
'amount' => $takeAmount
|
'amount' => $takeAmount
|
||||||
@@ -1644,8 +1656,7 @@ class GeneralAI
|
|||||||
|
|
||||||
if ($resVal >= $reqNationResVal) {
|
if ($resVal >= $reqNationResVal) {
|
||||||
$willTakeSmallAmount = true;
|
$willTakeSmallAmount = true;
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$willTakeSmallAmount = false;
|
$willTakeSmallAmount = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1661,17 +1672,14 @@ class GeneralAI
|
|||||||
if ($targetNPCGeneral->getVar($resName) <= $reqNPCMinWarRes * 2) {
|
if ($targetNPCGeneral->getVar($resName) <= $reqNPCMinWarRes * 2) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} else if ($targetNPCGeneral->getVar($resName) <= $reqNPCMinWarRes) {
|
||||||
}
|
|
||||||
else if($targetNPCGeneral->getVar($resName) <= $reqNPCMinWarRes){
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$willTakeSmallAmount) {
|
if (!$willTakeSmallAmount) {
|
||||||
$takeAmount = $targetNPCGeneral->getVar($resName) - $reqNPCMinWarRes;
|
$takeAmount = $targetNPCGeneral->getVar($resName) - $reqNPCMinWarRes;
|
||||||
$takeAmount = Util::valueFit(sqrt($takeAmount * $reqResValDelta), 0, $takeAmount);
|
$takeAmount = Util::valueFit(sqrt($takeAmount * $reqResValDelta), 0, $takeAmount);
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$maxTakeAmount = $targetNPCGeneral->getVar($resName) - $reqNPCMinWarRes;
|
$maxTakeAmount = $targetNPCGeneral->getVar($resName) - $reqNPCMinWarRes;
|
||||||
$minTakeAmount = $targetNPCGeneral->getVar($resName) - $reqNPCMinWarRes * 2;
|
$minTakeAmount = $targetNPCGeneral->getVar($resName) - $reqNPCMinWarRes * 2;
|
||||||
$takeAmount = Util::valueFit(sqrt($minTakeAmount * $reqResValDelta), 0, $maxTakeAmount);
|
$takeAmount = Util::valueFit(sqrt($minTakeAmount * $reqResValDelta), 0, $maxTakeAmount);
|
||||||
@@ -1686,7 +1694,8 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
$takeAmount = Util::valueFit($takeAmount, 100, $this->maxResourceActionAmount);
|
$takeAmount = Util::valueFit($takeAmount, 100, $this->maxResourceActionAmount);
|
||||||
$candidateArgs[] = [[
|
$candidateArgs[] = [
|
||||||
|
[
|
||||||
'destGeneralID' => $targetNPCGeneral->getID(),
|
'destGeneralID' => $targetNPCGeneral->getID(),
|
||||||
'isGold' => $resName == 'gold',
|
'isGold' => $resName == 'gold',
|
||||||
'amount' => $takeAmount
|
'amount' => $takeAmount
|
||||||
@@ -1694,7 +1703,6 @@ class GeneralAI
|
|||||||
$takeAmount
|
$takeAmount
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$candidateArgs) {
|
if (!$candidateArgs) {
|
||||||
@@ -1702,7 +1710,10 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
$cmd = buildNationCommandClass(
|
$cmd = buildNationCommandClass(
|
||||||
'che_몰수', $this->general, $this->env, $lastTurn,
|
'che_몰수',
|
||||||
|
$this->general,
|
||||||
|
$this->env,
|
||||||
|
$lastTurn,
|
||||||
Util::choiceRandomUsingWeightPair($candidateArgs)
|
Util::choiceRandomUsingWeightPair($candidateArgs)
|
||||||
);
|
);
|
||||||
if (!$cmd->hasFullConditionMet()) {
|
if (!$cmd->hasFullConditionMet()) {
|
||||||
@@ -1896,11 +1907,9 @@ class GeneralAI
|
|||||||
|
|
||||||
if (!key_exists($destNationID, $lowTargetNations)) {
|
if (!key_exists($destNationID, $lowTargetNations)) {
|
||||||
$nations[$destNationID] = 1 / sqrt($destNationPower + 1);
|
$nations[$destNationID] = 1 / sqrt($destNationPower + 1);
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$warNations[$destNationID] = 1 / sqrt($destNationPower + 1);
|
$warNations[$destNationID] = 1 / sqrt($destNationPower + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (!$nations) {
|
if (!$nations) {
|
||||||
if (!$warNations) {
|
if (!$warNations) {
|
||||||
@@ -2098,8 +2107,7 @@ class GeneralAI
|
|||||||
if ($cmd->hasFullConditionMet()) {
|
if ($cmd->hasFullConditionMet()) {
|
||||||
$cmdList[] = [$cmd, $leadership / Util::valueFit($develRate['pop'], 0.001)];
|
$cmdList[] = [$cmd, $leadership / Util::valueFit($develRate['pop'], 0.001)];
|
||||||
}
|
}
|
||||||
}
|
} else if ($develRate['pop'] < 0.99) {
|
||||||
else if ($develRate['pop'] < 0.99) {
|
|
||||||
$cmd = buildGeneralCommandClass('che_정착장려', $general, $env);
|
$cmd = buildGeneralCommandClass('che_정착장려', $general, $env);
|
||||||
if ($cmd->hasFullConditionMet()) {
|
if ($cmd->hasFullConditionMet()) {
|
||||||
$cmdList[] = [$cmd, $leadership / Util::valueFit($develRate['pop'] / 4, 0.001)];
|
$cmdList[] = [$cmd, $leadership / Util::valueFit($develRate['pop'] / 4, 0.001)];
|
||||||
@@ -2125,8 +2133,7 @@ class GeneralAI
|
|||||||
if ($cmd->hasFullConditionMet()) {
|
if ($cmd->hasFullConditionMet()) {
|
||||||
$cmdList[] = [$cmd, $strength / Util::valueFit($develRate['secu'] / 0.8, 0.001, 1)];
|
$cmdList[] = [$cmd, $strength / Util::valueFit($develRate['secu'] / 0.8, 0.001, 1)];
|
||||||
}
|
}
|
||||||
}
|
} else if ($develRate['secu'] < 1) {
|
||||||
else if($develRate['secu'] < 1){
|
|
||||||
$cmd = buildGeneralCommandClass('che_치안강화', $general, $env);
|
$cmd = buildGeneralCommandClass('che_치안강화', $general, $env);
|
||||||
if ($cmd->hasFullConditionMet()) {
|
if ($cmd->hasFullConditionMet()) {
|
||||||
$cmdList[] = [$cmd, $strength / 2 / Util::valueFit($develRate['secu'], 0.001)];
|
$cmdList[] = [$cmd, $strength / 2 / Util::valueFit($develRate['secu'], 0.001)];
|
||||||
@@ -2243,8 +2250,7 @@ class GeneralAI
|
|||||||
if ($cmd->hasFullConditionMet()) {
|
if ($cmd->hasFullConditionMet()) {
|
||||||
if (in_array($city['front'], [1, 3])) {
|
if (in_array($city['front'], [1, 3])) {
|
||||||
$cmdList[] = [$cmd, $leadership / Util::valueFit($develRate['pop'], 0.001)];
|
$cmdList[] = [$cmd, $leadership / Util::valueFit($develRate['pop'], 0.001)];
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$cmdList[] = [$cmd, $leadership / Util::valueFit($develRate['pop'], 0.001) / 2];
|
$cmdList[] = [$cmd, $leadership / Util::valueFit($develRate['pop'], 0.001) / 2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2290,8 +2296,7 @@ class GeneralAI
|
|||||||
if ($cmd->hasFullConditionMet()) {
|
if ($cmd->hasFullConditionMet()) {
|
||||||
if (in_array($city['front'], [1, 3])) {
|
if (in_array($city['front'], [1, 3])) {
|
||||||
$cmdList[] = [$cmd, ($isSpringSummer ? 1.2 : 0.8) * $intel / 4 / Util::valueFit($develRate['agri'], 0.001, 1)];
|
$cmdList[] = [$cmd, ($isSpringSummer ? 1.2 : 0.8) * $intel / 4 / Util::valueFit($develRate['agri'], 0.001, 1)];
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$cmdList[] = [$cmd, ($isSpringSummer ? 1.2 : 0.8) * $intel / 2 / Util::valueFit($develRate['agri'], 0.001, 1)];
|
$cmdList[] = [$cmd, ($isSpringSummer ? 1.2 : 0.8) * $intel / 2 / Util::valueFit($develRate['agri'], 0.001, 1)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2301,8 +2306,7 @@ class GeneralAI
|
|||||||
if ($cmd->hasFullConditionMet()) {
|
if ($cmd->hasFullConditionMet()) {
|
||||||
if (in_array($city['front'], [1, 3])) {
|
if (in_array($city['front'], [1, 3])) {
|
||||||
$cmdList[] = [$cmd, ($isSpringSummer ? 0.8 : 1.2) * $intel / 4 / Util::valueFit($develRate['comm'], 0.001, 1)];
|
$cmdList[] = [$cmd, ($isSpringSummer ? 0.8 : 1.2) * $intel / 4 / Util::valueFit($develRate['comm'], 0.001, 1)];
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$cmdList[] = [$cmd, ($isSpringSummer ? 0.8 : 1.2) * $intel / 2 / Util::valueFit($develRate['comm'], 0.001, 1)];
|
$cmdList[] = [$cmd, ($isSpringSummer ? 0.8 : 1.2) * $intel / 2 / Util::valueFit($develRate['comm'], 0.001, 1)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2346,8 +2350,7 @@ class GeneralAI
|
|||||||
'crewType' => $crewType->id,
|
'crewType' => $crewType->id,
|
||||||
'amount' => $this->fullLeadership * 100
|
'amount' => $this->fullLeadership * 100
|
||||||
]);
|
]);
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$costCmd = buildGeneralCommandClass('che_징병', $general, $this->env, [
|
$costCmd = buildGeneralCommandClass('che_징병', $general, $this->env, [
|
||||||
'crewType' => $crewType->id,
|
'crewType' => $crewType->id,
|
||||||
'amount' => $this->fullLeadership * 100
|
'amount' => $this->fullLeadership * 100
|
||||||
@@ -2357,7 +2360,7 @@ class GeneralAI
|
|||||||
$goldCost = $costCmd->getCost()[0];
|
$goldCost = $costCmd->getCost()[0];
|
||||||
$riceCost = $crewType->riceWithTech(
|
$riceCost = $crewType->riceWithTech(
|
||||||
$this->nation['tech'],
|
$this->nation['tech'],
|
||||||
$this->fullLeadership*100
|
Util::toInt($this->fullLeadership * 100)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (($relGold + $relRice) * 1.5 <= $goldCost + $riceCost) {
|
if (($relGold + $relRice) * 1.5 <= $goldCost + $riceCost) {
|
||||||
@@ -2366,19 +2369,13 @@ class GeneralAI
|
|||||||
|
|
||||||
$tryBuying = false;
|
$tryBuying = false;
|
||||||
if ($this->generalPolicy->can상인무시) {
|
if ($this->generalPolicy->can상인무시) {
|
||||||
if($relRice * 1.5 < $relGold && $relRice < $riceCost * 2)
|
if ($relRice * 1.5 < $relGold && $relRice < $riceCost * 2) {
|
||||||
{
|
$tryBuying = true;
|
||||||
|
} else if ($relRice * 2 < $relGold) {
|
||||||
$tryBuying = true;
|
$tryBuying = true;
|
||||||
}
|
}
|
||||||
else if($relRice * 2 < $relGold)
|
} else {
|
||||||
{
|
if ($relRice * 2 < $relGold && $relRice < $riceCost * 3) {
|
||||||
$tryBuying = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if($relRice * 2 < $relGold && $relRice < $riceCost * 3)
|
|
||||||
{
|
|
||||||
$tryBuying = true;
|
$tryBuying = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2387,7 +2384,10 @@ class GeneralAI
|
|||||||
//1:1
|
//1:1
|
||||||
$amount = Util::valueFit(Util::toInt(($relGold - $relRice) / (1 + $deathRate)), 100, GameConst::$maxResourceActionAmount);
|
$amount = Util::valueFit(Util::toInt(($relGold - $relRice) / (1 + $deathRate)), 100, GameConst::$maxResourceActionAmount);
|
||||||
if ($amount >= $this->nationPolicy->minimumResourceActionAmount) {
|
if ($amount >= $this->nationPolicy->minimumResourceActionAmount) {
|
||||||
$cmd = buildGeneralCommandClass('che_군량매매', $general, $this->env,
|
$cmd = buildGeneralCommandClass(
|
||||||
|
'che_군량매매',
|
||||||
|
$general,
|
||||||
|
$this->env,
|
||||||
[
|
[
|
||||||
'buyRice' => true,
|
'buyRice' => true,
|
||||||
'amount' => $amount
|
'amount' => $amount
|
||||||
@@ -2401,19 +2401,13 @@ class GeneralAI
|
|||||||
|
|
||||||
$trySelling = false;
|
$trySelling = false;
|
||||||
if ($this->generalPolicy->can상인무시) {
|
if ($this->generalPolicy->can상인무시) {
|
||||||
if($relGold * 1.5 < $relRice && $relGold < $goldCost * 2)
|
if ($relGold * 1.5 < $relRice && $relGold < $goldCost * 2) {
|
||||||
{
|
$trySelling = true;
|
||||||
|
} else if ($relGold * 2 < $relRice) {
|
||||||
$trySelling = true;
|
$trySelling = true;
|
||||||
}
|
}
|
||||||
else if($relGold * 2 < $relRice)
|
} else {
|
||||||
{
|
if ($relGold * 2 < $relRice && $relGold < $goldCost * 3) {
|
||||||
$trySelling = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if($relGold * 2 < $relRice && $relGold < $goldCost * 3)
|
|
||||||
{
|
|
||||||
$trySelling = true;
|
$trySelling = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2421,7 +2415,10 @@ class GeneralAI
|
|||||||
if ($trySelling) {
|
if ($trySelling) {
|
||||||
$amount = Util::valueFit(Util::toInt(($relRice - $relGold) / (1 + $deathRate)), 100, GameConst::$maxResourceActionAmount);
|
$amount = Util::valueFit(Util::toInt(($relRice - $relGold) / (1 + $deathRate)), 100, GameConst::$maxResourceActionAmount);
|
||||||
if ($amount >= $this->nationPolicy->minimumResourceActionAmount) {
|
if ($amount >= $this->nationPolicy->minimumResourceActionAmount) {
|
||||||
$cmd = buildGeneralCommandClass('che_군량매매', $general, $this->env,
|
$cmd = buildGeneralCommandClass(
|
||||||
|
'che_군량매매',
|
||||||
|
$general,
|
||||||
|
$this->env,
|
||||||
[
|
[
|
||||||
'buyRice' => false,
|
'buyRice' => false,
|
||||||
'amount' => $amount
|
'amount' => $amount
|
||||||
@@ -2467,10 +2464,10 @@ class GeneralAI
|
|||||||
|
|
||||||
$maxPop = $city['pop_max'] - $this->nationPolicy->minNPCRecruitCityPopulation;
|
$maxPop = $city['pop_max'] - $this->nationPolicy->minNPCRecruitCityPopulation;
|
||||||
if (($city['pop'] / $city['pop_max'] < $this->nationPolicy->safeRecruitCityPopulationRatio) &&
|
if (($city['pop'] / $city['pop_max'] < $this->nationPolicy->safeRecruitCityPopulationRatio) &&
|
||||||
(Util::randF($remainPop/$maxPop))){
|
(Util::randF($remainPop / $maxPop))
|
||||||
|
) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$nationID = $general->getNationID();
|
$nationID = $general->getNationID();
|
||||||
@@ -2485,8 +2482,7 @@ class GeneralAI
|
|||||||
if ($armType) {
|
if ($armType) {
|
||||||
if (!($genType & self::t지장) && $armType == GameUnitConst::T_WIZARD) {
|
if (!($genType & self::t지장) && $armType == GameUnitConst::T_WIZARD) {
|
||||||
$armType = null;
|
$armType = null;
|
||||||
}
|
} else if (!($genType & self::t무장) && in_array($armType, [GameUnitConst::T_FOOTMAN, GameUnitConst::T_ARCHER, GameUnitConst::T_CAVALRY])) {
|
||||||
else if(!($genType & self::t무장) && in_array($armType, [GameUnitConst::T_FOOTMAN, GameUnitConst::T_ARCHER, GameUnitConst::T_CAVALRY])){
|
|
||||||
$armType = null;
|
$armType = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2535,7 +2531,7 @@ class GeneralAI
|
|||||||
if ($types) {
|
if ($types) {
|
||||||
$type = Util::choiceRandomUsingWeight($types);
|
$type = Util::choiceRandomUsingWeight($types);
|
||||||
} else {
|
} else {
|
||||||
throw new MustNotBeReachedException('에러:'.var_dump([$general->getName(), $general->getAuxVar('armType'), $armType, $cities, $regions, $relYear, $tech], true));
|
throw new MustNotBeReachedException('에러:' . print_r([$general->getName(), $general->getAuxVar('armType'), $armType, $cities, $regions, $relYear, $tech], true));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->generalPolicy->can고급병종) {
|
if ($this->generalPolicy->can고급병종) {
|
||||||
@@ -2543,8 +2539,7 @@ class GeneralAI
|
|||||||
if ($currCrewType->isValid($cities, $regions, $relYear, $tech)) {
|
if ($currCrewType->isValid($cities, $regions, $relYear, $tech)) {
|
||||||
if ($currCrewType->reqTech >= 2000) {
|
if ($currCrewType->reqTech >= 2000) {
|
||||||
$type = $currCrewType->id;
|
$type = $currCrewType->id;
|
||||||
}
|
} else if ($currCrewType->armType != $armType && $currCrewType->reqTech >= 1000) {
|
||||||
else if($currCrewType->armType != $armType && $currCrewType->reqTech >= 1000){
|
|
||||||
//굳이 뽑은 이유가 있겠지
|
//굳이 뽑은 이유가 있겠지
|
||||||
$type = $currCrewType->id;
|
$type = $currCrewType->id;
|
||||||
}
|
}
|
||||||
@@ -2566,8 +2561,8 @@ class GeneralAI
|
|||||||
|
|
||||||
$riceCost = $crewType->riceWithTech(
|
$riceCost = $crewType->riceWithTech(
|
||||||
$this->nation['tech'],
|
$this->nation['tech'],
|
||||||
$this->fullLeadership*100 *
|
Util::toInt($this->fullLeadership * 100 *
|
||||||
$general->getRankVar('killcrew')/max($general->getRankVar('deathcrew'),1)*1.2
|
$general->getRankVar('killcrew') / max($general->getRankVar('deathcrew'), 1) * 1.2)
|
||||||
);
|
);
|
||||||
|
|
||||||
$cmd = buildGeneralCommandClass('che_징병', $general, $env, [
|
$cmd = buildGeneralCommandClass('che_징병', $general, $env, [
|
||||||
@@ -2582,8 +2577,7 @@ class GeneralAI
|
|||||||
'crewType' => $type,
|
'crewType' => $type,
|
||||||
'amount' => $crew
|
'amount' => $crew
|
||||||
]);
|
]);
|
||||||
}
|
} else if ($gold < $cost && $gold * 2 >= $cost) {
|
||||||
else if($gold < $cost && $gold * 2 >= $cost){
|
|
||||||
$crew *= 0.5;
|
$crew *= 0.5;
|
||||||
$riceCost *= 0.5;
|
$riceCost *= 0.5;
|
||||||
$crew = Util::round($crew - 49, -2);
|
$crew = Util::round($crew - 49, -2);
|
||||||
@@ -2752,8 +2746,7 @@ class GeneralAI
|
|||||||
|
|
||||||
if ($this->genType & self::t통솔장) {
|
if ($this->genType & self::t통솔장) {
|
||||||
$reqRes = $reqNPCWar;
|
$reqRes = $reqNPCWar;
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$reqRes = $reqNPCDevel;
|
$reqRes = $reqNPCDevel;
|
||||||
if ($genRes >= $reqNPCWar && $reqNPCWar > $reqNPCDevel + 1000) {
|
if ($genRes >= $reqNPCWar && $reqNPCWar > $reqNPCDevel + 1000) {
|
||||||
$amount = $genRes - $reqNPCDevel;
|
$amount = $genRes - $reqNPCDevel;
|
||||||
@@ -2783,8 +2776,7 @@ class GeneralAI
|
|||||||
'isGold' => 'rice',
|
'isGold' => 'rice',
|
||||||
'amount' => $genRes
|
'amount' => $genRes
|
||||||
], $genRes];
|
], $genRes];
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$args[] = [[
|
$args[] = [[
|
||||||
'isGold' => 'rice',
|
'isGold' => 'rice',
|
||||||
'amount' => $genRes / 2
|
'amount' => $genRes / 2
|
||||||
@@ -2850,8 +2842,7 @@ class GeneralAI
|
|||||||
if ($city['pop'] >= $minRecruitPop) {
|
if ($city['pop'] >= $minRecruitPop) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
if ($city['pop'] / $city['pop_max'] >= $this->nationPolicy->safeRecruitCityPopulationRatio) {
|
if ($city['pop'] / $city['pop_max'] >= $this->nationPolicy->safeRecruitCityPopulationRatio) {
|
||||||
if ($city['pop'] >= $this->nationPolicy->minNPCRecruitCityPopulation && $city['pop'] >= $minRecruitPop) {
|
if ($city['pop'] >= $this->nationPolicy->minNPCRecruitCityPopulation && $city['pop'] >= $minRecruitPop) {
|
||||||
LogText("{$this->general->getName()}, {$this->general->getID()} 후방워프 불가: 인구 충분", [$city['pop'] / $city['pop_max'], $this->nationPolicy->safeRecruitCityPopulationRatio]);
|
LogText("{$this->general->getName()}, {$this->general->getID()} 후방워프 불가: 인구 충분", [$city['pop'] / $city['pop_max'], $this->nationPolicy->safeRecruitCityPopulationRatio]);
|
||||||
@@ -2900,8 +2891,7 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
if (key_exists($cityID, $this->frontCities)) {
|
if (key_exists($cityID, $this->frontCities)) {
|
||||||
$recruitableCityList[$cityID] = $pop_ratio / 2;
|
$recruitableCityList[$cityID] = $pop_ratio / 2;
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$recruitableCityList[$cityID] = $pop_ratio;
|
$recruitableCityList[$cityID] = $pop_ratio;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3345,7 +3335,8 @@ class GeneralAI
|
|||||||
return $cmd;
|
return $cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function categorizeNationCities():void{
|
protected function categorizeNationCities(): void
|
||||||
|
{
|
||||||
|
|
||||||
if ($this->nationCities !== null) {
|
if ($this->nationCities !== null) {
|
||||||
return;
|
return;
|
||||||
@@ -3377,8 +3368,7 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
if ($nationCity['front']) {
|
if ($nationCity['front']) {
|
||||||
$frontCities[$cityID] = $nationCity;
|
$frontCities[$cityID] = $nationCity;
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$backupCities[$cityID] = $nationCity;
|
$backupCities[$cityID] = $nationCity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3392,7 +3382,8 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected function categorizeNationGeneral():void{
|
protected function categorizeNationGeneral(): void
|
||||||
|
{
|
||||||
if ($this->userGenerals !== null) {
|
if ($this->userGenerals !== null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -3436,8 +3427,7 @@ class GeneralAI
|
|||||||
|
|
||||||
if ($officerLevel > 4) {
|
if ($officerLevel > 4) {
|
||||||
$chiefGenerals[$officerLevel] = $nationGeneral;
|
$chiefGenerals[$officerLevel] = $nationGeneral;
|
||||||
}
|
} else if ($officerLevel > 2) {
|
||||||
else if($officerLevel > 2){
|
|
||||||
$nationCities[$officerCity]['important'] += 1;
|
$nationCities[$officerCity]['important'] += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3453,29 +3443,24 @@ class GeneralAI
|
|||||||
if ($npcType == 5) {
|
if ($npcType == 5) {
|
||||||
//부대장임
|
//부대장임
|
||||||
$troopLeaders[$generalID] = $nationGeneral;
|
$troopLeaders[$generalID] = $nationGeneral;
|
||||||
}
|
} else if ($nationGeneral->getVar('troop') === $generalID && $nationGeneral->getReservedTurn(0, $this->env)->getName() === 'che_집합') {
|
||||||
else if($nationGeneral->getVar('troop') === $generalID && $nationGeneral->getReservedTurn(0, $this->env)->getName() === 'che_집합'){
|
|
||||||
//비 NPC부대장임
|
//비 NPC부대장임
|
||||||
$troopLeaders[$generalID] = $nationGeneral;
|
$troopLeaders[$generalID] = $nationGeneral;
|
||||||
}
|
} else if ($nationGeneral->getVar('killturn') < 5) {
|
||||||
else if($nationGeneral->getVar('killturn') < 5){
|
|
||||||
//삭턴이 몇 안남은 장수는 '내정장 npc'로 처리
|
//삭턴이 몇 안남은 장수는 '내정장 npc'로 처리
|
||||||
$npcCivilGenerals[$generalID] = $nationGeneral;
|
$npcCivilGenerals[$generalID] = $nationGeneral;
|
||||||
}
|
} else if ($npcType < 2) {
|
||||||
else if($npcType < 2) {
|
|
||||||
$userGenerals[$generalID] = $nationGeneral;
|
$userGenerals[$generalID] = $nationGeneral;
|
||||||
if ($nationGeneral->calcRecentWarTurn($this->env['turnterm']) <= $lastWar + 12) {
|
if ($nationGeneral->calcRecentWarTurn($this->env['turnterm']) <= $lastWar + 12) {
|
||||||
$userWarGenerals[$generalID] = $nationGeneral;
|
$userWarGenerals[$generalID] = $nationGeneral;
|
||||||
}
|
} else if (
|
||||||
else if(
|
|
||||||
$this->dipState !== self::d평화 &&
|
$this->dipState !== self::d평화 &&
|
||||||
$nationGeneral->getVar('crew') >= $this->nationPolicy->minWarCrew
|
$nationGeneral->getVar('crew') >= $this->nationPolicy->minWarCrew
|
||||||
) {
|
) {
|
||||||
$userWarGenerals[$generalID] = $nationGeneral;
|
$userWarGenerals[$generalID] = $nationGeneral;
|
||||||
//TODO: 훈련,사기 나중에 되돌릴 것
|
//TODO: 훈련,사기 나중에 되돌릴 것
|
||||||
//TODO: 징,모병턴 기준으로 계산하는 코드를 추가할 것
|
//TODO: 징,모병턴 기준으로 계산하는 코드를 추가할 것
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$userCivilGenerals[$generalID] = $nationGeneral;
|
$userCivilGenerals[$generalID] = $nationGeneral;
|
||||||
}
|
}
|
||||||
} else if ($nationGeneral->getLeadership(false) >= $this->nationPolicy->minNPCWarLeadership) {
|
} else if ($nationGeneral->getLeadership(false) >= $this->nationPolicy->minNPCWarLeadership) {
|
||||||
@@ -3497,7 +3482,8 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function chooseNationTurn(NationCommand $reservedCommand): NationCommand{
|
public function chooseNationTurn(NationCommand $reservedCommand): NationCommand
|
||||||
|
{
|
||||||
//TODO: NationTurn과 InstantNationTurn 구분 필요
|
//TODO: NationTurn과 InstantNationTurn 구분 필요
|
||||||
$lastTurn = $reservedCommand->getLastTurn();
|
$lastTurn = $reservedCommand->getLastTurn();
|
||||||
$general = $this->general;
|
$general = $this->general;
|
||||||
@@ -3523,8 +3509,7 @@ class GeneralAI
|
|||||||
$this->chooseTexRate();
|
$this->chooseTexRate();
|
||||||
$this->chooseRiceBillRate();
|
$this->chooseRiceBillRate();
|
||||||
}
|
}
|
||||||
}
|
} else if (in_array($month, [3, 6, 9, 12])) {
|
||||||
else if(in_array($month, [3, 6, 9, 12])){
|
|
||||||
$this->chooseNonLordPromotion();
|
$this->chooseNonLordPromotion();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3564,7 +3549,8 @@ class GeneralAI
|
|||||||
return $cmd;
|
return $cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function chooseInstantNationTurn(NationCommand $reservedCommand): ?NationCommand{
|
public function chooseInstantNationTurn(NationCommand $reservedCommand): ?NationCommand
|
||||||
|
{
|
||||||
if ($reservedCommand->hasFullConditionMet()) {
|
if ($reservedCommand->hasFullConditionMet()) {
|
||||||
return $reservedCommand;
|
return $reservedCommand;
|
||||||
}
|
}
|
||||||
@@ -3585,7 +3571,8 @@ class GeneralAI
|
|||||||
return buildNationCommandClass(null, $this->general, $this->env, $this->general->getLastTurn());
|
return buildNationCommandClass(null, $this->general, $this->env, $this->general->getLastTurn());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function chooseGeneralTurn(GeneralCommand $reservedCommand): GeneralCommand{
|
public function chooseGeneralTurn(GeneralCommand $reservedCommand): GeneralCommand
|
||||||
|
{
|
||||||
$general = $this->general;
|
$general = $this->general;
|
||||||
$npcType = $general->getNPCType();
|
$npcType = $general->getNPCType();
|
||||||
$nationID = $general->getNationID();
|
$nationID = $general->getNationID();
|
||||||
@@ -3747,7 +3734,8 @@ class GeneralAI
|
|||||||
return $this->devRate;
|
return $this->devRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function chooseNonLordPromotion(){
|
protected function chooseNonLordPromotion()
|
||||||
|
{
|
||||||
//빈자리는 아무나 채움
|
//빈자리는 아무나 채움
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
|
|
||||||
@@ -3772,17 +3760,13 @@ class GeneralAI
|
|||||||
/** @var General */
|
/** @var General */
|
||||||
if ($this->npcWarGenerals) {
|
if ($this->npcWarGenerals) {
|
||||||
$randGeneral = Util::choiceRandom($this->npcWarGenerals);
|
$randGeneral = Util::choiceRandom($this->npcWarGenerals);
|
||||||
}
|
} else if ($this->npcCivilGenerals) {
|
||||||
else if($this->npcCivilGenerals){
|
|
||||||
$randGeneral = Util::choiceRandom($this->npcCivilGenerals);
|
$randGeneral = Util::choiceRandom($this->npcCivilGenerals);
|
||||||
}
|
} else if ($this->userWarGenerals) {
|
||||||
else if($this->userWarGenerals){
|
|
||||||
$randGeneral = Util::choiceRandom($this->userWarGenerals);
|
$randGeneral = Util::choiceRandom($this->userWarGenerals);
|
||||||
}
|
} else if ($this->userCivilGenerals) {
|
||||||
else if($this->userCivilGenerals){
|
|
||||||
$randGeneral = Util::choiceRandom($this->userCivilGenerals);
|
$randGeneral = Util::choiceRandom($this->userCivilGenerals);
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3799,8 +3783,7 @@ class GeneralAI
|
|||||||
if ($randGeneral->getStrength(false, false, false, false) < GameConst::$chiefStatMin) {
|
if ($randGeneral->getStrength(false, false, false, false) < GameConst::$chiefStatMin) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
if ($randGeneral->getIntel(false, false, false, false) < GameConst::$chiefStatMin) {
|
if ($randGeneral->getIntel(false, false, false, false) < GameConst::$chiefStatMin) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -3829,7 +3812,8 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function calcCityDevelRate(array $city){
|
protected function calcCityDevelRate(array $city)
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'trust' => [$city['trust'] / 100, self::t통솔장],
|
'trust' => [$city['trust'] / 100, self::t통솔장],
|
||||||
'pop' => [$city['pop'] / $city['pop_max'], self::t통솔장],
|
'pop' => [$city['pop'] / $city['pop_max'], self::t통솔장],
|
||||||
@@ -3841,7 +3825,8 @@ class GeneralAI
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function choosePromotion(){
|
protected function choosePromotion()
|
||||||
|
{
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
|
|
||||||
$nation = $this->nation;
|
$nation = $this->nation;
|
||||||
@@ -3928,8 +3913,7 @@ class GeneralAI
|
|||||||
|
|
||||||
if (!key_exists($chiefLevel, $this->chiefGenerals) && !key_exists($chiefLevel, $nextChiefs)) {
|
if (!key_exists($chiefLevel, $this->chiefGenerals) && !key_exists($chiefLevel, $nextChiefs)) {
|
||||||
$newChiefProb = 1;
|
$newChiefProb = 1;
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$newChiefProb = Util::randF(0.1);
|
$newChiefProb = Util::randF(0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3951,11 +3935,9 @@ class GeneralAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($chiefLevel == 11) {
|
if ($chiefLevel == 11) {
|
||||||
}
|
} else if ($chiefLevel % 2 == 0 && $general->getStrength(false, false, false, false) < GameConst::$chiefStatMin) {
|
||||||
else if($chiefLevel % 2 == 0 && $general->getStrength(false, false, false, false) < GameConst::$chiefStatMin){
|
|
||||||
continue;
|
continue;
|
||||||
}
|
} else if ($chiefLevel % 2 == 1 && $general->getIntel(false, false, false, false) < GameConst::$chiefStatMin) {
|
||||||
else if($chiefLevel % 2 == 1 && $general->getIntel(false, false, false, false) < GameConst::$chiefStatMin){
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ class APIHelper
|
|||||||
[$lastModified, $etag] = $cacheResult;
|
[$lastModified, $etag] = $cacheResult;
|
||||||
|
|
||||||
if ($lastModified !== null) {
|
if ($lastModified !== null) {
|
||||||
header("Last-Modified: " . gmdate("D, d M Y H:i:s", TimeUtil::DateTimeToSeconds($lastModified, true)) . " GMT");
|
header("Last-Modified: " . gmdate("D, d M Y H:i:s", Util::toInt(TimeUtil::DateTimeToSeconds($lastModified, true))) . " GMT");
|
||||||
}
|
}
|
||||||
if ($etag !== null) {
|
if ($etag !== null) {
|
||||||
header("Etag: $etag");
|
header("Etag: $etag");
|
||||||
@@ -97,7 +97,7 @@ class APIHelper
|
|||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
Json::dieWithReason($e->getMessage());
|
Json::dieWithReason($e->getMessage());
|
||||||
} catch (mixed $e) {
|
} catch (mixed $e) {
|
||||||
Json::dieWithReason($e);
|
Json::dieWithReason(strval($e));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ class Json
|
|||||||
return json_decode($value);
|
return json_decode($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return never */
|
||||||
public static function die($value, $flag = self::NO_CACHE)
|
public static function die($value, $flag = self::NO_CACHE)
|
||||||
{
|
{
|
||||||
//NOTE: REST 형식에 맞게, ok(), fail()로 쪼개는게 낫지 않을까 생각해봄.
|
//NOTE: REST 형식에 맞게, ok(), fail()로 쪼개는게 낫지 않을까 생각해봄.
|
||||||
|
|||||||
+1
-1
@@ -618,7 +618,7 @@ class Util extends \utilphp\util
|
|||||||
*
|
*
|
||||||
* @param array $items 선택하고자 하는 배열
|
* @param array $items 선택하고자 하는 배열
|
||||||
*
|
*
|
||||||
* @return int|float|string|object 선택된 value값.
|
* @return int|float|string|array|object 선택된 value값.
|
||||||
*/
|
*/
|
||||||
public static function choiceRandom(array $items)
|
public static function choiceRandom(array $items)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user