137 lines
4.1 KiB
PHP
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;
|
|
|
|
}
|