From c84b774d2695f65138d1434d98e9ebe8e5293f87 Mon Sep 17 00:00:00 2001 From: hujiabin <519660157@qq.com> Date: Fri, 27 Sep 2024 15:58:23 +0800 Subject: [PATCH] VIP --- webapp/controller/BagController.class.php | 22 ++++++++- .../controller/BaseAuthedController.class.php | 5 ++ webapp/controller/HeroController.class.php | 10 +++- webapp/models/Hero.php | 6 +++ webapp/models/User.php | 24 +++++----- webapp/mt/StakingVip.php | 47 ++++++++++++++----- webapp/services/RoomBattleDataService.php | 17 +++++-- 7 files changed, 99 insertions(+), 32 deletions(-) diff --git a/webapp/controller/BagController.class.php b/webapp/controller/BagController.class.php index e2df8e54..f000c29b 100644 --- a/webapp/controller/BagController.class.php +++ b/webapp/controller/BagController.class.php @@ -5,6 +5,7 @@ require_once('mt/Item.php'); require_once('mt/Drop.php'); require_once('mt/Hero.php'); require_once('mt/LootConfig.php'); +require_once('mt/StakingVip.php'); require_once('models/Bag.php'); require_once('models/Hero.php'); @@ -538,17 +539,34 @@ class BagController extends BaseAuthedController { } $costItems= array(); if ($itemMeta['gold'] > 0){ + //vip加成金币消耗 + $goldNum = $itemMeta['gold']; + if (in_array($itemMeta['sub_type'],array(4,5,6))){ + $rightVal = myself()->_getVipRightsVal(mt\StakingVip::GOLD_CUT_DOWN); + if ($rightVal > 0){ + $goldNum -= $goldNum*$rightVal; + } + } + array_push($costItems,array( 'item_id' => V_ITEM_GOLD, - 'item_num' => $itemMeta['gold'] * $itemNum + 'item_num' => ceil($goldNum) * $itemNum )); } if ($itemMeta['diamond'] > 0){ + //vip加成砖石消耗 + $diamondNum = $itemMeta['diamond']; + if ($itemMeta['sub_type'] == 7){ + $rightVal = myself()->_getVipRightsVal(mt\StakingVip::DIAMOND_CUT_DOWN); + if ($rightVal > 0){ + $diamondNum -= $diamondNum*$rightVal; + } + } array_push($costItems,array( 'item_id' => V_ITEM_DIAMOND, - 'item_num' => $itemMeta['diamond'] * $itemNum + 'item_num' => ceil($diamondNum) * $itemNum )); } $lackItem = null; diff --git a/webapp/controller/BaseAuthedController.class.php b/webapp/controller/BaseAuthedController.class.php index a21cba5f..fe90ee89 100644 --- a/webapp/controller/BaseAuthedController.class.php +++ b/webapp/controller/BaseAuthedController.class.php @@ -908,4 +908,9 @@ class BaseAuthedController extends BaseController { myself()->_callServiceStatic('LogService', 'addTgLog', $eventName, $prop); } + public function _getVipRightsVal($type) + { + $vip = User::getVipLv(myself()->_getAddress()); + return myself()->_callMtStatic('StakingVip', 'getValByLv', $vip, $type); + } } diff --git a/webapp/controller/HeroController.class.php b/webapp/controller/HeroController.class.php index daeee408..564e2cb5 100644 --- a/webapp/controller/HeroController.class.php +++ b/webapp/controller/HeroController.class.php @@ -7,6 +7,7 @@ require_once('mt/EconomyAttribute.php'); require_once('mt/Manufacture.php'); require_once('mt/BattleBasicAttribute.php'); require_once('mt/BattleRandAttribute.php'); +require_once('mt/StakingVip.php'); require_once('models/Hero.php'); require_once('models/HeroPreset.php'); require_once('services/AwardService.php'); @@ -172,11 +173,16 @@ class HeroController extends BaseAuthedController { if ($extraItemId == $extraItem[0]){ $chanceKey = min($extraItemNum,$extraItem[1]); } - + //vip加成金币消耗 + $rightVal = myself()->_getVipRightsVal(mt\StakingVip::HERO_UP); + $goldNum = $manufactureMeta['gold']; + if ($rightVal > 0){ + $goldNum -= $goldNum*$rightVal; + } $costItems = array( array( 'item_id' => V_ITEM_GOLD, - 'item_num' => $manufactureMeta['gold'] + 'item_num' => ceil($goldNum) ), array( 'item_id' => $itemId, diff --git a/webapp/models/Hero.php b/webapp/models/Hero.php index 5b3d4ac7..3cffc4a4 100644 --- a/webapp/models/Hero.php +++ b/webapp/models/Hero.php @@ -10,6 +10,7 @@ require_once('mt/Item.php'); require_once('mt/BattleBasicAttribute.php'); require_once('mt/BattleRandAttribute.php'); require_once('mt/EconomyAttribute.php'); +require_once('mt/StakingVip.php'); require_once('models/HeroSkin.php'); require_once('models/Chip.php'); require_once('models/User.php'); @@ -1034,6 +1035,11 @@ class Hero extends BaseModel { $lucky += self::getHeroLucky($row); } } + //Vip加成账号幸运值 + $rightVal = myself()->_getVipRightsVal(mt\StakingVip::ACCOUNT_LUCKY_INC); + if ($rightVal > 0){ + $lucky += $rightVal; + } return $lucky; } diff --git a/webapp/models/User.php b/webapp/models/User.php index 2e5f5a49..15267858 100644 --- a/webapp/models/User.php +++ b/webapp/models/User.php @@ -71,16 +71,16 @@ class User extends BaseModel { return $rows ? $rows : null; } -// public static function getVipLv($address){ -// $row = SqlHelper::ormSelectOne( -// myself()->_getMarketMysql(''), -// 't_staking_cec', -// array( -// 'account_address' => $address -// ) -// ); -// return $row ? $row['vip_lv'] : 0; -// } + public static function getVipLv($address){ + $row = SqlHelper::ormSelectOne( + myself()->_getMarketMysql(''), + 't_staking_cec', + array( + 'account_address' => $address + ) + ); + return $row ? $row['vip_lv'] : 0; + } public static function show($row) { @@ -141,7 +141,7 @@ class User extends BaseModel { 'honor_info' => $honorInfo, 'account_lucky' => $lucky, 'chest_rate' => $rate, -// 'vip_lv' => self::getVipLv($row['address']), + 'vip_lv' => self::getVipLv($row['address']), ); } @@ -207,7 +207,7 @@ class User extends BaseModel { 'last_login_time' => $row['last_login_time'], 'account_lucky' => $lucky, 'chest_rate' => $rate, -// 'vip_lv' => self::getVipLv($row['address']), + 'vip_lv' => self::getVipLv($row['address']), ); } diff --git a/webapp/mt/StakingVip.php b/webapp/mt/StakingVip.php index 2cdf88d7..a9b21700 100644 --- a/webapp/mt/StakingVip.php +++ b/webapp/mt/StakingVip.php @@ -6,12 +6,12 @@ use phpcommon; class StakingVip { - const GAIN_GOLD = 1; - const HERO_UP = 2; - const ACCOUNT_TIMES = 3; - const GOLD_CUT_DOWN = 4; - const DIAMOND_CUT_DOWN = 5; - const ACCOUNT_LUCKY_INC = 6; + const GAIN_GOLD = 1; //类型 = 1,Gold模式额外获数量(具体指,不是比例) + const HERO_UP = 2; //类型 = 2,英雄升阶金币消耗减少比例 + const ACCOUNT_TIMES = 3; //类型 = 3,账号总打金次数增加场次 + const GOLD_CUT_DOWN = 4; //类型 = 4,购买特殊道具所需金币数量减少比例,此处特殊道具包括-Bounty门票、恢复道具、封装道具 + const DIAMOND_CUT_DOWN = 5; //类型 = 5,购买特殊道具所需钻石数量减少比例,此处特殊道具包括-英雄升阶概率提升道具 + const ACCOUNT_LUCKY_INC = 6; //类型 = 6,账号总有效幸运值增加数值 public static function find($lv) { @@ -23,13 +23,34 @@ class StakingVip { return array(); } -// public static function exportRights($lv){ -// $meta = self::find($lv); -// if (!$meta || empty($meta['rights'])){ -// return array(); -// } -// $rights = explode('|',$meta['rights']); -// } + public static function exportRights($lv){ + $meta = self::find($lv); + if (!$meta || empty($meta['rights'])){ + return array(); + } + $rightList = array(); + $rights = explode('|',$meta['rights']); + foreach ($rights as $right){ + $arr = explode(':',$right); + array_push($rightList,array( + 'type' => $arr[0], + 'val' => $arr[1], + )); + } + return $rightList; + } + + public static function getValByLv($lv,$type){ + $rights = self::exportRights($lv); + $rightsHash = array(); + array_walk($rights, function ($row) use(&$rightsHash) { + $rightsHash[$row['type']] = $row; + }); + if (isset($rightsHash[$type])){ + return $rightsHash[$type]['val']; + } + return 0; + } protected static function getMetaList() { diff --git a/webapp/services/RoomBattleDataService.php b/webapp/services/RoomBattleDataService.php index 66f64b5f..d00b5bd8 100644 --- a/webapp/services/RoomBattleDataService.php +++ b/webapp/services/RoomBattleDataService.php @@ -13,6 +13,7 @@ require_once('mt/Rank.php'); require_once('mt/RankSeason.php'); require_once('mt/EconomyAttribute.php'); require_once('mt/CircuitTime.php'); +require_once('mt/StakingVip.php'); require_once('services/AwardService.php'); require_once('services/PropertyChgService.php'); @@ -202,9 +203,15 @@ class RoomBattleDataService extends BaseService { 'heroInfo'=> $heroDb ))); //金币模式检验 + //Vip加成打金次数 + $rewardsMaxTimes = $mapModeMeta['rewards_max_time']; + $rightVal = myself()->_getVipRightsVal(mt\StakingVip::ACCOUNT_TIMES); + if ($rightVal > 0){ + $rewardsMaxTimes += $rightVal; + } if ($this->mapMode == mt\MapMode::GOLD_MODE && // ($goldModeTimes >= $mapModeMeta['rewards_max_time'] )){ - (!Hero::verifyValid($heroDb) || $heroTimes >= $heroTimesMax || $goldModeTimes >= $mapModeMeta['rewards_max_time'])){ + (!Hero::verifyValid($heroDb) || $heroTimes >= $heroTimesMax || $goldModeTimes >= $rewardsMaxTimes)){ error_log("金币模式:出战英雄没有打金时间或每日打金场次上限"); }else{ if (!empty($rewardMeta['goldLoot'])){ @@ -259,7 +266,11 @@ class RoomBattleDataService extends BaseService { $gold = $gold * ($powerRate + 1); $hashRateValue = round($powerRate,4); } - + //Vip加成金币获得 + $rightVal = myself()->_getVipRightsVal(mt\StakingVip::GAIN_GOLD); + if ($rightVal > 0){ + $gold += $rightVal; + } } if ($gold > 0){ array_push($reward,array( @@ -267,7 +278,7 @@ class RoomBattleDataService extends BaseService { "item_num" => floor($gold), "details" => array( 'baseValue' => floor($baseValue), -// 'wealthValue' => $wealthValue, + 'vipValue' => isset($rightVal) ? $rightVal : 0, 'hashRateValue' => isset($hashRateValue) ? $hashRateValue : 0, ) ));