1
This commit is contained in:
parent
2c9a26a113
commit
8d162f3917
@ -165,6 +165,7 @@ CREATE TABLE `t_hero` (
|
||||
`chip_ids` varchar(100) NOT NULL DEFAULT '' COMMENT '已镶嵌的芯片idx组',
|
||||
`skill_common` varchar(255) NOT NULL DEFAULT '100100|100120|100140|100160|100180|100200|100220|100240|100260|100280' COMMENT '通用技能',
|
||||
`skill_points` int(11) NOT NULL DEFAULT '0' COMMENT '技能点',
|
||||
`labour` int(11) NOT NULL DEFAULT '0' COMMENT '劳力值',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `token_id` (`token_id`),
|
||||
KEY `account_id` (`account_id`)
|
||||
@ -266,6 +267,7 @@ CREATE TABLE `t_chip` (
|
||||
`strength` varchar(10) NOT NULL DEFAULT '0' COMMENT '前一天体力值',
|
||||
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||
`labour` int(11) NOT NULL DEFAULT '0' COMMENT '劳力值',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `token_id` (`token_id`),
|
||||
KEY `item_id` (`item_id`),
|
||||
@ -303,6 +305,7 @@ CREATE TABLE `t_gun` (
|
||||
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||
`chip_ids` varchar(100) NOT NULL DEFAULT '' COMMENT '已镶嵌的芯片idx组',
|
||||
`labour` int(11) NOT NULL DEFAULT '0' COMMENT '劳力值',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `token_id` (`token_id`),
|
||||
KEY `account_id` (`account_id`)
|
||||
|
@ -25,18 +25,17 @@ class SeasonController extends BaseAuthedController {
|
||||
private $propertyChgService = null;
|
||||
private $awardService = null;
|
||||
private $userInfo = null;
|
||||
private $seasonService = null;
|
||||
private $currSeasonMeta = null;
|
||||
private $currRankSeasonMeta = null;
|
||||
private $seasonDb = null;
|
||||
private $missionService = null;
|
||||
private $rankingUnid = 'game_2006_rank';
|
||||
private $TopXunid = 'echelon_TopX_';
|
||||
private $starshine = 2800;
|
||||
|
||||
public function _handlePre()
|
||||
{
|
||||
parent::_handlePre();
|
||||
$this->currRankSeasonMeta = mt\RankSeason::getCurrentSeason();
|
||||
// $this->currSeasonMeta = mt\Season::getCurrentSeason();
|
||||
if (!$this->currRankSeasonMeta) {
|
||||
$this->_rspErr(10, 'server internal error');
|
||||
die();
|
||||
@ -44,11 +43,6 @@ class SeasonController extends BaseAuthedController {
|
||||
$this->propertyChgService = new services\PropertyChgService();
|
||||
$this->awardService = new services\AwardService();
|
||||
$this->userInfo = $this->_safeGetOrmUserInfo();
|
||||
// $this->seasonService = new services\SeasonService();
|
||||
// if (!$this->seasonService->checkSeason($this->userInfo)) {
|
||||
// $this->userInfo = $this->_safeGetOrmUserInfo();
|
||||
// $this->propertyChgService->addUserChg();
|
||||
// }
|
||||
$this->seasonDb = Season::find($this->currRankSeasonMeta['id']);
|
||||
if (!$this->seasonDb) {
|
||||
Season::add($this->currRankSeasonMeta['id']);
|
||||
@ -79,7 +73,11 @@ class SeasonController extends BaseAuthedController {
|
||||
|
||||
public function infoNew()
|
||||
{
|
||||
|
||||
// $r = $this->_getRedis($this->TopXunid.'4');
|
||||
// $TopX_List = $this->readRankingList($r,$this->TopXunid.'5');
|
||||
// $XX = $TopX_List ? $TopX_List[0]["rank_sort"]:10001;
|
||||
// print_r($XX);
|
||||
// die;
|
||||
$rankMeta = mt\Rank::getRankById($this->userInfo['rank']);
|
||||
$nextRankMeta = mt\Rank::getNextRankById($this->userInfo['rank']);
|
||||
if (!$nextRankMeta){
|
||||
@ -99,31 +97,7 @@ class SeasonController extends BaseAuthedController {
|
||||
$rankList = $this->readRankingList($r,$this->rankingUnid);
|
||||
$list = array();
|
||||
if (!$rankList){
|
||||
$users = User::orderBy(User::allUser());
|
||||
$rewardParamMeta = \mt\Parameter::getByName('rank_ring_reward');
|
||||
$rewardParamMetaValue = $rewardParamMeta ? $rewardParamMeta['param_value'] : '';
|
||||
$rewardList = explode('|',$rewardParamMetaValue);
|
||||
if (count($users)>0){
|
||||
foreach ($users as $k=>$user){
|
||||
$userDto = User::getUserByRankMess($user);
|
||||
$userDto['rank_sort'] = $k+1;
|
||||
switch ($userDto['rank_sort']){
|
||||
case 1:$userDto['ring_item_id'] = $rewardList[0];break;
|
||||
case 2:$userDto['ring_item_id'] = $rewardList[1];break;
|
||||
case 3:$userDto['ring_item_id'] = $rewardList[2];break;
|
||||
default : $userDto['ring_item_id'] = 0;
|
||||
}
|
||||
array_push($rankList,$userDto);
|
||||
}
|
||||
foreach ($rankList as $k=>$value){
|
||||
if ($value['rank_sort'] <= 200){
|
||||
$cec = 999;
|
||||
$rankList[$k]['rewardCEC'] = $cec;
|
||||
}else{
|
||||
$rankList[$k]['rewardCEC'] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
$rankList = $this->checkRankingList();
|
||||
$this->saveRankingList($r,$this->rankingUnid,$rankList);
|
||||
}
|
||||
foreach ($rankList as $v){
|
||||
@ -131,20 +105,8 @@ class SeasonController extends BaseAuthedController {
|
||||
array_push($list,$v);
|
||||
}
|
||||
}
|
||||
// $users = User::orderBy(User::getUserByRank($this->userInfo['rank']));
|
||||
// $season_rank = array();
|
||||
// if (count($users)>0){
|
||||
// foreach ($users as $k=>$user){
|
||||
// if ($k<20){
|
||||
// $userDto = User::getUserByRankMess($user);
|
||||
// $userDto['rank_sort'] = $k+1;
|
||||
// array_push($season_rank,$userDto);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
$info['season_rank'] = $list;
|
||||
$info['season_rank'] = $rankList;
|
||||
$this->_rspData(['info'=>$info]);
|
||||
// print_r($info);
|
||||
}
|
||||
|
||||
public function getRankingInfo(){
|
||||
@ -157,31 +119,7 @@ class SeasonController extends BaseAuthedController {
|
||||
$rankList = $this->readRankingList($r,$this->rankingUnid);
|
||||
$list = array();
|
||||
if (!$rankList){
|
||||
$users = User::orderBy(User::allUser());
|
||||
$rewardParamMeta = \mt\Parameter::getByName('rank_ring_reward');
|
||||
$rewardParamMetaValue = $rewardParamMeta ? $rewardParamMeta['param_value'] : '';
|
||||
$rewardList = explode('|',$rewardParamMetaValue);
|
||||
if (count($users)>0){
|
||||
foreach ($users as $k=>$user){
|
||||
$userDto = User::getUserByRankMess($user);
|
||||
$userDto['rank_sort'] = $k+1;
|
||||
switch ($userDto['rank_sort']){
|
||||
case 1:$userDto['ring_item_id'] = $rewardList[0];break;
|
||||
case 2:$userDto['ring_item_id'] = $rewardList[1];break;
|
||||
case 3:$userDto['ring_item_id'] = $rewardList[2];break;
|
||||
default : $userDto['ring_item_id'] = 0;
|
||||
}
|
||||
array_push($rankList,$userDto);
|
||||
}
|
||||
foreach ($rankList as $k=>$value){
|
||||
if ($value['rank_sort'] <= 200){
|
||||
$cec = 999;
|
||||
$rankList[$k]['rewardCEC'] = $cec;
|
||||
}else{
|
||||
$rankList[$k]['rewardCEC'] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
$rankList = $this->checkRankingList();
|
||||
$this->saveRankingList($r,$this->rankingUnid,$rankList);
|
||||
}
|
||||
|
||||
@ -325,6 +263,129 @@ class SeasonController extends BaseAuthedController {
|
||||
return $info;
|
||||
}
|
||||
|
||||
private function checkRankingList(){
|
||||
$rankList = array();
|
||||
$users = User::orderBy(User::allUser());
|
||||
$rewardParamMeta = \mt\Parameter::getByName('rank_ring_reward');
|
||||
$rewardParamMetaValue = $rewardParamMeta ? $rewardParamMeta['param_value'] : '';
|
||||
$rewardList = explode('|',$rewardParamMetaValue);
|
||||
if (count($users)>0){
|
||||
$KingCount = 0;
|
||||
foreach ($users as $k=>$user){
|
||||
$userDto = User::getUserByRankMess($user);
|
||||
$userDto['rank_sort'] = $k+1;
|
||||
if ($userDto['score'] >= $this->starshine){
|
||||
$KingCount += 1;
|
||||
$userDto['echelonTopX'] = $this->echelonTopX($userDto['rank_sort']);
|
||||
$r = $this->_getRedis($this->TopXunid.$userDto['echelonTopX']);
|
||||
$TopX_List = $this->readRankingList($r,$this->TopXunid.$userDto['echelonTopX']);
|
||||
array_push($TopX_List,$userDto);
|
||||
$this->saveRankingList($r,$this->TopXunid.$userDto['echelonTopX'],$TopX_List);
|
||||
}
|
||||
switch ($userDto['rank_sort']){
|
||||
case 1:$userDto['ring_item_id'] = $rewardList[0];break;
|
||||
case 2:$userDto['ring_item_id'] = $rewardList[1];break;
|
||||
case 3:$userDto['ring_item_id'] = $rewardList[2];break;
|
||||
default : $userDto['ring_item_id'] = 0;
|
||||
}
|
||||
array_push($rankList,$userDto);
|
||||
}
|
||||
|
||||
//当月排位赛最大分配金额
|
||||
$maxSum = $this->calcCECMaxSum();
|
||||
//排位赛参与分配人数
|
||||
// $PeopleCapita = $this->calcPeopleCapita($KingCount);
|
||||
//排位赛人数%
|
||||
// $PeopleCapitaPer = $this->calcPeopleCapitaPer($KingCount);
|
||||
//排位赛预计分配额
|
||||
$expected_CEC_Sum = 0;
|
||||
foreach ($rankList as $k=>$value){
|
||||
$r = $this->_getRedis($this->TopXunid.($value['echelonTopX']+1));
|
||||
$TopX_List = $this->readRankingList($r,$this->TopXunid.($value['echelonTopX']+1));
|
||||
$XX = $TopX_List ? $TopX_List[0]["rank_sort"]:10001;
|
||||
$rankList[$k]['standardTopX'] = $this->standardTopX($value['rank_sort'],$XX);
|
||||
$expected_CEC_Sum += $this->calcCECTopXSum($value['rank_sort'],$KingCount,$XX);
|
||||
}
|
||||
//排位赛金额%
|
||||
$rankAmountPre = min($maxSum/($expected_CEC_Sum+1),1); //MIN(当月排位赛最大分配额/(排位赛预计分配额+1),1)
|
||||
|
||||
foreach ($rankList as $k=>$value){
|
||||
// $rankList[$k]['rewardCEC'] = $value['standardTopX']*$rankAmountPre;
|
||||
if ($value['score'] >= $this->starshine){
|
||||
$rankList[$k]['rewardCEC'] = $value['standardTopX']*$rankAmountPre;
|
||||
}else{
|
||||
$rankList[$k]['rewardCEC'] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $rankList;
|
||||
}
|
||||
|
||||
//排位赛最大分配金额
|
||||
private function calcCECMaxSum(){
|
||||
//当月排位赛最大分配金额=ROUND(40000000/(12*(1+0.7^1+0.7^2+0.7^3+0.7^4+0.7^5+0.7^6+0.7^7))*0.7^(CEILING(月份数/12-0.01,1)-1),0)*70%
|
||||
$month = date('m',$this->_getNowTime());
|
||||
return round(40000000/(12*(1+pow(0.7,1)+pow(0.7,2)+pow(0.7,3)+pow(0.7,4)
|
||||
+pow(0.7,5)+pow(0.7,6)+pow(0.7,7)))*pow(0.7,ceil($month/12-0.01)-1),0)*0.7;
|
||||
}
|
||||
//排位赛参与分配人数
|
||||
private function calcPeopleCapita($kingCount){
|
||||
//MIN(当月王者及以上用户数,ROUND(LOG10(当月王者及以上用户数+2)^3*1.5,1)*100)
|
||||
return min($kingCount,round(pow(log10($kingCount+2),3)*1.5,1)*100);
|
||||
}
|
||||
//排位赛人数%
|
||||
private function calcPeopleCapitaPer($kingCount){
|
||||
//MIN(ROUND(0.31*MIN(当月王者及以上用户数,ROUND(LOG10(当月王者及以上用户数+1)^3*1.5,2)*100)^0.226,2),2)
|
||||
return min(round(0.31*pow(min($kingCount,round(pow(log10($kingCount+1),3)*1.5,2)*100),0.226),2),2);
|
||||
}
|
||||
//TopX梯队
|
||||
private function echelonTopX($top){
|
||||
//TopX梯队=SIGN(TopX<=3)*1+SIGN(TopX>3)*SIGN(TopX<=10)*2+SIGN(TopX>10)*SIGN(TopX<=50)*3
|
||||
//+SIGN(TopX>50)*SIGN(TopX<=100)*4+SIGN(TopX>100)*SIGN(TopX<=500)*5+SIGN(TopX>500)*SIGN(TopX<=1000)*6
|
||||
//+SIGN(TopX>1000)*SIGN(TopX<=2000)*7+SIGN(TopX>2000)*SIGN(TopX<=5000)*8
|
||||
//+SIGN(TopX>5000)*SIGN(TopX<=10000)*9+SIGN(TopX>10000)*10
|
||||
return ($top<=3?1:0)*1+($top>3?1:0)*($top<=10?1:0)*2+($top>10?1:0)*($top<=50?1:0)*3
|
||||
+($top>50?1:0)*($top<=100?1:0)*4+($top>100?1:0)*($top<=500?1:0)*5+($top>500?1:0)*($top<=1000?1:0)*6
|
||||
+($top>1000?1:0)*($top<=2000?1:0)*7+($top>2000?1:0)*($top<=5000?1:0)*8
|
||||
+($top>5000?1:0)*($top<=10000?1:0)*9+($top>10000?1:0)*10;
|
||||
}
|
||||
//TopX开始值
|
||||
private function startTopX($top){
|
||||
//TopX开始值=SIGN(TopX梯队=1)*1+SIGN(TopX梯队=2)*4+SIGN(TopX梯队=3)*11+SIGN(TopX梯队=4)*51
|
||||
//+SIGN(TopX梯队=5)*101+SIGN(TopX梯队=6)*501+SIGN(TopX梯队=7)*1001
|
||||
//+SIGN(TopX梯队=8)*2001+SIGN(TopX梯队=9)*5001+SIGN(TopX梯队=10)*10001
|
||||
return ($this->echelonTopX($top)==1?1:0)*1+($this->echelonTopX($top)==2?1:0)*4+($this->echelonTopX($top)==3?1:0)*11+($this->echelonTopX($top)==4?1:0)*51
|
||||
+($this->echelonTopX($top)==5?1:0)*101+($this->echelonTopX($top)==6?1:0)*501+($this->echelonTopX($top)==7?1:0)*1001
|
||||
+($this->echelonTopX($top)==8?1:0)*2001+($this->echelonTopX($top)==9?1:0)*5001+($this->echelonTopX($top)==10?1:0)*10001;
|
||||
}
|
||||
//TopX梯队最高值
|
||||
private function maxTopX($top){
|
||||
//TopX梯队最高值=ROUND(2000*0.6^(TopX梯队-1)*0.9^(TopX梯队-1),0)
|
||||
return round(2000*pow(0.6,$this->echelonTopX($top)-1)*pow(0.9,$this->echelonTopX($top)-1),0);
|
||||
|
||||
}
|
||||
//TopX梯队最低值
|
||||
private function minTopX($top){
|
||||
//TopX梯队最低值=ROUND(2000*0.6^(TopX梯队)*0.9^(TopX梯队-1),0)
|
||||
return round(2000*pow(0.6,$this->echelonTopX($top))*pow(0.9,$this->echelonTopX($top)-1),0);
|
||||
}
|
||||
//TopX排位赛标准分配额
|
||||
private function standardTopX($top,$XX){
|
||||
//TopX排位赛标准分配额=MAX(ROUND(TopX梯队最高值-(TopX梯队最高值-TopX梯队最低值)/(TopX梯队开始值(TopX梯队+1)-TopX梯队开始值-1)*(TopX-TopX梯队开始值),2),TopX梯队最低值)
|
||||
return max(round($this->maxTopX($top)-($this->maxTopX($top)-$this->minTopX($top))/($XX-$this->startTopX($top)-1)*($top-$this->startTopX($top)),2),$this->minTopX($top));
|
||||
}
|
||||
//TopX排位赛预计分配额
|
||||
private function calcCECTopXSum($top,$kingCount,$XX){
|
||||
//TopX排位赛标准分配额*排位赛人数%
|
||||
return $this->standardTopX($top,$XX)*$this->calcPeopleCapitaPer($kingCount);
|
||||
|
||||
}
|
||||
//排位赛金额%
|
||||
private function rankAmountPre(){
|
||||
//MIN(当月排位赛最大分配额/(排位赛预计分配额+1),1)
|
||||
}
|
||||
|
||||
|
||||
private function readRankingList($r,$rankUnid)
|
||||
{
|
||||
$list = $r->get(RANKING_KEY.$rankUnid);
|
||||
|
@ -10,6 +10,7 @@ require_once('mt/Item.php');
|
||||
require_once('mt/SkillCommon.php');
|
||||
require_once('models/HeroSkin.php');
|
||||
require_once('models/Chip.php');
|
||||
require_once('models/User.php');
|
||||
require_once('services/NftService.php');
|
||||
require_once('services/FormulaService.php');
|
||||
|
||||
@ -21,6 +22,7 @@ use services\NftService;
|
||||
use services\FormulaService;
|
||||
|
||||
|
||||
|
||||
class Hero extends BaseModel {
|
||||
|
||||
const GETED_STATE = 0;
|
||||
@ -116,6 +118,7 @@ class Hero extends BaseModel {
|
||||
'token_id' => $nftDb['token_id'],
|
||||
)
|
||||
);
|
||||
User::upsertHeadList($itemMeta);
|
||||
}
|
||||
}
|
||||
if ($row) {
|
||||
@ -272,7 +275,6 @@ class Hero extends BaseModel {
|
||||
}
|
||||
if ($tokenId) {
|
||||
$fieldsKv['token_id'] = $tokenId;
|
||||
User::upsertHeadList($heroMeta);
|
||||
}
|
||||
|
||||
SqlHelper::insert(
|
||||
|
@ -1,10 +1,33 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace models;
|
||||
|
||||
|
||||
class SeasonHistory
|
||||
{
|
||||
use mt;
|
||||
use phpcommon\SqlHelper;
|
||||
|
||||
class SeasonHistory extends BaseModel
|
||||
{
|
||||
public static function save($data){
|
||||
SqlHelper::upsert(
|
||||
myself()->_getSelfMysql(),
|
||||
't_season_history',
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
'season' => $data['season'],
|
||||
),
|
||||
array(),
|
||||
$data
|
||||
);
|
||||
}
|
||||
|
||||
public static function getDataBySeasonId($seasonId){
|
||||
return SqlHelper::ormSelect(
|
||||
myself()->_getSelfMysql(),
|
||||
't_season_history',
|
||||
array(
|
||||
'season' => $seasonId,
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
@ -3,8 +3,10 @@
|
||||
|
||||
namespace models;
|
||||
|
||||
use mt;
|
||||
use phpcommon\SqlHelper;
|
||||
|
||||
class UserSeasonRing
|
||||
class UserSeasonRing extends BaseModel
|
||||
{
|
||||
|
||||
}
|
@ -788,4 +788,63 @@ class FormulaService extends BaseService {
|
||||
return min($bceg,$bceg_max)*$param*self::CEG_Dynamic_Price();
|
||||
}
|
||||
|
||||
//排位赛最大分配金额
|
||||
public static function calcCECMaxSum(){
|
||||
//当月排位赛最大分配金额=ROUND(40000000/(12*(1+0.7^1+0.7^2+0.7^3+0.7^4+0.7^5+0.7^6+0.7^7))*0.7^(CEILING(月份数/12-0.01,1)-1),0)*70%
|
||||
$month = date('m',myself()->_getNowTime());
|
||||
return round(40000000/(12*(1+pow(0.7,1)+pow(0.7,2)+pow(0.7,3)+pow(0.7,4)
|
||||
+pow(0.7,5)+pow(0.7,6)+pow(0.7,7)))*pow(0.7,ceil($month/12-0.01)-1),0)*0.7;
|
||||
}
|
||||
//排位赛参与分配人数
|
||||
private function calcPeopleCapita($kingCount){
|
||||
//MIN(当月王者及以上用户数,ROUND(LOG10(当月王者及以上用户数+2)^3*1.5,1)*100)
|
||||
return min($kingCount,round(pow(log10($kingCount+2),3)*1.5,1)*100);
|
||||
}
|
||||
//排位赛人数%
|
||||
private static function calcPeopleCapitaPer($kingCount){
|
||||
//MIN(ROUND(0.31*MIN(当月王者及以上用户数,ROUND(LOG10(当月王者及以上用户数+1)^3*1.5,2)*100)^0.226,2),2)
|
||||
return min(round(0.31*pow(min($kingCount,round(pow(log10($kingCount+1),3)*1.5,2)*100),0.226),2),2);
|
||||
}
|
||||
//TopX梯队
|
||||
public static function echelonTopX($top){
|
||||
//TopX梯队=SIGN(TopX<=3)*1+SIGN(TopX>3)*SIGN(TopX<=10)*2+SIGN(TopX>10)*SIGN(TopX<=50)*3
|
||||
//+SIGN(TopX>50)*SIGN(TopX<=100)*4+SIGN(TopX>100)*SIGN(TopX<=500)*5+SIGN(TopX>500)*SIGN(TopX<=1000)*6
|
||||
//+SIGN(TopX>1000)*SIGN(TopX<=2000)*7+SIGN(TopX>2000)*SIGN(TopX<=5000)*8
|
||||
//+SIGN(TopX>5000)*SIGN(TopX<=10000)*9+SIGN(TopX>10000)*10
|
||||
return ($top<=3?1:0)*1+($top>3?1:0)*($top<=10?1:0)*2+($top>10?1:0)*($top<=50?1:0)*3
|
||||
+($top>50?1:0)*($top<=100?1:0)*4+($top>100?1:0)*($top<=500?1:0)*5+($top>500?1:0)*($top<=1000?1:0)*6
|
||||
+($top>1000?1:0)*($top<=2000?1:0)*7+($top>2000?1:0)*($top<=5000?1:0)*8
|
||||
+($top>5000?1:0)*($top<=10000?1:0)*9+($top>10000?1:0)*10;
|
||||
}
|
||||
//TopX开始值
|
||||
private static function startTopX($top){
|
||||
//TopX开始值=SIGN(TopX梯队=1)*1+SIGN(TopX梯队=2)*4+SIGN(TopX梯队=3)*11+SIGN(TopX梯队=4)*51
|
||||
//+SIGN(TopX梯队=5)*101+SIGN(TopX梯队=6)*501+SIGN(TopX梯队=7)*1001
|
||||
//+SIGN(TopX梯队=8)*2001+SIGN(TopX梯队=9)*5001+SIGN(TopX梯队=10)*10001
|
||||
return (self::echelonTopX($top)==1?1:0)*1+(self::echelonTopX($top)==2?1:0)*4+(self::echelonTopX($top)==3?1:0)*11+(self::echelonTopX($top)==4?1:0)*51
|
||||
+(self::echelonTopX($top)==5?1:0)*101+(self::echelonTopX($top)==6?1:0)*501+(self::echelonTopX($top)==7?1:0)*1001
|
||||
+(self::echelonTopX($top)==8?1:0)*2001+(self::echelonTopX($top)==9?1:0)*5001+(self::echelonTopX($top)==10?1:0)*10001;
|
||||
}
|
||||
//TopX梯队最高值
|
||||
private static function maxTopX($top){
|
||||
//TopX梯队最高值=ROUND(2000*0.6^(TopX梯队-1)*0.9^(TopX梯队-1),0)
|
||||
return round(2000*pow(0.6,self::echelonTopX($top)-1)*pow(0.9,self::echelonTopX($top)-1),0);
|
||||
|
||||
}
|
||||
//TopX梯队最低值
|
||||
private static function minTopX($top){
|
||||
//TopX梯队最低值=ROUND(2000*0.6^(TopX梯队)*0.9^(TopX梯队-1),0)
|
||||
return round(2000*pow(0.6,self::echelonTopX($top))*pow(0.9,self::echelonTopX($top)-1),0);
|
||||
}
|
||||
//TopX排位赛标准分配额
|
||||
public static function standardTopX($top,$XX){
|
||||
//TopX排位赛标准分配额=MAX(ROUND(TopX梯队最高值-(TopX梯队最高值-TopX梯队最低值)/(TopX梯队开始值(TopX梯队+1)-TopX梯队开始值-1)*(TopX-TopX梯队开始值),2),TopX梯队最低值)
|
||||
return max(round(self::maxTopX($top)-(self::maxTopX($top)-self::minTopX($top))/($XX-self::startTopX($top)-1)*($top-self::startTopX($top)),2),self::minTopX($top));
|
||||
}
|
||||
//TopX排位赛预计分配额
|
||||
public static function calcCECTopXSum($top,$kingCount,$XX){
|
||||
//TopX排位赛标准分配额*排位赛人数%
|
||||
return self::standardTopX($top,$XX)*self::calcPeopleCapitaPer($kingCount);
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user