game2006api/webapp/mt/BattleRandAttribute.php
hujiabin 95a512d44c 1
2024-08-07 14:40:30 +08:00

88 lines
2.4 KiB
PHP

<?php
namespace mt;
use phpcommon;
class BattleRandAttribute {
public static function get($id)
{
return getXVal(self::getMetaList(), $id);
}
public static function getByWeight($invoke,$quality){
$metaList = self::getByInvoke($invoke,$quality);
$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);
if (count($attrStr) == 3){
$rnd = rand($attrStr[1]*100000 , $attrStr[2]*100000) / 100000;
array_push($attrArray,array(
"attr_id" => $attrStr[0],
"val" => $rnd,
));
}
}
return $attrArray;
}
public static function mergeAttr($attr1 , $attr2){
$mergedAttr = array_merge($attr1, $attr2);
$newAttr = array();
foreach ($mergedAttr as $attr){
if (isset($newAttr[$attr['attr_id']])){
$newAttr[$attr['attr_id']]['val'] += $attr['val'];
}else{
$newAttr[$attr['attr_id']] = $attr;
}
}
return array_values($newAttr);
}
public static function getByInvoke($invoke,$quality){
$metaList = array();
foreach (self::getMetaList() as $meta){
$rateNeed = explode('|', $meta['rareNeed']);
if ($meta['invoke'] == $invoke && in_array($quality,$rateNeed)){
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;
}