From 43a916c235aa6da0e75eb60baa19120bdf6918c6 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 19 Sep 2022 19:33:12 +0800 Subject: [PATCH] 1 --- webapp/services/BattleDataService.php | 38 ++++++-------------- webapp/services/FormulaService.php | 52 ++++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 29 deletions(-) diff --git a/webapp/services/BattleDataService.php b/webapp/services/BattleDataService.php index 2a521e31..e2ed29c6 100644 --- a/webapp/services/BattleDataService.php +++ b/webapp/services/BattleDataService.php @@ -500,40 +500,22 @@ class BattleDataService extends BaseService { $heroFragmentNum = FragmentPool::getHeroNum(); $gunFragmentNum = FragmentPool::getGunNum(); - $rankedTopX= getXVal($params, 'ranked_topx'); - $meta = mt\FormulaPvp::getByRanked($rankedTopX); - if (!$meta) { - return; - } - - $heroProbability = min($heroFragmentNum / $onlineNum * - 5 * - ( - 0.5*$meta['ranked_topx'] + - 0.25*$meta['kills_topx'] + - 0.15*$meta['hero_topx'] + - 0.05*$meta['weapon_topx'] - ) * - pow(2, ($todayPvpBattleTimes % 10) - 1), 1); - $gunProbability = min($gunFragmentNum / $onlineNum * - 5 * - ( - 0.5*$meta['ranked_topx'] + - 0.25*$meta['kills_topx'] + - 0.15*$meta['hero_topx'] + - 0.05*$meta['weapon_topx'] - ) * - pow(2, ($todayPvpBattleTimes % 10) - 1), 1); + $heroProbability = FormulaService::calcHeroFragmentProbabilityPvp + ($_REQUEST, + $onlineNum, + $heroFragmentNum, + $todayPvpBattleTimes); + $gunProbability = FormulaService::calcGunFragmentProbabilityPvp + ($_REQUEST, + $onlineNum, + $gunFragmentNum, + $todayPvpBattleTimes); $heroProbability = max($heroProbability, 0); $gunProbability = max($gunProbability, 0); $emptyProbability = max(1 - $heroProbability - $gunProbability, 0); $dropIdx = $this->randWeight(array($heroProbability, $gunProbability, $emptyProbability)); - if ($dropIdx < 0 || $dropIdx == 2) { - return; - } - if ($dropIdx == 0) { $itemId = FragmentPool::dropHero(); if ($itemId) { diff --git a/webapp/services/FormulaService.php b/webapp/services/FormulaService.php index e02b889c..8fc161f5 100644 --- a/webapp/services/FormulaService.php +++ b/webapp/services/FormulaService.php @@ -20,7 +20,7 @@ class FormulaService extends BaseService { $kills = getXVal($params, 'kills'); $aliveTime = getXVal($params, 'alive_time'); - $rankedTopX= getXVal($params, 'ranked_topx'); + $rankedTopX = getXVal($params, 'ranked_topx'); $killsTopX = getXVal($params, 'kills_topx'); $heroTopX = getXVal($params, 'hero_topx'); $weaponTopX = getXVal($params, 'weapon_topx'); @@ -96,6 +96,56 @@ class FormulaService extends BaseService { return round(ceg); } + public static function calcHeroFragmentProbabilityPvp($params, + $onlineNum, + $heroFragmentNum, + $todayPvpBattleTimes) + { + $rankedTopX = getXVal($params, 'ranked_topx'); + $killsTopX = getXVal($params, 'kills_topx'); + $heroTopX = getXVal($params, 'hero_topx'); + $weaponTopX = getXVal($params, 'weapon_topx'); + $meta = mt\FormulaPvp::getByRanked($rankedTopX); + if (!$meta) { + return 0; + } + $heroProbability = min($heroFragmentNum / $onlineNum * + 5 * + ( + 0.5 * $rankedTopX * $meta['ranked_topx'] + + 0.25 * $killsTopX * $meta['kills_topx'] + + 0.15 * $heroTopX * $meta['hero_topx'] + + 0.05 * $weaponTopX * $meta['weapon_topx'] + ) * + pow(2, ($todayPvpBattleTimes % 10) - 1), 1); + return $heroProbability; + } + + public static function calcWeaponFragmentProbabilityPvp($params, + $onlineNum, + $weaponFragmentNum, + $todayPvpBattleTimes) + { + $rankedTopX = getXVal($params, 'ranked_topx'); + $killsTopX = getXVal($params, 'kills_topx'); + $heroTopX = getXVal($params, 'hero_topx'); + $weaponTopX = getXVal($params, 'weapon_topx'); + $meta = mt\FormulaPvp::getByRanked($rankedTopX); + if (!$meta) { + return 0; + } + $weaponProbability = min($FragmentNum / $onlineNum * + 5 * + ( + 0.5 * $rankedTopX * $meta['ranked_topx'] + + 0.25 * $killsTopX * $meta['kills_topx'] + + 0.15 * $heroTopX * $meta['hero_topx'] + + 0.05 * $weaponTopX * $meta['weapon_topx'] + ) * + pow(2, ($todayPvpBattleTimes % 10) - 1), 1); + return $weaponProbability; + } + 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)+系统参数