인탐 장수 비율 4:4:2로 변경. 인탐장 숙련도 평준화. 인탐 확률 상승. 발견 추가.

This commit is contained in:
2019-03-09 00:15:51 +09:00
parent fc349e9865
commit 37bfb7d936
2 changed files with 69 additions and 81 deletions
+23 -19
View File
@@ -1968,31 +1968,35 @@ function process_76(&$general) {
$avgNation = MYDB_fetch_array($result); $avgNation = MYDB_fetch_array($result);
$gencount = 5 + Util::round($avgNation['gennum'] / 10); $gencount = 5 + Util::round($avgNation['gennum'] / 10);
$query = "select avg(age) as age, max(leader+power+intel) as lpi, avg(dedication) as ded,avg(experience) as exp, avg(dex0) as dex0, avg(dex10) as dex10, avg(dex20) as dex20, avg(dex30) as dex30, avg(dex40) as dex40 from general where nation='{$general['nation']}'"; $avgGen = $db->queryFirstRow('SELECT max(leader+power+intel) as lpi, avg(dedication) as ded,avg(experience) as exp, avg(dex0+dex10+dex20+dex30) * 1.5 / 4 as dex_t, avg(dex40) as dex40 from general where npc < 5 and nation = %i', $general['nation']);
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$avgGen = MYDB_fetch_array($result);
//의병추가 //의병추가
$npc = 4; $npc = 4;
$npcid = $admin['npccount']; $npcid = $admin['npccount'];
for($i=0; $i < $gencount; $i++) { for($i=0; $i < $gencount; $i++) {
// 무장 40%, 지장 40%, 무지장 20% //무장 40%, 지장 40%, 무지장 20%
$type = rand() % 10; $stat_tier1 = GameConst::$defaultStatMax - 10 + rand()%11;
switch($type) { $stat_tier3 = GameConst::$defaultStatMin + rand()%6;
case 0: case 1: case 2: case 3: $stat_tier2 = GameConst::$defaultStatTotal - $stat_tier1 - $stat_tier3;
$leader = GameConst::$defaultStatMax - 10 + rand()%11; switch(Util::choiceRandomUsingWeight([
$intel = GameConst::$defaultStatMin + rand()%6; 'power'=>4,
$power = GameConst::$defaultStatTotal - $leader - $intel; 'intel'=>4,
'neutral'=>2
])){
case 'power':
$leader = $stat_tier1;
$power = $stat_tier2;
$intel = $stat_tier3;
break; break;
case 4: case 5: case 6: case 7: case 'intel':
$leader = GameConst::$defaultStatMax - 10 + rand()%11; $leader = $stat_tier1;
$power = GameConst::$defaultStatMin + rand()%6; $power = $stat_tier3;
$intel = GameConst::$defaultStatTotal - $leader - $power; $intel = $stat_tier2;
break; break;
case 8: case 9: case 'neutral':
$leader = GameConst::$defaultStatMin + rand()%6; $leader = $stat_tier3;
$power = GameConst::$defaultStatMax - 10 + rand()%11; $power = $stat_tier1;
$intel = GameConst::$defaultStatTotal - $leader - $power; $intel = $stat_tier2;
break; break;
} }
// 국내 최고능치 기준으로 랜덤성 스케일링 // 국내 최고능치 기준으로 랜덤성 스케일링
@@ -2066,7 +2070,7 @@ function process_76(&$general) {
'1','100','100','0','".GameUnitConst::DEFAULT_CREWTYPE."','0','0','0', '1','100','100','0','".GameUnitConst::DEFAULT_CREWTYPE."','0','0','0',
'0','0','0','$turntime','$killturn','{$avgGen['age']}','1','$personal','0','0','0','0','', '0','0','0','$turntime','$killturn','{$avgGen['age']}','1','$personal','0','0','0','0','',
'0','$bornyear','$deadyear', '0','$bornyear','$deadyear',
'{$avgGen['dex0']}','{$avgGen['dex10']}','{$avgGen['dex20']}','{$avgGen['dex30']}','{$avgGen['dex40']}' '{$avgGen['dex_t']}','{$avgGen['dex_t']}','{$avgGen['dex_t']}','{$avgGen['dex_t']}','{$avgGen['dex40']}'
)", )",
$connect $connect
) or Error(__LINE__.MYDB_error($connect),""); ) or Error(__LINE__.MYDB_error($connect),"");
+46 -62
View File
@@ -290,7 +290,7 @@ function process_29(&$general) {
$history = []; $history = [];
$date = substr($general['turntime'],11,5); $date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear','year','month','develcost','npccount','turnterm','scenario']); $admin = $gameStor->getValues(['startyear','year','month','develcost','npccount','turnterm','scenario','maxgeneral']);
$query = "select nation,name,level,gennum,scout from nation where nation='{$general['nation']}'"; $query = "select nation,name,level,gennum,scout from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
@@ -306,25 +306,20 @@ function process_29(&$general) {
} elseif($general['gold'] < $admin['develcost']) { } elseif($general['gold'] < $admin['develcost']) {
$log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. 인재탐색 실패. <1>$date</>"; $log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. 인재탐색 실패. <1>$date</>";
} else { } else {
$query = "select no from general where nation='{$general['nation']}' and npc<2";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
$query = "select no from general where nation='{$general['nation']}' and npc=3"; $max_gen_cnt = $admin['maxgeneral'];
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$npccount = MYDB_num_rows($result);
$query = "select no from general where nation!='{$general['nation']}' and npc=3"; $total_gen_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc <= 2');
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $total_npc_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE 3 <= npc AND npc <= 4');
$otherNpccount = MYDB_num_rows($result);
$otherNpccount = Util::round(sqrt($otherNpccount + 1)) - 1; $curr_cnt = Util::toInt($total_gen_cnt + $total_npc_cnt / 2);
$remain_slot = $max_gen_cnt - $curr_cnt;
if($gencount <= 0) { $gencount = 1; }
if($npccount <= 0) { $npccount = 1; } $found_prop = max(pow($remain_slot / $max_gen_cnt, 5), 1 / $max_gen_cnt);
$criteria = $gencount * $npccount + $otherNpccount; $found_npc = Util::randBool($found_prop);
// 탐색 실패 // 탐색 실패
if(rand() % $criteria > 0) { if(!$found_npc) {
$exp = 100; $exp = 100;
$ded = 70; $ded = 70;
switch(Util::choiceRandomUsingWeight([$general['leader'], $general['power'], $general['intel']])) { switch(Util::choiceRandomUsingWeight([$general['leader'], $general['power'], $general['intel']])) {
@@ -354,7 +349,12 @@ function process_29(&$general) {
$name = "{$name}{$count}"; $name = "{$name}{$count}";
} }
if($nation['scout'] != 0) { $gen_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc <= 2 AND nation = %i', $general['nation']);
$npc_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE 3 <= npc AND npc <= 4 AND nation = %i', $general['nation']);
$join_prop = 0.3 + 0.7 * (($gen_cnt + $npc_cnt / 2) / $curr_cnt);
if($nation['scout'] != 0 || !Util::randBool($join_prop)) {
$scoutType = "발견"; $scoutType = "발견";
$scoutLevel = 0; $scoutLevel = 0;
$scoutNation = 0; $scoutNation = 0;
@@ -370,50 +370,34 @@ function process_29(&$general) {
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <Y>$name</>{$josaRa}는 <C>인재</>를 {$scoutType}하였습니다!"; $alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <Y>$name</>{$josaRa}는 <C>인재</>를 {$scoutType}하였습니다!";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>$name</>{$josaRa}는 <C>인재</>를 {$scoutType}"); pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>$name</>{$josaRa}는 <C>인재</>를 {$scoutType}");
$query = "select max(leader+power+intel) as lpi, avg(dedication) as ded,avg(experience) as exp, avg(dex0) as dex0, avg(dex10) as dex10, avg(dex20) as dex20, avg(dex30) as dex30, avg(dex40) as dex40 from general where nation='{$general['nation']}'"; $avgGen = $db->queryFirstRow('SELECT max(leader+power+intel) as lpi, avg(dedication) as ded,avg(experience) as exp, avg(dex0+dex10+dex20+dex30) * 1.5 / 4 as dex_t, avg(dex40) as dex40 from general where npc < 5 and nation = %i', $general['nation']);
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$avgGen = MYDB_fetch_array($result);
// 체섭시 무장 20%, 지장 20%, 무지장 60% //무장 40%, 지장 40%, 무지장 20%
// 마이너 무장 40%, 지장 40%, 무지장 20% $stat_tier1 = GameConst::$defaultStatMax - 10 + rand()%11;
$type = rand() % 10; $stat_tier3 = GameConst::$defaultStatMin + rand()%6;
if($admin['scenario'] < 100) { $stat_tier2 = GameConst::$defaultStatTotal - $stat_tier1 - $stat_tier3;
switch($type) { switch(Util::choiceRandomUsingWeight([
case 0: case 1: 'power'=>4,
$leader = GameConst::$defaultStatMax - 10 + rand()%11; 'intel'=>4,
$intel = GameConst::$defaultStatMin + rand()%6; 'neutral'=>2
$power = GameConst::$defaultStatTotal - $leader - $intel; ])){
break; case 'power':
case 2: case 3: $leader = $stat_tier1;
$leader = GameConst::$defaultStatMax - 10 + rand()%11; $power = $stat_tier2;
$power = GameConst::$defaultStatMin + rand()%6; $intel = $stat_tier3;
$intel = GameConst::$defaultStatTotal - $leader - $power; break;
break; case 'intel':
case 4: case 5: case 6: case 7: case 8: case 9: $leader = $stat_tier1;
$leader = GameConst::$defaultStatMin + rand()%6; $power = $stat_tier3;
$power = GameConst::$defaultStatMax - 10 + rand()%11; $intel = $stat_tier2;
$intel = GameConst::$defaultStatTotal - $leader - $power; break;
break; case 'neutral':
} $leader = $stat_tier3;
} else { $power = $stat_tier1;
switch($type) { $intel = $stat_tier2;
case 0: case 1: case 2: case 3: break;
$leader = GameConst::$defaultStatMax - 10 + rand()%11;
$intel = GameConst::$defaultStatMin + rand()%6;
$power = GameConst::$defaultStatTotal - $leader - $intel;
break;
case 4: case 5: case 6: case 7:
$leader = GameConst::$defaultStatMax - 10 + rand()%11;
$power = GameConst::$defaultStatMin + rand()%6;
$intel = GameConst::$defaultStatTotal - $leader - $power;
break;
case 8: case 9:
$leader = GameConst::$defaultStatMin + rand()%6;
$power = GameConst::$defaultStatMax - 10 + rand()%11;
$intel = GameConst::$defaultStatTotal - $leader - $power;
break;
}
} }
// 국내 최고능치 기준으로 랜덤성 스케일링 // 국내 최고능치 기준으로 랜덤성 스케일링
if($avgGen['lpi'] > 210) { if($avgGen['lpi'] > 210) {
$leader = Util::round($leader * $avgGen['lpi'] / GameConst::$defaultStatTotal * (60+rand()%31)/100); $leader = Util::round($leader * $avgGen['lpi'] / GameConst::$defaultStatTotal * (60+rand()%31)/100);
@@ -476,8 +460,8 @@ function process_29(&$general) {
$specage2 = Util::round((80 - $age)/3) + $age; $specage2 = Util::round((80 - $age)/3) + $age;
//$specage = $age + 1 + rand() % 3; //$specage = $age + 1 + rand() % 3;
//$specage2 = $age + 5 + rand() % 5; //$specage2 = $age + 5 + rand() % 5;
// 10년 ~ 50년 // 20년 ~ 50년
$killturn = rand()%480 + 120; $killturn = Util::randRangeInt(20, 50) * 12;
@MYDB_query(" @MYDB_query("
insert into general ( insert into general (
@@ -493,7 +477,7 @@ function process_29(&$general) {
'$scoutLevel','100','100','0','".GameUnitConst::DEFAULT_CREWTYPE."','0','0','0', '$scoutLevel','100','100','0','".GameUnitConst::DEFAULT_CREWTYPE."','0','0','0',
'0','0','0','$turntime','$killturn','$age','1','$personal','0','$specage','0','$specage2','', '0','0','0','$turntime','$killturn','$age','1','$personal','0','$specage','0','$specage2','',
'0','$bornyear','$deadyear', '0','$bornyear','$deadyear',
'{$avgGen['dex0']}','{$avgGen['dex10']}','{$avgGen['dex20']}','{$avgGen['dex30']}','{$avgGen['dex40']}' '{$avgGen['dex_t']}','{$avgGen['dex_t']}','{$avgGen['dex_t']}','{$avgGen['dex_t']}','{$avgGen['dex40']}'
)", )",
$connect $connect
) or Error(__LINE__.MYDB_error($connect),""); ) or Error(__LINE__.MYDB_error($connect),"");