Welcome to the Browser-Base Game Zone forums!
function testSkill($skill_level) { $random = rand(1, $skill_level); //generate random number up to skill level $x = log($random, 3); //normalize the random value return (1/(1+exp(-$x+4)*2))*5; //calculate skill gain}$result = testSkill($x);$gain = ceil($result);//Or $gain = round($result);
$chances1=array(30, 60, 10, 0, 0, 0);$chances10=array(20, 40, 40, 0, 0, 0);$chances100=array(20, 10, 40, 30, 0, 0);$chances1000=array(20, 0, 10, 30, 35, 5);$chances10000=array(20, 0, 5, 30, 35, 10);if($level<10) {$src_chances=$chances1; $dst_chances=$chances10; $start=1;$end=10;}elseif($level<100) {$src_chances=$chances10; $dst_chances=$chances100; $start=10;$end=100;}elseif($level<1000) {$src_chances=$chances100; $dst_chances=$chances1000; $start=100;$end=1000;}else {$src_chances=$chances1000; $dst_chances=$chances10000; $start=1000;$end=10000;}if($level>10000) $level=10000; // dirty cap.$x1=$start;$y1=$src_chances[0];$x2=$end;$y2=$dst_chances[0];$targetx=$level; $targety0=$y1+($y2-$y1)*($targetx-$x1)/($x2-$x1);$y1=$src_chances[1];$y2=$dst_chances[1];$targety1=$y1+($y2-$y1)*($targetx-$x1)/($x2-$x1);$chances=array($targety0, $targety1, ...);