전투 엔진 버그 1차 수정

This commit is contained in:
2018-08-21 00:53:00 +09:00
parent 513124161e
commit d0ca46cfde
4 changed files with 27 additions and 26 deletions
+1 -1
View File
@@ -471,7 +471,7 @@ function processCommand($no) {
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get(); $connect=$db->get();
$query = "select npc,no,name,picture,imgsvr,nation,nations,city,troop,injury,affinity,leader,leader2,power,power2,intel,intel2,experience,dedication,level,gold,rice,crew,crewtype,train,atmos,weap,book,horse,item,turntime,makenation,makelimit,killturn,block,dedlevel,explevel,age,belong,personal,special,special2,term,turn0,dex0,dex10,dex20,dex30,dex40 from general where no='$no'"; $query = "select npc,no,name,picture,imgsvr,nation,nations,city,troop,injury,affinity,leader,leader2,power,power2,intel,intel2,experience,dedication,level,gold,rice,crew,crewtype,train,atmos,weap,book,horse,item,turntime,makenation,makelimit,killturn,block,dedlevel,explevel,age,belong,personal,special,special2,term,turn0,dex0,dex10,dex20,dex30,dex40,warnum,killnum,deathnum,killcrew,deathcrew,recwar from general where no='$no'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result); $general = MYDB_fetch_array($result);
+20 -20
View File
@@ -5,12 +5,12 @@ namespace sammo;
function processWar(array $rawAttacker, array $rawDefenderCity){ function processWar(array $rawAttacker, array $rawDefenderCity){
$db = DB::db(); $db = DB::db();
$rawAttackerCity = $db->queryFullColumns('SELECT * FROM city WHERE city = %i', $rawAttacker['city']); $rawAttackerCity = $db->queryFirstRow('SELECT * FROM city WHERE city = %i', $rawAttacker['city']);
$attackerNationID = $rawAttacker['nation']; $attackerNationID = $rawAttacker['nation'];
$defenderNationID = $rawDefenderCity['nation']; $defenderNationID = $rawDefenderCity['nation'];
$rawAttackerNation = $db->queryFullColumns('SELECT nation,`level`,`name`,capital,totaltech,gennum,tech,`type`,gold,rice FROM nation WHERE nation = %i', $attackerNationID); $rawAttackerNation = $db->queryFirstRow('SELECT nation,`level`,`name`,capital,totaltech,gennum,tech,`type`,gold,rice FROM nation WHERE nation = %i', $attackerNationID);
if($defenderNationID == 0){ if($defenderNationID == 0){
$rawDefenderNation = [ $rawDefenderNation = [
@@ -27,17 +27,17 @@ function processWar(array $rawAttacker, array $rawDefenderCity){
]; ];
} }
else{ else{
$rawDefenderNation = $db->queryFullColumns('SELECT nation,`level`,`name`,capital,totaltech,gennum,tech,`type`,gold,rice FROM nation WHERE nation = %i', $defenderNationID); $rawDefenderNation = $db->queryFirstRow('SELECT nation,`level`,`name`,capital,totaltech,gennum,tech,`type`,gold,rice FROM nation WHERE nation = %i', $defenderNationID);
} }
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
[$startYear, $year, $month, $cityRate] = $gameStor->getValuesAsArray('startyear', 'year', 'month', 'city_rate'); [$startYear, $year, $month, $cityRate] = $gameStor->getValuesAsArray(['startyear', 'year', 'month', 'city_rate']);
$attacker = new WarUnitGeneral($rawAttacker, $rawAttackerCity, $rawAttackerNation, true, $year, $month); $attacker = new WarUnitGeneral($rawAttacker, $rawAttackerCity, $rawAttackerNation, true, $year, $month);
$city = new WarUnitCity($rawDefenderCity, $rawAttackerNation, $year, $month, $cityRate); $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))'); $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,warnum,killnum,deathnum,killcrew,deathcrew,recwar 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))', $city->getVar('nation'), $city->getVar('city'));
usort($defenderList, function($lhs, $rhs){ usort($defenderList, function($lhs, $rhs){
return -(extractBattleOrder($lhs) <=> extractBattleOrder($rhs)); return -(extractBattleOrder($lhs) <=> extractBattleOrder($rhs));
@@ -45,7 +45,7 @@ function processWar(array $rawAttacker, array $rawDefenderCity){
$iterDefender = new \ArrayIterator($defenderList); $iterDefender = new \ArrayIterator($defenderList);
$getNextDefender = function(?WarUnit $prevDefender, bool $reqNext) use ($iterDefender) { $getNextDefender = function(?WarUnit $prevDefender, bool $reqNext) use ($iterDefender, $db) {
if($prevDefender !== null){ if($prevDefender !== null){
$prevDefender->applyDB($db); $prevDefender->applyDB($db);
} }
@@ -111,8 +111,8 @@ function processWar(array $rawAttacker, array $rawDefenderCity){
$attackerTotalTech = $rawAttackerNation['totaltech'] + $attackerIncTech; $attackerTotalTech = $rawAttackerNation['totaltech'] + $attackerIncTech;
$defenderTotalTech = $rawDefenderNation['totaltech'] + $defenderIncTech; $defenderTotalTech = $rawDefenderNation['totaltech'] + $defenderIncTech;
$updateAttackerNation['totaltech'] = Utill::round($attackerTotalTech); $updateAttackerNation['totaltech'] = Util::round($attackerTotalTech);
$updateDefenderNation['totaltech'] = Utill::round($defenderTotalTech); $updateDefenderNation['totaltech'] = Util::round($defenderTotalTech);
$updateAttackerNation['tech'] = Util::round($attackerTotalTech / max(GameConst::$initialNationGenLimit, $rawAttackerNation['gennum'])); $updateAttackerNation['tech'] = Util::round($attackerTotalTech / max(GameConst::$initialNationGenLimit, $rawAttackerNation['gennum']));
$updateDefenderNation['tech'] = Util::round($defenderTotalTech / max(GameConst::$initialNationGenLimit, $rawDefenderNation['gennum'])); $updateDefenderNation['tech'] = Util::round($defenderTotalTech / max(GameConst::$initialNationGenLimit, $rawDefenderNation['gennum']));
@@ -133,11 +133,11 @@ function processWar(array $rawAttacker, array $rawDefenderCity){
} }
//XXX: 새 도시점령 코드 작성하기 전까지 유지 //XXX: 새 도시점령 코드 작성하기 전까지 유지
$rawAttackerCity = $db->queryFullColumns('SELECT * FROM city WHERE city = %i', $rawAttacker['city']); $rawAttackerCity = $db->queryFirstRow('SELECT * FROM city WHERE city = %i', $rawAttacker['city']);
$rawAttackerNation = $db->queryFullColumns('SELECT nation,`level`,`name`,capital,tech,`type` FROM nation WHERE nation = %i', $attackerNationID); $rawAttackerNation = $db->queryFirstRow('SELECT nation,`level`,`name`,capital,tech,`type` FROM nation WHERE nation = %i', $attackerNationID);
if($defenderNationID !== 0){ if($defenderNationID !== 0){
$rawDefenderNation = $db->queryFullColumns('SELECT nation,`level`,`name`,capital,tech,`type` FROM nation WHERE nation = %i', $defenderNationID); $rawDefenderNation = $db->queryFirstRow('SELECT nation,`level`,`name`,capital,tech,`type` FROM nation WHERE nation = %i', $defenderNationID);
} }
ConquerCity([ ConquerCity([
@@ -165,7 +165,7 @@ function processWar_NG(
callable $getNextDefender, callable $getNextDefender,
WarUnitCity $city, WarUnitCity $city,
int $relYear int $relYear
):array{ ):bool{
$templates = new \League\Plates\Engine(__dir__.'/templates'); $templates = new \League\Plates\Engine(__dir__.'/templates');
$logger = $attacker->getLogger(); $logger = $attacker->getLogger();
@@ -180,11 +180,11 @@ function processWar_NG(
$defender = ($getNextDefender)(null, true); $defender = ($getNextDefender)(null, true);
$conquerCity = false; $conquerCity = false;
$josaRo = JosaUtil::pick($city->name, '로'); $josaRo = JosaUtil::pick($city->getName(), '로');
$josaYi = JosaUtil::pick($attacker->name, '이'); $josaYi = JosaUtil::pick($attacker->getName(), '이');
$logger->pushGlobalActionLog("<D><b>{$attacker->getNationVar('name')}</b></>의 <Y>{$attacker->name}</>{$josaYi} <G><b>{$city->name}</b></>{$josaRo} 진격합니다."); $logger->pushGlobalActionLog("<D><b>{$attacker->getNationVar('name')}</b></>의 <Y>{$attacker->getName()}</>{$josaYi} <G><b>{$city->getName()}</b></>{$josaRo} 진격합니다.");
$logger->pushGeneralActionLog("<G><b>{$city->name}</b></>{$josaRo} <M>진격</>합니다. <1>$date</>"); $logger->pushGeneralActionLog("<G><b>{$city->getName()}</b></>{$josaRo} <M>진격</>합니다. <1>$date</>");
$battleBegin = false; $battleBegin = false;
@@ -227,10 +227,10 @@ function processWar_NG(
$logger->pushGlobalActionLog("<Y>{$attacker->getName()}</>의 {$attacker->getCrewTypeName()}{$josaWa} <Y>{$defender->getName()}</>의 {$defender->getCrewTypeName()}{$josaYi} 대결합니다."); $logger->pushGlobalActionLog("<Y>{$attacker->getName()}</>의 {$attacker->getCrewTypeName()}{$josaWa} <Y>{$defender->getName()}</>의 {$defender->getCrewTypeName()}{$josaYi} 대결합니다.");
$josaRo = JosaUtil::pick($attacker->getCrewTypeName(), '로'); $josaRo = JosaUtil::pick($attacker->getCrewTypeName(), '로');
$josaUl = JosaUtil::pick($defender->getCrewTypeName(), '을'); $josaUl = JosaUtil::pick($defender->getCrewTypeName(), '을');
$attacker->getLogger()->pushGeneralActionLog("{$attacker->getCrewTypeName()}{$josaRo} <Y>{$defender->name}</>의 {$defender->getCrewTypeName()}{$josaUl} <M>공격</>합니다."); $attacker->getLogger()->pushGeneralActionLog("{$attacker->getCrewTypeName()}{$josaRo} <Y>{$defender->getName()}</>의 {$defender->getCrewTypeName()}{$josaUl} <M>공격</>합니다.");
$josaRo = JosaUtil::pick($defender->getCrewTypeName(), '로'); $josaRo = JosaUtil::pick($defender->getCrewTypeName(), '로');
$josaUl = JosaUtil::pick($attacker->getCrewTypeName(), '을'); $josaUl = JosaUtil::pick($attacker->getCrewTypeName(), '을');
$defender->getLogger()->pushGeneralActionLog("{$defender->getCrewTypeName()}{$josaRo} <Y>{$attacker->name}</>의 {$attacker->getCrewTypeName()}{$josaUl} <M>수비</>합니다."); $defender->getLogger()->pushGeneralActionLog("{$defender->getCrewTypeName()}{$josaRo} <Y>{$attacker->getName()}</>의 {$attacker->getCrewTypeName()}{$josaUl} <M>수비</>합니다.");
} }
else{ else{
$josaYi = JosaUtil::pick($attacker->getName(), '이'); $josaYi = JosaUtil::pick($attacker->getName(), '이');
@@ -268,7 +268,7 @@ function processWar_NG(
$defender->checkPostActiveSkill(); $defender->checkPostActiveSkill();
//NOTE: 반계류 등의 스킬을 post에서 반영 //NOTE: 반계류 등의 스킬을 post에서 반영
$activeSkillIterator = new AppendIterator(); $activeSkillIterator = new \AppendIterator();
$activeSkillIterator->append($attacker->applyActiveSkill()); $activeSkillIterator->append($attacker->applyActiveSkill());
$activeSkillIterator->append($defender->applyActiveSkill()); $activeSkillIterator->append($defender->applyActiveSkill());
foreach($activeSkillIterator as $b){ foreach($activeSkillIterator as $b){
@@ -393,7 +393,7 @@ function processWar_NG(
return false; return false;
} }
if($currPhase == $maxPhase){ if($currPhase == $attacker->getMaxPhase()){
//마지막 페이즈의 전투 마무리 //마지막 페이즈의 전투 마무리
$attacker->tryWound(); $attacker->tryWound();
$defender->tryWound(); $defender->tryWound();
+4 -3
View File
@@ -100,7 +100,7 @@ class WarUnit{
$this->updateVar($key, $targetValue); $this->updateVar($key, $targetValue);
} }
function getNationVar(string $key):array{ function getNationVar(string $key){
return $this->rawNation[$key]; return $this->rawNation[$key];
} }
@@ -311,13 +311,13 @@ class WarUnit{
return $this->activatedSkill[$skillName] ?? false; return $this->activatedSkill[$skillName] ?? false;
} }
function activateSkill(... $skillNames):bool{ function activateSkill(... $skillNames){
foreach($skillNames as $skillName){ foreach($skillNames as $skillName){
$this->activatedSkill[$skillName] = true; $this->activatedSkill[$skillName] = true;
} }
} }
function deactivateSkill(... $skillNames):bool{ function deactivateSkill(... $skillNames){
foreach($skillNames as $skillName){ foreach($skillNames as $skillName){
$this->activatedSkill[$skillName] = false; $this->activatedSkill[$skillName] = false;
} }
@@ -336,6 +336,7 @@ class WarUnit{
} }
function applyActiveSkill(){ function applyActiveSkill(){
yield true;
} }
function getHP():int{ function getHP():int{
+2 -2
View File
@@ -49,7 +49,7 @@ class WarUnitGeneral extends WarUnit{
return $this->getVar('name'); return $this->getVar('name');
} }
function getCityVar(string $key):array{ function getCityVar(string $key){
return $this->rawCity[$key]; return $this->rawCity[$key];
} }
@@ -88,7 +88,7 @@ class WarUnitGeneral extends WarUnit{
if($this->getSpecialWar() == 60){ if($this->getSpecialWar() == 60){
$phase += 1; $phase += 1;
} }
return $phase + $bonusPhase; return $phase + $this->bonusPhase;
} }
function addTrain(int $train){ function addTrain(int $train){