From e5ff11dd2735c01fa759d0e2fb821199d837c034 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 8 Aug 2021 04:02:27 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9C=A0=EC=82=B0=20=ED=8F=AC=EC=9D=B8?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func.php | 6 +++++ hwe/func_gamerule.php | 30 +++++++++++++++++++--- hwe/func_tournament.php | 17 +++++++----- hwe/j_simulate_battle.php | 2 ++ hwe/process_war.php | 9 +++++++ hwe/sammo/Command/General/che_기술연구.php | 10 +++++++- hwe/sammo/Command/General/che_상업투자.php | 12 ++++++--- hwe/sammo/Command/General/che_정착장려.php | 12 +++++++-- hwe/sammo/Command/General/che_주민선정.php | 10 +++++++- hwe/sammo/General.php | 10 ++++++-- hwe/sammo/TurnExecutionHelper.php | 2 ++ 11 files changed, 101 insertions(+), 19 deletions(-) diff --git a/hwe/func.php b/hwe/func.php index 2da79878..34c7e19d 100644 --- a/hwe/func.php +++ b/hwe/func.php @@ -1724,6 +1724,12 @@ function deleteNation(General $lord, bool $applyDB):array // 전 장수 재야로 foreach($nationGeneralList as $general){ + $general->setAuxVar('max_belong', + max( + $general->getVar('belong'), + $general->getAuxVar('max_belong')??0 + ) + ); $general->setVar('belong', 0); $general->setVar('troop', 0); $general->setVar('officer_level', 0); diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index a67f2960..5f013902 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -624,9 +624,13 @@ function updateNationState() $targetKillTurn ); $nationGenList = General::createGeneralObjListFromDB($nationGenIDList, ['belong'], 2); + $chiefObj = null; $uniqueLotteryWeightList = []; foreach ($nationGenList as $nationGen) { + if ($nationGen->getVar('officer_level') == 12) { + $chiefObj = $nationGen; + } $trialCnt = count(GameConst::$allItems); foreach ($nationGen->getItems() as $item) { @@ -665,6 +669,8 @@ function updateNationState() giveRandomUniqueItem($winnerObj, '작위보상'); $winnerObj->applyDB($db); } + + $chiefObj->increaseInheritancePoint('unifier', 250 * $levelDiff); } } @@ -982,16 +988,21 @@ function checkEmperior() $nationLogger = new ActionLogger(0, $nationID, $admin['year'], $admin['month']); $nationLogger->pushNationalHistoryLog("{$nationName}{$josaYi} 전토를 통일"); + foreach(General::createGeneralObjListFromDB($db->queryFirstColumn('SELECT `no` FROM general WHERE npc = 0')) as $genObj){ + if($genObj->getNationID() == $nationID){ + if($genObj->getVar('officer_level') > 4){ + $genObj->increaseInheritancePoint('unifier', 2000); + }; + } + $genObj->mergeTotalInheritancePoint(); + } + $gameStor->isunited = 2; $gameStor->conlimit = $gameStor->conlimit * 100; foreach ($db->queryFirstColumn('SELECT no FROM general WHERE npc<2 AND age>=%i', GameConst::$minPushHallAge) as $hallGeneralNo) { CheckHall($hallGeneralNo); } - - foreach(General::createGeneralObjListFromDB($db->queryFirstColumn('SELECT `no` FROM general WHERE npc = 0')) as $genObj){ - $genObj->mergeTotalInheritancePoint(); - } [$totalPop, $totalMaxPop] = $db->queryFirstList('SELECT SUM(pop), SUM(pop_max) FROM city'); $pop = "{$totalPop} / {$totalMaxPop}"; @@ -1146,4 +1157,15 @@ function resetInheritanceUser(int $userID){ $totalPoint = Util::toInt($totalPoint); $inheritStor->resetValues(); $inheritStor->setValue('previous', [$totalPoint, null]); +} + +function updateMaxDomesticCritical(General $general, $score){ + $maxDomesticCritical = $general->getAuxVar('max_domestic_critical')??0; + $maxDomesticCritical += $score; + $general->setAuxVar('max_domestic_critical', $maxDomesticCritical); + + $oldMaxDomesticCritical = $general->getInheritancePoint('max_domestic_critical'); + if($maxDomesticCritical > $oldMaxDomesticCritical){ + $general->setInheritancePoint('max_domestic_critical', $maxDomesticCritical); + } } \ No newline at end of file diff --git a/hwe/func_tournament.php b/hwe/func_tournament.php index 5a94b016..5039aa47 100644 --- a/hwe/func_tournament.php +++ b/hwe/func_tournament.php @@ -689,7 +689,8 @@ function setGift($tnmt_type, $tnmt, $phase) { 'grp_no'=>$general['grp_no'], 'reward'=>$cost, 'msg'=>"16강 진출", - 'logger'=>$logger + 'logger'=>$logger, + 'inheritance_point'=>10, ]; } //8강자 명성 돈 @@ -723,6 +724,7 @@ function setGift($tnmt_type, $tnmt, $phase) { //포상 장수 이름, 금액 $resultHelper[$generalID]['reward'] += $cost; $resultHelper[$generalID]['msg'] = "4강 진출"; + General::createGeneralObjFromDB($generalID)->increaseInheritancePoint('tournament', 10); } //결승자 명성 돈 $cost = $admin['develcost'] * 6; @@ -739,6 +741,7 @@ function setGift($tnmt_type, $tnmt, $phase) { //포상 장수 이름, 금액 $resultHelper[$generalID]['reward'] += $cost; $resultHelper[$generalID]['msg'] = "준우승으"; + $resultHelper[$generalID]['inheritance_point'] = 50; if($general['lose'] > 0){ $runnerUp = $general; } @@ -761,6 +764,7 @@ function setGift($tnmt_type, $tnmt, $phase) { //포상 장수 이름, 금액 $resultHelper[$generalID]['reward'] += $cost; $resultHelper[$generalID]['msg'] = "우승으"; + $resultHelper[$generalID]['inheritance_point'] = 100; $winner = $general; } @@ -775,9 +779,6 @@ function setGift($tnmt_type, $tnmt, $phase) { $runnerUpLogger = $resultHelper[$runnerUp['no']]['logger']; $runnerUpLogger->pushGeneralHistoryLog("{$tp} 대회에서 준우승"); - - - $winnerRewardText = number_format($resultHelper[$winner['no']]['reward']); $runnerUpRewardText = number_format($resultHelper[$runnerUp['no']]['reward']); @@ -786,12 +787,16 @@ function setGift($tnmt_type, $tnmt, $phase) { $winnerLogger->pushGlobalHistoryLog("{$tp} 대회에서 {$winner['name']}{$josaYiWinner} 우승, {$runnerUp['name']}{$josaYiRunnerUp} 준우승을 차지하여 천하에 이름을 떨칩니다!", ActionLogger::EVENT_YEAR_MONTH); $winnerLogger->pushGlobalHistoryLog("{$tp} 대회의 우승자에게는 {$winnerRewardText}, 준우승자에겐 {$runnerUpRewardText}의 상금과 약간의 명성이 주어집니다!", ActionLogger::EVENT_YEAR_MONTH); - - foreach($resultHelper as $general){ + + $generalObjList = General::createGeneralObjListFromDB(array_keys($resultHelper)); + + foreach($resultHelper as $generalID=>$general){ $rewardText = number_format($general['reward']); /** @var ActionLogger */ $logger = $general['logger']; $logger->pushGeneralActionLog("{$tp} 대회의 {$general['msg']}로 {$rewardText}의 상금, 약간의 명성 획득!", ActionLogger::EVENT_PLAIN); + //TODO: 토너먼트의 다른 값이 모두 sql에 직접 입력하므로 기반을 바꿔야함. + $generalObjList[$generalID]->increaseInheritancePoint('tournament', $general['inheritance_point']); } //우승자 번호 diff --git a/hwe/j_simulate_battle.php b/hwe/j_simulate_battle.php index 89edb9cc..85acd68e 100644 --- a/hwe/j_simulate_battle.php +++ b/hwe/j_simulate_battle.php @@ -140,6 +140,7 @@ if(!$v->validate()){ 'reason'=>'[출병자]'.$v->errorStr() ]); } +$rawAttacker['owner'] = 0; $defenderList = []; foreach($rawDefenderList as $idx=>$rawDefenderGeneral){ @@ -152,6 +153,7 @@ foreach($rawDefenderList as $idx=>$rawDefenderGeneral){ 'reason'=>"[수비자{$idx}]".$v->errorStr() ]); } + $rawDefenderGeneral['owner'] = 0; $defenderList[] = new General($rawDefenderGeneral, extractRankVar($rawDefenderGeneral), $rawDefenderCity, $rawAttackerNation, $year, $month, true); } diff --git a/hwe/process_war.php b/hwe/process_war.php index 3eee843a..e2f8f05a 100644 --- a/hwe/process_war.php +++ b/hwe/process_war.php @@ -261,6 +261,15 @@ function processWar_NG( $attacker->addTrain(1); $defender->addTrain(1); + + $attackerCrewTypeCoef = $attacker->getCrewType()->getAttackCoef($defender->getCrewType()) * $defender->getCrewType()->getDefenceCoef($attacker->getCrewType()); + $defenderCrewTypeCoef = $defender->getCrewType()->getAttackCoef($attacker->getCrewType()) * $attacker->getCrewType()->getDefenceCoef($defender->getCrewType()); + if($attackerCrewTypeCoef > $defenderCrewTypeCoef && $attacker instanceof WarUnitGeneral){ + $attacker->getGeneral()->increaseInheritancePoint('snipe_combat', 1); + } + if($defenderCrewTypeCoef > $attackerCrewTypeCoef && $defender instanceof WarUnitGeneral){ + $defender->getGeneral()->increaseInheritancePoint('snipe_combat', 1); + } $attackerName = $attacker->getName(); $attackerCrewTypeName = $attacker->getCrewTypeName(); diff --git a/hwe/sammo/Command/General/che_기술연구.php b/hwe/sammo/Command/General/che_기술연구.php index 6c9f9a2a..9c8cb1db 100644 --- a/hwe/sammo/Command/General/che_기술연구.php +++ b/hwe/sammo/Command/General/che_기술연구.php @@ -14,7 +14,8 @@ use function sammo\{ getDomesticExpLevelBonus, CriticalRatioDomestic, CriticalScoreEx, - tryUniqueItemLottery + tryUniqueItemLottery, + updateMaxDomesticCritical }; use \sammo\Constraint\Constraint; @@ -93,6 +94,13 @@ class che_기술연구 extends che_상업투자{ $exp = $score * 0.7; $ded = $score * 1.0; + if($pick == 'success'){ + updateMaxDomesticCritical($general, $score); + } + else{ + $general->setAuxVar('max_domestic_critical', 0); + } + $scoreText = number_format($score, 0); $josaUl = JosaUtil::pick(static::$actionName, '을'); diff --git a/hwe/sammo/Command/General/che_상업투자.php b/hwe/sammo/Command/General/che_상업투자.php index 9643a3e2..6d6fe8d2 100644 --- a/hwe/sammo/Command/General/che_상업투자.php +++ b/hwe/sammo/Command/General/che_상업투자.php @@ -15,7 +15,8 @@ use function \sammo\{ getDomesticExpLevelBonus, CriticalRatioDomestic, CriticalScoreEx, - tryUniqueItemLottery + tryUniqueItemLottery, + updateMaxDomesticCritical }; use \sammo\Constraint\Constraint; @@ -165,6 +166,13 @@ class che_상업투자 extends Command\GeneralCommand{ $exp = $score * 0.7; $ded = $score * 1.0; + if($pick == 'success'){ + updateMaxDomesticCritical($general, $score); + } + else{ + $general->setAuxVar('max_domestic_critical', 0); + } + $scoreText = number_format($score, 0); $josaUl = JosaUtil::pick(static::$actionName, '을'); @@ -203,6 +211,4 @@ class che_상업투자 extends Command\GeneralCommand{ return true; } - - } \ No newline at end of file diff --git a/hwe/sammo/Command/General/che_정착장려.php b/hwe/sammo/Command/General/che_정착장려.php index 60f5ba7a..97d0b837 100644 --- a/hwe/sammo/Command/General/che_정착장려.php +++ b/hwe/sammo/Command/General/che_정착장려.php @@ -15,7 +15,8 @@ use function \sammo\{ getDomesticExpLevelBonus, CriticalRatioDomestic, CriticalScoreEx, - tryUniqueItemLottery + tryUniqueItemLottery, + updateMaxDomesticCritical }; use \sammo\Constraint\Constraint; @@ -150,6 +151,13 @@ class che_정착장려 extends Command\GeneralCommand{ $exp = $score * 0.7; $ded = $score * 1.0; + if($pick == 'success'){ + updateMaxDomesticCritical($general, $score); + } + else{ + $general->setAuxVar('max_domestic_critical', 0); + } + $score *= 10; $scoreText = number_format($score, 0); @@ -187,5 +195,5 @@ class che_정착장려 extends Command\GeneralCommand{ return true; } - + } \ No newline at end of file diff --git a/hwe/sammo/Command/General/che_주민선정.php b/hwe/sammo/Command/General/che_주민선정.php index 85335d76..eefc3440 100644 --- a/hwe/sammo/Command/General/che_주민선정.php +++ b/hwe/sammo/Command/General/che_주민선정.php @@ -15,7 +15,8 @@ use function \sammo\{ getDomesticExpLevelBonus, CriticalRatioDomestic, CriticalScoreEx, - tryUniqueItemLottery + tryUniqueItemLottery, + updateMaxDomesticCritical }; use \sammo\Constraint\Constraint; @@ -150,6 +151,13 @@ class che_주민선정 extends Command\GeneralCommand{ $exp = $score * 0.7; $ded = $score * 1.0; + if($pick == 'success'){ + updateMaxDomesticCritical($general, $score); + } + else{ + $general->setAuxVar('max_domestic_critical', 0); + } + $score /= 10; $scoreText = number_format($score, 1); diff --git a/hwe/sammo/General.php b/hwe/sammo/General.php index 342af4ce..2d1b15fc 100644 --- a/hwe/sammo/General.php +++ b/hwe/sammo/General.php @@ -53,9 +53,9 @@ class General implements iAction{ const INHERITANCE_KEY = [ 'previous'=>[true, 1, '기존 포인트'], 'lived_month'=>[true, 1, '생존'], - 'max_belong'=>[true, 10, '최대 임관년 수'], + 'max_belong'=>[false, 10, '최대 임관년 수'], 'max_domestic_critical'=>[true, 1, '최대 연속 내정 성공'], - 'snipe_combat'=>[true, 10, '병종 저격 횟수'], + 'snipe_combat'=>[true, 10, '병종 상성 우위 횟수'], 'combat'=>[['rank', 'warnum'], 5, '전투 횟수'], 'sabotage'=>[['rank', 'firenum'], 20, '계략 성공 횟수'], 'unifier'=>[true, 1, '천통 수뇌'], @@ -1227,6 +1227,12 @@ class General implements iAction{ return [$betWin * $multiplier * pow($betWinRate, 2), null]; }; break; + case 'max_belong': + $extractFn = function() use ($multiplier){ + $maxBelong = max($this->getVar('belong'), $this->getAuxVar('max_belong')??0); + return [$maxBelong * $multiplier, null]; + }; + break; default: throw new \InvalidArgumentException("{$key}는 유산 추출기를 보유하고 있지 않음"); } diff --git a/hwe/sammo/TurnExecutionHelper.php b/hwe/sammo/TurnExecutionHelper.php index 50d051d7..077e4ac2 100644 --- a/hwe/sammo/TurnExecutionHelper.php +++ b/hwe/sammo/TurnExecutionHelper.php @@ -257,6 +257,8 @@ class TurnExecutionHelper $autorunMode = false; $ai = null; + $general->increaseInheritancePoint('lived_month', 1); + $turnObj->preprocessCommand($env); $generalCommandObj = $general->getReservedTurn(0, $env);