Проблема с алгоритмом выпадения предметов. Дубликат
Накидал вот такой вариант для проверки:
<?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, т.к. алгоритм перестаёт быть универсальным из-за разной стоимости кейсов и предметов в них. Так вот, как сделать так чтобы
- Алгоритм был универсальным
- Прибыль была равна примерно 0
- И работало всё быстро и без внушительных задержек.
Так сказать получится поймать 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 )
Буду крайне благодарен тем кто хоть как-то поможет в решении проблемы.