This commit is contained in:
aozhiwei 2022-09-19 19:33:12 +08:00
parent 4d7637e575
commit 43a916c235
2 changed files with 61 additions and 29 deletions

View File

@ -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) {

View File

@ -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)+系统参数