game: 시간이 지남에 따라 성벽 강화
- 183년 기준 동일. - 220년 기준 40% 전투력 상승
This commit is contained in:
@@ -40,8 +40,6 @@ $admin = getAdmin();
|
|||||||
<tr>
|
<tr>
|
||||||
<td width=110 align=right>시작시간변경</td>
|
<td width=110 align=right>시작시간변경</td>
|
||||||
<td width=285><input type=text size=20 maxlength=20 style=color:white;background-color:black;text-align:right; name=starttime value='<?=substr($admin['starttime'], 0, 19)?>'><input type=submit name=btn value=변경1></td>
|
<td width=285><input type=text size=20 maxlength=20 style=color:white;background-color:black;text-align:right; name=starttime value='<?=substr($admin['starttime'], 0, 19)?>'><input type=submit name=btn value=변경1></td>
|
||||||
<td width=110 align=right>현재도시훈사</td>
|
|
||||||
<td width=285><?=$admin['city_rate']?></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width=110 align=right>최대 장수</td>
|
<td width=110 align=right>최대 장수</td>
|
||||||
|
|||||||
@@ -285,13 +285,8 @@ function preUpdateMonthly()
|
|||||||
'rate_tmp' => $db->sqleval('rate')
|
'rate_tmp' => $db->sqleval('rate')
|
||||||
], true);
|
], true);
|
||||||
|
|
||||||
//도시훈사 180년 60, 220년 87, 240년 100
|
|
||||||
$rate = Util::round(($admin['year'] - $admin['startyear']) / 1.5) + 60;
|
|
||||||
if ($rate > 100) $rate = 100;
|
|
||||||
|
|
||||||
// 20 ~ 140원
|
// 20 ~ 140원
|
||||||
$develcost = ($admin['year'] - $admin['startyear'] + 10) * 2;
|
$develcost = ($admin['year'] - $admin['startyear'] + 10) * 2;
|
||||||
$gameStor->city_rate = $rate;
|
|
||||||
$gameStor->develcost = $develcost;
|
$gameStor->develcost = $develcost;
|
||||||
|
|
||||||
//매달 사망자 수입 결산
|
//매달 사망자 수입 결산
|
||||||
|
|||||||
@@ -281,7 +281,6 @@ unset($defenderList);
|
|||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$startYear = $gameStor->startyear;
|
$startYear = $gameStor->startyear;
|
||||||
$cityRate = Util::round(($year - $startYear) / 1.5) + 60;
|
|
||||||
|
|
||||||
function extractRankVar(array $rawVal):Map{
|
function extractRankVar(array $rawVal):Map{
|
||||||
$rankVars = new Map;
|
$rankVars = new Map;
|
||||||
@@ -298,7 +297,7 @@ function extractRankVar(array $rawVal):Map{
|
|||||||
function simulateBattle(
|
function simulateBattle(
|
||||||
$rawAttacker, $rawAttackerCity, $rawAttackerNation,
|
$rawAttacker, $rawAttackerCity, $rawAttackerNation,
|
||||||
$rawDefenderList, $rawDefenderCity, $rawDefenderNation,
|
$rawDefenderList, $rawDefenderCity, $rawDefenderNation,
|
||||||
$startYear, $year, $month, $cityRate
|
$startYear, $year, $month
|
||||||
){
|
){
|
||||||
|
|
||||||
$warSeed = bin2hex(random_bytes(16));
|
$warSeed = bin2hex(random_bytes(16));
|
||||||
@@ -310,7 +309,7 @@ function simulateBattle(
|
|||||||
$rawAttackerNation,
|
$rawAttackerNation,
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
$city = new WarUnitCity($warRng, $rawDefenderCity, $rawDefenderNation, $year, $month, $cityRate);
|
$city = new WarUnitCity($warRng, $rawDefenderCity, $rawDefenderNation, $year, $month, $startYear);
|
||||||
|
|
||||||
$iterDefender = new \ArrayIterator($rawDefenderList);
|
$iterDefender = new \ArrayIterator($rawDefenderList);
|
||||||
$iterDefender->rewind();
|
$iterDefender->rewind();
|
||||||
@@ -367,7 +366,7 @@ function simulateBattle(
|
|||||||
$rice = $city->getKilled() / 100 * 0.8;
|
$rice = $city->getKilled() / 100 * 0.8;
|
||||||
$rice *= $city->getCrewType()->rice;
|
$rice *= $city->getCrewType()->rice;
|
||||||
$rice *= getTechCost($rawDefenderNation['tech']);
|
$rice *= getTechCost($rawDefenderNation['tech']);
|
||||||
$rice *= $cityRate / 100 - 0.2;
|
$rice *= $city->getCityTrainAtmos() / 100 - 0.2;
|
||||||
Util::setRound($rice);
|
Util::setRound($rice);
|
||||||
|
|
||||||
$defenderRice += $rice;
|
$defenderRice += $rice;
|
||||||
@@ -406,7 +405,7 @@ foreach(Util::range($repeatCnt) as $repeatIdx){
|
|||||||
[$attacker, $city, $battleResult, $conquerCity, $attackerRice, $defenderRice] = simulateBattle(
|
[$attacker, $city, $battleResult, $conquerCity, $attackerRice, $defenderRice] = simulateBattle(
|
||||||
$rawAttacker, $rawAttackerCity, $rawAttackerNation,
|
$rawAttacker, $rawAttackerCity, $rawAttackerNation,
|
||||||
$rawDefenderList, $rawDefenderCity, $rawDefenderNation,
|
$rawDefenderList, $rawDefenderCity, $rawDefenderNation,
|
||||||
$startYear, $year, $month, $cityRate
|
$startYear, $year, $month
|
||||||
);
|
);
|
||||||
$lastWarLog = Util::mapWithKey(function($key, $values){
|
$lastWarLog = Util::mapWithKey(function($key, $values){
|
||||||
return ConvertLog(join('<br>', $values));
|
return ConvertLog(join('<br>', $values));
|
||||||
|
|||||||
+3
-4
@@ -29,11 +29,11 @@ function processWar(string $warSeed, General $attackerGeneral, array $rawAttacke
|
|||||||
}
|
}
|
||||||
|
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
[$startYear, $year, $month, $cityRate, $joinMode] = $gameStor->getValuesAsArray(['startyear', 'year', 'month', 'city_rate', 'join_mode']);
|
[$startYear, $year, $month, $joinMode] = $gameStor->getValuesAsArray(['startyear', 'year', 'month', 'join_mode']);
|
||||||
|
|
||||||
$attacker = new WarUnitGeneral($rng, $attackerGeneral,$rawAttackerNation, true);
|
$attacker = new WarUnitGeneral($rng, $attackerGeneral,$rawAttackerNation, true);
|
||||||
|
|
||||||
$city = new WarUnitCity($rng, $rawDefenderCity, $rawDefenderNation, $year, $month, $cityRate);
|
$city = new WarUnitCity($rng, $rawDefenderCity, $rawDefenderNation, $year, $month, $startYear);
|
||||||
|
|
||||||
$defenderIDList = $db->queryFirstColumn('SELECT no FROM general WHERE nation=%i AND city=%i AND nation!=0 and crew > 0 and rice>(crew/100) and train>=defence_train and atmos>=defence_train', $city->getVar('nation'), $city->getVar('city'));
|
$defenderIDList = $db->queryFirstColumn('SELECT no FROM general WHERE nation=%i AND city=%i AND nation!=0 and crew > 0 and rice>(crew/100) and train>=defence_train and atmos>=defence_train', $city->getVar('nation'), $city->getVar('city'));
|
||||||
$defenderList = General::createGeneralObjListFromDB($defenderIDList, null, 2);
|
$defenderList = General::createGeneralObjListFromDB($defenderIDList, null, 2);
|
||||||
@@ -90,7 +90,7 @@ function processWar(string $warSeed, General $attackerGeneral, array $rawAttacke
|
|||||||
$rice = $city->getKilled() / 100 * 0.8;
|
$rice = $city->getKilled() / 100 * 0.8;
|
||||||
$rice *= $city->getCrewType()->rice;
|
$rice *= $city->getCrewType()->rice;
|
||||||
$rice *= getTechCost($rawDefenderNation['tech']);
|
$rice *= getTechCost($rawDefenderNation['tech']);
|
||||||
$rice *= $cityRate / 100 - 0.2;
|
$rice *= $city->getCityTrainAtmos() / 100 - 0.2;
|
||||||
Util::setRound($rice);
|
Util::setRound($rice);
|
||||||
|
|
||||||
$updateDefenderNation['rice'] = max(0, $rawDefenderNation['rice'] - $rice);
|
$updateDefenderNation['rice'] = max(0, $rawDefenderNation['rice'] - $rice);
|
||||||
@@ -175,7 +175,6 @@ function processWar(string $warSeed, General $attackerGeneral, array $rawAttacke
|
|||||||
'startyear' => $startYear,
|
'startyear' => $startYear,
|
||||||
'year' => $year,
|
'year' => $year,
|
||||||
'month' => $month,
|
'month' => $month,
|
||||||
'city_rate' => $cityRate,
|
|
||||||
'join_mode' => $joinMode,
|
'join_mode' => $joinMode,
|
||||||
], $attacker->getGeneral(), $city->getRaw());
|
], $attacker->getGeneral(), $city->getRaw());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ class WarUnitCity extends WarUnit{
|
|||||||
|
|
||||||
protected $hp;
|
protected $hp;
|
||||||
|
|
||||||
protected $cityRate;
|
protected $cityTrainAtmos;
|
||||||
|
|
||||||
function __construct(public readonly RandUtil $rng, $raw, $rawNation, int $year, int $month, $cityRate){
|
function __construct(public readonly RandUtil $rng, $raw, $rawNation, int $year, int $month, int $startYear){
|
||||||
$general = new DummyGeneral(false);
|
$general = new DummyGeneral(false);
|
||||||
$general->setVar('city', $raw['city']);
|
$general->setVar('city', $raw['city']);
|
||||||
$general->setVar('nation', $raw['nation']);
|
$general->setVar('nation', $raw['nation']);
|
||||||
@@ -18,7 +18,9 @@ class WarUnitCity extends WarUnit{
|
|||||||
$this->rawNation = $rawNation;
|
$this->rawNation = $rawNation;
|
||||||
|
|
||||||
$this->isAttacker = false;
|
$this->isAttacker = false;
|
||||||
$this->cityRate = $cityRate;
|
|
||||||
|
//도시 훈사. 181년 60, 201년 80, 221년 100, 231년 110(최대)
|
||||||
|
$this->cityTrainAtmos = Util::clamp($year - $startYear + 59, 60, 110);
|
||||||
|
|
||||||
$this->logger = $general->getLogger();
|
$this->logger = $general->getLogger();
|
||||||
$this->crewType = GameUnitConst::byID(GameUnitConst::CREWTYPE_CASTLE);
|
$this->crewType = GameUnitConst::byID(GameUnitConst::CREWTYPE_CASTLE);
|
||||||
@@ -34,6 +36,10 @@ class WarUnitCity extends WarUnit{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getCityTrainAtmos(): int{
|
||||||
|
return $this->cityTrainAtmos;
|
||||||
|
}
|
||||||
|
|
||||||
function getName():string{
|
function getName():string{
|
||||||
return $this->getVar('name');
|
return $this->getVar('name');
|
||||||
}
|
}
|
||||||
@@ -57,11 +63,11 @@ class WarUnitCity extends WarUnit{
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getComputedTrain(){
|
function getComputedTrain(){
|
||||||
return $this->cityRate + $this->trainBonus;
|
return $this->cityTrainAtmos + $this->trainBonus;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getComputedAtmos(){
|
function getComputedAtmos(){
|
||||||
return $this->cityRate + $this->atmosBonus;
|
return $this->cityTrainAtmos + $this->atmosBonus;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getHP():int{
|
function getHP():int{
|
||||||
@@ -69,7 +75,7 @@ class WarUnitCity extends WarUnit{
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getDex(GameUnitDetail $crewType){
|
function getDex(GameUnitDetail $crewType){
|
||||||
return ($this->cityRate - 60) * 7200;
|
return ($this->cityTrainAtmos - 60) * 7200;
|
||||||
}
|
}
|
||||||
|
|
||||||
function decreaseHP(int $damage):int{
|
function decreaseHP(int $damage):int{
|
||||||
|
|||||||
Reference in New Issue
Block a user