2021-11-23 19:34:17 +08:00

137 lines
4.1 KiB
PHP

<?php
namespace mt;
use phpcommon;
class Box {
public static function get($id)
{
return array_key_exists($id, self::getMetaList()) ? self::getMetaList()[$id] : null;
}
public static function getOldBox($id)
{
$meta = self::get($id);
if (!$meta) {
return null;
}
return array(
'box_id' => $$meta['box_type'],
'item_id' => $$meta['item_id'],
'num' => $$meta['num'],
'weight' => $$meta['weight'],
'type' => $$meta['type'],
'time' => $$meta['time'],
'count' => $$meta['count'],
);
}
public static function randomBox($id, &$itemList, $cb = null)
{
$meta = self::get($id);
if ($meta) {
$ids = splitStr1($meta['item_id']);
$times = splitStr1($meta['time']);
$nums = splitStr1($meta['num']);
$weights = splitStr1($meta['weight']);
$totalWeights = 0;
foreach ($weights as $weight) {
$totalWeights += $weight;
}
if (count($ids) == count($times) &&
count($ids) == count($nums) &&
count($ids) == count($weights) &&
count($ids) > 0 &&
$totalWeights > 0
) {
$rnd = rand(0, $totalWeights);
$currWeight = 0;
$i = 0;
foreach ($weights as $weight) {
$currWeight += $weight;
if ($currWeight > $rnd) {
if ($cb && !$cb($ids[i])){
continue;
}
array_push($itemList, array(
'item_id' => $ids[$i],
'item_num' => $nums[$i],
'time' => $times[$i]
));
if ($id == 8) { //这是为啥???
array_push($itemList, array(
'item_id' => $ids[$i]+ 2000,
'item_num' => $nums[$i],
'time' => $times[$i]
));
}
break;
}//end if
++$i;
}
}
}
}
public static function randomBoxNN($id, &$itemList)
{
$meta = self::get($id);
if ($meta) {
$ids = splitStr1($meta['item_id']);
$times = splitStr1($meta['time']);
$nums = splitStr1($meta['num']);
$weights = splitStr1($meta['weight']);
if (count($ids) == count($times) &&
count($ids) == count($nums) &&
count($ids) == count($weights) &&
count($ids) > 0
) {
$i = 0;
foreach ($weights as $weight) {
$rnd = rand(0, 10000);
if ($weight >= $rnd) {
array_push($itemList, array(
'item_id' => $ids[$i],
'item_num' => $nums[$i],
'time' => $times[$i]
));
}//end if
++$i;
}
}
}
}
public static function randomBoxNew($id, &$itemList)
{
$meta = self::get($id);
if ($meta) {
$cb = function ($itemId) use(&$itemList) {
foreach ($itemList as $item) {
if ($item['item_id'] == $itemId) {
return false;
}
}
return true;
};
for ($i = 0; $i < $meta['count']; ++$i) {
self::randomBox($id, $itemList, $cb);
}
}
}
protected static function getMetaList()
{
if (!self::$metaList) {
self::$metaList = getMetaTable('box@box.php');
}
return self::$metaList;
}
protected static $metaList;
}