diff --git a/webapp/services/BattleDataService.php b/webapp/services/BattleDataService.php index 76174ddc..b4efcfcf 100644 --- a/webapp/services/BattleDataService.php +++ b/webapp/services/BattleDataService.php @@ -541,18 +541,30 @@ class BattleDataService extends BaseService { $bossReward = getReqVal('pve_kill_boss', 0) ? 1 : 0; $heroQuality = $this->heroDto['quality']; - $dropRate = max(1.15 - ($heroQuality - $instanceLevel) * 0.25, 0); - $dropMul = 0.8 - ($instanceRank - 1) * 0.25 + $bossReward * 0.2; - - $heroProbability = min($heroFragmentNum / $onlineNum * - $dropRate * ($instanceRankRate + $bossReward*0.2) * - pow(2, $todayPveBattleTimes - $todayPveGetFragmentNum -1), 1); - $gunProbability = min($gunFragmentNum / $onlineNum * - $dropRate * ($instanceRankRate + $bossReward*0.2) * - pow(2, $todayPveBattleTimes - $todayPveGetFragmentNum -1), 1); - - $heroProbability = max($heroProbability, 0); - $gunProbability = max($gunProbability, 0); + $heroProbability = FormulaService::calcHeroFragmentProbabilityPve + ( + $heroQuality, + $onlineNum, + $heroFragmentNum, + $todayPveBattleTimes, + $instanceLevel, + $instanceRank, + $instanceRankRate, + $bossReward, + $todayPveGetFragmentNum + ); + $gunProbability = FormulaService::calcWeaponFragmentProbabilityPve + ( + $heroQuality, + $onlineNum, + $gunFragmentNum, + $todayPveBattleTimes, + $instanceLevel, + $instanceRank, + $instanceRankRate, + $bossReward, + $todayPveGetFragmentNum + ); $emptyProbability = max(1 - $heroProbability - $gunProbability, 0); $dropIdx = $this->randWeight(array($heroProbability, $gunProbability, $emptyProbability)); diff --git a/webapp/services/FormulaService.php b/webapp/services/FormulaService.php index b54e070f..bf67b5c7 100644 --- a/webapp/services/FormulaService.php +++ b/webapp/services/FormulaService.php @@ -150,6 +150,44 @@ class FormulaService extends BaseService { return max(0, $weaponProbability); } + public static function calcHeroFragmentProbabilityPve($heroQuality, + $onlineNum, + $heroFragmentNum, + $todayPvpBattleTimes, + $instanceLevel, + $instanceRank, + $instanceRankRate, + $bossReward, + $todayPveGetFragmentNum) + { + $dropRate = max(1.15 - ($heroQuality - $instanceLevel) * 0.25, 0); + $dropMul = 0.8 - ($instanceRank - 1) * 0.25 + $bossReward * 0.2; + + $heroProbability = min($heroFragmentNum / $onlineNum * + $dropRate * ($instanceRankRate + $bossReward*0.2) * + pow(2, $todayPveBattleTimes - $todayPveGetFragmentNum - 1), 1); + return max(0, $heroProbability); + } + + public static function calcWeaponFragmentProbabilityPve($heroQuality, + $onlineNum, + $gunFragmentNum, + $todayPvpBattleTimes, + $instanceLevel, + $instanceRank, + $instanceRankRate, + $bossReward, + $todayPveGetFragmentNum) + { + $dropRate = max(1.15 - ($heroQuality - $instanceLevel) * 0.25, 0); + $dropMul = 0.8 - ($instanceRank - 1) * 0.25 + $bossReward * 0.2; + + $gunProbability = min($gunFragmentNum / $onlineNum * + $dropRate * ($instanceRankRate + $bossReward*0.2) * + pow(2, $todayPveBattleTimes - $todayPveGetFragmentNum - 1), 1); + return max(0, $gunProbability); + } + 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)+系统参数