diff --git a/webapp/controller/ComputingPowerController.class.php b/webapp/controller/ComputingPowerController.class.php index 2bcbe1e3..d0240ffe 100644 --- a/webapp/controller/ComputingPowerController.class.php +++ b/webapp/controller/ComputingPowerController.class.php @@ -73,7 +73,7 @@ class ComputingPowerController extends BaseAuthedController $last_period['period_begin'] = strtotime($lastMeta['start_time']); $last_period['period_end'] = strtotime($lastMeta['end_time']); $cecDb = RewardsCec::findByAccount(myself()->_getAccountId(),$lastMeta['id']); - $last_period['reward'] = $cecDb['reward_cec']; + $last_period['reward'] = $cecDb ? $cecDb['reward_cec'] : 0; } diff --git a/webapp/services/FormulaService.php b/webapp/services/FormulaService.php index d941ef42..fb9e6a4d 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 参数表获取 ************ + $kArr = explode('|',mt\Parameter::getVal('rank_k',0)); //************** parameter 参数表获取 ************ + $rankMeta = mt\Rank::getRankById($userDb['rank']); + $K = $kArr[$rankMeta['rank_order2']-1]; return round(max($userDb['elo']+$K*($winRate-$winRateSum),150)); }