game2006api/webapp/mt/BattleRandAttribute.php
hujiabin 2cb9bc1bc8 1
2024-01-25 16:04:16 +08:00

73 lines
1.8 KiB
PHP

<?php
namespace mt;
use phpcommon;
class BattleRandAttribute {
public static function get($id)
{
return getXVal(self::getMetaList(), $id);
}
public static function getByWeight($invoke){
$metaList = self::getByInvoke($invoke);
$totalWeight = 0;
$randMeta = array();
if ($metaList){
foreach ($metaList as $meta){
$totalWeight += $meta['qualityWeight'];
}
$rnd = rand() % $totalWeight;
$currWeight = 0;
foreach ($metaList as $meta){
$currWeight += $meta['qualityWeight'];
if ($currWeight > $rnd) {
$randMeta = $meta;
break;
}
}
}
return $randMeta;
}
public static function getRandAttr($randMeta){
$attrArray = array();
$strs = explode('|', $randMeta['attributeRange']);
foreach ($strs as $str){
$attrStr = explode(':', $str);
$rnd = rand($attrStr[1]*100000 , $attrStr[2]*100000) / 100000;
$val = $attrStr[1] + ($attrStr[2] - $attrStr[1]) * $rnd;
array_push($attrArray,array(
"attr_id" => $attrStr[0],
"val" => $val,
));
}
return $attrArray;
}
protected static function getByInvoke($invoke){
$metaList = array();
foreach (self::getMetaList() as $meta){
if ($meta['invoke'] == $invoke){
array_push($metaList,$meta);
}
}
return $metaList;
}
protected static function getMetaList()
{
if (!self::$metaList) {
self::$metaList = getMetaTable('battleRandAttribute@battleRandAttribute.php');
}
return self::$metaList;
}
protected static $metaList;
}