From cdba43c119dd832bcca7f300c443b31cd39f9940 Mon Sep 17 00:00:00 2001 From: hujiabin <519660157@qq.com> Date: Fri, 19 Jul 2024 15:58:25 +0800 Subject: [PATCH] 1 --- webapp/controller/BagController.class.php | 4 +- webapp/controller/ChipController.class.php | 52 - .../EventRankingController.class.php | 1109 +++++++++-------- .../controller/FragmentController.class.php | 35 - webapp/controller/HeroController.class.php | 80 -- .../controller/HeroSkinController.class.php | 6 + 6 files changed, 565 insertions(+), 721 deletions(-) diff --git a/webapp/controller/BagController.class.php b/webapp/controller/BagController.class.php index fc7a1fea..632a17d8 100644 --- a/webapp/controller/BagController.class.php +++ b/webapp/controller/BagController.class.php @@ -86,7 +86,7 @@ class BagController extends BaseAuthedController { return; } $itemDb = Bag::find($itemId); - if (!isset($itemDb) || $itemDb['item_num'] <= 0) { + if (!isset($itemDb) || $itemDb['item_num'] <= 0 || $itemDb['item_num']< $itemNum) { $this->_rspErr(1, 'Not enough item'); return; } @@ -608,6 +608,7 @@ class BagController extends BaseAuthedController { public function syntheticGold(){ + return $itemId = getReqVal('item_id', 0); $paramMeta = mt\Parameter::getVal('gold_synthesis_rank',0); if (!$paramMeta){ @@ -683,6 +684,7 @@ class BagController extends BaseAuthedController { } public function resolveGolds(){ + return $item_uniid= getReqVal('item_uniid', 0); $itemDb = Bag::findByUniId($item_uniid); if (!$itemDb || $itemDb['item_num'] <= 0) { diff --git a/webapp/controller/ChipController.class.php b/webapp/controller/ChipController.class.php index d866ab55..29d5ba60 100644 --- a/webapp/controller/ChipController.class.php +++ b/webapp/controller/ChipController.class.php @@ -130,56 +130,4 @@ class ChipController extends BaseAuthedController )); } - public function upgradeQualityOld(){ - $chipUniId = trim(getReqVal('chip_uniid', 0)); - if (!$chipUniId) { - $this->_rspErr(1, 'Please enter parameter'); - return; - } - $chipDb = Chip::find($chipUniId); - if (!$chipDb){ - $this->_rspErr(1,'unique_id_main parameter error'); - return; - } - if ($chipDb['quality'] == \mt\QualityUpMapRule::MAX_QUALITY){ - $this->_rspErr(5, "It's already the highest level"); - return; - } - $heroQualityMeta = \mt\QualityUpMapRule::getByQuality($chipDb['item_id'],$chipDb['quality']+1); - if (!$heroQualityMeta){ - $this->_rspErr(100, 'server internal error'); - return; - } - $costItems = array( - array( - 'item_id' => V_ITEM_GOLD, - 'item_num' => $heroQualityMeta['gold'] - ), - array( - 'item_id' => $heroQualityMeta['item'], - 'item_num' => $heroQualityMeta['item_num'] - ), - ); - $lackItem = null; - if (!$this->_hasEnoughItems($costItems, $lackItem)) { - $this->_rspErr(3, $this->_getLackItemErrMsg($lackItem)); - return; - } - $this->_decItems($costItems); - $chipMeta = \mt\Item::get($chipDb['item_id']); - $chipAttrMeta = \mt\ChipAttribute::get($chipMeta['id']); - $attribute = \mt\EconomyAttribute::getAttribute($chipAttrMeta['economyAttribute'],$chipDb['quality'] + 1); - Chip::update2($chipUniId, array( - 'quality' => $chipDb['quality'] + 1, - 'wealth_attr' => json_encode($attribute), - )); - $propertyChgService = new services\PropertyChgService(); - $propertyChgService->addChip(); - $propertyChgService->addUserChg(); - $propertyChgService->addBagChg(); - $this->_rspData(array( - 'property_chg' => $propertyChgService->toDto(), - )); - } - } diff --git a/webapp/controller/EventRankingController.class.php b/webapp/controller/EventRankingController.class.php index 1331b6e4..e9701a30 100644 --- a/webapp/controller/EventRankingController.class.php +++ b/webapp/controller/EventRankingController.class.php @@ -1,553 +1,556 @@ -_rspData(array( - 'list' => mt\EventRanking::getEventRankingList(), - 'ceg' => EventRanking::getSumV() - )); - } - - public function activityRankingList() - { - $wave = getReqVal('wave', 0); - $type = getReqVal('type', 0); - if (!$wave || !$type){ - $this->_rspErr(1, "error param"); - return; - } - - $rankingData = $this->internalGetActivityRankData($wave,$type); - $this->_rspData( - array( - 'ranking_list'=>$rankingData - ) - ); - } - private $myRanked = array(); - private function internalGetActivityRankData($wave,$type){ - $page = getReqVal('page', 1); - $size = getReqVal('size', 100); - $userInfo = $this->_getOrmUserInfo(); - $this->myRanked = array( - 'ranked' => -1, - 'user' => User::toSimple($userInfo), - 'value' => 0, - 'rewardNum'=>0, - 'extraRewardNum'=>0, - 'modifytime' => 0, - ); - $rankingList = array(); - $pages = 0; - switch ($type){ - case \services\RankActivityService::KILLS_TYPE : { - $rows = myself()->_getSelfMysql()->execQuery( -// 'SELECT t1.*,@rownum := @rownum + 1 AS ranked FROM ' . -// '(SELECT * FROM t_rank_activity WHERE wave=:wave AND type=:type ORDER BY value DESC LIMIT 1200) t1,'. -// '( SELECT @rownum := 0 ) t2', - 'SELECT * FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type ' . - 'ORDER BY value DESC ' . - "LIMIT 1200", - array( - ':wave' => $wave, - ':type' => $type - ) - ); - - $this->myRanked['value'] = $this->getMyValue($wave,$type); - $data = $this->paginate($rows,$page,$size); - $pages = $data['pages']; - $rankingList = $data['lists']; - } break; - case \services\RankActivityService::WINS_TYPE : { - $rows = myself()->_getSelfMysql()->execQuery( - 'SELECT * FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type ' . - 'ORDER BY value DESC ' . - "LIMIT 10", - array( - ':wave' => $wave, - ':type' => $type - ) - ); - $this->myRanked['value'] = $this->getMyValue($wave,$type); - $ranked = 0; - foreach ($rows as $row) { - $ranked += 1; - if ($row['account_id'] == myself()->_getAccountId()) { - $this->myRanked['ranked'] = $ranked; - $this->myRanked['value'] = $row['value']; - $this->myRanked['rewardNum'] = $this->celAward($wave,$type,$ranked)['rewardNum']; - $this->myRanked['extraRewardNum'] = $this->celAward($wave,$type,$ranked)['extraRewardNum']; - $this->myRanked['modifytime'] = $row['modifytime']; - } - array_push($rankingList, array( - 'ranked' => $ranked, - 'user' => User::toSimple(User::find($row['account_id'])), - 'value' => $row['value'], - 'rewardNum' => $this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], - 'extraRewardNum' => $this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], - 'modifytime' => $row['modifytime'], - )); - } - } break; - case \services\RankActivityService::BATTLES_TYPE : { - $rows = myself()->_getSelfMysql()->execQuery( - 'SELECT * FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type ' . - 'ORDER BY value DESC ' . - "LIMIT 1800", - array( - ':wave' => $wave, - ':type' => $type - ) - ); - $this->myRanked['value'] = $this->getMyValue($wave,$type); - $data = $this->paginate($rows,$page,$size); - $pages = $data['pages']; - $rankingList = $data['lists']; - } break; - case \services\RankActivityService::GUILD_TYPE : { - $this->myRanked['test_ceg'] = 0; - $rankDb = SqlHelper::ormSelectOne - (myself()->_getSelfMysql(), - 't_rank_activity', - array( - 'account_id' => myself()->_getAccountId(), - 'wave' => $wave, - 'type' => $type, - ) - ); - if ($rankDb){ - $this->myRanked['test_ceg'] = $rankDb['value']; - } - $rows = myself()->_getSelfMysql()->execQuery( - 'SELECT guild_id,SUM(value) AS value FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type AND guild_id<>""' . - 'GROUP BY guild_id '. - 'ORDER BY value DESC ' . - "LIMIT 10", - array( - ':wave' => $wave, - ':type' => $type - ) - ); - $ranked = 0; - foreach ($rows as $row) { - $ranked += 1; - if (!$userInfo['guild_id']){ - $this->myRanked['guild'] = array(); - } - if($userInfo['guild_id'] && $userInfo['guild_id'] == $row['guild_id']){ - $guildDb = Guild::find($row['guild_id']); - $this->myRanked['ranked'] = $ranked; - $this->myRanked['user'] = array(); - $this->myRanked['guild'] = Guild::toSimple($guildDb); - $this->myRanked['value'] = $row['value']; - $this->myRanked['rewardNum'] = $this->celAward($wave,$type,$ranked)['rewardNum']; - $this->myRanked['extraRewardNum'] = $this->celAward($wave,$type,$ranked)['extraRewardNum']; - }else{ - $guildDb = Guild::find($userInfo['guild_id']); - $value = myself()->_getSelfMysql()->execQuery( - 'SELECT guild_id,SUM(value) AS value FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type AND guild_id=:guild_id ' . - 'GROUP BY guild_id limit 1', - array( - ':wave' => $wave, - ':type' => $type, - ':guild_id'=>$userInfo['guild_id'] - ) - ); - $this->myRanked['user'] = array(); - $this->myRanked['guild'] =Guild::toSimple($guildDb); - $this->myRanked['value'] =$value?$value[0]['value']:0; - } - $guildDb = Guild::find($row['guild_id']); - array_push($rankingList, array( - 'ranked' => $ranked, - 'user' => array(), - 'guild'=>Guild::toSimple($guildDb), - 'value' => $row['value'], - 'rewardNum' => $this->celAward($wave,$type,$ranked)['rewardNum'], - 'extraRewardNum' => $this->celAward($wave,$type,$ranked)['extraRewardNum'], - )); - } - } break; - } - $rankingData = array( - 'type' => $type, - 'pages' => $pages, - 'rows' => $rankingList, - 'my_ranked' => $this->myRanked - ); -// error_log(json_encode( -// array( -// 'account_id'=>$userInfo['account_id'], -// 'guild_id'=>$userInfo['guild_id'], -// 'type' => $type, -// 'pages' => $pages, -// 'rows' => $rankingList, -// 'my_ranked' => $this->myRanked -// ) -// )); - return $rankingData; - } - - private function paginate($rows,$page,$size){ - $rankingList = array(); - $pages = ceil(count($rows)/$size)>1?ceil(count($rows)/$size):0; - $offset=($page-1)*$size; - $ranked = 0; - foreach ($rows as $row){ - $ranked+=1; - if ($row['account_id'] == myself()->_getAccountId()) { - $this->myRanked['ranked'] = $ranked; - $this->myRanked['value'] = $row['value']; - $this->myRanked['rewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['rewardNum']; - $this->myRanked['extraRewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum']; - $this->myRanked['modifytime'] = $row['modifytime']; - } - if ($offset<$ranked && $ranked<=$offset+$size){ - array_push($rankingList, array( - 'ranked' => $ranked, - 'user' => User::toSimple(User::find($row['account_id'])), - 'value' => $row['value'], - 'rewardNum' => $this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], - 'extraRewardNum' => $this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], - 'modifytime' => $row['modifytime'], - )); - } - } - return array( - 'pages' => $pages, - 'lists' => $rankingList - ); - } - - private function getMyValue($wave,$type){ - $value = myself()->_getSelfMysql()->execQuery( - 'SELECT * FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type AND account_id=:account_id ' . - "LIMIT 1", - array( - ':wave' => $wave, - ':type' => $type, - ':account_id' => myself()->_getAccountId() - ) - ); - return $value ? $value[0]['value'] : 0; - } - - private function celAward($wave,$type,$ranked){ - $rankingMeta = \mt\EventRanking::findByWaveOrType($wave,$type); - $rewardNum = 0; - $extraRewardNum = 0; - if ($rankingMeta){ - $rewardArr = explode('|',$rankingMeta['reward']); - $extraRewardArr = explode('|',$rankingMeta['extraReward']); - if($rewardArr){ - foreach ($rewardArr as $value){ - $temp = explode(',',$value); - if ($ranked<=$temp[0]){ - $rewardNum+=$temp[1]; - break; - } - } - } - if($extraRewardArr){ - foreach ($extraRewardArr as $val){ - $temp = explode(',',$val); - if ($ranked == $temp[0]){ - $extraRewardNum+=$temp[1]; - } - } - } - } - return array( - 'rewardNum' => $rewardNum, - 'extraRewardNum' => $extraRewardNum - ); - } - - public function settlementRankingAward(){ - $id = getReqVal('id', 0); -// $currentRankingMeta = mt\EventRanking::getCurrentRanking(); - $awardList = array(); -// if ($currentRankingMeta){ - $lastRankingMeta = mt\EventRanking::find($id); - if ($lastRankingMeta){ - switch ($lastRankingMeta['themeType']){ - case \services\RankActivityService::KILLS_TYPE : { - $rows = myself()->_getSelfMysql()->execQuery( - 'SELECT * FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type ' . - 'ORDER BY value DESC ' . - "LIMIT 1200", - array( - ':wave' => $lastRankingMeta['wave'], - ':type' => $lastRankingMeta['themeType'] - ) - ); - - $ranked = 0; - foreach ($rows as $row){ - $ranked+=1; - array_push($awardList,array( - 'ranked'=>$ranked, - 'account_id'=>$row['account_id'], - 'rewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], - 'extraRewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], - )); - } - if ($awardList){ - //记录此活动的CEG奖励 - foreach ($awardList as $value){ - $cegNum = $value['rewardNum']+$value['extraRewardNum']; - EventRanking::setV($value['account_id'],$lastRankingMeta['wave'],$lastRankingMeta['themeType'],$cegNum); - } - - } - error_log('********** KILL RANKING SETTLEMENT SUCCESS ***********'); - $this->_rspOk(); - };break; - case \services\RankActivityService::WINS_TYPE : { - $rows = myself()->_getSelfMysql()->execQuery( - 'SELECT * FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type ' . - 'ORDER BY value DESC ' . - "LIMIT 10", - array( - ':wave' => $lastRankingMeta['wave'], - ':type' => $lastRankingMeta['themeType'] - ) - ); - - $ranked = 0; - foreach ($rows as $row) { - $ranked += 1; - array_push($awardList,array( - 'ranked'=>$ranked, - 'account_id'=>$row['account_id'], - 'rewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], - 'extraRewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], - )); - } - if ($awardList){ - //记录此活动的CEG奖励 - foreach ($awardList as $value){ - $cegNum = $value['rewardNum']+$value['extraRewardNum']; - EventRanking::setV($value['account_id'],$lastRankingMeta['wave'],$lastRankingMeta['themeType'],$cegNum); - } - } - error_log('********** WIN RANKING SETTLEMENT SUCCESS ***********'); - $this->_rspOk(); - };break; - case \services\RankActivityService::BATTLES_TYPE : { - $rows = myself()->_getSelfMysql()->execQuery( - 'SELECT * FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type ' . - 'ORDER BY value DESC ' . - "LIMIT 1800", - array( - ':wave' => $lastRankingMeta['wave'], - ':type' => $lastRankingMeta['themeType'] - ) - ); - $ranked = 0; - foreach ($rows as $row){ - $ranked+=1; - array_push($awardList,array( - 'ranked'=>$ranked, - 'account_id'=>$row['account_id'], - 'rewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], - 'extraRewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], - )); - } - if ($awardList){ - //记录此活动的CEG奖励 - foreach ($awardList as $value){ - $cegNum = $value['rewardNum']+$value['extraRewardNum']; - EventRanking::setV($value['account_id'],$lastRankingMeta['wave'],$lastRankingMeta['themeType'],$cegNum); - } - } - error_log('********** BATTLE RANKING SETTLEMENT SUCCESS ***********'); - $this->_rspOk(); - };break; - case \services\RankActivityService::GUILD_TYPE : { - $rows = myself()->_getSelfMysql()->execQuery( - 'SELECT guild_id,wave,type,SUM(value) AS value FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type ' . - 'GROUP BY guild_id '. - 'ORDER BY value DESC ' . - "LIMIT 10", - array( - ':wave' => $lastRankingMeta['wave'], - ':type' => $lastRankingMeta['themeType'] - ) - ); - $ranked = 0; - foreach ($rows as $row) { - $ranked += 1; - array_push($awardList,array( - 'ranked'=>$ranked, - 'guild_id'=>$row['guild_id'], - 'rewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], - 'extraRewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], - )); - } - if ($awardList) { - //记录此活动的CEG奖励 - foreach ($awardList as $value) { - $usersDb = User::getListByGuildId($value['guild_id']); - $guildDb = Guild::find($value['guild_id']); - if (!$guildDb) { - error_log('The Guild Does Not Exist : ' . $value['guild_id']); - continue; - } - if ($usersDb) { - foreach ($usersDb as $user) { - $thisValue = myself()->_getSelfMysql()->execQuery( - 'SELECT * FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type AND account_id=:account_id', - array( - ':wave' => $lastRankingMeta['wave'], - ':type' => $lastRankingMeta['themeType'], - ':account_id' => $user['account_id'] - ) - ); - $sumValue = myself()->_getSelfMysql()->execQuery( - 'SELECT guild_id,SUM(value) AS value FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type AND guild_id=:guild_id ' . - 'GROUP BY guild_id limit 1', - array( - ':wave' => $lastRankingMeta['wave'], - ':type' => $lastRankingMeta['themeType'], - ':guild_id' => $value['guild_id'] - ) - ); - if (!$thisValue || !$sumValue) { - error_log('该用户无贡献 : ' . $user['account_id'] . ' | 工会总收益有问题 : ' . $value['guild_id'] ); - continue; - } - $rewardNum = $thisValue[0]['value'] / $sumValue[0]['value'] * $value['rewardNum']; - $extraRewardNum = $guildDb['owner_id'] == $user['account_id'] ? $value['extraRewardNum'] : 0; - $cegNum = $rewardNum + $extraRewardNum; - EventRanking::setV($user['account_id'], $lastRankingMeta['wave'], $lastRankingMeta['themeType'], $cegNum); - error_log(json_encode( - array( - 'account_id' => $user['account_id'], - 'guild_id' => $value['guild_id'], - 'value' => $thisValue[0]['value'], - 'sum_value' => $sumValue[0]['value'], - 'rewardNum' => $rewardNum, - 'extraRewardNum' => $extraRewardNum, - 'CEG' => $cegNum - ) - )); - } - } - } - } - error_log('********** GUILD RANKING SETTLEMENT SUCCESS ***********'); - $this->_rspOk(); - };break; - default : { - error_log('运营活动不存在'); - } - } - } -// } - } - - public function updateWinsData(){ - $rows = myself()->_getSelfMysql()->execQuery( - 'SELECT * FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type ', - array( - ':wave' => 1, - ':type' => 2 - ) - ); - foreach ($rows as &$row){ - $battle_record = myself()->_getSelfMysql()->execQuery( - 'SELECT * FROM t_battle_record ' . - 'WHERE account_id=:account_id AND createtime>:createtime1 AND createtime<:createtime2 ', - array( - ':account_id' => $row['account_id'], - ':createtime1' => 1669896000, - ':createtime2' => 1670500800, - ) - ); - foreach ($battle_record as $value){ - $request = emptyReplace(json_decode($value['request'], true), array()); - if ($request['ranked'] == 1 && $request['match_mode'] == 0){ - $row['new_value']+=1; - } - } - } - foreach ($rows as $row){ - SqlHelper::update - (myself()->_getSelfMysql(), - 't_rank_activity', - array( - 'account_id' => $row['account_id'], - 'wave' => 1, - 'type' => 2, - ), - array( - 'value'=>$row['new_value']?$row['new_value']:0 - ) - ); - } - $this->_rspOk(); - } - - public function compensationWins(){ - $rows = myself()->_getSelfMysql()->execQuery( - 'SELECT * FROM t_rank_activity ' . - 'WHERE wave=:wave AND type=:type ' . - 'ORDER BY value DESC ', - array( - ':wave' => 1, - ':type' => 2 - ) - ); - - $compensationList= array(); - $ranked = 0; - foreach ($rows as $row) { - $ranked += 1; - if ($ranked>10 && $row['value'] >0){ - array_push($compensationList,array( - 'ranked'=>$ranked, - 'account_id'=>$row['account_id'], - 'rewardNum'=>5, - 'value'=>$row['value'] - )); - } - - } - if ($compensationList){ - //记录此活动的CEG奖励 - foreach ($compensationList as $value){ - $cegNum = $value['rewardNum']; - EventRanking::setV($value['account_id'],1,9999,$cegNum); - } - } - error_log('********** WIN RANKING COMPENSATION SUCCESS ***********'); - $this->_rspOk(); - } -} +_rspData(array( + 'list' => mt\EventRanking::getEventRankingList(), + 'ceg' => EventRanking::getSumV() + )); + } + + public function activityRankingList() + { + $wave = getReqVal('wave', 0); + $type = getReqVal('type', 0); + if (!$wave || !$type){ + $this->_rspErr(1, "error param"); + return; + } + + $rankingData = $this->internalGetActivityRankData($wave,$type); + $this->_rspData( + array( + 'ranking_list'=>$rankingData + ) + ); + } + private $myRanked = array(); + private function internalGetActivityRankData($wave,$type){ + $page = getReqVal('page', 1); + $size = getReqVal('size', 100); + $userInfo = $this->_getOrmUserInfo(); + $this->myRanked = array( + 'ranked' => -1, + 'user' => User::toSimple($userInfo), + 'value' => 0, + 'rewardNum'=>0, + 'extraRewardNum'=>0, + 'modifytime' => 0, + ); + $rankingList = array(); + $pages = 0; + switch ($type){ + case \services\RankActivityService::KILLS_TYPE : { + $rows = myself()->_getSelfMysql()->execQuery( +// 'SELECT t1.*,@rownum := @rownum + 1 AS ranked FROM ' . +// '(SELECT * FROM t_rank_activity WHERE wave=:wave AND type=:type ORDER BY value DESC LIMIT 1200) t1,'. +// '( SELECT @rownum := 0 ) t2', + 'SELECT * FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type ' . + 'ORDER BY value DESC ' . + "LIMIT 1200", + array( + ':wave' => $wave, + ':type' => $type + ) + ); + + $this->myRanked['value'] = $this->getMyValue($wave,$type); + $data = $this->paginate($rows,$page,$size); + $pages = $data['pages']; + $rankingList = $data['lists']; + } break; + case \services\RankActivityService::WINS_TYPE : { + $rows = myself()->_getSelfMysql()->execQuery( + 'SELECT * FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type ' . + 'ORDER BY value DESC ' . + "LIMIT 10", + array( + ':wave' => $wave, + ':type' => $type + ) + ); + $this->myRanked['value'] = $this->getMyValue($wave,$type); + $ranked = 0; + foreach ($rows as $row) { + $ranked += 1; + if ($row['account_id'] == myself()->_getAccountId()) { + $this->myRanked['ranked'] = $ranked; + $this->myRanked['value'] = $row['value']; + $this->myRanked['rewardNum'] = $this->celAward($wave,$type,$ranked)['rewardNum']; + $this->myRanked['extraRewardNum'] = $this->celAward($wave,$type,$ranked)['extraRewardNum']; + $this->myRanked['modifytime'] = $row['modifytime']; + } + array_push($rankingList, array( + 'ranked' => $ranked, + 'user' => User::toSimple(User::find($row['account_id'])), + 'value' => $row['value'], + 'rewardNum' => $this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], + 'extraRewardNum' => $this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], + 'modifytime' => $row['modifytime'], + )); + } + } break; + case \services\RankActivityService::BATTLES_TYPE : { + $rows = myself()->_getSelfMysql()->execQuery( + 'SELECT * FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type ' . + 'ORDER BY value DESC ' . + "LIMIT 1800", + array( + ':wave' => $wave, + ':type' => $type + ) + ); + $this->myRanked['value'] = $this->getMyValue($wave,$type); + $data = $this->paginate($rows,$page,$size); + $pages = $data['pages']; + $rankingList = $data['lists']; + } break; + case \services\RankActivityService::GUILD_TYPE : { + $this->myRanked['test_ceg'] = 0; + $rankDb = SqlHelper::ormSelectOne + (myself()->_getSelfMysql(), + 't_rank_activity', + array( + 'account_id' => myself()->_getAccountId(), + 'wave' => $wave, + 'type' => $type, + ) + ); + if ($rankDb){ + $this->myRanked['test_ceg'] = $rankDb['value']; + } + $rows = myself()->_getSelfMysql()->execQuery( + 'SELECT guild_id,SUM(value) AS value FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type AND guild_id<>""' . + 'GROUP BY guild_id '. + 'ORDER BY value DESC ' . + "LIMIT 10", + array( + ':wave' => $wave, + ':type' => $type + ) + ); + $ranked = 0; + foreach ($rows as $row) { + $ranked += 1; + if (!$userInfo['guild_id']){ + $this->myRanked['guild'] = array(); + } + if($userInfo['guild_id'] && $userInfo['guild_id'] == $row['guild_id']){ + $guildDb = Guild::find($row['guild_id']); + $this->myRanked['ranked'] = $ranked; + $this->myRanked['user'] = array(); + $this->myRanked['guild'] = Guild::toSimple($guildDb); + $this->myRanked['value'] = $row['value']; + $this->myRanked['rewardNum'] = $this->celAward($wave,$type,$ranked)['rewardNum']; + $this->myRanked['extraRewardNum'] = $this->celAward($wave,$type,$ranked)['extraRewardNum']; + }else{ + $guildDb = Guild::find($userInfo['guild_id']); + $value = myself()->_getSelfMysql()->execQuery( + 'SELECT guild_id,SUM(value) AS value FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type AND guild_id=:guild_id ' . + 'GROUP BY guild_id limit 1', + array( + ':wave' => $wave, + ':type' => $type, + ':guild_id'=>$userInfo['guild_id'] + ) + ); + $this->myRanked['user'] = array(); + $this->myRanked['guild'] =Guild::toSimple($guildDb); + $this->myRanked['value'] =$value?$value[0]['value']:0; + } + $guildDb = Guild::find($row['guild_id']); + array_push($rankingList, array( + 'ranked' => $ranked, + 'user' => array(), + 'guild'=>Guild::toSimple($guildDb), + 'value' => $row['value'], + 'rewardNum' => $this->celAward($wave,$type,$ranked)['rewardNum'], + 'extraRewardNum' => $this->celAward($wave,$type,$ranked)['extraRewardNum'], + )); + } + } break; + } + $rankingData = array( + 'type' => $type, + 'pages' => $pages, + 'rows' => $rankingList, + 'my_ranked' => $this->myRanked + ); +// error_log(json_encode( +// array( +// 'account_id'=>$userInfo['account_id'], +// 'guild_id'=>$userInfo['guild_id'], +// 'type' => $type, +// 'pages' => $pages, +// 'rows' => $rankingList, +// 'my_ranked' => $this->myRanked +// ) +// )); + return $rankingData; + } + + private function paginate($rows,$page,$size){ + $rankingList = array(); + $pages = ceil(count($rows)/$size)>1?ceil(count($rows)/$size):0; + $offset=($page-1)*$size; + $ranked = 0; + foreach ($rows as $row){ + $ranked+=1; + if ($row['account_id'] == myself()->_getAccountId()) { + $this->myRanked['ranked'] = $ranked; + $this->myRanked['value'] = $row['value']; + $this->myRanked['rewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['rewardNum']; + $this->myRanked['extraRewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum']; + $this->myRanked['modifytime'] = $row['modifytime']; + } + if ($offset<$ranked && $ranked<=$offset+$size){ + array_push($rankingList, array( + 'ranked' => $ranked, + 'user' => User::toSimple(User::find($row['account_id'])), + 'value' => $row['value'], + 'rewardNum' => $this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], + 'extraRewardNum' => $this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], + 'modifytime' => $row['modifytime'], + )); + } + } + return array( + 'pages' => $pages, + 'lists' => $rankingList + ); + } + + private function getMyValue($wave,$type){ + $value = myself()->_getSelfMysql()->execQuery( + 'SELECT * FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type AND account_id=:account_id ' . + "LIMIT 1", + array( + ':wave' => $wave, + ':type' => $type, + ':account_id' => myself()->_getAccountId() + ) + ); + return $value ? $value[0]['value'] : 0; + } + + private function celAward($wave,$type,$ranked){ + $rankingMeta = \mt\EventRanking::findByWaveOrType($wave,$type); + $rewardNum = 0; + $extraRewardNum = 0; + if ($rankingMeta){ + $rewardArr = explode('|',$rankingMeta['reward']); + $extraRewardArr = explode('|',$rankingMeta['extraReward']); + if($rewardArr){ + foreach ($rewardArr as $value){ + $temp = explode(',',$value); + if ($ranked<=$temp[0]){ + $rewardNum+=$temp[1]; + break; + } + } + } + if($extraRewardArr){ + foreach ($extraRewardArr as $val){ + $temp = explode(',',$val); + if ($ranked == $temp[0]){ + $extraRewardNum+=$temp[1]; + } + } + } + } + return array( + 'rewardNum' => $rewardNum, + 'extraRewardNum' => $extraRewardNum + ); + } + + public function settlementRankingAward(){ + return + $id = getReqVal('id', 0); +// $currentRankingMeta = mt\EventRanking::getCurrentRanking(); + $awardList = array(); +// if ($currentRankingMeta){ + $lastRankingMeta = mt\EventRanking::find($id); + if ($lastRankingMeta){ + switch ($lastRankingMeta['themeType']){ + case \services\RankActivityService::KILLS_TYPE : { + $rows = myself()->_getSelfMysql()->execQuery( + 'SELECT * FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type ' . + 'ORDER BY value DESC ' . + "LIMIT 1200", + array( + ':wave' => $lastRankingMeta['wave'], + ':type' => $lastRankingMeta['themeType'] + ) + ); + + $ranked = 0; + foreach ($rows as $row){ + $ranked+=1; + array_push($awardList,array( + 'ranked'=>$ranked, + 'account_id'=>$row['account_id'], + 'rewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], + 'extraRewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], + )); + } + if ($awardList){ + //记录此活动的CEG奖励 + foreach ($awardList as $value){ + $cegNum = $value['rewardNum']+$value['extraRewardNum']; + EventRanking::setV($value['account_id'],$lastRankingMeta['wave'],$lastRankingMeta['themeType'],$cegNum); + } + + } + error_log('********** KILL RANKING SETTLEMENT SUCCESS ***********'); + $this->_rspOk(); + };break; + case \services\RankActivityService::WINS_TYPE : { + $rows = myself()->_getSelfMysql()->execQuery( + 'SELECT * FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type ' . + 'ORDER BY value DESC ' . + "LIMIT 10", + array( + ':wave' => $lastRankingMeta['wave'], + ':type' => $lastRankingMeta['themeType'] + ) + ); + + $ranked = 0; + foreach ($rows as $row) { + $ranked += 1; + array_push($awardList,array( + 'ranked'=>$ranked, + 'account_id'=>$row['account_id'], + 'rewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], + 'extraRewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], + )); + } + if ($awardList){ + //记录此活动的CEG奖励 + foreach ($awardList as $value){ + $cegNum = $value['rewardNum']+$value['extraRewardNum']; + EventRanking::setV($value['account_id'],$lastRankingMeta['wave'],$lastRankingMeta['themeType'],$cegNum); + } + } + error_log('********** WIN RANKING SETTLEMENT SUCCESS ***********'); + $this->_rspOk(); + };break; + case \services\RankActivityService::BATTLES_TYPE : { + $rows = myself()->_getSelfMysql()->execQuery( + 'SELECT * FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type ' . + 'ORDER BY value DESC ' . + "LIMIT 1800", + array( + ':wave' => $lastRankingMeta['wave'], + ':type' => $lastRankingMeta['themeType'] + ) + ); + $ranked = 0; + foreach ($rows as $row){ + $ranked+=1; + array_push($awardList,array( + 'ranked'=>$ranked, + 'account_id'=>$row['account_id'], + 'rewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], + 'extraRewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], + )); + } + if ($awardList){ + //记录此活动的CEG奖励 + foreach ($awardList as $value){ + $cegNum = $value['rewardNum']+$value['extraRewardNum']; + EventRanking::setV($value['account_id'],$lastRankingMeta['wave'],$lastRankingMeta['themeType'],$cegNum); + } + } + error_log('********** BATTLE RANKING SETTLEMENT SUCCESS ***********'); + $this->_rspOk(); + };break; + case \services\RankActivityService::GUILD_TYPE : { + $rows = myself()->_getSelfMysql()->execQuery( + 'SELECT guild_id,wave,type,SUM(value) AS value FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type ' . + 'GROUP BY guild_id '. + 'ORDER BY value DESC ' . + "LIMIT 10", + array( + ':wave' => $lastRankingMeta['wave'], + ':type' => $lastRankingMeta['themeType'] + ) + ); + $ranked = 0; + foreach ($rows as $row) { + $ranked += 1; + array_push($awardList,array( + 'ranked'=>$ranked, + 'guild_id'=>$row['guild_id'], + 'rewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], + 'extraRewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], + )); + } + if ($awardList) { + //记录此活动的CEG奖励 + foreach ($awardList as $value) { + $usersDb = User::getListByGuildId($value['guild_id']); + $guildDb = Guild::find($value['guild_id']); + if (!$guildDb) { + error_log('The Guild Does Not Exist : ' . $value['guild_id']); + continue; + } + if ($usersDb) { + foreach ($usersDb as $user) { + $thisValue = myself()->_getSelfMysql()->execQuery( + 'SELECT * FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type AND account_id=:account_id', + array( + ':wave' => $lastRankingMeta['wave'], + ':type' => $lastRankingMeta['themeType'], + ':account_id' => $user['account_id'] + ) + ); + $sumValue = myself()->_getSelfMysql()->execQuery( + 'SELECT guild_id,SUM(value) AS value FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type AND guild_id=:guild_id ' . + 'GROUP BY guild_id limit 1', + array( + ':wave' => $lastRankingMeta['wave'], + ':type' => $lastRankingMeta['themeType'], + ':guild_id' => $value['guild_id'] + ) + ); + if (!$thisValue || !$sumValue) { + error_log('该用户无贡献 : ' . $user['account_id'] . ' | 工会总收益有问题 : ' . $value['guild_id'] ); + continue; + } + $rewardNum = $thisValue[0]['value'] / $sumValue[0]['value'] * $value['rewardNum']; + $extraRewardNum = $guildDb['owner_id'] == $user['account_id'] ? $value['extraRewardNum'] : 0; + $cegNum = $rewardNum + $extraRewardNum; + EventRanking::setV($user['account_id'], $lastRankingMeta['wave'], $lastRankingMeta['themeType'], $cegNum); + error_log(json_encode( + array( + 'account_id' => $user['account_id'], + 'guild_id' => $value['guild_id'], + 'value' => $thisValue[0]['value'], + 'sum_value' => $sumValue[0]['value'], + 'rewardNum' => $rewardNum, + 'extraRewardNum' => $extraRewardNum, + 'CEG' => $cegNum + ) + )); + } + } + } + } + error_log('********** GUILD RANKING SETTLEMENT SUCCESS ***********'); + $this->_rspOk(); + };break; + default : { + error_log('运营活动不存在'); + } + } + } +// } + } + + public function updateWinsData(){ + return + $rows = myself()->_getSelfMysql()->execQuery( + 'SELECT * FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type ', + array( + ':wave' => 1, + ':type' => 2 + ) + ); + foreach ($rows as &$row){ + $battle_record = myself()->_getSelfMysql()->execQuery( + 'SELECT * FROM t_battle_record ' . + 'WHERE account_id=:account_id AND createtime>:createtime1 AND createtime<:createtime2 ', + array( + ':account_id' => $row['account_id'], + ':createtime1' => 1669896000, + ':createtime2' => 1670500800, + ) + ); + foreach ($battle_record as $value){ + $request = emptyReplace(json_decode($value['request'], true), array()); + if ($request['ranked'] == 1 && $request['match_mode'] == 0){ + $row['new_value']+=1; + } + } + } + foreach ($rows as $row){ + SqlHelper::update + (myself()->_getSelfMysql(), + 't_rank_activity', + array( + 'account_id' => $row['account_id'], + 'wave' => 1, + 'type' => 2, + ), + array( + 'value'=>$row['new_value']?$row['new_value']:0 + ) + ); + } + $this->_rspOk(); + } + + public function compensationWins(){ + return + $rows = myself()->_getSelfMysql()->execQuery( + 'SELECT * FROM t_rank_activity ' . + 'WHERE wave=:wave AND type=:type ' . + 'ORDER BY value DESC ', + array( + ':wave' => 1, + ':type' => 2 + ) + ); + + $compensationList= array(); + $ranked = 0; + foreach ($rows as $row) { + $ranked += 1; + if ($ranked>10 && $row['value'] >0){ + array_push($compensationList,array( + 'ranked'=>$ranked, + 'account_id'=>$row['account_id'], + 'rewardNum'=>5, + 'value'=>$row['value'] + )); + } + + } + if ($compensationList){ + //记录此活动的CEG奖励 + foreach ($compensationList as $value){ + $cegNum = $value['rewardNum']; + EventRanking::setV($value['account_id'],1,9999,$cegNum); + } + } + error_log('********** WIN RANKING COMPENSATION SUCCESS ***********'); + $this->_rspOk(); + } +} diff --git a/webapp/controller/FragmentController.class.php b/webapp/controller/FragmentController.class.php index b3ee0dd8..b5de1b67 100644 --- a/webapp/controller/FragmentController.class.php +++ b/webapp/controller/FragmentController.class.php @@ -20,42 +20,7 @@ use phpcommon\SqlHelper; class FragmentController extends BaseAuthedController { - public function syntheticFragment(){ - $itemId = getReqVal('item_id',0); - $itemMeta = \mt\Item::get($itemId); - if (!$itemMeta || $itemMeta['type'] != \mt\Item::FRAGMENT_TYPE){ - $this->_rspErr(1, "param item_id error"); - return; - } - $pieceNum = $itemMeta['param1']; - $bagDb = Bag::find($itemId); - if (!$bagDb || $bagDb['item_num'] < $pieceNum){ - $this->_rspErr(1, "Insufficient material"); - return; - } - $itemMetaDto = \mt\Item::get($itemMeta['relationship']); - if ( !$itemMetaDto ){ - $this->_rspErr(1, "param error"); - return; - } - Bag::decItem($itemId,$pieceNum); - $propertyChgService = new services\PropertyChgService(); - $propertyChgService->addBagChg(); - if ($itemMeta['sub_type'] == \mt\Item::HERO_FRAGMENT_SUBTYPE){ - Hero::addSyntheticHero($itemMetaDto,$itemMeta['quality']); - $propertyChgService->addHeroChg(); - } - if ($itemMeta['sub_type'] == \mt\Item::CHIP_FRAGMENT_SUBTYPE){ - Chip::addSyntheticChip($itemMetaDto,$itemMeta['quality']); - $propertyChgService->addChip(); - } - - $this->_rspData(array( - 'item_id' => $itemMetaDto['id'], - 'property_chg' => $propertyChgService->toDto(), - )); - } //新合成 public function synHero(){ diff --git a/webapp/controller/HeroController.class.php b/webapp/controller/HeroController.class.php index a10c9edd..57b67391 100644 --- a/webapp/controller/HeroController.class.php +++ b/webapp/controller/HeroController.class.php @@ -79,89 +79,9 @@ class HeroController extends BaseAuthedController { )); } - - /* - 升阶预览 - */ - public function upgradeQualityPreview(){ - return; - $itemId = getReqVal('itemId', 0); - $quality = getReqVal('quality', 0); - - if ($quality == \mt\QualityUpMapRule::MAX_QUALITY){ - $this->_rspErr(5, "It's already the highest quality"); - return; - } - $heroQualityMeta = \mt\QualityUpMapRule::getByQuality($itemId,$quality+1); - if (!$heroQualityMeta){ - $this->_rspErr(100, 'server internal error'); - return; - } - $costItems = array( - array( - 'item_id' => V_ITEM_GOLD, - 'item_num' => $heroQualityMeta['gold'] - ), - array( - 'item_id' => $heroQualityMeta['item'], - 'item_num' => $heroQualityMeta['item_num'] - ), - ); - $this->_rspData(array( - 'cost' => $costItems - )); - } - /* 英雄升阶 */ - public function upgradeQualityOld(){ - $heroUniId = getReqVal('hero_uniid', 0); - $heroDb = Hero::find($heroUniId); - if (!$heroDb) { - $this->_rspErr(100, 'param error or null'); - return; - } - if ($heroDb['quality'] == \mt\QualityUpMapRule::MAX_QUALITY){ - $this->_rspErr(5, "It's already the highest level"); - return; - } - $heroQualityMeta = \mt\QualityUpMapRule::getByQuality($heroDb['hero_id'],$heroDb['quality']+1); - if (!$heroQualityMeta){ - $this->_rspErr(100, 'server internal error'); - return; - } - $costItems = array( - array( - 'item_id' => V_ITEM_GOLD, - 'item_num' => $heroQualityMeta['gold'] - ), - array( - 'item_id' => $heroQualityMeta['item'], - 'item_num' => $heroQualityMeta['item_num'] - ), - ); - $lackItem = null; - if (!$this->_hasEnoughItems($costItems, $lackItem)) { - $this->_rspErr(3, $this->_getLackItemErrMsg($lackItem)); - return; - } - $this->_decItems($costItems); - $heroMeta = \mt\Item::get($heroDb['hero_id']); - $attribute = \mt\EconomyAttribute::getAttribute($heroMeta['relationship'], $heroDb['quality'] + 1); - Hero::update($heroUniId, array( - 'quality' => $heroDb['quality'] + 1, - 'wealth_attr' => json_encode($attribute), - )); - $propertyChgService = new services\PropertyChgService(); - $propertyChgService->addHeroChg(); - $propertyChgService->addUserChg(); - $propertyChgService->addBagChg(); - $this->_rspData(array( - 'property_chg' => $propertyChgService->toDto(), - )); - } - public function upgradeQuality(){ $heroUniId = getReqVal('hero_uniid', 0); $itemId = getReqVal('item_id',0); diff --git a/webapp/controller/HeroSkinController.class.php b/webapp/controller/HeroSkinController.class.php index 6f8152b3..f1a62e07 100644 --- a/webapp/controller/HeroSkinController.class.php +++ b/webapp/controller/HeroSkinController.class.php @@ -71,6 +71,12 @@ class HeroSkinController extends BaseAuthedController { 'modifytime'=>myself()->_getNowTime(), )); } + if ($heroSkinDb['hero_uniid']){ + Hero::update($heroSkinDb['hero_uniid'],array( + 'skin_id' => 0, + 'modifytime'=>myself()->_getNowTime() + )); + } Hero::update($heroUniid,array( 'skin_id' => $skinUniid, 'modifytime'=>myself()->_getNowTime()