diff --git a/webapp/controller/BagController.class.php b/webapp/controller/BagController.class.php index 8f40e7f..d0086c1 100644 --- a/webapp/controller/BagController.class.php +++ b/webapp/controller/BagController.class.php @@ -2,6 +2,7 @@ require_once('mt/Parameter.php'); require_once('mt/Item.php'); +require_once('mt/Drop.php'); require_once('models/Bag.php'); @@ -54,22 +55,24 @@ class BagController extends BaseAuthedController { $this->_rspErr(2, '配置表错误'); return; } - if ($itemMeta['type'] != mt\Item::FUNC_TYPE) { - $this->_rspErr(3, '该道具为不可使用道具'); - return; - } - switch ($itemMeta['sub_type']) { - case mt\Item::FUNC_RENAME_CARD_SUBTYPE: - { - $this->renameCard($itemDb, $itemMeta, $itemNum, $param1, $param2, $param3); - } - break; - default: - { + if ($itemMeta['type'] == mt\Item::FUNC_TYPE) { + switch ($itemMeta['sub_type']) { + case mt\Item::FUNC_RENAME_CARD_SUBTYPE: + { + $this->renameCard($itemDb, $itemMeta, $itemNum, $param1, $param2, $param3); + } + break; + default: + { + $this->_rspErr(4, '该道具功能暂未实现'); + return; + } + break; + } + } else if ($itemMeta['type'] == mt\Item::GIFT_PACKAGE_TYPE) { + $this->openGiftPackage($itemDb, $itemMeta, $itemNum, $param1, $param2, $param3); + } else { $this->_rspErr(4, '该道具功能暂未实现'); - return; - } - break; } } @@ -174,4 +177,36 @@ class BagController extends BaseAuthedController { )); } + private function openGiftPackage($itemDb, $itemMeta, $itemNum, $param1, $param2, $param3) + { + $dropMeta = mt\Drop::get($itemMeta['drop']); + if (!$dropMeta) { + $this->_rspErr(1, '配置表错误'); + return; + } + $costItems = mt\Item::getUseCostItems($itemMeta); + error_log(json_encode($costItems)); + $lackItem = null; + if (!$this->_hasEnoughItems($costItems, $lackItem)) { + $this->_rspErr(3, $this->_getLackItemErrMsg($lackItem)); + return; + } + $this->_decItems($costItems); + $this->_decItems(array( + array( + 'item_id' => $itemMeta['id'], + 'item_num' => 1 + ) + )); + $this->_scatterDrop('gift_package:' . $itemMeta['id'], + $dropMeta, + $this->awardService, + $this->propertyChgService); + $this->propertyChgService->addBagChg(); + $this->_rspData(array( + 'award' => $this->awardService->toDto(), + 'property_chg' => $this->propertyChgService->toDto(), + )); + } + } diff --git a/webapp/controller/BattleController.class.php b/webapp/controller/BattleController.class.php index 513580c..5a3cdfe 100644 --- a/webapp/controller/BattleController.class.php +++ b/webapp/controller/BattleController.class.php @@ -6,6 +6,13 @@ use phpcommon\SqlHelper; class BattleController extends BaseAuthedController { + public function preBattleCheck() + { + $this->_rspData(array( + 'pre_battle_payload' => '' + )); + } + public function battleReport() { $userInfo = $this->_getOrmUserInfo(); diff --git a/webapp/controller/GMController.class.php b/webapp/controller/GMController.class.php index 17e114e..c363b3b 100644 --- a/webapp/controller/GMController.class.php +++ b/webapp/controller/GMController.class.php @@ -32,6 +32,9 @@ class GMController extends BaseAuthedController { '.additem' => function () use($params) { $this->addItem($params); }, + '.addtili' => function () use($params) { + $this->addTili($params); + }, '.getsystime' => function () use($params) { $this->getSysTime($params); }, @@ -53,6 +56,7 @@ class GMController extends BaseAuthedController { $this->_rspData(array( 'text' => << "hero_tili + ${tili}" + )); + $propertyChgService->addHeroChg(); + $this->_rspData(array( + 'text' => '添加道具成功', + 'award' => $awardService->toDto(), + 'property_chg' => $propertyChgService->toDto(), + )); + } + private function getSysTime($params) { $sysTime = phpcommon\timestamp_to_datetime(phpcommon\getNowTime()); diff --git a/webapp/models/Battle.php b/webapp/models/Battle.php index b015b1c..7d9cfa2 100644 --- a/webapp/models/Battle.php +++ b/webapp/models/Battle.php @@ -43,7 +43,7 @@ class Battle extends BaseModel { public static function update($fieldsKv) { - SqlHelper::upsert + SqlHelper::update (myself()->_getSelfMysql(), 't_battle', array( diff --git a/webapp/models/Hero.php b/webapp/models/Hero.php index 6c78ade..78886d8 100644 --- a/webapp/models/Hero.php +++ b/webapp/models/Hero.php @@ -28,6 +28,7 @@ class Hero extends BaseModel { return array( 'hero_id' => $row['hero_id'], 'hero_lv' => $row['hero_lv'], + 'hero_tili' => $row['hero_tili'], 'skin_id' => $row['skin_id'], 'skill_lv1' => $row['skill_lv1'], 'skill_lv2' => $row['skill_lv2'], @@ -102,4 +103,17 @@ class Hero extends BaseModel { ); } + public static function update($heroId, $fieldsKv) + { + SqlHelper::update + (myself()->_getSelfMysql(), + 't_hero', + array( + 'account_id' => myself()->_getAccountId(), + 'hero_id' => $heroId, + ), + $fieldsKv + ); + } + } diff --git a/webapp/mt/Item.php b/webapp/mt/Item.php index 7204883..dd4f66c 100644 --- a/webapp/mt/Item.php +++ b/webapp/mt/Item.php @@ -169,6 +169,20 @@ class Item { return $costItems; } + public static function getUseCostItems($itemMeta) + { + $costItems = array(); + foreach (splitStr2($itemMeta['use_cost']) as $arr) { + if (count($arr) >= 2) { + array_push($costItems, array( + 'item_id' => $arr[0], + 'item_num' => $arr[1] + )); + } + } + return $costItems; + } + public static function isBagItem($type, $subType) { return in_array($type, array( diff --git a/webapp/services/BattleDataService.php b/webapp/services/BattleDataService.php index 6168a72..8d73a9b 100644 --- a/webapp/services/BattleDataService.php +++ b/webapp/services/BattleDataService.php @@ -6,14 +6,19 @@ require_once('mt/Item.php'); require_once('mt/Equip.php'); require_once('mt/Season.php'); require_once('mt/Rank.php'); +require_once('mt/Parameter.php'); require_once('models/Season.php'); require_once('models/Battle.php'); +require_once('models/Bag.php'); +require_once('models/Hero.php'); use mt; use phpcommon\SqlHelper; use models\Season; use models\Battle; +use models\Bag; +use models\Hero; class BattleDataService extends BaseService { @@ -21,10 +26,17 @@ class BattleDataService extends BaseService { public function updateBattleData() { + error_log(json_encode($_REQUEST)); + error_log('updateBattleData1'); + if (!$this->decCost()) { + return; + } + error_log('updateBattleData2'); $this->currSeasonMeta = mt\Season::getCurrentSeason(); if (!$this->currSeasonMeta) { return; } + error_log('updateBattleData3'); $this->seasonDb = Season::find($this->currSeasonMeta['id']); if (!$this->seasonDb) { Season::add($this->currSeasonMeta['id']); @@ -33,6 +45,7 @@ class BattleDataService extends BaseService { if (!$this->seasonDb) { return; } + error_log('updateBattleData4'); $this->updateScore(); $hisBattleData = Battle::getMyBattleData(); if (!isset($hisBattleData)) { @@ -99,6 +112,7 @@ class BattleDataService extends BaseService { 'battle_data' => json_encode($seasonBattleData), ) ); + $this->addItems(); } private function apply(&$battleData) @@ -255,30 +269,67 @@ class BattleDataService extends BaseService { private function updateScore() { - $userInfo = myself()->_getOrmUserInfo(); - $rankScore = getReqVal('rank_score', 0); - if ($rankScore > 0) { - $newRank = $userInfo['rank']; - $newScore = $userInfo['score']; - mt\Rank::calcNewRankAndScore($userInfo['rank'], $userInfo['score'], $newRank, $newScore, $rankScore); - if ($newRank >= $userInfo['rank'] && $newScore != $userInfo['score']) { - myself()->_updateUserInfo(array( - 'rank' => $newRank, - 'score' => $newScore, - 'history_best_rank' => max($userInfo['rank'], $newRank), - 'score_modifytime' => myself()->_getNowTime(), - 'best_rank_modifytime' => $newRank > $userInfo['rank'] ? - myself()->_getNowTime() : $userInfo['best_rank_modifytime'], - )); - Season::update($this->currSeasonMeta['id'], array( - 'rank' => $newRank, - 'score' => $newScore, - 'history_best_rank' => max($userInfo['rank'], $newRank), - 'score_modifytime' => myself()->_getNowTime(), - 'score_modifytime' => myself()->_getNowTime(), - 'best_rank_modifytime' => $newRank > $userInfo['rank'] ? - myself()->_getNowTime() : $userInfo['best_rank_modifytime'], - )); + if (getReqVal('room_mode', 0) == 0) { + $userInfo = myself()->_getOrmUserInfo(); + $rankScore = getReqVal('rank_score', 0); + if ($rankScore > 0) { + $newRank = $userInfo['rank']; + $newScore = $userInfo['score']; + mt\Rank::calcNewRankAndScore($userInfo['rank'], $userInfo['score'], $newRank, $newScore, $rankScore); + if ($newRank >= $userInfo['rank'] && $newScore != $userInfo['score']) { + myself()->_updateUserInfo(array( + 'rank' => $newRank, + 'score' => $newScore, + 'history_best_rank' => max($userInfo['rank'], $newRank), + 'score_modifytime' => myself()->_getNowTime(), + 'best_rank_modifytime' => $newRank > $userInfo['rank'] ? + myself()->_getNowTime() : $userInfo['best_rank_modifytime'], + )); + Season::update($this->currSeasonMeta['id'], array( + 'rank' => $newRank, + 'score' => $newScore, + 'history_best_rank' => max($userInfo['rank'], $newRank), + 'score_modifytime' => myself()->_getNowTime(), + 'score_modifytime' => myself()->_getNowTime(), + 'best_rank_modifytime' => $newRank > $userInfo['rank'] ? + myself()->_getNowTime() : $userInfo['best_rank_modifytime'], + )); + } + } + } + } + + private function decCost() + { + $heroDb = Hero::find(getReqVal('hero_id', 0)); + if (!$heroDb) { + return false; + } + $costTili = mt\Parameter::getVal('cost_fatigue', 0); + if ($heroDb['hero_tili'] < $costTili) { + return false; + } + Hero::update($heroDb['hero_id'], array( + 'hero_tili' => function () use($costTili) { + return "GREATEST(0, hero_tili - ${costTili})"; + } + )); + return true; + } + + private function addItems() + { + $tmpStrs1 = explode('|', getReqVal('items', '')); + error_log('addItems ' . getReqVal('items', '')); + foreach ($tmpStrs1 as $tmpStr) { + $tmpStrs2 = explode(':', $tmpStr); + if (count($tmpStrs2) >= 2) { + $itemId = $tmpStrs2[0]; + $itemNum = $tmpStrs2[1]; + $itemMeta = mt\Item::get($itemId); + if ($itemMeta) { + Bag::addItem($itemId, $itemNum); + } } } }