273 lines
9.6 KiB
PHP
273 lines
9.6 KiB
PHP
<?php
|
|
|
|
namespace services;
|
|
|
|
require_once('mt/AttrHelper.php');
|
|
require_once('mt/Item.php');
|
|
require_once('mt/FormulaPvp.php');
|
|
require_once('mt/HeroQuality.php');
|
|
require_once('mt/GunQuality.php');
|
|
|
|
use mt;
|
|
|
|
class FormulaService extends BaseService {
|
|
|
|
public static function getHeroPvpDailyCegUpLimit($heroDb)
|
|
{
|
|
//ROUND((0.0402*角色NFT阶数^3-0.9459*角色NFT阶数^2+11.9664*角色NFT阶数+4.01892)+(0.0268*角色幸运值^3-2.15712*角色幸运值^2+60.944*角色幸运值-560.24),0)+系统参数
|
|
$sysParam = 0;
|
|
$qualityMeta = mt\HeroQuality::getByQuality($heroDb['quality']);
|
|
$lucky = $qualityMeta ? $qualityMeta['lucky'] : 0;
|
|
$upLimit = round(
|
|
(
|
|
0.0402*pow($heroDb['quality'],3) -
|
|
0.9459*pow($heroDb['quality'],2) +
|
|
11.9664*$heroDb['quality'] +
|
|
4.01892
|
|
) +
|
|
(
|
|
0.0268*pow($lucky, 3) -
|
|
2.15712*pow($lucky, 2) +
|
|
60.944*$lucky -
|
|
560.24
|
|
)
|
|
) + $sysParam;
|
|
return $upLimit;
|
|
}
|
|
|
|
public static function getHeroPveDailyCegUpLimit($heroDb)
|
|
{
|
|
//ROUND((0.0938*角色NFT阶数^3-2.2071*角色NFT阶数^2+27.9216*角色NFT阶数+9.3776)+(0.0625*角色幸运值^3-5.0334*角色幸运值^2+142.2028*角色幸运值-1307.2268),0)+系统参数
|
|
$sysParam = 0;
|
|
$lucky = mt\AttrHelper::getAbsVal($heroDb['attr'], kHAT_LUCKY);
|
|
$upLimit = round(
|
|
(
|
|
0.0938*pow($heroDb['quality'],3) -
|
|
2.2071*pow($heroDb['quality'],2) +
|
|
27.9216*$heroDb['quality'] +
|
|
9.3776
|
|
) +
|
|
(
|
|
0.0625*pow($lucky, 3) -
|
|
5.0334*pow($lucky, 2) +
|
|
142.2028*$lucky -
|
|
1307.2268
|
|
)
|
|
) + $sysParam;
|
|
return $upLimit;
|
|
}
|
|
|
|
public static function calcHeroPvpCeg($heroDto, $params)
|
|
{
|
|
//PVP角色NFT每日获得极限*(50%*[每局排名TopX%对应比例]+25%*[每局PK人数排名TopX%对应比例]+15%*[每局英雄属性排名TopX%对应比例]+5%*[每局武器属性排名TopX%对应比例]+5%*[每局存活时间排名TopX%对应比例])
|
|
$upLimit = $heroDto['ceg_uplimit'];
|
|
$rankedTopX= getXVal($params, 'ranked_topx');
|
|
$killsTopX = getXVal($params, 'kills_topx');
|
|
$heroTopX = getXVal($params, 'hero_topx');
|
|
$weaponTopX = getXVal($params, 'weapon_topx');
|
|
$survivalTopX = getXVal($params, 'survival_topx');
|
|
$meta = mt\FormulaPvp::getByRanked($rankedTopX);
|
|
if (!$meta) {
|
|
return 0;
|
|
}
|
|
$ceg = $upLimit *
|
|
(
|
|
(0.5 * $rankedTopX * $meta['ranked_topx']) +
|
|
(0.25 * $killsTopX * $meta['kills_topx']) +
|
|
(0.15 * $heroTopX * $meta['hero_topx']) +
|
|
(0.5 * $weaponTopX * $meta['weapon_topx']) +
|
|
(0.5 * $survivalTopX * $meta['survival_topx'])
|
|
);
|
|
return round($ceg);
|
|
}
|
|
|
|
public static function calcHeroPveCeg($heroDb, $uplimit)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public static function getWeaponPvpDailyCegUpLimit($weaponDb)
|
|
{
|
|
//ROUND((0.0111*武器NFT阶数^3-0.25974*武器NFT阶数^2+3.29292*武器NFT阶数+1.3389)+(0.0074*武器幸运值^3-0.59396*武器幸运值^2+16.7708*武器幸运值-153.964),0)+系统参数
|
|
$sysParam = 0;
|
|
$qualityMeta = mt\GunQuality::getByQuality($weaponDb['quality']);
|
|
$lucky = $qualityMeta ? $qualityMeta['lucky'] : 0;
|
|
$upLimit = round(
|
|
(
|
|
0.0111*pow($weaponDb['quality'],3) -
|
|
0.25974*pow($weaponDb['quality'],2) +
|
|
3.29292*$weaponDb['quality'] +
|
|
1.3389
|
|
) +
|
|
(
|
|
0.0074*pow($lucky, 3) -
|
|
0.59396*pow($lucky, 2) +
|
|
16.7708*$lucky -
|
|
153.964
|
|
)
|
|
) + $sysParam;
|
|
return $upLimit;
|
|
}
|
|
|
|
public static function getWeaponPveDailyCegUpLimit($weaponDb)
|
|
{
|
|
//ROUND((0.0259*武器NFT阶数^3-0.6061*武器NFT阶数^2+7.6836*武器NFT阶数+3.1241)+(0.0174*武器幸运值^3-1.3859*武器幸运值^2+39.132*武器幸运值-359.2493),0)+系统参数
|
|
$sysParam = 0;
|
|
$lucky = 0;
|
|
$upLimit = round(
|
|
(
|
|
0.0259*pow($weaponDb['quality'],3) -
|
|
0.6061*pow($weaponDb['quality'],2) +
|
|
7.6836*$weaponDb['quality'] +
|
|
3.1241
|
|
) +
|
|
(
|
|
0.0174*pow($lucky, 3) -
|
|
1.3859*pow($lucky, 2) +
|
|
39.132*$lucky -
|
|
359.2493
|
|
)
|
|
) + $sysParam;
|
|
return $upLimit;
|
|
}
|
|
|
|
public static function calcWeaponPvpCeg($weaponDto, $params)
|
|
{
|
|
//PVP武器NFT每日获得极限*(50%*[每局排名TopX%对应比例]+25%*[每局PK人数排名TopX%对应比例]+15%*[每局英雄属性排名TopX%对应比例]+5%*[每局武器属性排名TopX%对应比例]+5%*[每局存活时间排名TopX%对应比例])
|
|
$upLimit = $weaponDto['ceg_uplimit'];
|
|
$rankedTopX= getXVal($params, 'ranked_topx');
|
|
$killsTopX = getXVal($params, 'kills_topx');
|
|
$heroTopX = getXVal($params, 'hero_topx');
|
|
$weaponTopX = getXVal($params, 'weapon_topx');
|
|
$survivalTopX = getXVal($params, 'survival_topx');
|
|
$meta = mt\FormulaPvp::getByRanked($rankedTopX);
|
|
if (!$meta) {
|
|
return 0;
|
|
}
|
|
$ceg = $upLimit *
|
|
(
|
|
(0.5 * $rankedTopX * $meta['ranked_topx']) +
|
|
(0.25 * $killsTopX * $meta['kills_topx']) +
|
|
(0.15 * $heroTopX * $meta['hero_topx']) +
|
|
(0.5 * $weaponTopX * $meta['weapon_topx']) +
|
|
(0.5 * $survivalTopX * $meta['survival_topx'])
|
|
);
|
|
return round($ceg);
|
|
}
|
|
|
|
public static function calcWeaponPveCeg($weaponDb)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public static function getHeroPvpTiliTotalValue($heroDb)
|
|
{
|
|
//ROUND((0.0241*角色NFT阶数^3-0.5675*角色NFT阶数^2+7.1798*角色NFT阶数+2.4114)+(0.0161*角色幸运值^3-1.2943*角色幸运值^2+36.5664*角色幸运值-336.144),0)+系统参数
|
|
$sysParam = 0;
|
|
$lucky = 0;
|
|
$upLimit = round(
|
|
(
|
|
0.0241*pow($heroDb['quality'],3) -
|
|
0.5675*pow($heroDb['quality'],2) +
|
|
7.1798*$heroDb['quality'] +
|
|
2.4114
|
|
) +
|
|
(
|
|
0.0161*pow($lucky, 3) -
|
|
1.2943*pow($lucky, 2) +
|
|
36.5664*$lucky -
|
|
336.144
|
|
)
|
|
) + $sysParam;
|
|
return $upLimit;
|
|
}
|
|
|
|
public static function getHeroPveTiliTotalValue($heroDb)
|
|
{
|
|
//ROUND((0.0563*角色NFT阶数^3-1.3243*角色NFT阶数^2+16.753*角色NFT阶数+5.6266)+(0.0375*角色幸运值^3-3.02*角色幸运值^2+85.3217*角色幸运值-784.3361),0)+系统参数
|
|
$sysParam = 0;
|
|
$lucky = 0;
|
|
$upLimit = round(
|
|
(
|
|
0.0563*pow($heroDb['quality'],3) -
|
|
1.3243*pow($heroDb['quality'],2) +
|
|
16.753*$heroDb['quality'] +
|
|
5.6266
|
|
) +
|
|
(
|
|
0.0375*pow($lucky, 3) -
|
|
3.02*pow($lucky, 2) +
|
|
85.3217*$lucky -
|
|
784.3361
|
|
)
|
|
) + $sysParam;
|
|
return $upLimit;
|
|
}
|
|
|
|
public static function getWeaponPvpDurabilityTotalValue($weaponDb)
|
|
{
|
|
//ROUND((0.0067*武器NFT阶数^3-0.1558*武器NFT阶数^2+1.9758*武器NFT阶数+0.8033)+(0.0044*武器幸运值^3-0.3564*武器幸运值^2+10.0625*武器幸运值-92.3784),0)+系统参数
|
|
$sysParam = 0;
|
|
$lucky = 0;
|
|
$upLimit = round(
|
|
(
|
|
0.0067*pow($heroDb['quality'],3) -
|
|
0.1558*pow($heroDb['quality'],2) +
|
|
1.9758*$heroDb['quality'] +
|
|
0.8033
|
|
) +
|
|
(
|
|
0.0044*pow($lucky, 3) -
|
|
0.3564*pow($lucky, 2) +
|
|
10.0625*$lucky -
|
|
92.3784
|
|
)
|
|
) + $sysParam;
|
|
return $upLimit;
|
|
}
|
|
|
|
public static function getWeaponPveDurabilityTotalValue($weaponDb)
|
|
{
|
|
//ROUND((0.0155*武器NFT阶数^3-0.3637*武器NFT阶数^2+4.6102*武器NFT阶数+1.8745)+(0.0104*武器幸运值^3-0.8315*武器幸运值^2+23.4792*武器幸运值-215.5496),0)+系统参数
|
|
$sysParam = 0;
|
|
$lucky = 0;
|
|
$upLimit = round(
|
|
(
|
|
0.0155*pow($heroDb['quality'],3) -
|
|
0.3637*pow($heroDb['quality'],2) +
|
|
4.6102*$heroDb['quality'] +
|
|
1.8745
|
|
) +
|
|
(
|
|
0.0104*pow($lucky, 3) -
|
|
0.8315*pow($lucky, 2) +
|
|
23.4792*$lucky -
|
|
215.5496
|
|
)
|
|
) + $sysParam;
|
|
return $upLimit;
|
|
}
|
|
|
|
public static function calcHeroPvpTiliConsume($heroDb)
|
|
{
|
|
//ROUND((最大角色体力值-当前剩余体力值)*(PVP角色体力总价值+PVE角色体力总价值)/最大角色体力值,0)
|
|
$heroMeta = mt\Item::get($heroDb['hero_id']);
|
|
if (!$heroMeta) {
|
|
return 0;
|
|
}
|
|
$cost = round(
|
|
($heroMeta['init_tili'] - $heroDb['hero_tili']) *
|
|
(1) /
|
|
$heroMeta['init_tili']
|
|
);
|
|
return $cost;
|
|
}
|
|
|
|
public static function calcWeaponPvpDurabilityConsume($weaponDb)
|
|
{
|
|
//ROUND((最大武器耐久度-当前剩余耐久度)*(PVP武器耐久度总价值+PVE武器耐久度总价值)/最大武器耐久度,0)
|
|
return 0;
|
|
}
|
|
|
|
}
|