game2006api/webapp/controller/UserController.class.php
2023-05-30 11:54:14 +08:00

869 lines
32 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
require_once('models/User.php');
require_once('models/Hero.php');
require_once('models/Season.php');
require_once('models/Nft.php');
require_once('models/Gun.php');
require_once('models/UserSeasonRing.php');
require_once('models/Chip.php');
require_once('models/Battle.php');
require_once('mt/Parameter.php');
require_once('mt/Drop.php');
require_once('mt/Season.php');
require_once('mt/RankSeason.php');
require_once('mt/Hero.php');
require_once('mt/Rank.php');
require_once('mt/Item.php');
require_once('mt/PveGeminiMode.php');
require_once('mt/PveGemini.php');
require_once('services/AwardService.php');
require_once('services/PropertyChgService.php');
require_once('services/SeasonService.php');
require_once('services/NameService.php');
require_once('services/ChipPageService.php');
use phpcommon\SqlHelper;
use models\User;
use models\Hero;
use models\Gun;
use models\Season;
use models\Nft;
use models\Chip;
use models\UserSeasonRing;
use models\Battle;
class UserController extends BaseAuthedController {
private $init_rank = 'rank_init_rank';
private $init_elo = 'rank_init_elo';
public function login()
{
$this->updateSession(myself()->_getAccountId(),
myself()->_getSessionId());
//$user_name = $_REQUEST['name'];
//$avatar_url = $_REQUEST['avatar_url'];
$userName = 'guest';
$avatarUrl = '18003';
$userInfo = $this->_safeGetOrmUserInfo();
if (!$userInfo) {
$this->createNewUserV2($userName);
$this->_addFreeItem(); //送 50 Test_CEG
$userInfo = $this->_getOrmUserInfo();
$this->_setV(TN_RANK_STATUS, 0, 1);
//初始化芯片页
$chipPageObj = new services\ChipPageService();
$chipPageObj->init();
}
//elo score 衰减
$this->dampingElo($userInfo);
$userInfo = $this->_getOrmUserInfo();
//跟新登录时间
$this->_updateUserInfo(array(
'last_login_time'=>myself()->_getNowTime(),
));
$this->updateLastSeason($userInfo);
$this->_rspData(array(
'info' => User::show($userInfo),
));
$this->_incDailyV(TN_DAILY_LOGINS, 0, 1);
}
private function _addFreeItem2(){
//添加芯片
$chipMeta = \mt\Item::getMetaListByType(\mt\Item::CHIP_TYPE);
$chip1 = array();
$chip2 = array();
$chip3 = array();
foreach ($chipMeta as $row){
if ($row['sub_type'] == 1){
array_push($chip1,$row);
}else if($row['sub_type'] == 2){
array_push($chip2,$row);
}else if($row['sub_type'] == 3){
array_push($chip3,$row);
}
}
for ($i=1;$i<=20;$i++){
$row1 = $chip1[array_rand($chip1)];
Chip::addChip($row1);
$row2 = $chip2[array_rand($chip2)];
Chip::addChip($row2);
$row3 = $chip3[array_rand($chip3)];
Chip::addChip($row3);
}
//添加枪械和Gold
$addItems =array();
foreach (mt\Parameter::getListValue('creator_present_items') as $itemsStr) {
list($itemId, $itemNum) = explode(':', $itemsStr);
if ($itemNum > 0) {
array_push($addItems,
array(
'item_id' => $itemId,
'item_num' => $itemNum
));
}
}
array_push($addItems,
array(
'item_id' => V_ITEM_GOLD,
'item_num' => 100000
));
array_push($addItems,
array(
'item_id' => V_ITEM_DIAMOND,
'item_num' => 100000
));
$awardService = new services\AwardService();
$propertyChgService = new services\PropertyChgService();
$this->_addItems($addItems, $awardService, $propertyChgService);
//添加英雄和皮肤
$itemIds = array(30100,30200, 30300, 30400,30500,30600,30700,30900,31000,40701,40702,40901,40902,41001,40102);
$addItems2 =array();
foreach ($itemIds as $row){
array_push($addItems2,
array(
'item_id' => $row,
'item_num' => 1
));
}
$this->_addItems($addItems2, $awardService, $propertyChgService);
}
private function _addFreeItem(){
$addItems =array();
foreach (mt\Parameter::getListValue('creator_present_items') as $itemsStr) {
list($itemId, $itemNum) = explode(':', $itemsStr);
if ($itemNum > 0) {
array_push($addItems,
array(
'item_id' => $itemId,
'item_num' => $itemNum
));
}
}
if (SERVER_ENV == _TEST) {
array_push($addItems,
array(
'item_id' => V_ITEM_GOLD,
'item_num' => 500000
));
$itemIds = array(30100,30700,30900,40702,40902,40102);
foreach ($itemIds as $row){
array_push($addItems,
array(
'item_id' => $row,
'item_num' => 1
));
}
}
$awardService = new services\AwardService();
$propertyChgService = new services\PropertyChgService();
$this->_addItems($addItems, $awardService, $propertyChgService);
}
private function loginCheck($userInfo)
{
$seasonService = new services\SeasonService();
return $seasonService->checkSeason($userInfo);
}
private function createNewUser($userName, $avatarUrl)
{
$initRankParameterMeta = mt\Parameter::getByName($this->init_rank);
$initRankMeta = mt\Rank::getRankById($initRankParameterMeta['param_value']);
$currSeasonMeta = mt\Season::getCurrentSeason();
$gold = 0;
$diamond = 0;
$heroList = array();
$haveHeadHeroList = array();
$headList = array();
$headFrameList = array();
$addItems = array();
{
foreach (mt\Parameter::getListValue('creator_hero_id') as $heroId) {
$heroMeta = mt\Item::get($heroId);
if ($heroMeta) {
Hero::addHero($heroMeta);
array_push($heroList, $heroMeta);
if ($heroMeta['hero_head']) {
array_push($haveHeadHeroList, $heroMeta);
}
}
}
}
{
foreach (mt\Parameter::getListValue('creator_present_items') as $itemsStr) {
list($itemId, $itemNum) = explode(':', $itemsStr);
if ($itemNum > 0) {
switch ($itemId) {
case V_ITEM_GOLD:
{
$gold += $itemNum;
}
break;
case V_ITEM_DIAMOND:
{
$diamond += $itemNum;
}
break;
default:
{
$itemMeta = mt\Item::get($itemId);
switch ($itemMeta['type']) {
case mt\Item::HEAD_TYPE:
{
array_push($headList, $itemId);
}
break;
case mt\Item::HEAD_FRAME_TYPE:
{
array_push($headFrameList, $itemId);
}
break;
default:
{
array_push($addItems,
array(
'item_id' => $itemId,
'item_num' => $itemNum
));
}
break;
}
}
break;
}
}
}
}
$headId = !empty($headList) ? $headList[rand() % count($headList)] : 0;
$headFrame = !empty($headFrameList) ? $headFrameList[rand() % count($headFrameList)] : 0;
$heroUniId = 0;
$heroId = !empty($heroList) ? $heroList[rand() % count($heroList)]['id'] : 0;
if ($headId == 0 || count($headList) <= 1) {
$headId = !empty($haveHeadHeroList) ?
$haveHeadHeroList[rand() % count($haveHeadHeroList)]['hero_head'] : 0;
}
//Hero::randHero($heroUniId, $heroId);
SqlHelper::upsert
($this->_getSelfMysql(),
't_user',
array(
'account_id' => $this->_getAccountId()
),
array(
),
array(
'account_id' => $this->_getAccountId(),
'channel' => $this->_getChannel(),
'name' => $userName,
'sex' => rand() % 2,
#'avatar_url' => $avatar_url,
'gold' => $gold,
'diamond' => $diamond,
'head_frame' => $headFrame,
'level' => 1,
'exp' => 0,
'rank' => $initRankMeta ? $initRankMeta['id'] : 1,
'history_best_rank' => $initRankMeta ? $initRankMeta['id'] : 1,
'score' => $initRankMeta ? $initRankMeta['rank_score'] : 0,
'history_best_score' => $initRankMeta ? $initRankMeta['rank_score'] : 0,
'head_id' => $headId,
'hero_id' => $heroId,
'last_season_id' => $currSeasonMeta ? $currSeasonMeta['id'] : 0,
'head_list' => json_encode($headList),
'head_frame_list' => json_encode($headFrameList),
'score_modifytime' => $this->_getNowTime(),
'best_rank_modifytime' => $this->_getNowTime(),
'createtime' => $this->_getNowTime(),
'modifytime' => $this->_getNowTime(),
'last_login_time' => $this->_getNowTime(),
)
);
$awardService = new services\AwardService();
$propertyChgService = new services\PropertyChgService();
$this->_addItems($addItems, $awardService, $propertyChgService);
}
public function beforeActive(){
$userInfo = $this->_getOrmUserInfo();
$hero = Hero::getFreeHero();
if (!$hero){
$this->_rspErr(1, "No free heroes");
return;
}
$gun = Gun::getFreeGun();
if (!$gun){
$this->_rspErr(1, "No free weapons");
return;
}
$paramMeta = mt\Parameter::getByName('bceg_max');
$bceg_max = $paramMeta?$paramMeta['param_value']:3720;
$before = array(
'hero' =>$hero,
'gun' =>$gun,
'bceg_max' => $userInfo['bceg'],
'bceg' => min($userInfo['bceg'],$bceg_max)
);
$after = array(
'hero' =>$hero,
'gun' =>$gun,
'ceg' => min($userInfo['bceg'],$bceg_max)
);
$cost = 0;
$cost += \services\FormulaService::Calc_Hero_Convert_Cost($hero);
$cost += \services\FormulaService::Calc_Weapon_Convert_Cost($hero);
$cost += \services\FormulaService::Calc_BCEG_Convert_Cost($userInfo['bceg']);
$this->_rspData(array(
'before' => $before,
'after' => $after,
'cost' => $cost,
));
}
public function active()
{
$this->_rspOk();return;
$hero_uniid = getReqVal('hero_uniid', 0);
$gun_uniid = getReqVal('gun_uniid', 0);
$userInfo = $this->_getOrmUserInfo();
if ($userInfo['activated']) {
$this->_rspErr(10, 'User Activated');
return;
}
$heroDb = Hero::find($hero_uniid);
if (!$heroDb || !empty($heroDb['token_id'])) {
$this->_rspErr(1, 'Parameter error, illegal hero_uniid');
return;
}
$gunDb = Gun::find($gun_uniid);
if (!$gunDb || !empty($gunDb['token_id'])) {
$this->_rspErr(1, 'Parameter error, illegal gun_uniid');
return;
}
{
//转换NFT的手续费U
$cost = 0;
$cost += \services\FormulaService::Calc_Hero_Convert_Cost($heroDb);
$cost += \services\FormulaService::Calc_Weapon_Convert_Cost($gunDb);
$cost += \services\FormulaService::Calc_BCEG_Convert_Cost($userInfo['bceg']);
}
$paramMeta = mt\Parameter::getByName('bceg_max');
$bceg = $paramMeta?$paramMeta['param_value']:3720;
$ceg = min($bceg,$userInfo['bceg']);
$this->_updateUserInfo(array(
'activated' => 1,
'bceg' => 0,
'gold' => function () use($ceg) {
return "gold + {$ceg}";
}
));
$hero_token_id = Nft::addNft(\mt\Item::get($heroDb['hero_id']));
Hero::update($heroDb['idx'],array(
'token_id'=>$hero_token_id,
'account_id' => null
));
$gun_token_id = Nft::addNft(\mt\Item::get($gunDb['gun_id']));
Gun::update($gunDb['idx'],array(
'token_id'=>$gun_token_id,
'account_id' => null
));
$propertyChgService = new services\PropertyChgService();
$propertyChgService->addUserChg();
$propertyChgService->addHeroChg();
$propertyChgService->addGunChg();
$this->_rspData(array(
'data'=>array(
'hero_id' => $heroDb['hero_id'],
'gun_id' => $gunDb['gun_id'],
'ceg' => $ceg,
),
'property_chg' => $propertyChgService->toDto()
));
}
public function update()
{
$userInfo = $this->_getOrmUserInfo();
$validFields = array(
'sex' => array(
'field_name' => 'sex',
'val_func' => function ($val) {
return $val;
},
'valid_func' => function ($val, &$errCode, &$errMsg) use($userInfo) {
if (isValidSex($val)) {
return true;
} else {
$errCode = 1;
$errMsg = 'sex parameter error';
return false;
}
}
),
'head_id' => array(
'field_name' => 'head_id',
'val_func' => function ($val) {
return $val;
},
'valid_func' => function ($val, &$errCode, &$errMsg) use($userInfo) {
if (User::isValidHeadId($userInfo, $val)) {
return true;
} else {
$errCode = 1;
$errMsg = 'head_id parameter error';
return false;
}
}
),
'head_frame' => array(
'field_name' => 'head_frame',
'val_func' => function ($val) {
return $val;
},
'valid_func' => function ($val, &$errCode, &$errMsg) use($userInfo) {
if (User::isValidHeadFrame($userInfo, $val)) {
return true;
} else {
$errCode = 1;
$errMsg = 'head_id parameter error';
return false;
}
}
),
'hero_id' => array(
'field_name' => 'hero_id',
'val_func' => function ($val) {
return $val;
},
'valid_func' => function ($val, &$errCode, &$errMsg) use ($userInfo) {
if (User::isValidHeroId($userInfo, $val)) {
return true;
} else {
$errCode = 1;
$errMsg = 'hero_id parameter error';
return false;
}
}
),
'first_fight' => array(
'field_name' => 'first_fight',
'val_func' => function ($val) {
return empty($val) ? 0 : 1;
},
'valid_func' => function ($val, &$errCode, &$errMsg) {
return true;
}
),
'already_guide' => array(
'field_name' => 'already_guide',
'val_func' => function ($val) {
return empty($val) ? 0 : 1;
},
'valid_func' => function ($val, &$errCode, &$errMsg) {
return true;
}
),
'guild_id' => array(
'field_name' => 'guild_id',
'val_func' => function ($val) {
return empty($val) ? '' : $val;
},
'valid_func' => function ($val, &$errCode, &$errMsg) {
return true;
}
),
'guild_job' => array(
'field_name' => 'guild_job',
'val_func' => function ($val) {
return empty($val) ? 0 : $val;
},
'valid_func' => function ($val, &$errCode, &$errMsg) {
return true;
}
),
'guild_name' => array(
'field_name' => 'guild_name',
'val_func' => function ($val) {
return empty($val) ? '' : $val;
},
'valid_func' => function ($val, &$errCode, &$errMsg) {
return true;
}
),
'parachute' => array(
'field_name' => 'parachute',
'val_func' => function ($val) {
return $val;
},
'valid_func' => function ($val, &$errCode, &$errMsg) {
if (User::isValidParachute($val)) {
return true;
} else {
$errCode = 1;
$errMsg = 'parachute parameter error';
return false;
}
}
),
'ring_id' => array(
'field_name' => 'ring_id',
'val_func' => function ($val) {
return $val;
},
'valid_func' => function ($val, &$errCode, &$errMsg) {
if (User::isValidRing($val)) {
return true;
} else {
$errCode = 1;
$errMsg = 'ring_id parameter error';
return false;
}
}
)
);
$fieldsKv = array();
$errCod = 0;
$errMsg = '';
foreach ($validFields as $key => $field) {
$reqVal = getReqVal($key, null);
if (!is_null($reqVal)) {
if (isset($field['valid_func'])) {
if (!$field['valid_func']($reqVal, $errCod, $errMsg)) {
$this->_rspErr($errCod, $errMsg);
return;
}
$fieldsKv[$field['field_name']] = $field['val_func']($reqVal);
}
}
}
if (count($fieldsKv) > 0) {
$this->_updateUserInfo($fieldsKv);
}
$propertyChgService = new services\PropertyChgService();
$propertyChgService->addUserChg();
$propertyChgService->addHeroChg();
$this->_rspData(array(
'property_chg' => $propertyChgService->toDto()
));
}
public function info()
{
$targetId = getReqVal('target_id', '');
$userDb = SqlHelper::ormSelectOne
($this->_getMysql($targetId),
't_user',
array(
'account_id' => $targetId
)
);
if (!$userDb) {
$this->_rspErr(1, 'Account does not exist');
return;
}
$this->_rspData(array(
'info' => User::info($userDb)
));
}
public function query()
{
$name = getReqVal('name', '');
$filter = array(
'name' => $name,
);
if (SERVER_ENV == _ONLINE) {
$filter['channel'] = BC_CHANNEL;
}
$userDb = SqlHelper::ormSelectOne
($this->_getMysql($name),
't_user',
$filter
);
if (!$userDb) {
$this->_rspErr(1, 'not found');
return;
}
$channel = phpcommon\extractChannel($userDb['account_id']);
if ($channel != BC_CHANNEL) {
if (SERVER_ENV == _ONLINE) {
$this->_rspErr(1, 'not found');
return;
}
}
$this->_rspData(array(
'info' => User::info($userDb)
));
}
public function detailInfo()
{
$targetId = getReqVal('target_id', '');
$userDb = User::find($targetId);
if (!$userDb) {
$this->_rspErr(1, 'Account does not exist');
return;
}
$userDto = User::info($userDb);
$userDto['current_rank'] = $userDb['rank'];
$userDto['current_rank_score'] = $userDb['score'];
$userDto['history_best_rank_score'] = $userDb['history_best_score'];
$userDto['history_seasons'] = array();
$seasonDbs = Season::getHistorySeasons($targetId);
$battleDb = Battle::find($targetId);
// foreach ($seasonDbs as $seasonDb) {
// $battleData = json_decode($seasonDb['battle_data'], true);
if ($battleDb){
$battleData = json_decode($battleDb['battle_data'], true);
$seasonBattleData = isset($battleData) ? getXVal($battleData, 'data', array()) : array();
$gameTimes = getXVal($seasonBattleData, 'total_battle_times', 0);
$winTimes = getXVal($seasonBattleData, 'total_win_times', 0);
$winRate = $gameTimes > 0 ? intval($winTimes / $gameTimes * 100) : 0;
$totalKills = getXVal($seasonBattleData, 'total_kills_times', 0);
$totalDamage = getXVal($seasonBattleData, 'total_damage_out', 0);
$totalAlive = getXVal($seasonBattleData, 'total_alive_time', 0);
$totalRecoverHp = getXVal($seasonBattleData, 'total_recover_hp', 0);
$avgDamage = $gameTimes > 0 ? intval($totalDamage / $gameTimes) : 0;
$avgKills = $gameTimes > 0 ? intval($totalKills / $gameTimes) : 0;
$starKills = $gameTimes > 0 ? intval($totalKills / $gameTimes / 10 *100) : 0;
$starDamage = $gameTimes > 0 ? intval($totalDamage / $gameTimes / 1500 * 100) : 0;
$starAlive = $gameTimes > 0 ? intval($totalAlive / $gameTimes / 300 * 0.1) : 0;
$starRecover = $gameTimes > 0 ? intval($totalRecoverHp / $gameTimes / 300 * 100) : 0;
$starWin = $gameTimes > 0 ? intval($winTimes / $gameTimes / 0.5 * 100) : 0;
array_push($userDto['history_seasons'],
array(
// 'season_id' => $seasonDb['season_id'],
'total_kills' => $totalKills,
'game_times' => $gameTimes,
'win_times' => $winTimes,
'win_rate' => $winRate,
'max_kills' => getXVal($seasonBattleData, 'max_kills_times', 0),
'avg_kills' => $avgKills,
'max_damage_out' => getXVal($seasonBattleData, 'max_damage_out', 0),
'avg_damage_out' => $avgDamage,
'star_kills' => min(100, $starKills),
'star_damage' => min(100, $starDamage),
'star_alive' => min(100, $starAlive),
'star_recover' => min(100, $starRecover),
'star_win' => min(100, $starWin),
));
}
if (count($userDto['history_seasons']) <= 0) {
// $currSeasonMeta = mt\Season::getCurrentSeason();
array_push($userDto['history_seasons'],
array(
// 'season_id' => $currSeasonMeta['id'],
'total_kills' => 0,
'game_times' => 0,
'win_times' => 0,
'win_rate' => 0,
'max_kills' => 0,
'avg_kills' => 0,
'max_damage_out' => 0,
'avg_damage_out' => 0,
'star_kills' => min(100, 0),
'star_damage' => min(100, 0),
'star_alive' => min(100, 0),
'star_recover' => min(100, 0),
'star_win' => min(100, 0),
));
}
$this->_rspData(array(
'info' => $userDto
));
}
public function like(){
$account_id = getReqVal('target_id', '');
if (! $account_id){
$this->_rspErr(1, 'target_id param error');
return;
}
if ($account_id == $this->_getAccountId()){
$this->_rspErr(1, 'target_id param error');
return;
}
$userDb = User::find($account_id);
if (!$userDb){
$this->_rspErr(1, 'target_id param error');
return;
}
User::updateLikeCount($account_id);
$this->_rspOk();
}
public function initRank(){
$initRankParameterMeta = mt\Parameter::getByName($this->init_rank);
$initRankMeta = mt\Rank::getRankById($initRankParameterMeta['param_value']);
$initEloParameterMeta = mt\Parameter::getByName($this->init_elo);
$fields = array(
'rank' => $initRankMeta ? $initRankMeta['id'] : 1,
'history_best_rank' => $initRankMeta ? $initRankMeta['id'] : 1,
'score' => $initRankMeta ? $initRankMeta['rank_score'] : 0,
'history_best_score' => $initRankMeta ? $initRankMeta['rank_score'] : 0,
'elo' => $initEloParameterMeta ? $initEloParameterMeta['param_value'] : 0,
);
User::update($fields);
$this->_setV(TN_RANK_STATUS, 0, 0);
$propertyChgService = new services\PropertyChgService();
$propertyChgService->addUserChg();
$this->_rspData([
'property_chg' => $propertyChgService->toDto(),
]);
}
public function getFreeItemList(){
$data = array();
$heroParam = mt\Parameter::getListValue('free_hero_list');
$gunParam = mt\Parameter::getListValue('free_weapon_list');
if ($heroParam){
$data['hero'] = $heroParam;
}
if ($gunParam){
$data['gun'] = $gunParam;
}
$this->_rspData([
'data'=>$data
]);
}
public function selectFreeItem(){
$hero_id = getReqVal('hero_id', '');
$gun_id = getReqVal('gun_id', '');
if (!$hero_id || !$gun_id){
$this->_rspErr(1, 'param is error');
return;
}
$heroMeta = mt\Item::get($hero_id);
if (! $heroMeta){
$this->_rspErr(1, 'hero_id is error');
return;
}
$gunMeta = mt\Item::get($gun_id);
if (! $gunMeta){
$this->_rspErr(1, 'gun_id is error');
return;
}
$userInfo = $this->_getOrmUserInfo();
$headList = emptyReplace(json_decode($userInfo['head_list'], true), array());
if ($heroMeta['hero_head'] && !in_array($heroMeta['hero_head'],$headList)){
array_push($headList,$heroMeta['hero_head']);
}
Hero::addFreeHero($heroMeta);
$heroUid = SqlHelper::getLastInsertId($this->_getSelfMysql());
Gun::addFreeGun($gunMeta);
$fields = array(
'hero_id' => $heroUid,
'head_id' => $heroMeta['hero_head'],
'head_frame' => 60000,
'head_list' => json_encode($headList),
'head_frame_list' => json_encode(array(60000)),
'is_gain_item' => 1,
);
User::update($fields);
$propertyChgService = new services\PropertyChgService();
$propertyChgService->addUserChg();
$propertyChgService->addHeroChg();
$propertyChgService->addGunChg();
$this->_rspData([
'data'=>array(
'hero_id' => $hero_id,
'gun_id' => $gun_id,
),
'property_chg' => $propertyChgService->toDto(),
]);
}
private function dampingElo($userInfo){
//每天elo衰减
$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);
$this->_updateUserInfo(array(
'elo' => $userInfo['elo'] - $newElo
));
}
//7天未打排位扣排位分
$last_ranking_time = $this->_getV(TN_LAST_RANKING_TIME,0);
if ($last_ranking_time && floor((myself()->_getNowTime()-$last_ranking_time)/86400) >= 7){
$userDb = $this->_getOrmUserInfo();
$rank_key = mt\Rank::getRankById($userDb['rank'])?mt\Rank::getRankById($userDb['rank'])['rank_order2']:0;
$paramMeta = mt\Parameter::getByName('rank_point_reduce');
if ($paramMeta){
$param_value = explode('|',$paramMeta['param_value']);
$deductScore = $param_value[$rank_key-1];
if ($deductScore>0){
$newRank = $userDb['rank'];
$newScore = $userDb['score'] - $deductScore;
mt\Rank::calcNewRankAndScore( $newRank, $newScore);
$this->_updateUserInfo(array(
'rank' => $newRank,
'score' => $newScore,
));
}
}
}
}
private function createNewUserV2($userName){
$currSeasonMeta = mt\RankSeason::getCurrentSeason();
SqlHelper::upsert
($this->_getSelfMysql(),
't_user',
array(
'account_id' => $this->_getAccountId()
),
array(
),
array(
'account_id' => $this->_getAccountId(),
'channel' => $this->_getChannel(),
'name' => $userName,
'sex' => rand() % 2,
'gold' => 0,
'diamond' => 0,
'level' => 1,
'rank' => 0,
'score' => 0,
'exp' => 0,
'last_season_id' => $currSeasonMeta ? $currSeasonMeta['id'] : 0,
'score_modifytime' => $this->_getNowTime(),
'best_rank_modifytime' => $this->_getNowTime(),
'createtime' => $this->_getNowTime(),
'modifytime' => $this->_getNowTime(),
'last_login_time' => $this->_getNowTime(),
)
);
}
private function updateLastSeason($userInfo){
if (! $userInfo['last_season_id']){
$currSeasonMeta = mt\RankSeason::getCurrentSeason();
if ($currSeasonMeta){
$this->_updateUserInfo(array(
'last_season_id'=>$currSeasonMeta['id'],
));
}
}
}
}