From c5aebbbaa8d2a17b170b31dbf79ee951f3308bf6 Mon Sep 17 00:00:00 2001 From: hujiabin Date: Sun, 9 Oct 2022 15:26:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=82=AC=E8=B5=8FBUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/gamedb.sql | 6 +++- webapp/controller/MissionController.class.php | 8 ++--- webapp/models/Gun.php | 35 +++++++++++++++++++ webapp/models/Hero.php | 33 ++++++++++++++--- webapp/services/MissionService.php | 14 ++++---- 5 files changed, 80 insertions(+), 16 deletions(-) diff --git a/sql/gamedb.sql b/sql/gamedb.sql index 13694359..33a46609 100644 --- a/sql/gamedb.sql +++ b/sql/gamedb.sql @@ -151,6 +151,8 @@ CREATE TABLE `t_hero` ( `last_get_gold_time` int(11) NOT NULL DEFAULT '0' COMMENT '最后获取金币的时间', `today_pve_get_ceg` bigint NOT NULL DEFAULT '0' COMMENT 'pve金币', `last_pve_get_ceg_time` bigint NOT NULL DEFAULT '0' COMMENT '最后pve获取金币的时间', + `today_mission_get_ceg` bigint NOT NULL DEFAULT '0' COMMENT '悬赏任务获得金币', + `last_mission_get_ceg_time` bigint NOT NULL DEFAULT '0' COMMENT '最后悬赏任务获取金币的时间', `createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', `modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间', `chip_ids` varchar(100) NOT NULL DEFAULT '' COMMENT '已镶嵌的芯片idx组', @@ -289,6 +291,8 @@ CREATE TABLE `t_gun` ( `last_get_gold_time` int(11) NOT NULL DEFAULT '0' COMMENT '最后获取金币的时间', `today_pve_get_ceg` bigint NOT NULL DEFAULT '0' COMMENT 'pve金币', `last_pve_get_ceg_time` bigint NOT NULL DEFAULT '0' COMMENT '最后pve获取金币的时间', + `today_mission_get_ceg` bigint NOT NULL DEFAULT '0' COMMENT '悬赏任务获得金币', + `last_mission_get_ceg_time` bigint NOT NULL DEFAULT '0' COMMENT '最后悬赏任务获取金币的时间', `createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', `modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间', `chip_ids` varchar(100) NOT NULL DEFAULT '' COMMENT '已镶嵌的芯片idx组', @@ -493,7 +497,7 @@ CREATE TABLE `t_season_card` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Table structure for table `t_season_card` +-- Table structure for table `t_used_name` -- DROP TABLE IF EXISTS `t_used_name`; diff --git a/webapp/controller/MissionController.class.php b/webapp/controller/MissionController.class.php index 8733c232..4a52fa03 100644 --- a/webapp/controller/MissionController.class.php +++ b/webapp/controller/MissionController.class.php @@ -101,7 +101,7 @@ class MissionController extends BaseAuthedController { if ($specMissionDto && $specMissionDto['state'] == Mission::NOT_FINISHED_STATE && $notFinishedCount <= 1) { - $specMissionDto['state'] == Mission::RECEIVEABLE_STATE; + $specMissionDto['state'] = Mission::RECEIVEABLE_STATE; } $this->_rspData(array( 'current_active_value' => min($this->_getV(TN_ACTIVE, 0), mt\Parameter::getVal('max_activity', 0)), @@ -156,7 +156,7 @@ class MissionController extends BaseAuthedController { $this->_rspErr(10, 'server internal error:' . $missionMeta['reward']); return; } - $this->_scatterDrop('mission:' . $missionId, $dropMeta, $this->awardService, $this->propertyChgService);print_r($missionDto);die; + $this->_scatterDrop('mission:' . $missionId, $dropMeta, $this->awardService, $this->propertyChgService); $this->procSpecMissionCommit($missionDto, $missionMeta); Mission::add($missionId); $missionDb = Mission::find($missionId); @@ -292,8 +292,8 @@ class MissionController extends BaseAuthedController { 'count' => $count, 'ceg' => $gold ))); - myself()->_addVirtualItem(V_ITEM_GOLD, round($gold)); - $this->awardService->addItem(V_ITEM_GOLD, round($gold)); + myself()->_addVirtualItem(V_ITEM_GOLD, round($gold,2)); + $this->awardService->addItem(V_ITEM_GOLD, round($gold,2)); } break; case mt\Task::OFFER_REWARD_MISSON_TYPE: diff --git a/webapp/models/Gun.php b/webapp/models/Gun.php index beebede5..90be30a3 100644 --- a/webapp/models/Gun.php +++ b/webapp/models/Gun.php @@ -171,6 +171,11 @@ class Gun extends BaseModel { myself()->_getNowDaySeconds()) { $todayPveGetCeg = 0; } + $todayMissionGetCeg = $row['today_mission_get_ceg']; + $lastMissionGetCegTime = $row['last_mission_get_ceg_time']; + if (myself()->_getDaySeconds($lastMissionGetCegTime) < myself()->_getNowDaySeconds()) { + $todayMissionGetCeg = 0; + } $gunLucky = \services\FormulaService::Weapon_Advanced_Lucky_Value($row['quality']); $dto = array( 'idx' => $row['idx'], @@ -193,6 +198,8 @@ class Gun extends BaseModel { 'last_pvp_get_ceg_time' => $lastGetGoldTime, 'current_pve_get_ceg' => $todayPveGetCeg / 100, 'last_pve_get_ceg_time' => $lastPveGetCegTime, + 'current_mission_get_ceg' => $todayMissionGetCeg / 100, + 'last_mission_get_ceg_time' => $lastMissionGetCegTime, 'lock_type' => $lockType, 'unlock_time' => $unlockTime, 'unlock_lefttime' => max(0, @@ -205,6 +212,7 @@ class Gun extends BaseModel { $dto['durability_max'] = strval(round(FormulaService::Weapon_NFT_Maximum_Durability($dto['quality'],$dto['lucky']),3)); $dto['pvp_ceg_uplimit'] = strval( round(FormulaService::getWeaponPvpDailyCegUpLimit($dto),2) ); $dto['pve_ceg_uplimit'] = strval( round(FormulaService::getWeaponPveDailyCegUpLimit($dto),2) ); + $dto['mission_ceg_uplimit'] = strval( round(FormulaService::getWeaponMissionDailyCegUpLimit($dto),2) ); return $dto; } @@ -488,6 +496,33 @@ class Gun extends BaseModel { return $newAttrPro; } + public static function calcMissionGainGold($gunDto, $count) + { + if ($count <= 0) { + return 0; + } + $newGold = min($gunDto['mission_ceg_uplimit'], + $gunDto['current_mission_get_ceg'] + + $gunDto['mission_ceg_uplimit'] / $count); + $finalyAddGold = max(0, $newGold - $gunDto['current_mission_get_ceg']); + return $finalyAddGold; + } + + public static function gainGoldMission($gunDto, $addGold) + { + $newGold = min($gunDto['mission_ceg_uplimit'], + $gunDto['current_mission_get_ceg'] + $addGold); + $finalyAddGold = max(0, $newGold - $gunDto['current_mission_get_ceg']); + if ($finalyAddGold > 0) { + self::update($gunDto['gun_uniid'], + array( + 'today_mission_get_ceg' => $newGold * 100, + 'last_mission_get_ceg_time' => myself()->_getNowTime() + )); + } + return $finalyAddGold; + } + public static function calcPveGainGold($gunDto, $count) { return 0; diff --git a/webapp/models/Hero.php b/webapp/models/Hero.php index 6f059072..ad69a886 100644 --- a/webapp/models/Hero.php +++ b/webapp/models/Hero.php @@ -153,6 +153,11 @@ class Hero extends BaseModel { myself()->_getNowDaySeconds()) { $todayPveGetCeg = 0; } + $todayMissionGetCeg = $row['today_mission_get_ceg']; + $lastMissionGetCegTime = $row['last_mission_get_ceg_time']; + if (myself()->_getDaySeconds($lastMissionGetCegTime) < myself()->_getNowDaySeconds()) { + $todayMissionGetCeg = 0; + } $baseAttr=[]; $attrPro=[]; $heroMeta = mt\Hero::get($row['hero_id']); @@ -204,6 +209,8 @@ class Hero extends BaseModel { 'last_pvp_get_ceg_time' => $lastGetGoldTime, 'current_pve_get_ceg' => $todayPveGetCeg / 100, 'last_pve_get_ceg_time' => $lastPveGetCegTime, + 'current_mission_get_ceg' => $todayMissionGetCeg / 100, + 'last_mission_get_ceg_time' => $lastMissionGetCegTime, 'unlock_trade_time' => $row['unlock_trade_time'], 'advanced_count' => $row['advanced_count'], 'lucky' => $heroLucky, @@ -216,6 +223,7 @@ class Hero extends BaseModel { $dto['hero_tili_max'] = strval(round(FormulaService::Hero_NFT_Maximum_Physical_Strength($dto['quality'],$dto['lucky']),3)); $dto['pvp_ceg_uplimit'] =strval( round(FormulaService::getHeroPvpDailyCegUpLimit($dto),2) ); $dto['pve_ceg_uplimit'] = strval( round(FormulaService::getHeroPveDailyCegUpLimit($dto),2) ); + $dto['mission_ceg_uplimit'] = strval( round(FormulaService::getHeroMissionDailyCegUpLimit($dto),2) ); return $dto; } @@ -406,15 +414,30 @@ class Hero extends BaseModel { return $finalyAddGold; } - public static function calcPveGainGold($heroDto, $count) + public static function gainGoldMission($heroDto, $addGold) + { + $newGold = min($heroDto['mission_ceg_uplimit'], + $heroDto['current_mission_get_ceg'] + $addGold); + $finalyAddGold = max(0, $newGold - $heroDto['current_mission_get_ceg']); + if ($finalyAddGold > 0) { + self::update($heroDto['hero_uniid'], + array( + 'today_mission_get_ceg' => $newGold * 100, + 'last_mission_get_ceg_time' => myself()->_getNowTime() + )); + } + return $finalyAddGold; + } + + public static function calcMissionGainGold($heroDto, $count) { if ($count <= 0) { return 0; } - $newGold = min($heroDto['pve_ceg_uplimit'], - $heroDto['current_pve_get_ceg'] + - round($heroDto['pve_ceg_uplimit'] / $count)); - $finalyAddGold = max(0, $newGold - $heroDto['current_pve_get_ceg']); + $newGold = min($heroDto['mission_ceg_uplimit'], + $heroDto['current_mission_get_ceg'] + + $heroDto['mission_ceg_uplimit'] / $count); + $finalyAddGold = max(0, $newGold - $heroDto['current_mission_get_ceg']); return $finalyAddGold; } diff --git a/webapp/services/MissionService.php b/webapp/services/MissionService.php index 33e88e18..1d008432 100644 --- a/webapp/services/MissionService.php +++ b/webapp/services/MissionService.php @@ -921,7 +921,8 @@ class MissionService extends BaseService { $gunDb = Gun::find($obj['id']); if ($gunDb) { $gunDto = Gun::toDto($gunDb); - $totalGunUpLimit += Gun::pveGainGold($gunDto, $count); + $addGold = Gun::calcMissionGainGold($gunDto,$count); + $totalGunUpLimit += Gun::gainGoldMission($gunDto, $addGold); Gun::Update ($obj['id'], array( @@ -937,7 +938,8 @@ class MissionService extends BaseService { $heroDb = Hero::find($obj['id']); if ($heroDb) { $heroDto = Hero::toDto($heroDb); - $totalHeroUpLimit += Hero::pveGainGold($heroDto, $count); + $addGold = Hero::calcMissionGainGold($heroDto,$count); + $totalHeroUpLimit += Hero::gainGoldMission($heroDto, $addGold); Hero::Update ($obj['id'], array( @@ -955,8 +957,8 @@ class MissionService extends BaseService { }//end foreach $ceg = $totalHeroUpLimit + $totalGunUpLimit; if ($count > 0 && $ceg > 0) { - myself()->_addVirtualItem(V_ITEM_GOLD, round($ceg)); - $awardService->addItem(V_ITEM_GOLD, round($ceg)); + myself()->_addVirtualItem(V_ITEM_GOLD, round($ceg,2)); + $awardService->addItem(V_ITEM_GOLD, round($ceg,2)); } $this->updateOfferRewardMission($missionId); $this->saveOfferRewardMission(); @@ -992,7 +994,7 @@ class MissionService extends BaseService { $gunDb = Gun::find($id); if ($gunDb) { $gunDto = Gun::toDto($gunDb); - $cegNum += Gun::calcPveGainGold($gunDto, $count); + $cegNum += Gun::calcMissionGainGold($gunDto, $count); } } break; @@ -1002,7 +1004,7 @@ class MissionService extends BaseService { $heroDb = Hero::find($id); if ($heroDb) { $heroDto = Hero::toDto($heroDb); - $cegNum += Hero::calcPveGainGold($heroDto, $count); + $cegNum += Hero::calcMissionGainGold($heroDto, $count); } } break;