88 lines
2.4 KiB
PHP
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;
|
|
|
|
}
|