Работая над вероятностью и доказуемо справедливой функцией открытия сундука, я думаю правильно? - PullRequest
0 голосов
/ 07 января 2019

Calculation to  work with

Итак, я работаю над «симулятором вскрытия сундуков» с моим клиентом и завершил всю систему, за исключением фактической вероятностной части.

Он прислал мне этот расчет и алгоритм того, как должны работать различные раритеты и предметы.

Теперь я полностью застрял здесь, но, посмотрев на эту логику, если я брошу игральные кости 1-100, а они приземляются на 2, я попаду на уровень "Супер Редкий" правильно?

Я сделал функцию для бросания игральных костей, которая составляет от 0,00 до 100,00, и которая является достоверно справедливой (с использованием клиентского начального числа пользователей и случайного начального числа сервера + одноразовый номер для каждого броска), который вы можете найти ниже, как бы я использовал это функция для определения, какой из уровней я попал и какой элемент в пределах уровня?

<code>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 "
"; }
...