From 305eb071a99c19e6696d6224beec16ee1607b8d8 Mon Sep 17 00:00:00 2001 From: hide_d Date: Mon, 20 Aug 2018 17:24:16 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=EC=A2=85=EB=A3=8C=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/process_war.ng.php | 84 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/hwe/process_war.ng.php b/hwe/process_war.ng.php index 6d0f6c14..66b127d9 100644 --- a/hwe/process_war.ng.php +++ b/hwe/process_war.ng.php @@ -2,6 +2,88 @@ namespace sammo; +function processWar_DB(array $rawAttacker, array $rawDefenderCity){ + + $db = DB::db(); + $rawAttackerCity = $db->queryFullColumns('SELECT * FROM city WHERE city = %i', $rawAttacker['city']); + $rawAttackerNation = $db->queryFullColumns('SELECT nation,`level`,`name`,capital,tech,`type` FROM nation WHERE nation = %i', $rawAttacker['nation']); + + if($rawDefenderCity['nation'] == 0){ + $rawDefenderNation = [ + 'nation'=>0, + 'capital'=>0, + 'level'=>0, + 'rice'=>2000, + 'type'=>0, + 'tech'=>0 + ]; + } + else{ + $rawDefenderNation = $db->queryFullColumns('SELECT nation,`level`,`name`,capital,tech,`type` FROM nation WHERE nation = %i', $rawDefenderCity['nation']); + } + + $gameStor = KVStorage::getStorage($db, 'game_env'); + [$year, $month, $cityRate] = $gameStor->getValuesAsArray('year', 'month', 'city_rate'); + + $attacker = new WarUnitGeneral($rawAttacker, $rawAttackerCity, $rawAttackerNation, true, $year, $month); + + $city = new WarUnitCity($rawDefenderCity, $rawAttackerNation, $year, $month, $cityRate); + + $defenderList = $db->query('SELECT no,name,turntime,personal,special2,crew,crewtype,atmos,train,intel,intel2,book,power,power2,weap,injury,leader,leader2,horse,item,explevel,level,rice,dex0,dex10,dex20,dex30,dex40 FROM general WHERE city=%i AND nation=%i AND nation!=0 and crew > 0 and rice>(crew/100) and ((train>=60 and atmos>=60 and mode=1) or (train>=80 and atmos>=80 and mode=2))'); + + usort($defenderList, function($lhs, $rhs){ + return -(extractBattleOrder($lhs) <=> extractBattleOrder($rhs)); + }); + + $iterDefender = new \ArrayIterator($defenderList); + + $getNextDefender = function(?WarUnit $prevDefender, bool $reqNext) use ($iterDefender) { + if($prevDefender !== null){ + $prevDefender->applyDB($db); + } + + if(!$reqNext){ + return null; + } + + if(!$iterDefender->valid()){ + return null; + } + + $retVal = $iterDefender->current(); + $iterDefender->next(); + return $retVal; + }; + + $totalDead = $attacker->getKilled() + $attacker->getDead(); + + //TODO: 국가 성향 반영 + $db->update('city', [ + 'dead' => $db->sqleval('dead + %i', $totalDead * 0.4) + ], 'city=%i', $rawAttackerCity['city']); + + $db->update('city', [ + 'dead' => $db->sqleval('dead + %i', $totalDead * 0.6) + ], 'city=%i', $rawDefenderCity['city']); + + //TODO: 국가에 기술력 반영 + + //TODO: 도시 점령(얘가 처리하는게 맞나?) + //TODO: 국가 정복(얘가 처리하는게 맞나?) +} + +function extractBattleOrder($general){ + return ( + $general['leader'] + + $general['power'] + + $general['intel'] + + $general['weap'] + + $general['horse'] + + $general['book'] + + $general['crew'] / 100 + ); +} + function processWar_NG( WarUnitGeneral $attacker, callable $getNextDefender, @@ -15,6 +97,8 @@ function processWar_NG( $attacker->useBattleInitItem(); + $date = substr($attacker->getVar('turntime'),11,5); + $attackerNationUpdate = []; $defenderNationUpdate = [];