Поэтому я работаю над «симулятором вскрытия сундуков» с моим клиентом и завершил всю систему, за исключением фактической вероятностной части.
Он послал мне этот расчет и алгоритм того, как должны работать различные раритеты и предметы.
Теперь я полностью застрял здесь, но, посмотрев на эту логику, если я кидаю игральные кости 1-100, а они выпадают на 2, я попаду на уровень «Супер Редкий» правильно?
Я сделал функцию для бросания игральных костей, которая находится между 0,00-100,00 и которая является справедливо доказанной (с использованием начального числа клиента клиента и случайного начального числа сервера + одноразовый номер для каждого броска), который вы можете найти ниже, как бы я использовал эту функцию для определения какой из уровней я выбрал и какой элемент в пределах уровня?
public function roll()
{
$client_seed = "client_seed";
$server_seed = "server_seed";
$nonce = 0;
$secret = $client_seed."-".$nonce;
$hash = hash_hmac('sha512', $secret, $server_seed); // Hash server_seed and secret
for($i = 0; $i < strlen($hash); $i += 5)
{
$sub = substr($hash, $i, 5); //Split it
if(strlen($sub) == 5)
{
$decimal_number = hexdec($sub); // Hex to decimal. At this point we have a random number
if($decimal_number < 1000000)
{
$decimal_fourc = bcmod($decimal_number, 10000); //Get the modulus
$final_decimal = bcdiv($decimal_fourc, 100, 2); //Divide the result by 100
$obj = new \stdClass();
$obj->seeds = new \stdClass();
$obj->seeds->server = $server_seed;
$obj->seeds->client = $client_seed;
$obj->result = new \stdClass();
$obj->result->nonce = $nonce;
$obj->result->lucky_number = number_format($final_decimal, 2);
}
} else {
break;
}
}
echo "<pre>";
print_r($obj);
echo "</pre>";
}
Задача ещё не решена.
Других решений пока нет …