From c44384542b3a6a1036620052cbfb433534a2d257 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 19 Apr 2024 20:05:27 +0800 Subject: [PATCH] 1 --- webapp/bootstrap/constant.php | 1 + webapp/controller/BattleController.class.php | 41 ++++++++++++++++++++ webapp/models/Bag.php | 17 ++++++++ 3 files changed, 59 insertions(+) diff --git a/webapp/bootstrap/constant.php b/webapp/bootstrap/constant.php index 0f555358..7d87b45a 100644 --- a/webapp/bootstrap/constant.php +++ b/webapp/bootstrap/constant.php @@ -8,6 +8,7 @@ define('PLANET_BUY_KEY', 'game2006api:planet_buy:'); define('LAST_SESSION_KEY', 'last_session:'); define('MATCH_CURRENT_TEAM_KEY', 'match:current_team:'); define('MATCH_OK_KEY', 'match:ok:'); +define('DEC_BATTLE_TICKET', 'battle_ticket:'); define('V_ITEM_GOLD', 10001); //金币 define('V_ITEM_GOLDS', 10017); //金堆 diff --git a/webapp/controller/BattleController.class.php b/webapp/controller/BattleController.class.php index ab6d2c5c..0835d109 100644 --- a/webapp/controller/BattleController.class.php +++ b/webapp/controller/BattleController.class.php @@ -593,6 +593,10 @@ class BattleController extends BaseAuthedController { myself()->_rspErr(2, 'map mode error'); return; } + if (!$this->checkTicket($customData, $mapModeMeta)) { + myself()->_rspErr(2, 'map mode error'); + return; + } $currSeason = mt\RankSeason::getCurrentSeason(); foreach ($customData['team_list'] as $team) { @@ -679,6 +683,7 @@ class BattleController extends BaseAuthedController { array_push($data['team_list'], $teamInfo); } error_log(json_encode($data)); + $this->decTicket($customData, $mapModeMeta); myself()->_rspData($data); } @@ -991,4 +996,40 @@ class BattleController extends BaseAuthedController { return $info; } + private function checkTicket($customData, $mapModeMeta) + { + if (empty($mapModeMeta['admission_item_id'])) { + return true; + } + foreach ($customData['team_list'] as $team) { + foreach ($team['members'] as $member) { + if (!$member['is_android']) { + $itemDb = Bag::findEx($member['account_id'], $mapModeMeta['admission_item_id']); + if (empty($itemDb) || $itemDb['item_num'] <= 0) { + return false; + } + } + } + } + return true; + } + + private function decTicket($customData, $mapModeMeta) + { + $itemId = $mapModeMeta['admission_item_id']; + if (empty($itemId)) { + return; + } + foreach ($customData['team_list'] as $team) { + foreach ($team['members'] as $member) { + if (!$member['is_android']) { + $itemDb = Bag::findEx($member['account_id'], $itemId); + if (!empty($itemDb) || $itemDb['item_num'] > 0) { + Bag::decItemByUnIidEx($member['account_id'], $itemDb['idx'], 1); + } + } + } + } + } + } diff --git a/webapp/models/Bag.php b/webapp/models/Bag.php index 320b01a4..e843caf0 100644 --- a/webapp/models/Bag.php +++ b/webapp/models/Bag.php @@ -299,5 +299,22 @@ class Bag extends BaseModel { ); } + public static function decItemByUnIidEx($accountId, $itemUniId, $itemNum) + { + SqlHelper::update( + myself()->_getMysql($accountId), + 't_bag', + array( + 'account_id' => myself()->_getAccountId(), + 'idx' => $itemUniId, + ), + array( + 'item_num' => function () use($itemNum) { + return "GREATEST(0, item_num - ${itemNum})"; + }, + 'modifytime' => myself()->_getNowTime(), + ) + ); + } }