From 4d0b73ff0d98841797e245acd667abef1e934ed5 Mon Sep 17 00:00:00 2001 From: hujiabin Date: Mon, 10 Oct 2022 15:40:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E9=80=9F=E6=82=AC=E8=B5=8F=E6=B6=88?= =?UTF-8?q?=E8=80=97ceg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/Mission.py | 13 ++++++++ webapp/controller/MissionController.class.php | 33 +++++++++++++++++++ webapp/services/FormulaService.php | 5 +++ webapp/services/MissionService.php | 17 ++++++++-- 4 files changed, 66 insertions(+), 2 deletions(-) diff --git a/doc/Mission.py b/doc/Mission.py index 8211729a..0773948b 100644 --- a/doc/Mission.py +++ b/doc/Mission.py @@ -56,6 +56,19 @@ class Mission(object): ] }, { + 'name': 'boostOfferRewardMissionPreview', + 'desc': '加速悬赏任务', + 'group': 'Mission', + 'url': 'webapp/index.php?c=Mission&a=boostOfferRewardMissionPreview', + 'params': [ + _common.ReqHead(), + ['mission_id', 0, '任务id'], + ], + 'response': [ + _common.RspHead(), + ['boost_chg', 0, '加速所需ceg'], + ] + },{ 'name': 'boostOfferRewardMission', 'desc': '加速悬赏任务', 'group': 'Mission', diff --git a/webapp/controller/MissionController.class.php b/webapp/controller/MissionController.class.php index f8200d50..428be11e 100644 --- a/webapp/controller/MissionController.class.php +++ b/webapp/controller/MissionController.class.php @@ -16,6 +16,7 @@ require_once('services/AwardService.php'); require_once('services/PropertyChgService.php'); require_once('services/SeasonService.php'); require_once('services/MissionService.php'); +require_once('services/FormulaService.php'); use phpcommon\SqlHelper; use models\User; @@ -252,6 +253,7 @@ class MissionController extends BaseAuthedController { public function offerRewardMissionPreview() { + $missionId = getReqVal('mission_id', 0); $this->missionService->offerRewardMissionPreview( $missionId @@ -266,6 +268,37 @@ class MissionController extends BaseAuthedController { $this->propertyChgService); } + public function boostOfferRewardMissionPreview(){ + $missionId = getReqVal('mission_id', 0); + $missionMeta = mt\Task::get($missionId); + if (!$missionMeta) { + $this->_rspErr(1, 'mission_id parameter error'); + return; + } + // + if ($missionMeta['type'] == mt\Task::DAILY_MISSON_TYPE && + $missionMeta['subtype'] == mt\Task::WEAKLY_ACTIVE_VALUE_MISSON_SUBTYPE) { + error_log(2); + return; + } + // + $missionDb = Mission::find($missionId); + $missionDto = $this->missionService->getMissionDto( + $this->userInfo, $this->seasonDb, $missionDb, $missionMeta); + if (!$missionDto) { + $this->_rspErr(10, 'server internal error'); + return; + } + if ($missionDto['lefttime']<=0){ + $this->_rspErr(1, "Don't need to accelerate"); + return; + } + $boost_ceg = \services\FormulaService::calcBoostMissionCeg($missionDto['ceg_num'],$missionDto['lefttime'],$missionMeta['time']); + $this->_rspData(array( + 'boost_chg' => $boost_ceg + )); + } + public function boostOfferRewardMission() { $missionId = getReqVal('mission_id', 0); diff --git a/webapp/services/FormulaService.php b/webapp/services/FormulaService.php index b9f6f012..0b495d06 100644 --- a/webapp/services/FormulaService.php +++ b/webapp/services/FormulaService.php @@ -348,6 +348,11 @@ class FormulaService extends BaseService { return self::Hero_Max_CEG($heroDb)*0.05; } + //悬赏加速所需CEG + public static function calcBoostMissionCeg($ceg,$time,$timeSum){ + //悬赏加速所需CEG=MAX(ROUND(10%*当次悬赏任务获得CEG*当次已悬赏时间/当次悬赏所需时间,2),0.01) + return max(round(0.1*$ceg*$time/$timeSum,2),0.01); + } //每天枪械NFT获得CEG上限值 public static function Weapon_Max_CEG($weaponDb){ diff --git a/webapp/services/MissionService.php b/webapp/services/MissionService.php index 4a0588b6..3a70ee89 100644 --- a/webapp/services/MissionService.php +++ b/webapp/services/MissionService.php @@ -12,6 +12,8 @@ require_once('models/BigData.php'); require_once('models/Hero.php'); require_once('models/Gun.php'); +require_once('services/FormulaService.php'); + use phpcommon\SqlHelper; use mt; use models\User; @@ -636,10 +638,16 @@ class MissionService extends BaseService { } $missionDto['objects'] = $mission['objects']; $missionDto['ceg_num'] = $this->calcCegPreview($mission['objects']); +// $missionDto['boost_ceg_num'] = $this->calcBoostCeg($missionDto['ceg_num'],$missionDto['lefttime'],$missionMeta['time']); } } } + private function calcBoostCeg($ceg,$time,$timeSum){ + //悬赏加速所需CEG=MAX(ROUND(10%*当次悬赏任务获得CEG*当次已悬赏时间/当次悬赏所需时间,2),0.01) + return max(round(0.1*$ceg*$time/$timeSum,2),0.01); + } + public function sendOfferRewardMission($missionId, $propertyChgService) { $missionMeta = mt\Task::get($missionId); @@ -848,18 +856,23 @@ class MissionService extends BaseService { return; }*/ $missionMeta = mt\Task::get($missionId); + $missionDb = Mission::find($missionId); + $missionDto = $this->getMissionDto( + $this->userInfo, $this->seasonDb, $missionDb, $missionMeta); + $boost_ceg = \services\FormulaService::calcBoostMissionCeg($missionDto['ceg_num'],$missionDto['lefttime'],$missionMeta['time']); if (!$missionMeta) { myself()->_rspErr(1, 'mission_id parameter error3'); return; } - if (myself()->_getItemCount(V_ITEM_GOLD, $this->userInfo) < $missionMeta['boost']){ + if (myself()->_getItemCount(V_ITEM_GOLD, $this->userInfo) < $boost_ceg){ myself()->_rspErr(2, 'ceg not enough'); return; } + myself()->_decItems(array( array( 'item_id' => V_ITEM_GOLD, - 'item_num' => $missionMeta['boost'] + 'item_num' => $boost_ceg ) )); $dropMeta = mt\Drop::get($missionMeta['reward']);