diff --git a/che_close/func.php b/che_close/func.php index 96aeb76..b61a88e 100644 --- a/che_close/func.php +++ b/che_close/func.php @@ -12,6 +12,32 @@ function randF(){ return mt_rand() / mt_getrandmax(); } +/** + * 각 값의 비중에 따라 랜덤한 값을 선택 + * + * @param array 각 수치의 비중 + * + * @return object 선택된 랜덤 값의 key값. 단순 배열인 경우에는 index + */ +function ChooseRandomItem($items){ + $sum = 0; + foreach($items as $value){ + $sum += $value; + } + + $rd = randF()*$sum; + foreach($items as $key=>$value){ + if($rd <= $value){ + return $key; + } + $rd -= $value; + } + + //fallback. 이곳으로 빠지지 않음 + end($items); + return key($items); +} + // 37.5 ~ 75 function abilityRand() { $total = 150; diff --git a/che_close/func_process.php b/che_close/func_process.php index f152862..b751b86 100644 --- a/che_close/func_process.php +++ b/che_close/func_process.php @@ -805,7 +805,7 @@ function process_9($connect, &$general) { MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); } - switch(rand()%3) { + switch(ChooseRandomItem(array($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]'"; @@ -1981,7 +1981,7 @@ function process_29($connect, &$general) { if(rand() % $criteria > 0) { $exp = 100; $ded = 70; - switch(rand()%3) { + switch(ChooseRandomItem(array($general['leader'], $general['power'], $general['intel']))) { case 0: $general[leader2] += 1; break; case 1: $general[power2] += 1; break; case 2: $general[intel2] += 1; break; @@ -1991,7 +1991,7 @@ function process_29($connect, &$general) { // 탐색 성공 $exp = 200; $ded = 300; - switch(rand()%3) { + switch(ChooseRandomItem(array($general['leader'], $general['power'], $general['intel']))) { case 0: $general[leader2] += 3; break; case 1: $general[power2] += 3; break; case 2: $general[intel2] += 3; break; @@ -3934,7 +3934,7 @@ function process_49($connect, &$general) { MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); // 경험치 상승 - switch(rand()%3) { + switch(ChooseRandomItem(array($general['leader'], $general['power'], $general['intel']))) { case 0: $general[leader2]++; $query = "update general set leader2='$general[leader2]' where no='$general[no]'";