This commit is contained in:
hujiabin 2022-10-25 19:48:20 +08:00
parent ab5da60650
commit b75d4811da
5 changed files with 146 additions and 107 deletions

View File

@ -1,6 +1,7 @@
<?php
define('TEAMID_KEY', 'team_uuid:');
define('RANKING_KEY', 'ranking_list:');
define('LAST_SESSION_KEY', 'last_session:');

View File

@ -30,6 +30,7 @@ class SeasonController extends BaseAuthedController {
private $currRankSeasonMeta = null;
private $seasonDb = null;
private $missionService = null;
private $rankingUnid = 'game_2006_rank';
public function _handlePre()
{
@ -116,18 +117,44 @@ class SeasonController extends BaseAuthedController {
$this->_rspErr(1, 'params rank error');
die();
}
$users = User::orderBy(User::getUserByRank($rank_param));
$season_rank = array();
if (count($users)>0){
foreach ($users as $k=>$user){
if ($k<20){
$r = $this->_getRedis($this->rankingUnid);
$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;
array_push($season_rank,$userDto);
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;
}
}
}
$this->saveRankingList($r,$this->rankingUnid,$rankList);
}
$this->_rspData(['info'=>$season_rank]);
foreach ($rankList as $v){
if ($rank_param == $v['rank']){
array_push($list,$v);
}
}
$this->_rspData(['info'=>$list]);
}
public function getDataInfo(){
@ -262,4 +289,20 @@ class SeasonController extends BaseAuthedController {
return $info;
}
private function readRankingList($r,$rankUnid)
{
$list = $r->get(RANKING_KEY.$rankUnid);
if (empty($list)) {
return array();
}
$list = json_decode($list, true);
return $list;
}
private function saveRankingList($r,$rankUnid ,$list)
{
$r->set(RANKING_KEY.$rankUnid , json_encode($list));
$r->pexpire(RANKING_KEY.$rankUnid , 6*60*60*1000);
}
}

View File

@ -265,10 +265,10 @@ class TeamController extends BaseAuthedController {
return;
}
}
// if ($teamDb['slot_num'] >= 4){
// $this->_rspErr(1, 'Maximum size of team');
// return;
// }
if (count($teamDb['member_list'])>$slotNum){
$this->_rspErr(1, 'slot_num Insufficient ');
return;
}
$teamDb['slot_num'] = $slotNum;
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspOk();

View File

