game2006api/webapp/services/RankActivityService.php
2024-07-25 16:30:26 +08:00

260 lines
9.1 KiB
PHP

<?php
namespace services;
require_once('mt/Item.php');
require_once('mt/Equip.php');
require_once('mt/Season.php');
require_once('mt/Rank.php');
require_once('mt/RankReward.php');
require_once('mt/KillReward.php');
require_once('mt/Parameter.php');
require_once('mt/AttrHelper.php');
require_once('mt/RankActivity.php');
require_once('mt/EventRanking.php');
require_once('models/Season.php');
require_once('models/Battle.php');
require_once('models/Bag.php');
require_once('models/Hero.php');
require_once('models/Gun.php');
require_once('models/Guild.php');
use mt;
use phpcommon;
use phpcommon\SqlHelper;
use models\Season;
use models\Battle;
use models\Bag;
use models\Hero;
use models\Gun;
use models\Guild;
class RankActivityService extends BaseService {
const KILLS_TYPE = 1; //击杀榜
const WINS_TYPE = 2; //吃鸡榜
const BATTLES_TYPE = 3; //场次榜
const GUILD_TYPE = 4; //工会榜
const OP_SUM = 1;
const OP_GREATEST = 2;
public function updateBattleData($gold)
{
if (SERVER_ENV == _ONLINE && myself()->_getChannel() == TAPTAP_CHANNEL) {
error_log('————————————游客无法参与排行活动——————————————');
return;
}
$userDb = myself()->_getOrmUserInfo();
$currentRankingMeta = mt\EventRanking::getCurrentRanking();
error_log(
json_encode(array(
'account_id' => $userDb['account_id'],
'themeType' => $currentRankingMeta?$currentRankingMeta['themeType']:null,
'kill' => getReqVal('kills', 0),
'ranked' => getReqVal('ranked', 0),
'ceg'=>$gold
))
);
$match_mode = getReqVal('match_mode', 0);
$ranked = getReqVal('ranked', 0);
$kills = getReqVal('kills', 0);
$aliveTime = getReqVal('alive_time', 0)/1000;
if ($currentRankingMeta){
switch ($currentRankingMeta['themeType']){
case self::KILLS_TYPE :
{
if($match_mode==0 && $kills>0){
$this->internalUpdateRankActivityNew(
$currentRankingMeta,
getReqVal('kills', 0),
$userDb);
}
}
break;
case self::WINS_TYPE :
{
if ( $match_mode==0 && $ranked == 1){
$this->internalUpdateRankActivityNew(
$currentRankingMeta,
$ranked,
$userDb);
}
}
break;
case self::BATTLES_TYPE :
{
if (!$ranked) {
return;
}
$cond = (1 - ($ranked > 30 ? 1 : 0) *
($kills < 1 ? 1 : 0) *
($aliveTime < 30 ? 1 : 0));
if (!$cond) {
return;
}
if ( $match_mode==0){
$this->internalUpdateRankActivityNew(
$currentRankingMeta,
1,
$userDb);
}
}
break;
case self::GUILD_TYPE :
{
// if ($userDb['guild_id']){
$this->internalUpdateRankActivityNew(
$currentRankingMeta,
$gold,
$userDb);
// }
}
break;
}
}
// $this->internalUpdateRankActivity(
// self::ALIVE_TYPE,
// getReqVal('alive_time', 0) / 1000,
// self::OP_SUM);
// $this->internalUpdateRankActivity(
// self::KILLS_TYPE,
// getReqVal('kills', 0),
// self::OP_SUM);
}
private function internalUpdateRankActivityNew($meta, $val, $user){
if (!$meta){
return;
}
if($meta['themeType'] == self::GUILD_TYPE){
if (!$user['guild_id']){
$row = SqlHelper::ormSelectOne
(myself()->_getSelfMysql(),
't_rank_activity',
array(
'account_id' => myself()->_getAccountId(),
'wave' => $meta['wave'],
'type' => $meta['themeType'],
)
);
if ($row && $row['guild_id']){
$guild = Guild::find($row['guild_id']);
if ($guild['guild_status'] == 2){
SqlHelper::update
(myself()->_getSelfMysql(),
't_rank_activity',
array(
'guild_id' => $row['guild_id'],
'wave' => $meta['wave'],
'type' => $meta['themeType'],
),
array(
'guild_id'=> ''
)
);
}
SqlHelper::update
(myself()->_getSelfMysql(),
't_rank_activity',
array(
'account_id' => myself()->_getAccountId(),
'wave' => $meta['wave'],
'type' => $meta['themeType'],
),
array(
'guild_id'=> ''
)
);
}
return;
}
}
SqlHelper::upsert
(myself()->_getSelfMysql(),
't_rank_activity',
array(
'account_id' => myself()->_getAccountId(),
'wave' => $meta['wave'],
'type' => $meta['themeType'],
),
array(
'value' => function () use($val) {
return "value + ${val}";
},
'guild_id' =>$user['guild_id'],
'modifytime' => myself()->_getNowTime(),
),
array(
'account_id' => myself()->_getAccountId(),
'channel' => myself()->_getChannel(),
'guild_id'=>$user['guild_id'],
'wave' => $meta['wave'],
'type' => $meta['themeType'],
'value' => $val,
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
)
);
}
// public function heroUpgradeQuality($quality)
// {
// $this->internalUpdateRankActivity(
// self::HERO_UPGRADE_QUALITY_TYPE,
// $quality,
// self::OP_GREATEST);
// }
//
// public function heroUpgradeLevel($level)
// {
// $this->internalUpdateRankActivity(
// self::HERO_UPGRADE_LEVEL_TYPE,
// $level,
// self::OP_GREATEST);
// }
// private function internalUpdateRankActivity($type, $val, $opt)
// {
// $meta = mt\RankActivity::get($type);
// if (!$meta || !mt\RankActivity::isActivityPeriod($meta)) {
// return;
// }
//
// if ($val > $meta['limit']) {
// $val = $meta['limit'];
// }
//
// SqlHelper::upsert
// (myself()->_getSelfMysql(),
// 't_rank_activity',
// array(
// 'account_id' => myself()->_getAccountId(),
// 'type' => $type
// ),
// array(
// 'value' => function () use($val, $opt) {
// if ($opt == self::OP_SUM) {
// return "value + ${val}";
// } else if ($opt == self::OP_GREATEST) {
// return "GREATEST(value, ${val})";
// } else {
// return $val;
// }
// },
// 'modifytime' => myself()->_getNowTime(),
// ),
// array(
// 'account_id' => myself()->_getAccountId(),
// 'channel' => myself()->_getChannel(),
// 'type' => $type,
// 'value' => $val,
// 'createtime' => myself()->_getNowTime(),
// 'modifytime' => myself()->_getNowTime()
// )
// );
// }
}