diff --git a/webapp/mt/FormulaPvp.php b/webapp/mt/FormulaPvp.php index 33e5c7a7..8be04f8a 100644 --- a/webapp/mt/FormulaPvp.php +++ b/webapp/mt/FormulaPvp.php @@ -11,6 +11,18 @@ class FormulaPvp { return array_key_exists($id, self::getMetaList()) ? self::getMetaList()[$id] : null; } + public static function getByRanked($rankedTopX) + { + $lastMeta = null; + foreach (self::getMetaList() as $meta) { + $lastMeta = $meta; + if ($rankedTopX <= $meta['top']) { + return $meta; + } + } + return $lastMeta; + } + protected static function getMetaList() { if (!self::$metaList) { diff --git a/webapp/services/FormulaService.php b/webapp/services/FormulaService.php index 40ea0002..166892f6 100644 --- a/webapp/services/FormulaService.php +++ b/webapp/services/FormulaService.php @@ -2,6 +2,10 @@ namespace services; +require_once('mt/FormulaPvp.php'); + +use mt; + class FormulaService extends BaseService { public static function getHeroPvpDailyCegUpLimit($heroDb) @@ -18,12 +22,24 @@ class FormulaService extends BaseService { { //PVP角色NFT每日获得极限*(50%*[每局排名TopX%对应比例]+25%*[每局PK人数排名TopX%对应比例]+15%*[每局英雄属性排名TopX%对应比例]+5%*[每局武器属性排名TopX%对应比例]+5%*[每局存活时间排名TopX%对应比例]) $upLimit = getXVal($params, 'uplimit'); - $ranked = getXVal($params, 'ranked'); - $killsRanked = getXVal($params, 'kills_ranked'); - $heroRanked = getXVal($params, 'hero_ranked'); - $weaponRanked = getXVal($params, 'weapon_ranked'); - $aliveRanked = getXVal($params, 'alive_ranked'); - return 0; + $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 * $killsTopx * $meta['hero_topx']) + + (0.5 * $weaponTopx * $meta['weapon_topx']) + + (0.5 * $survivalTopx * $meta['survival_topx']) + ); + return $ceg; } public static function calcHeroPveCeg($heroDb, $uplimit) @@ -43,7 +59,26 @@ class FormulaService extends BaseService { public static function calcWeaponPvpCeg($weaponDb) { - return 0; + //PVP武器NFT每日获得极限*(50%*[每局排名TopX%对应比例]+25%*[每局PK人数排名TopX%对应比例]+15%*[每局英雄属性排名TopX%对应比例]+5%*[每局武器属性排名TopX%对应比例]+5%*[每局存活时间排名TopX%对应比例]) + $upLimit = getXVal($params, '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 * $killsTopx * $meta['hero_topx']) + + (0.5 * $weaponTopx * $meta['weapon_topx']) + + (0.5 * $survivalTopx * $meta['survival_topx']) + ); + return $ceg; } public static function calcWeaponPveCeg($weaponDb)