117 lines
3.6 KiB
PHP
117 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace mt;
|
|
|
|
use phpcommon;
|
|
|
|
class GunQuality {
|
|
|
|
public static function get($id)
|
|
{
|
|
return getXVal(self::getMetaList(), $id);
|
|
}
|
|
|
|
public static function getByQuality($quality)
|
|
{
|
|
self::mustBeQualityHash();
|
|
return getXVal(self::$qualityHash, $quality, null);
|
|
}
|
|
|
|
public static function getCoefficientByQuality($quality,$gun_id){
|
|
$meta = self::getByQuality($quality);
|
|
return [
|
|
[
|
|
'attr_id'=>kHAT_Volume,
|
|
'val' => self::_getCoefficient($meta,$gun_id,'clip_volume_rate')
|
|
], [
|
|
'attr_id'=>kHAT_ReloadTime,
|
|
'val' => self::_getCoefficient($meta,$gun_id,'reload_time_rate')
|
|
], [
|
|
'attr_id'=>kHAT_FireRate,
|
|
'val' => self::_getCoefficient($meta,$gun_id,'fire_rate_rate')
|
|
], [
|
|
'attr_id'=>kHAT_Atk,
|
|
'val' => self::_getCoefficient($meta,$gun_id,'atk_rate')
|
|
], [
|
|
'attr_id'=>kHAT_BulletSpeed,
|
|
'val' => self::_getCoefficient($meta,$gun_id,'bullet_speed_rate')
|
|
], [
|
|
'attr_id'=>kHAT_ShotRange,
|
|
'val' => self::_getCoefficient($meta,$gun_id,'range')
|
|
], [
|
|
'attr_id'=>kHAT_Critical,
|
|
'val' => self::_getCoefficient($meta,$gun_id,'crit_atk_rate')
|
|
], [
|
|
'attr_id'=>kHAT_CriDamage,
|
|
'val' => self::_getCoefficient($meta,$gun_id,'damage_rate')
|
|
],
|
|
];
|
|
}
|
|
|
|
private static function _getCoefficient($meta,$hero_id,$title){
|
|
if ($meta[$title.'2']){
|
|
$item = explode('|',$meta[$title.'2']);
|
|
foreach ($item as $val){
|
|
$item_1 = explode(':',$val);
|
|
if ($item_1[0] == $hero_id){
|
|
return $item_1[1];
|
|
}
|
|
}
|
|
return $meta[$title];
|
|
}
|
|
return $meta[$title];
|
|
}
|
|
|
|
public static function getRandAttr($qualityMeta)
|
|
{
|
|
$nums = explode(':', $qualityMeta['rand_attrs_num']);
|
|
$attrs = StrHelper::parseList($qualityMeta['rand_attrs'], array('|', ':'));
|
|
$num = rand($nums[0], $nums[1]);
|
|
shuffle($attrs);
|
|
$result = array();
|
|
$i = 0;
|
|
foreach ($attrs as $item) {
|
|
if ($i < $num) {
|
|
array_push($result,
|
|
array(
|
|
'attr_id' => $item[0],
|
|
'type' => $item[1],
|
|
'val' => rand($item[2], $item[3])
|
|
));
|
|
}
|
|
++$i;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
protected static function getMetaList()
|
|
{
|
|
if (!self::$metaList) {
|
|
self::$metaList = getMetaTable('gunQuality@gunQuality.php');
|
|
foreach (self::$metaList as $key=>$value){
|
|
if ($value['id'] == 1){
|
|
self::$metaList[$key]['promote_val'] = (1+$value['promote']/100);
|
|
}else{
|
|
self::$metaList[$key]['promote_val'] = (1+$value['promote']/100)*self::$metaList[$key-1]['promote_val'];
|
|
}
|
|
|
|
}
|
|
}
|
|
return self::$metaList;
|
|
}
|
|
|
|
protected static function mustBeQualityHash()
|
|
{
|
|
if (!self::$qualityHash) {
|
|
self::$qualityHash = array();
|
|
foreach (self::getMetaList() as $meta) {
|
|
self::$qualityHash[$meta['quality']] = $meta;
|
|
}
|
|
}
|
|
}
|
|
|
|
protected static $metaList;
|
|
protected static $qualityHash;
|
|
|
|
}
|