Проблема с алгоритмом выпадения предметов. php

Накидал вот такой вариант для проверки:

<?php 
include __DIR__ . '/core/database/db.php'; 
 
$case = $db->query("SELECT `cost`, `title` FROM `cases` WHERE `id` = '6'")->fetch_assoc(); 
$skins = $db->query("SELECT `cost` FROM `skins` WHERE `case` = '$case[title]'"); 
 
$balance = 0; 
 
$drop = []; 
for ($open = 0; $open < 100; $open++) { 
  foreach ($skins as $skin) { 
    $weight = $case['cost'] / $skin['cost']; 
    $drop = array_merge($drop, array_fill(0, $weight, $skin)); 
  } 
  $drop = $drop[rand(0, count($drop) - 1)]; 
  $balance = $balance + $drop['cost']; 
} 
 
echo 'Потрачено: '. $open * $case['cost']; 
echo '<br>'; 
echo 'Получено: '. $balance; 
echo '<br>'; 
echo 'Прибыль: '. $balance - $open * $case['cost']; 
echo '<br>'; 
echo 'Открыто: ' . $open; 

Но этот алгоритм уводит в минус из-за через чур малой цены некоторых предметов:

Потрачено: 3900
Получено: 16.08
Прибыль: -3883.92
Открыто: 100

Думал может получится исправить так:

<?php 
include __DIR__ . '/core/database/db.php'; 
 
$case = $db->query("SELECT `cost`, `title` FROM `cases` WHERE `id` = '6'")->fetch_assoc(); 
$skins = $db->query("SELECT `cost` FROM `skins` WHERE `case` = '$case[title]'"); 
 
$balance = 0; 
 
$coefficient = 1.2; 
$drop = []; 
for ($open = 0; $open < 100; $open++) { 
  foreach ($skins as $skin) { 
    $weight = ($skin['cost'] > $case['cost']) ? ($case['cost'] / $skin['cost']) * $coefficient : 1; 
    $drop = array_merge($drop, array_fill(0, $weight * 10000, $skin)); 
  } 
  $drop = $drop[rand(0, count($drop) - 1)]; 
  $balance = $balance + $drop['cost']; 
} 
 
echo 'Потрачено: '. $open * $case['cost']; 
echo '<br>'; 
echo 'Получено: '. $balance; 
echo '<br>'; 
echo 'Прибыль: '. $balance - $open * $case['cost']; 
echo '<br>'; 
echo 'Открыто: ' . $open; 

И он действительно исправляет проблему:

Потрачено: 3900 
Получено: 4665.02 
Прибыль: 765.02 
Открыто: 100

НО как вы могли заметить появился параметр $coefficient, т.к. алгоритм перестаёт быть универсальным из-за разной стоимости кейсов и предметов в них. Так вот, как сделать так чтобы

  1. Алгоритм был универсальным
  2. Прибыль была равна примерно 0
  3. И работало всё быстро и без внушительных задержек.

Так сказать получится поймать 3 зайцев сразу?

Также вот что находится в переменной $case

Array ( [cost] => 39 [title] => sharp );

И вот что в $skins

Array ( [cost] => 1399.00 ) 
Array ( [cost] => 1600.00 ) 
Array ( [cost] => 1478.00 ) 
Array ( [cost] => 1050.00 ) 
Array ( [cost] => 309.00 ) 
Array ( [cost] => 279.00 ) 
Array ( [cost] => 93.00 ) 
Array ( [cost] => 108.90 ) 
Array ( [cost] => 130.00 ) 
Array ( [cost] => 23.00 ) 
Array ( [cost] => 29.00 ) 
Array ( [cost] => 31.00 ) 
Array ( [cost] => 109.00 ) 
Array ( [cost] => 2.30 ) 
Array ( [cost] => 4.59 ) 
Array ( [cost] => 24.00 ) 
Array ( [cost] => 10.00 ) 
Array ( [cost] => 12.80 ) 
Array ( [cost] => 0.54 ) 
Array ( [cost] => 0.45 ) 
Array ( [cost] => 0.50 ) 
Array ( [cost] => 0.10 ) 
Array ( [cost] => 0.10 ) 
Array ( [cost] => 0.09 ) 
Array ( [cost] => 0.09 )

Буду крайне благодарен тем кто хоть как-то поможет в решении проблемы.


Ответы (0 шт):