@ -64,7 +64,7 @@ class UserController extends BaseAuthedController {
$this->_setV(TN_RANK_STATUS, 0, 1);
}
//elo 衰减
$this->checkElo($userInfo);
$this->dampingElo($userInfo);
$userInfo = $this->_getOrmUserInfo();
//跟新登录时间
$this->_updateUserInfo(array(
@ -713,7 +713,7 @@ class UserController extends BaseAuthedController {
]);
}
private function checkElo($userInfo){
private function dampingElo($userInfo){
$time_diff = myself()->_getNowTime()-$userInfo['last_login_time'];
if ($userInfo['elo'] > 1500 && floor($time_diff/86400) > 0){
$newElo = min(round(pow(log10(floor($time_diff/86400)),1.5)*350),450);
@ -742,6 +742,8 @@ class UserController extends BaseAuthedController {
'gold' => 0,
'diamond' => 0,
'level' => 1,
'rank' => 0,
'score' => 0,
'exp' => 0,
'last_season_id' => $currSeasonMeta ? $currSeasonMeta['id'] : 0,
'score_modifytime' => $this->_getNowTime(),

View File

@ -163,17 +163,9 @@ class BattleDataService extends BaseService {
break;
case self::MATCH_MODE_MATCH:
{
//排位赛
$this->updateSeasonData();
myself()->_incDailyV(TN_DAILY_RANK_BATTLE_TIMES, 0, 1);
/*$userInfo = myself()->_getOrmUserInfo();
$newScore = FormulaService::calcBattleAfterRankScore($userInfo,$_REQUEST);
$newRank = $userInfo['rank'];
$newScore = 789;
mt\Rank::calcNewRankAndScore( $newRank, $newScore);
print_r($newRank.':'.$newScore);die;*/
//排位赛(和匹配合二为一)
// $this->updateSeasonData();
// myself()->_incDailyV(TN_DAILY_RANK_BATTLE_TIMES, 0, 1);
}
break;
case self::MATCH_MODE_PVE:
@ -535,8 +527,25 @@ class BattleDataService extends BaseService {
}
}
// private function updatePvpData()
// {
// error_log('updateBattleData1');
// $this->rankActivityService->updateBattleData();
// error_log('updateBattleData2');
// $hisBattleData = Battle::getMyBattleData();
// if (!isset($hisBattleData)) {
// $hisBattleData = array(
// 'createtime' => myself()->_getNowTime(),
// 'modifytime' => myself()->_getNowTime()
// );
// }
// $this->apply($hisBattleData);
// Battle::add(json_encode($hisBattleData));
// }
private function updatePvpData()
{
error_log('updateBattleData1');
$this->rankActivityService->updateBattleData();
error_log('updateBattleData2');
@ -549,94 +558,78 @@ class BattleDataService extends BaseService {
}
$this->apply($hisBattleData);
Battle::add(json_encode($hisBattleData));
}
private function updateSeasonData()
{
error_log('updateBattleData1');
$this->rankActivityService->updateBattleData();
error_log('updateBattleData2');
$this->currSeasonMeta = mt\RankSeason::getCurrentSeason();
if (!$this->currSeasonMeta) {
return;
}
error_log('updateBattleData3');
$this->seasonDb = Season::find($this->currSeasonMeta['id']);
if (!$this->seasonDb) {
Season::add($this->currSeasonMeta['id']);
$this->currSeasonMeta = mt\RankSeason::getCurrentSeason();
if ( $this->currSeasonMeta ) {
$this->seasonDb = Season::find($this->currSeasonMeta['id']);
}
if (!$this->seasonDb) {
return;
}
error_log('updateBattleData4');
$this->updateScore();
$hisBattleData = Battle::getMyBattleData();
if (!isset($hisBattleData)) {
$hisBattleData = array(
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
if (!$this->seasonDb) {
Season::add($this->currSeasonMeta['id']);
$this->seasonDb = Season::find($this->currSeasonMeta['id']);
}
if (!$this->seasonDb) {
return;
}
error_log('updateBattleData4');
$this->updateScore();
$seasonBattleData = json_decode($this->seasonDb['battle_data'], true);
if (!isset($seasonBattleData['today_data'])) {
$seasonBattleData['today_data'] = array(
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
);
}
if (!isset($seasonBattleData['season_data'])) {
$seasonBattleData['season_data'] = array(
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
);
}
if (!isset($seasonBattleData['his_week_data'])) {
$seasonBattleData['his_week_data'] = array(
);
}
if (!isset($seasonBattleData['this_week_data'])) {
$seasonBattleData['this_week_data'] = array(
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
);
}
if (myself()->_getDaySeconds($seasonBattleData['today_data']['modifytime']) <
myself()->_getNowDaySeconds()) {
$seasonBattleData['today_data'] = array(
'createtime' => $seasonBattleData['today_data']['createtime'],
'modifytime' => myself()->_getNowTime()
);
}
if (myself()->_getDaySeconds($seasonBattleData['this_week_data']['modifytime']) <
myself()->_getMondaySeconds()) {
$seasonBattleData['this_week_data'] = array(
'createtime' => $seasonBattleData['this_week_data']['createtime'],
'modifytime' => myself()->_getNowTime()
);
}
$oldSeasonDataKills = getXVal($seasonBattleData['season_data'], 'total_kills_times', 0);
$this->apply($seasonBattleData['season_data']);
$newSeasonDataKills = getXVal($seasonBattleData['season_data'], 'total_kills_times', 0);
if ($newSeasonDataKills > $oldSeasonDataKills) {
Season::update($this->currSeasonMeta['id'], array(
'kills_modifytime' => myself()->_getNowTime(),
));
Battle::update(array(
'kills_modifytime' => myself()->_getNowTime(),
));
}
$this->apply($seasonBattleData['today_data']);
$this->apply($seasonBattleData['this_week_data']);
Season::update(
$this->currSeasonMeta['id'],
array(
'battle_data' => json_encode($seasonBattleData),
)
);
}
$this->apply($hisBattleData);
Battle::add(json_encode($hisBattleData));
$seasonBattleData = json_decode($this->seasonDb['battle_data'], true);
if (!isset($seasonBattleData['today_data'])) {
$seasonBattleData['today_data'] = array(
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
);
}
if (!isset($seasonBattleData['season_data'])) {
$seasonBattleData['season_data'] = array(
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
);
}
if (!isset($seasonBattleData['his_week_data'])) {
$seasonBattleData['his_week_data'] = array(
);
}
if (!isset($seasonBattleData['this_week_data'])) {
$seasonBattleData['this_week_data'] = array(
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
);
}
if (myself()->_getDaySeconds($seasonBattleData['today_data']['modifytime']) <
myself()->_getNowDaySeconds()) {
$seasonBattleData['today_data'] = array(
'createtime' => $seasonBattleData['today_data']['createtime'],
'modifytime' => myself()->_getNowTime()
);
}
if (myself()->_getDaySeconds($seasonBattleData['this_week_data']['modifytime']) <
myself()->_getMondaySeconds()) {
$seasonBattleData['this_week_data'] = array(
'createtime' => $seasonBattleData['this_week_data']['createtime'],
'modifytime' => myself()->_getNowTime()
);
}
$oldSeasonDataKills = getXVal($seasonBattleData['season_data'], 'total_kills_times', 0);
$this->apply($seasonBattleData['season_data']);
$newSeasonDataKills = getXVal($seasonBattleData['season_data'], 'total_kills_times', 0);
if ($newSeasonDataKills > $oldSeasonDataKills) {
Season::update($this->currSeasonMeta['id'], array(
'kills_modifytime' => myself()->_getNowTime(),
));
Battle::update(array(
'kills_modifytime' => myself()->_getNowTime(),
));
}
$this->apply($seasonBattleData['today_data']);
$this->apply($seasonBattleData['this_week_data']);
Season::update(
$this->currSeasonMeta['id'],
array(
'battle_data' => json_encode($seasonBattleData),
)
);
}
private function updatePveData()