From e83b182e4d12037e833c0984afa4e7be40e8bb4b Mon Sep 17 00:00:00 2001 From: Hide_D Date: Thu, 23 Aug 2018 01:46:45 +0900 Subject: [PATCH] =?UTF-8?q?NPC=EA=B0=80=20=EA=B8=B0=EB=B3=B8=20=EB=B3=91?= =?UTF-8?q?=EC=A2=85=EB=A7=8C=20=EB=BD=91=EB=8A=94=20=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_npc.php | 55 +++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/hwe/func_npc.php b/hwe/func_npc.php index d3c53d3e..c117bfba 100644 --- a/hwe/func_npc.php +++ b/hwe/func_npc.php @@ -80,12 +80,21 @@ function SetDevelop($genType, $no, $city, $tech) { return; } -function SetCrew($no, $personal, $gold, $leader, $genType, $tech, $region, $city, $dex0, $dex10, $dex20, $dex30, $dex40) { +function SetCrew($no, $nationID, $personal, $gold, $leader, $genType, $tech, $dex0, $dex10, $dex20, $dex30, $dex40) { $db = DB::db(); $connect=$db->get(); + $cities = []; + $regions = []; + + foreach($db->queryAllLists('SELECT city, region FROM city WHERE nation = %i', $nationID) as [$cityID, $regionID]){ + $cities[$cityID] = true; + $regions[$regionID] = true; + } + $gameStor = KVStorage::getStorage($db, 'game_env'); [$startyear, $year] = $gameStor->getValuesAsArray(['startyear', 'year']); + $relYear = Util::valueFit($year-$startyear, 0); $type = 0; switch($genType) { @@ -112,26 +121,26 @@ function SetCrew($no, $personal, $gold, $leader, $genType, $tech, $region, $city - $type = GameUnitConst::DEFAULT_CREWTYPE; + $types = []; switch($sel) { case 0: foreach(GameUnitConst::byType(GameUnitConst::T_FOOTMAN) as $crewtype){ - if($crewtype->isValid([$city], [$region], $year-$startyear, $tech)){ - $type = $crewtype->id; + if($crewtype->isValid($cities, $regions, $relYear, $tech)){ + $types[] = $crewtype->id; } } break; case 1: foreach(GameUnitConst::byType(GameUnitConst::T_ARCHER) as $crewtype){ - if($crewtype->isValid([$city], [$region], $year-$startyear, $tech)){ - $type = $crewtype->id; + if($crewtype->isValid($cities, $regions, $relYear, $tech)){ + $types[] = $crewtype->id; } } break; case 2: foreach(GameUnitConst::byType(GameUnitConst::T_CAVALRY) as $crewtype){ - if($crewtype->isValid([$city], [$region], $year-$startyear, $tech)){ - $type = $crewtype->id; + if($crewtype->isValid($cities, $regions, $relYear, $tech)){ + $types[] = $crewtype->id; } } break; @@ -140,13 +149,22 @@ function SetCrew($no, $personal, $gold, $leader, $genType, $tech, $region, $city case 1: //지장 case 3: //지내정장 foreach(GameUnitConst::byType(GameUnitConst::T_WIZARD) as $crewtype){ - if($crewtype->isValid([$city], [$region], $year-$startyear, $tech)){ - $type = $crewtype->id; + if($crewtype->isValid($cities, $regions, $relYear, $tech)){ + $types[] = $crewtype->id; } } break; } + if($types){ + $type = Util::choiceRandom($types); + } + else{ + $type = GameUnitConst::DEFAULT_CREWTYPE; + } + + + $gold -= 200; // 사기비용 $cost = getCost($type) * getTechCost($tech); @@ -830,22 +848,7 @@ function processAI($no) { SetDevelop($genType, $general['no'], $general['city'], $nation['tech']); return; case EncodeCommand(0, 0, 0, 11): //징병 - $query = "select region from city where nation='{$general['nation']}' order by rand() limit 0,1"; - $result = MYDB_query($query, $connect) or Error("processAI16 ".MYDB_error($connect),""); - $selRegion = MYDB_fetch_array($result); - - $selCity['city'] = 0; - // 90% 확률로 이민족 또는 특성병 - if(rand()%100 < 90) { - $query = "select city from city where nation='{$general['nation']}' and (level='4' or level='8') order by rand() limit 0,1"; - $result = MYDB_query($query, $connect) or Error("processAI16 ".MYDB_error($connect),""); - $selCity = MYDB_fetch_array($result); - } - // 특병 없으면 원래대로 - if($selCity['city'] == 0) { - $selCity['city'] = $general['city']; - } - SetCrew($general['no'], $general['personal'], $general['gold'], $general['leader'], $genType, $nation['tech'], $selRegion['region'], $selCity['city'], $general['dex0'], $general['dex10'], $general['dex20'], $general['dex30'], $general['dex40']); + SetCrew($general['no'], $general['nation'], $general['personal'], $general['gold'], $general['leader'], $genType, $nation['tech'], $general['dex0'], $general['dex10'], $general['dex20'], $general['dex30'], $general['dex40']); return; default: $query = "update general set turn0='$command' where no='{$general['no']}'";