From 02f90842fe1a20d1bd680ef5800374d0c77a210a Mon Sep 17 00:00:00 2001 From: hide_d Date: Fri, 13 Apr 2018 03:41:39 +0900 Subject: [PATCH] =?UTF-8?q?TM=20=EC=84=9C=EB=B2=84=20=EB=B0=B8=EB=9F=B0?= =?UTF-8?q?=EC=8A=A4=20=ED=8C=A8=EC=B9=98=20=EC=9D=B4=EC=8B=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_gamerule.php | 3 +- hwe/func_process.php | 74 ++++++++++++++++++---------------- hwe/func_process_personnel.php | 16 +++++--- hwe/func_process_trick.php | 2 +- hwe/join_post.php | 2 +- hwe/process_war.php | 45 ++++++++------------- hwe/sql/schema.sql | 1 - 7 files changed, 72 insertions(+), 71 deletions(-) diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index 8959e79b..869aa466 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -188,7 +188,7 @@ function getGenDex($general, $type) { return $general["dex{$type}"]; } -function addGenDex($no, $type, $exp) { +function addGenDex($no, $atmos, $train, $type, $exp) { $db = DB::db(); $connect=$db->get(); @@ -196,6 +196,7 @@ function addGenDex($no, $type, $exp) { $dexType = "dex{$type}"; if($type == 30) { $exp = Util::round($exp * 0.90); } //귀병은 90%효율 elseif($type == 40) { $exp = Util::round($exp * 0.90); } //차병은 90%효율 + $exp = Util::round($exp * ($atmos+$train) / 200); // 사기 + 훈련 / 200 $query = "update general set {$dexType}={$dexType}+{$exp} where no='$no'"; MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); diff --git a/hwe/func_process.php b/hwe/func_process.php index b215c806..dd9a8709 100644 --- a/hwe/func_process.php +++ b/hwe/func_process.php @@ -1,7 +1,6 @@ $rd) { $score = CriticalScore($score, 1); $log[] = "●{$admin['month']}월:{$dtype}{$atype} 실패하여 $score 상승했습니다. <1>$date"; - } elseif($city['rate'] >= 80 && $r['succ'] > $rd) { + } elseif($r['succ'] + $r['fail'] > $rd) { $score = CriticalScore($score, 0); $log[] = "●{$admin['month']}월:{$dtype}{$atype} 성공하여 $score 상승했습니다. <1>$date"; } else { @@ -323,10 +323,12 @@ function process_3(&$general) { // 군주, 참모, 모사 보정 if($general['level'] == 12 || $general['level'] == 11 || $general['level'] == 9 || $general['level'] == 7 || $general['level'] == 5) { $score *= 1.05; } - $rd = rand() % 100; + $rd = Util::randF(); $r = CriticalRatioDomestic($general, 2); // 특기보정 : 발명 - if($general['special'] == 3) { $score *= 1.1; $admin['develcost'] *= 0.8; $r['succ'] += 10; } + if($general['special'] == 3) { $r['succ'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; } + //민심 반영 + if($city['rate'] < 80) { $r['succ'] *= $city['rate'] / 80; } //버그방지 if($score < 1) $score = 1; @@ -334,7 +336,7 @@ function process_3(&$general) { if($r['fail'] > $rd) { $score = CriticalScore($score, 1); $log[] = "●{$admin['month']}월:{$dtype}를 실패하여 $score 상승했습니다. <1>$date"; - } elseif($city['rate'] >= 80 && $r['succ'] > $rd) { + } elseif($r['succ'] + $r['fail'] > $rd) { $score = CriticalScore($score, 0); $log[] = "●{$admin['month']}월:{$dtype}를 성공하여 $score 상승했습니다. <1>$date"; } else { @@ -421,10 +423,10 @@ function process_4(&$general) { // 시중 보정 if($general['level'] == 2 && $general['no'] == $city['gen3']) { $score *= 1.05; } - $rd = rand() % 100; + $rd = Util::randF(); $r = CriticalRatioDomestic($general, 0); // 특기보정 : 인덕 - if($general['special'] == 20) { $r['succ'] += 10; $admin['develcost'] *= 0.8; $score *= 1.1; } + if($general['special'] == 20) { $r['succ'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; } //버그방지 if($score < 1) $score = 1; @@ -432,7 +434,7 @@ function process_4(&$general) { if($r['fail'] > $rd) { $score = CriticalScore($score, 1); $log[] = "●{$admin['month']}월:선정을 실패하여 민심이 $score 상승했습니다. <1>$date"; - } elseif($r['succ'] > $rd) { + } elseif($r['succ'] + $r['fail'] > $rd) { $score = CriticalScore($score, 0); $log[] = "●{$admin['month']}월:선정을 성공하여 민심이 $score 상승했습니다. <1>$date"; } else { @@ -519,11 +521,13 @@ function process_5(&$general, $type) { // 태수 보정 if($general['level'] == 4 && $general['no'] == $city['gen1']) { $score *= 1.05; } - $rd = rand() % 100; // 현재 20% + $rd = randF(); $r = CriticalRatioDomestic($general, 1); // 특기보정 : 수비, 축성 - 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; } + if($type == 1 && $general['special'] == 11) { $r['succ'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; } + if($type == 2 && $general['special'] == 10) { $r['succ'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; } + //민심 반영 + if($city['rate'] < 80) { $r['succ'] *= $city['rate'] / 80; } //버그방지 if($score < 1) $score = 1; @@ -531,7 +535,7 @@ function process_5(&$general, $type) { if($r['fail'] > $rd) { $score = CriticalScore($score, 1); $log[] = "●{$admin['month']}월:{$dtype}를 실패하여 $score 상승했습니다. <1>$date"; - } elseif($city['rate'] >= 80 && $r['succ'] > $rd) { + } elseif($r['succ'] + $r['fail'] > $rd) { $score = CriticalScore($score, 0); $log[] = "●{$admin['month']}월:{$dtype}를 성공하여 $score 상승했습니다. <1>$date"; } else { @@ -611,10 +615,10 @@ function process_7(&$general) { // 시중 보정 if($general['level'] == 2 && $general['no'] == $city['gen3']) { $score *= 1.05; } - $rd = rand() % 100; // 현재 20% + $rd = Util::randF(); $r = CriticalRatioDomestic($general, 0); // 특기보정 : 인덕 - if($general['special'] == 20) { $r['succ'] += 10; $score *= 1.1; $admin['develcost'] *= 0.8; } + if($general['special'] == 20) { $r['succ'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; } //버그방지 if($score < 1) $score = 1; @@ -622,7 +626,7 @@ function process_7(&$general) { if($r['fail'] > $rd) { $score = CriticalScore($score, 1); $log[] = "●{$admin['month']}월:장려를 실패하여 주민이 {$score}0명 증가했습니다. <1>$date"; - } elseif($r['succ'] > $rd) { + } elseif($r['succ'] + $r['fail'] > $rd) { $score = CriticalScore($score, 0); $log[] = "●{$admin['month']}월:장려를 성공하여 주민이 {$score}0명 증가했습니다. <1>$date"; } else { @@ -708,10 +712,12 @@ function process_8(&$general) { // 태수 보정 if($general['level'] == 4 && $general['no'] == $city['gen1']) { $score *= 1.05; } - $rd = rand() % 100; // 현재 20% + $rd = Util::randF(); $r = CriticalRatioDomestic($general, 1); // 특기보정 : 통찰 - if($general['special'] == 12) { $r['succ'] += 10; $score *= 1.1; $admin['develcost'] *= 0.8; } + if($general['special'] == 12) { $r['succ'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; } + //민심 반영 + if($city['rate'] < 80) { $r['succ'] *= $city['rate'] / 80; } //버그방지 if($score < 1) $score = 1; @@ -719,7 +725,7 @@ function process_8(&$general) { if($r['fail'] > $rd) { $score = CriticalScore($score, 1); $log[] = "●{$admin['month']}월:{$dtype}을 실패하여 $score 강화했습니다. <1>$date"; - } elseif($city['rate'] >= 80 && $r['succ'] > $rd) { + } elseif($r['succ'] + $r['fail'] > $rd) { $score = CriticalScore($score, 0); $log[] = "●{$admin['month']}월:{$dtype}을 성공하여 $score 강화했습니다. <1>$date"; } else { @@ -821,7 +827,7 @@ function process_9(&$general) { MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); } - switch(rand()%3) { + switch(Util::choiceRandomUsingWeight([$general['leader'], $general['power'], $general['intel']])) { case 0: $general['leader2']++; $query = "update general set resturn='SUCCESS',leader2='{$general['leader2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'"; @@ -1001,7 +1007,7 @@ function process_11(&$general, $type) { $exp = $crew; $ded = $crew; // 숙련도 증가 - addGenDex($general['no'], $armtype, $crew); + addGenDex($general['no'], GameConst::$maxatmos, GameConst::$maxtrain, $armtype, $crew); // 성격 보정 $exp = CharExperience($exp, $general['personal']); $ded = CharDedication($ded, $general['personal']); @@ -1071,7 +1077,7 @@ function process_13(&$general) { $exp = 100; $ded = 70; // 숙련도 증가 - addGenDex($general['no'], $general['crewtype'], Util::round($general['crew']/100)); + addGenDex($general['no'], GameConst::$maxatmos, GameConst::$maxtrain, $general['crewtype'], Util::round($general['crew']/100)); // 성격 보정 $exp = CharExperience($exp, $general['personal']); $ded = CharDedication($ded, $general['personal']); @@ -1143,7 +1149,7 @@ function process_14(&$general) { $exp = 100; $ded = 70; // 숙련도 증가 - addGenDex($general['no'], $general['crewtype'], Util::round($general['crew']/100)); + addGenDex($general['no'], GameConst::$maxatmos, GameConst::$maxtrain, $general['crewtype'], Util::round($general['crew']/100)); // 성격 보정 $exp = CharExperience($exp, $general['personal']); $ded = CharDedication($ded, $general['personal']); @@ -1219,7 +1225,7 @@ function process_15(&$general) { $exp = 100 * 3; $ded = 70 * 3; // 숙련도 증가 - addGenDex($general['no'], $general['crewtype'], Util::round($general['crew']/100 * 3)); + addGenDex($general['no'], GameConst::$maxatmos, GameConst::$maxtrain, $general['crewtype'], Util::round($general['crew']/100 * 3)); // 성격 보정 $exp = CharExperience($exp, $general['personal']); $ded = CharDedication($ded, $general['personal']); @@ -1307,7 +1313,7 @@ function process_16(&$general) { $query = "update city set state=43,term=3 where city='{$destcity['city']}'"; MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); // 숙련도 증가 - addGenDex($general['no'], $general['crewtype'], Util::round($general['crew']/100)); + addGenDex($general['no'], GameConst::$maxatmos, GameConst::$maxtrain, $general['crewtype'], Util::round($general['crew']/100)); // 전투 처리 $dead = processWar($general, $destcity); @@ -1812,17 +1818,17 @@ function process_41(&$general) { if($ratio < 33) { // 숙련도 증가 - addGenDex($general['no'], $general['crewtype'], $crewexp); + addGenDex($general['no'], GameConst::$maxatmos, GameConst::$maxtrain, $general['crewtype'], $crewexp); $log[] = "●{$admin['month']}월:$crewstr 숙련도 향상이 지지부진했습니다. <1>$date"; } elseif($ratio < 66) { $exp = $exp * 2; // 숙련도 증가 - addGenDex($general['no'], $general['crewtype'], $crewexp * 2); + addGenDex($general['no'], GameConst::$maxatmos, GameConst::$maxtrain, $general['crewtype'], $crewexp * 2); $log[] = "●{$admin['month']}월:$crewstr 숙련도가 향상되었습니다. <1>$date"; } else { $exp = $exp * 3; // 숙련도 증가 - addGenDex($general['no'], $general['crewtype'], $crewexp * 3); + addGenDex($general['no'], GameConst::$maxatmos, GameConst::$maxtrain, $general['crewtype'], $crewexp * 3); $log[] = "●{$admin['month']}월:$crewstr 숙련도가 일취월장했습니다. <1>$date"; } @@ -2458,7 +2464,7 @@ function process_49(&$general) { MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); // 경험치 상승 - switch(rand()%3) { + switch(Util::choiceRandomUsingWeight([$general['leader'], $general['power'], $general['intel']])) { case 0: $general['leader2']++; $query = "update general set leader2='{$general['leader2']}' where no='{$general['no']}'"; diff --git a/hwe/func_process_personnel.php b/hwe/func_process_personnel.php index 83300a8f..fcd60126 100644 --- a/hwe/func_process_personnel.php +++ b/hwe/func_process_personnel.php @@ -132,9 +132,15 @@ function process_25(&$general) { } elseif(strpos($general['nations'], ",{$nation['nation']},") > 0) { $log[] = "●{$admin['month']}월:이미 임관했었던 국가입니다. 임관 실패. <1>$date"; } else { - $alllog[] = "●{$admin['month']}월:{$general['name']}(이)가 {$nation['name']}임관했습니다."; - $log[] = "●{$admin['month']}월:{$nation['name']}에 임관했습니다. <1>$date"; - pushGeneralHistory($general, "●{$admin['year']}년 {$admin['month']}월:{$nation['name']}에 임관"); + if($where == 99 || $where == 98) { + $alllog[] = "●{$admin['month']}월:{$general['name']}(이)가 어쩌다보니 {$nation['name']}임관했습니다."; + $log[] = "●{$admin['month']}월:{$nation['name']}에 랜덤으로 임관했습니다. <1>$date"; + pushGeneralHistory($general, "●{$admin['year']}년 {$admin['month']}월:{$nation['name']}에 임관"); + } else { + $alllog[] = "●{$admin['month']}월:{$general['name']}(이)가 {$nation['name']}임관했습니다."; + $log[] = "●{$admin['month']}월:{$nation['name']}에 임관했습니다. <1>$date"; + pushGeneralHistory($general, "●{$admin['year']}년 {$admin['month']}월:{$nation['name']}에 임관"); + } if($gencount < 10) { $exp = 700; } else { $exp = 100; } @@ -227,7 +233,7 @@ function process_29(&$general) { if(rand() % $criteria > 0) { $exp = 100; $ded = 70; - switch(rand()%3) { + switch(Util::choiceRandomUsingWeight([$general['leader'], $general['power'], $general['intel']])) { case 0: $general['leader2'] += 1; break; case 1: $general['power2'] += 1; break; case 2: $general['intel2'] += 1; break; @@ -237,7 +243,7 @@ function process_29(&$general) { // 탐색 성공 $exp = 200; $ded = 300; - switch(rand()%3) { + switch(Util::choiceRandomUsingWeight([$general['leader'], $general['power'], $general['intel']])) { case 0: $general['leader2'] += 3; break; case 1: $general['power2'] += 3; break; case 2: $general['intel2'] += 3; break; diff --git a/hwe/func_process_trick.php b/hwe/func_process_trick.php index c97e6519..a7a22c35 100644 --- a/hwe/func_process_trick.php +++ b/hwe/func_process_trick.php @@ -458,7 +458,7 @@ function process_35(&$general) { } elseif($dip['state'] >= 7) { $log[] = "●{$admin['month']}월:불가침국입니다. {$destcity['name']}에 선동 실패. <1>$date"; } else { - $query = "select leader,horse,power,weap,intel,book,injury 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 leader desc"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $gen = MYDB_fetch_array($result); diff --git a/hwe/join_post.php b/hwe/join_post.php index a757c5b0..b32e63bb 100644 --- a/hwe/join_post.php +++ b/hwe/join_post.php @@ -136,7 +136,7 @@ $pleader = 0; $ppower = 0; $pintel = 0; for ($statBonusCnt = 3 + mt_rand(0, 2); $statBonusCnt > 0; $statBonusCnt--) { - switch (Util::choiceRandomUsingWeight(array($leader, $power, $intel))) { + switch (Util::choiceRandomUsingWeight([$leader, $power, $intel])) { case 0: $pleader++; break; diff --git a/hwe/process_war.php b/hwe/process_war.php index 0d9e91a1..0d17ed57 100644 --- a/hwe/process_war.php +++ b/hwe/process_war.php @@ -272,11 +272,11 @@ function processWar($general, $city) { } } } elseif($general['crewtype'] == 40) { // 정란 - $cityCrew = $cityCrew * 1.5; + $cityCrew = $cityCrew * 1.8; } elseif($general['crewtype'] == 41) { // 충차 - $cityCrew = $cityCrew * 2.0; + $cityCrew = $cityCrew * 2.4; } elseif($general['crewtype'] == 42) { // 벽력거 - $cityCrew = $cityCrew * 1.5; + $cityCrew = $cityCrew * 1.8; } //군주 공격 보정 10% if($general['level'] == 12) { @@ -316,13 +316,14 @@ function processWar($general, $city) { //회피 $ratio = rand() % 100; // 0 ~ 99 $ratio2 = GameUnitConst::byID($general['crewtype'])->avoid; //회피율 + $ratio2 = Util::round($ratio2 * $general['train'] / 100); //훈련 반영 //특기보정 : 궁병 if($general['special2'] == 51) { $ratio2 += 20; } //도구 보정 : 둔갑천서, 태평요술 if($general['item'] == 26 || $general['item'] == 25) { $ratio2 += 20; } if($ratio < $ratio2 && $avoid == 1) { $batlog[] = "회피했다!"; - $myCrew /= 10; // 10%만 소모 + $myCrew /= 5; // 20%만 소모 $avoid = 0; } @@ -456,8 +457,8 @@ function processWar($general, $city) { $query = "update general set crew='{$general['crew']}',killcrew=killcrew+'$mykillnum',deathcrew=deathcrew+'$mydeathnum' where no='{$general['no']}'"; MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); // 숙련도 증가 - addGenDex($general['no'], $general['crewtype'], $mykillnum); - addGenDex($general['no'], 40, $mydeathnum); + addGenDex($general['no'], $general['atmos'], $general['train'], $general['crewtype'], $mykillnum); + addGenDex($general['no'], $general['atmos'], $general['train'], 40, $mydeathnum); // 죽은수 기술로 누적 $num = Util::round($mydeathnum * 0.01); // 국가보정 @@ -1137,6 +1138,7 @@ function processWar($general, $city) { //회피 $ratio = rand() % 100; // 0 ~ 99 $ratio2 = GameUnitConst::byID($general['crewtype'])->avoid; //회피율 + $ratio2 = Util::round($ratio2 * $general['train'] / 100); //훈련 반영 //특기보정 : 돌격, 궁병 if($oppose['special2'] == 60) { $ratio2 -= 100; } if($general['special2'] == 51) { $ratio2 += 20; } @@ -1152,13 +1154,14 @@ function processWar($general, $city) { } else { $batlog[] = "회피했다!"; $oppbatlog[] = "●상대가 회피했다!"; - $myCrew /= 10; // 10%만 소모 + $myCrew /= 5; // 20%만 소모 $myAvoid = 0; } } //회피 $ratio = rand() % 100; // 0 ~ 99 $ratio2 = GameUnitConst::byID($oppose['crewtype'])->defence; //회피율 + $ratio2 = Util::round($ratio2 * $oppose['train'] / 100); //훈련 반영 // 특기보정 : 돌격, 궁병 if($general['special2'] == 60) { $ratio2 -= 100; } if($oppose['special2'] == 51) { $ratio2 += 20; } @@ -1180,7 +1183,7 @@ function processWar($general, $city) { } else { $oppbatlog[] = "회피했다!"; $batlog[] = "●상대가 회피했다!"; - $opCrew /= 10; // 10%만 소모 + $opCrew /= 5; // 20%만 소모 $opAvoid = 0; } } @@ -1329,8 +1332,8 @@ function processWar($general, $city) { $query = "update general set injury='{$oppose['injury']}',crew='{$oppose['crew']}',killcrew=killcrew+'$opkillnum',deathcrew=deathcrew+'$opdeathnum' where no='{$oppose['no']}'"; MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); // 숙련도 증가 - addGenDex($oppose['no'], $oppose['crewtype'], $opkillnum * 0.9); - addGenDex($oppose['no'], $general['crewtype'], $opdeathnum * 0.9); + addGenDex($oppose['no'], $general['atmos'], $general['train'], $oppose['crewtype'], $opkillnum * 0.9); + addGenDex($oppose['no'], $general['atmos'], $general['train'], $general['crewtype'], $opdeathnum * 0.9); // 죽은수 기술로 누적 $num = Util::round($mydeathnum * 0.01); // 국가보정 @@ -1352,8 +1355,8 @@ function processWar($general, $city) { $query = "update general set injury='{$general['injury']}',crew='{$general['crew']}',killcrew=killcrew+'$mykillnum',deathcrew=deathcrew+'$mydeathnum' where no='{$general['no']}'"; MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); // 숙련도 증가 - addGenDex($general['no'], $general['crewtype'], $mykillnum); - addGenDex($general['no'], $oppose['crewtype'], $mydeathnum); + addGenDex($general['no'], $general['atmos'], $general['train'], $general['crewtype'], $mykillnum); + addGenDex($general['no'], $general['atmos'], $general['train'], $oppose['crewtype'], $mydeathnum); // 죽은수 기술로 누적 $num = Util::round($opdeathnum * 0.01); // 국가보정 @@ -1548,10 +1551,10 @@ function CriticalRatio3($general) { $ratio = max($mainstat - 65, 0); if ($crewtype >= 3) { - $ratio /= 2; + $ratio *= 0.4; } else{ - $ratio *= 0.7; + $ratio *= 0.5; } $ratio = round($ratio); @@ -1562,20 +1565,6 @@ function CriticalRatio3($general) { return $ratio; } -function CriticalRatio2($leader, $power, $intel) { - // 707010장수 9% 706515장수 17% 706020장수 25% xx50xx장수 57% - if($leader <= $power && $leader <= $intel) { // 통솔이 제일 낮은경우 - $ratio = sqrt($leader/($leader+$power+$intel))*150 - 30; - } elseif($power < $leader && $power <= $intel) { // 무력이 제일 낮은경우 - $ratio = sqrt($power /($leader+$power+$intel))*150 - 30; - } elseif($intel < $leader && $intel < $power) { // 지력이 제일 낮은경우 - $ratio = sqrt($intel /($leader+$power+$intel))*150 - 30; - } - - if($ratio > 50) $ratio = 50; - return $ratio; -} - function CriticalScore2($score) { $score = Util::round($score * (rand()%8 + 13)/10); // 1.3~2.0 return $score; diff --git a/hwe/sql/schema.sql b/hwe/sql/schema.sql index 6a4b4ccb..a1dfd6fb 100644 --- a/hwe/sql/schema.sql +++ b/hwe/sql/schema.sql @@ -192,7 +192,6 @@ create table nation ( l5set int(1) default 0, scout int(1) default 0, war int(1) default 0, - myset int(1) default 3, tricklimit int(4) default 36, surlimit int(4) default 72, scoutmsg text default '',