From a1482b9c0e90afb414083ebfaee44ba2a7f338df Mon Sep 17 00:00:00 2001 From: hujiabin <519660157@qq.com> Date: Fri, 1 Sep 2023 10:52:32 +0800 Subject: [PATCH] 1 --- webapp/services/FormulaService.php | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/webapp/services/FormulaService.php b/webapp/services/FormulaService.php index d941ef42..242111e1 100644 --- a/webapp/services/FormulaService.php +++ b/webapp/services/FormulaService.php @@ -348,15 +348,18 @@ class FormulaService extends BaseService { //表现分=f(个人存活时间排名TopX/4)*50%+f(队伍排名TopY)*50% f(TopX) = ROUND(1-(X-1)/9,2) $expreScore = (ROUND(1-($ranked/4-1)/9,2))*0.5+ROUND(1-($teamRank-1)/9,2)*0.5; + $rankMeta = mt\Rank::getRankById($userDb['rank']); //不同段位的及格分 = ROUND(1-(大段位排名-1)/(MAX(10)-1),2) - $topRanking = mt\Rank::getRankById($userDb['rank'])?mt\Rank::getRankById($userDb['rank'])['rank_order']:0; //************** rankRank 参数表获取 ************ + $topRanking = $rankMeta['rank_order']; //************** rankRank 参数表获取 ************ $rankPint = mt\Parameter::getVal('rank_pass_point',0); //************** parameter 参数表获取 ************ $rankPintArr = explode('|',$rankPint); $askedScore = $rankPintArr[$topRanking-1]; //一个玩家的赛后积分 = 赛前积分+K*(胜负率-总胜率)+2K*(表现分-段位要求的及格分) - //一个玩家的赛后积分 = 赛前积分+K/2*(MAX(胜负率-总胜率,0))+K*(表现分-段位要求的及格分) 新 - $K = mt\Parameter::getVal('rank_k',40); //************** parameter 参数表获取 ************ - $battleAfterScore = $userDb['score'] + $K/2 * max(($winRate-$winRateSum),0) + ($K) * ($expreScore-$askedScore); + //一个玩家的赛后积分 = 赛前积分+K/2*(MAX(胜负率-总胜率,0))+K*(表现分-段位要求的及格分) + //一个玩家的赛后积分 = 赛前积分+K/2*(MAX(胜负率-0.5,0))+K/2*(表现分-段位要求的及格分) 新 + $kArr = explode('|',mt\Parameter::getVal('rank_k',0)); //************** parameter 参数表获取 ************ + $K = $kArr[$rankMeta['rank_order2']-1]; + $battleAfterScore = $userDb['score'] + $K/2 * max(($winRate-0.5),0) + ($K/2) * ($expreScore-$askedScore); return round($battleAfterScore); } @@ -368,7 +371,9 @@ class FormulaService extends BaseService { $winRate = 1-($ranked-1)/($maxRanked-1); //总胜率=70%*P(个人ELO值-敌队平均ELO值)+30%*P(己队平均ELO值-敌队平均ELO值) --> P(D)=1/(1+10^(-D/400)) $winRateSum = $winningPro; - $K = mt\Parameter::getVal('rank_k',40); //************** parameter 参数表获取 ************ + $rankMeta = mt\Rank::getRankById($userDb['rank']); + $kArr = explode('|',mt\Parameter::getVal('rank_k',0)); //************** parameter 参数表获取 ************ + $K = $kArr[$rankMeta['rank_order2']-1]; return round(max($userDb['elo']+$K*($winRate-$winRateSum),150)); }