diff --git a/che_close/func_process.php b/che_close/func_process.php index 4b1a0f6..43df45e 100644 --- a/che_close/func_process.php +++ b/che_close/func_process.php @@ -1,6 +1,114 @@ - 성공 확률, 'fail' => 실패 확률) + */ +function CriticalRatioDomestic(&$general, $type) { + $leader = getGeneralLeadership($general, false, true, false, false); + $power = getGeneralPower($general, false, true, false, false); + $power = getGeneralIntel($general, false, true, false, false); -function CriticalRatio($leader, $power, $intel, $type=0) { $avg = ($leader+$power+$intel) / 3; // 707010장수 18/21% 706515장수 16/27% 706020장수 14/33% xx50xx장수 10/50% switch($type) { @@ -20,6 +128,26 @@ function CriticalRatio($leader, $power, $intel, $type=0) { return $r; } +/** + * 수뇌직 통솔 보너스 계산 + * + * @param array &$general 장수 정보. 'lbonus' 값에 통솔 보너스가 입력 됨 + * @param int $nationLevel 국가 등급 + * + * @return int 계산된 $general['lbonus'] 값 + */ +function setLeadershipBonus(&$general, $nationLevel){ + if($general['level'] == 12) { + $lbonus = $nationLevel * 2; + } elseif($general['level'] >= 5) { + $lbonus = $nationLevel; + } else { + $lbonus = 0; + } + $general['lbonus'] = $lbonus; + return $lbonus; +} + function CriticalScore($score, $type) { switch($type) { case 0: @@ -51,13 +179,7 @@ function process_1($connect, &$general, $type) { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $nation = MYDB_fetch_array($result); - if($general[level] == 12) { - $lbonus = $nation[level] * 2; - } elseif($general[level] >= 5) { - $lbonus = $nation[level]; - } else { - $lbonus = 0; - } + $lbonus = setLeadershipBonus($general, $nation['level']); if($general[level] == 0) { $log[count($log)] = "●{$admin[month]}월:재야입니다. $dtype 실패. <1>$date"; @@ -76,7 +198,7 @@ function process_1($connect, &$general, $type) { if($city[rate] < $_develrate) { $city[rate] = $_develrate; } $rate = $city[rate] / 100; - $score = ($general[intel] * (100 - $general[injury])/100 + getBookEff($general[book])) * $rate; + $score = getGeneralIntel($general, true, true, true, false) * $rate; $score = $score * (100 + $general[explevel]/5)/100; $score = $score * (80 + rand() % 41)/100; // 80 ~ 120% @@ -90,7 +212,7 @@ function process_1($connect, &$general, $type) { if($general[level] == 3 && $general[no] == $city[gen2]) { $score *= 1.05; } $rd = rand() % 100; - $r = CriticalRatio($general[leader]+getHorseEff($general[horse])+$lbonus, $general[power]+getWeapEff($general[weap]), $general[intel]+getBookEff($general[book]), 2); + $r = CriticalRatioDomestic($general, 2); // 특기보정 : 경작, 상재 if($type == 1 && $general[special] == 1) { $r[succ] += 10; $score *= 1.1; $admin[develcost] *= 0.8; } @@ -153,13 +275,7 @@ function process_3($connect, &$general) { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $nation = MYDB_fetch_array($result); - if($general[level] == 12) { - $lbonus = $nation[level] * 2; - } elseif($general[level] >= 5) { - $lbonus = $nation[level]; - } else { - $lbonus = 0; - } + $lbonus = setLeadershipBonus($general, $nation['level']); if($general[level] == 0) { $log[count($log)] = "●{$admin[month]}월:재야입니다. $dtype 실패. <1>$date"; @@ -172,7 +288,7 @@ function process_3($connect, &$general) { } elseif($general[gold] < $admin[develcost]) { $log[count($log)] = "●{$admin[month]}월:자금이 모자랍니다. $dtype 실패. <1>$date"; } else { - $score = ($general[intel] * (100 - $general[injury])/100 + getBookEff($general[book])); + $score = getGeneralIntel($general, true, true, true, false); $score = $score * (100 + $general[explevel]/5)/100; $score = $score * (80 + rand() % 41)/100; // 80 ~ 120% @@ -184,7 +300,7 @@ function process_3($connect, &$general) { if($general[level] == 12 || $general[level] == 11 || $general[level] == 9 || $general[level] == 7 || $general[level] == 5) { $score *= 1.05; } $rd = rand() % 100; - $r = CriticalRatio($general[leader]+getHorseEff($general[horse])+$lbonus, $general[power]+getWeapEff($general[weap]), $general[intel]+getBookEff($general[book]), 0); + $r = CriticalRatioDomestic($general, 0); // 특기보정 : 발명 if($general[special] == 3) { $score *= 1.1; $admin[develcost] *= 0.8; $r[succ] += 10; } @@ -250,13 +366,7 @@ function process_4($connect, &$general) { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $nation = MYDB_fetch_array($result); - if($general[level] == 12) { - $lbonus = $nation[level] * 2; - } elseif($general[level] >= 5) { - $lbonus = $nation[level]; - } else { - $lbonus = 0; - } + $lbonus = setLeadershipBonus($general, $nation['level']); if($general[level] == 0) { $log[count($log)] = "●{$admin[month]}월:재야입니다. 주민 선정 실패. <1>$date"; @@ -271,7 +381,7 @@ function process_4($connect, &$general) { } elseif($city[rate] >= 100) { $log[count($log)] = "●{$admin[month]}월:민심은 충분합니다. 주민 선정 실패. <1>$date"; } else { - $score = ($general[leader] * (100 - $general[injury])/100 + getHorseEff($general[horse]) + $lbonus) / 10; + $score = $score = getGeneralLeadership($general, true, true, true) / 10; $score = $score * (100 + $general[explevel]/5)/100; $score = $score * (80 + rand() % 41)/100; // 80 ~ 120% @@ -285,7 +395,7 @@ function process_4($connect, &$general) { if($general[level] == 2 && $general[no] == $city[gen3]) { $score *= 1.05; } $rd = rand() % 100; - $r = CriticalRatio($general[leader]+getHorseEff($general[horse])+$lbonus, $general[power]+getWeapEff($general[weap]), $general[intel]+getBookEff($general[book]), 0); + $r = CriticalRatioDomestic($general, 0); // 특기보정 : 인덕 if($general[special] == 20) { $r[succ] += 10; $admin[develcost] *= 0.8; $score *= 1.1; } @@ -347,13 +457,7 @@ function process_5($connect, &$general, $type) { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $nation = MYDB_fetch_array($result); - if($general[level] == 12) { - $lbonus = $nation[level] * 2; - } elseif($general[level] >= 5) { - $lbonus = $nation[level]; - } else { - $lbonus = 0; - } + $lbonus = setLeadershipBonus($general, $nation['level']); if($general[level] == 0) { $log[count($log)] = "●{$admin[month]}월:재야입니다. $dtype 실패. <1>$date"; @@ -372,7 +476,7 @@ function process_5($connect, &$general, $type) { if($city[rate] < $_develrate) { $city[rate] = $_develrate; } $rate = $city[rate] / 100; - $score = ($general[power] * (100 - $general[injury])/100 + getWeapEff($general[weap])) * $rate; + $score = getGeneralPower($general, true, true, true, false) * $rate; $score = $score * (100 + $general[explevel]/5)/100; $score = $score * (80 + rand() % 41)/100; // 80 ~ 120% @@ -386,7 +490,7 @@ function process_5($connect, &$general, $type) { if($general[level] == 4 && $general[no] == $city[gen1]) { $score *= 1.05; } $rd = rand() % 100; // 현재 20% - $r = CriticalRatio($general[leader]+getHorseEff($general[horse])+$lbonus, $general[power]+getWeapEff($general[weap]), $general[intel]+getBookEff($general[book]), 1); + $r = CriticalRatioDomestic($general, 0); // 특기보정 : 수비, 축성 if($type == 1 && $general[special] == 11) { $r[succ] += 10; $score *= 1.1; $admin[develcost] *= 0.8; } if($type == 2 && $general[special] == 10) { $r[succ] += 10; $score *= 1.1; $admin[develcost] *= 0.8; } @@ -446,13 +550,7 @@ function process_7($connect, &$general) { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $nation = MYDB_fetch_array($result); - if($general[level] == 12) { - $lbonus = $nation[level] * 2; - } elseif($general[level] >= 5) { - $lbonus = $nation[level]; - } else { - $lbonus = 0; - } + $lbonus = setLeadershipBonus($general, $nation['level']); if($general[level] == 0) { $log[count($log)] = "●{$admin[month]}월:재야입니다. 정착 장려 실패. <1>$date"; @@ -467,7 +565,7 @@ function process_7($connect, &$general) { } elseif($city[pop] >= $city[pop2]) { $log[count($log)] = "●{$admin[month]}월:이미 포화상태입니다. 정착 장려 실패. <1>$date"; } else { - $score = $general[leader] * (100 - $general[injury])/100 + getHorseEff($general[horse]) + $lbonus; + $score = getGeneralLeadership($general, true, true, true); $score = $score * (100 + $general[explevel]/5)/100; $score = $score * (80 + rand() % 41)/100; // 80 ~ 120% @@ -481,7 +579,7 @@ function process_7($connect, &$general) { if($general[level] == 2 && $general[no] == $city[gen3]) { $score *= 1.05; } $rd = rand() % 100; // 현재 20% - $r = CriticalRatio($general[leader]+getHorseEff($general[horse])+$lbonus, $general[power]+getWeapEff($general[weap]), $general[intel]+getBookEff($general[book]), 0); + $r = CriticalRatioDomestic($general, 0); // 특기보정 : 인덕 if($general[special] == 20) { $r[succ] += 10; $score *= 1.1; $admin[develcost] *= 0.8; } @@ -542,13 +640,7 @@ function process_8($connect, &$general) { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $nation = MYDB_fetch_array($result); - if($general[level] == 12) { - $lbonus = $nation[level] * 2; - } elseif($general[level] >= 5) { - $lbonus = $nation[level]; - } else { - $lbonus = 0; - } + $lbonus = setLeadershipBonus($general, $nation['level']); if($general[level] == 0) { $log[count($log)] = "●{$admin[month]}월:재야입니다. $dtype 강화 실패. <1>$date"; @@ -567,7 +659,7 @@ function process_8($connect, &$general) { if($city[rate] < $_develrate) { $city[rate] = $_develrate; } $rate = $city[rate] / 100; - $score = ($general[power] * (100 - $general[injury])/100 + getWeapEff($general[weap])) * $rate; + $score = getGeneralPower($general, true, true, true, false) * $rate; $score = $score * (100 + $general[explevel]/5)/100; $score = $score * (80 + rand() % 41)/100; // 80 ~ 120% @@ -581,7 +673,7 @@ function process_8($connect, &$general) { if($general[level] == 4 && $general[no] == $city[gen1]) { $score *= 1.05; } $rd = rand() % 100; // 현재 20% - $r = CriticalRatio($general[leader]+getHorseEff($general[horse])+$lbonus, $general[power]+getWeapEff($general[weap]), $general[intel]+getBookEff($general[book]), 0); + $r = CriticalRatioDomestic($general, 0); // 특기보정 : 통찰 if($general[special] == 12) { $r[succ] += 10; $score *= 1.1; $admin[develcost] *= 0.8; } @@ -639,13 +731,7 @@ function process_9($connect, &$general) { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $nation = MYDB_fetch_array($result); - if($general[level] == 12) { - $lbonus = $nation[level] * 2; - } elseif($general[level] >= 5) { - $lbonus = $nation[level]; - } else { - $lbonus = 0; - } + $lbonus = setLeadershipBonus($general, $nation['level']); if($general[level] == 0) { $log[count($log)] = "●{$admin[month]}월:재야입니다. 물자 조달 실패. <1>$date"; @@ -657,7 +743,9 @@ function process_9($connect, &$general) { if(rand() % 2 == 0) { $dtype = 0; $stype = "금"; } else { $dtype = 1; $stype = "쌀"; } - $score = (($general[leader]+$general[power]+$general[intel]) * (100 - $general[injury])/100 + getHorseEff($general[horse])+$lbonus+getWeapEff($general[weap])+getBookEff($general[book])); + $score = getGeneralLeadership($general, true, true, true) + + getGeneralPower($general, true, true, true) + + getGeneralIntel($general, true, true, true); $score = $score * (100 + $general[explevel]/5)/100; $score = $score * (80 + rand() % 41)/100; // 80 ~ 120% @@ -729,13 +817,7 @@ function process_11($connect, &$general, $type) { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $nation = MYDB_fetch_array($result); - if($general[level] == 12) { - $lbonus = $nation[level] * 2; - } elseif($general[level] >= 5) { - $lbonus = $nation[level]; - } else { - $lbonus = 0; - } + $lbonus = setLeadershipBonus($general, $nation['level']); $query = "select * from city where city='$general[city]'"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); @@ -747,7 +829,9 @@ function process_11($connect, &$general, $type) { if($armtype != $general[crewtype]) { $general[crew] = 0; $general[train] = $defaulttrain; $general[atmos] = $defaultatmos; } - if($crew*100 + $general[crew] > (floor($general[leader] * (100 - $general[injury])/100)+getHorseEff($general[horse])+$lbonus)*100) { $crew = round(((floor($general[leader] * (100 - $general[injury])/100)+getHorseEff($general[horse])+$lbonus)*100 - $general[crew])/100, 0); } + if($crew*100 + $general[crew] > getGeneralLeadership($general, true, true, true)*100) { + $crew = round(getGeneralLeadership($general, true, true, true) - $general['crew']/100); + } if($crew < 0) { $crew = 0; } $cost = $crew * getCost($connect, $armtype); //기술로 가격 @@ -911,13 +995,7 @@ function process_13($connect, &$general) { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $nation = MYDB_fetch_array($result); - if($general[level] == 12) { - $lbonus = $nation[level] * 2; - } elseif($general[level] >= 5) { - $lbonus = $nation[level]; - } else { - $lbonus = 0; - } + $lbonus = setLeadershipBonus($general, $nation['level']); $query = "select nation,supply from city where city='$general[city]'"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); @@ -937,7 +1015,7 @@ function process_13($connect, &$general) { // $log[count($log)] = "●{$admin[month]}월:병기는 훈련이 불가능합니다. <1>$date"; } else { // 훈련시 - $score = round((floor($general[leader] * (100 - $general[injury])/100)+getHorseEff($general[horse])+$lbonus)*100 / $general[crew] * $_training); + $score = round(getGeneralLeadership($general, true, true, true) * 100 / $general['crew'] * $_training); $log[count($log)] = "●{$admin[month]}월:훈련치가 $score 상승했습니다. <1>$date"; $exp = 100; @@ -983,13 +1061,7 @@ function process_14($connect, &$general) { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $nation = MYDB_fetch_array($result); - if($general[level] == 12) { - $lbonus = $nation[level] * 2; - } elseif($general[level] >= 5) { - $lbonus = $nation[level]; - } else { - $lbonus = 0; - } + $lbonus = setLeadershipBonus($general, $nation['level']); $query = "select nation,supply from city where city='$general[city]'"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); @@ -1010,7 +1082,7 @@ function process_14($connect, &$general) { // } elseif(floor($general[crewtype]/10) == 4) { // $log[count($log)] = "●{$admin[month]}월:병기는 사기 진작이 불가능합니다. <1>$date"; } else { - $score = round((floor($general[leader] * (100 - $general[injury])/100)+getHorseEff($general[horse])+$lbonus)*100 / $general[crew] * $_training); + $score = round(getGeneralLeadership($general, true, true, true)*100 / $general['crew'] * $_training); $gold = $general[gold] - round($general[crew]/100); $log[count($log)] = "●{$admin[month]}월:사기치가 $score 상승했습니다. <1>$date"; @@ -2319,11 +2391,11 @@ function process_32($connect, &$general) { } elseif($dip[state] >= 7) { $log[count($log)] = "●{$admin[month]}월:불가침국입니다. $destcity[name]에 화계 실패. <1>$date"; } else { - $query = "select intel,book from general where city='$destination' and nation='$destcity[nation]' order by intel desc"; + $query = "select leader,horse,power,weap,intel,book,injury from general where city='$destination' and nation='$destcity[nation]' order by intel desc"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $intelgen = MYDB_fetch_array($result); - $ratio = round((($general[intel]+getBookEff($general[book]) - $intelgen[intel]-getBookEff($intelgen[book])) / $_firing - ($destcity[secu]/$destcity[secu2])/5 + $_basefiring)*100); + $ratio = round(((getGeneralIntel($general, true, true, true, false) - getGeneralIntel($intelgen, true, true, true, false)) / $_firing - ($destcity['secu']/$destcity['secu2'])/5 + $_basefiring)*100); $ratio2 = rand() % 100; if($general[item] == 5) { @@ -2446,11 +2518,11 @@ function process_33($connect, &$general) { } elseif($dip[state] >= 7) { $log[count($log)] = "●{$admin[month]}월:불가침국입니다. $destcity[name]에 탈취 실패. <1>$date"; } else { - $query = "select power,weap from general where city='$destination' and nation='$destcity[nation]' order by power desc"; + $query = "select leader,horse,power,weap,intel,book,injury from general where city='$destination' and nation='$destcity[nation]' order by power desc"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $powergen = MYDB_fetch_array($result); - $ratio = round((($general[power]+getWeapEff($general[weap]) - $powergen[power]-getWeapEff($powergen[weap])) / $_firing - ($destcity[secu]/$destcity[secu2])/5 + $_basefiring)*100); + $ratio = round(((getGeneralPower($general, true, true, true, false) - getGeneralPower($powergen, true, true, true, false)) / $_firing - ($destcity['secu']/$destcity['secu2'])/5 + $_basefiring)*100); $ratio2 = rand() % 100; if($general[item] == 5) { @@ -2589,11 +2661,11 @@ function process_34($connect, &$general) { } elseif($dip[state] >= 7) { $log[count($log)] = "●{$admin[month]}월:불가침국입니다. $destcity[name]에 파괴 실패. <1>$date"; } else { - $query = "select power,weap from general where city='$destination' and nation='$destcity[nation]' order by power desc"; + $query = "select leader,horse,power,weap,intel,book,injury from general where city='$destination' and nation='$destcity[nation]' order by power desc"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $powergen = MYDB_fetch_array($result); - $ratio = round((($general[power]+getWeapEff($general[weap]) - $powergen[power]-getWeapEff($powergen[weap])) / $_firing - ($destcity[secu]/$destcity[secu2])/5 + $_basefiring)*100); + $ratio = round(((getGeneralPower($general, true, true, true, false) - getGeneralPower($powergen, true, true, true, false)) / $_firing - ($destcity['secu']/$destcity['secu2'])/5 + $_basefiring)*100); $ratio2 = rand() % 100; if($general[item] == 5) { @@ -2684,13 +2756,7 @@ function process_35($connect, &$general) { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $mynation = MYDB_fetch_array($result); - if($general[level] == 12) { - $lbonus = $mynation[level] * 2; - } elseif($general[level] >= 5) { - $lbonus = $mynation[level]; - } else { - $lbonus = 0; - } + $lbonus = setLeadershipBonus($general, $mynation['level']); $query = "select nation,supply from city where city='$general[city]'"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); @@ -2719,11 +2785,11 @@ function process_35($connect, &$general) { } elseif($dip[state] >= 7) { $log[count($log)] = "●{$admin[month]}월:불가침국입니다. $destcity[name]에 선동 실패. <1>$date"; } else { - $query = "select ROUND(leader*(100-injury)/100)+horse as sum,horse from general where city='$destination' and nation='$destcity[nation]' order by sum desc"; + $query = "select leader,horse,power,weap,intel,book,injury from general where city='$destination' and nation='$destcity[nation]' order by sum desc"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $gen = MYDB_fetch_array($result); - $ratio = round(((floor($general[leader] * (100 - $general[injury])/100)+getHorseEff($general[horse])+$lbonus - ($gen[sum]-$gen[horse]+getHorseEff($gen[horse]))) / $_firing - ($destcity[secu]/$destcity[secu2])/5 + $_basefiring)*100); + $ratio = round(((getGeneralLeadership($general, true, true, true) - getGeneralLeadership($gen, true, true, true)) / $_firing - ($destcity['secu']/$destcity['secu2'])/5 + $_basefiring)*100); $ratio2 = rand() % 100; if($general[item] == 5) { @@ -2814,13 +2880,7 @@ function process_36($connect, &$general) { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $mynation = MYDB_fetch_array($result); - if($general[level] == 12) { - $lbonus = $mynation[level] * 2; - } elseif($general[level] >= 5) { - $lbonus = $mynation[level]; - } else { - $lbonus = 0; - } + $lbonus = setLeadershipBonus($general, $mynation['level']); $query = "select nation,supply from city where city='$general[city]'"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); @@ -2853,7 +2913,10 @@ function process_36($connect, &$general) { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $gen = MYDB_fetch_array($result); - $ratio = round(((floor(($general[leader]+$general[intel]+$general[power]) * (100 - $general[injury])/100)+getWeapEff($general[weap])+getHorseEff($general[horse])+$lbonus+getBookEff($general[book]) - ($gen[sum]-$gen[weap]-$gen[horse]-$gen[book]+getWeapEff($gen[weap])+getHorseEff($gen[horse])+getBookEff($gen[book]))) / $_firing - ($destcity[secu]/$destcity[secu2])/5 + $_basefiring)*100); + $generalStatAll = getGeneralLeadership($general, true, true, true) + + getGeneralPower($general, true, true, true) + + getGeneralIntel($general, true, true, true); + $ratio = round((($generalStatAll - ($gen[sum]+getWeapEff($gen[weap])+getHorseEff($gen[horse])+getBookEff($gen[book]))) / $_firing - ($destcity[secu]/$destcity[secu2])/5 + $_basefiring)*100); $ratio2 = rand() % 100; if($general[item] == 5) {