英雄重置

This commit is contained in:
hujiabin 2023-06-30 18:09:53 +08:00
parent 69ef2d3f8d
commit 72600db998
7 changed files with 231 additions and 23 deletions

View File

@ -134,6 +134,37 @@ class Hero(object):
_common.RspHead(),
['!hero', [_common.Hero()], '英雄信息']
]
},{
'name': 'beforeHeroReset',
'desc': '英雄重置前',
'group': 'Hero',
'url': 'webapp/index.php?c=Hero&a=beforeHeroReset',
'params': [
_common.ReqHead(),
['hero_unnid', 0, '英雄唯一id'],
],
'response': [
_common.RspHead(),
['ceg', 0, 'ceg'],
['gold', 0, 'gold'],
['piece', 0, '碎片'],
['serum', 0, '材料'],
]
},{
'name': 'heroResetLevel',
'desc': '英雄重置',
'group': 'Hero',
'url': 'webapp/index.php?c=Hero&a=heroResetLevel',
'params': [
_common.ReqHead(),
['hero_unnid', 0, '英雄唯一id'],
['price', 0, 'ceg数量'],
],
'response': [
_common.RspHead(),
['trans_id', 0, '订单号'],
['params', 0, 'params'],
]
},
]

View File

@ -12,6 +12,7 @@ define('V_ITEM_ACTIVE', 10004); //活跃度
define('V_ITEM_BCEG', 10010); //BCEG
define('V_ITEM_STAR', 10011); //星星
define('V_ITEM_PASS', 10012); //通行证
define('V_ITEM_RESET_CARD', 10013); //重置卡
define('V_ITEM_REVIVE_COIN', 140001); //复活币
define('V_ITEM_HERO_META', 100005); //英雄升级材料
define('V_ITEM_GUN_META', 100006); //枪械升级材料
@ -51,6 +52,7 @@ define('TN_DAILY_USED_GOLD_NUM', 9015);
define('TN_DAILY_GET_STAR_NUM', 9016);
define('TN_DAILY_BUY_PASS_STATE', 9017);
define('TN_DAILY_BUY_LEVEL_STATE', 9018);
define('TN_DAILY_RESET_HERO_LEVEL_STATE', 9019);
define('TN_WEEKLY_BEGIN', 10001);
define('TN_WEEKLY_ACTIVE', 10002);

View File

@ -12,10 +12,13 @@ require_once('models/ChipPage.php');
require_once('models/Gun.php');
require_once('models/HeroPreset.php');
require_once('models/Bag.php');
require_once('models/Transaction.php');
require_once('models/BcOrder.php');
require_once('services/AwardService.php');
require_once('services/PropertyChgService.php');
require_once('services/LogService.php');
require_once('services/BlockChainService.php');
@ -27,6 +30,8 @@ use models\Gun;
use models\Nft;
use models\HeroPreset;
use models\Bag;
use models\Transaction;
use models\BcOrder;
use services\LogService;
class HeroController extends BaseAuthedController {
@ -59,8 +64,10 @@ class HeroController extends BaseAuthedController {
$nftDb = Nft::getNft($heroDb['token_id']);
$heroDb['tags'] = $nftDb['tags'];
}
$resetLv_state = $this->_getDailyV(TN_DAILY_RESET_HERO_LEVEL_STATE, $unique_id);
$hero = Hero::toDto($heroDb);
$hero['resetLv_state'] = $resetLv_state;
$this->_rspData(array(
'data' => $hero
));
@ -317,6 +324,7 @@ class HeroController extends BaseAuthedController {
英雄碎片合成
*/
public function heroPieceSys(){
error_log("HERO PRICE : " . json_encode($_REQUEST));
$itemId = getReqVal('item_id',0);
$pieceNum = \mt\Parameter::getVal('hero_piece_synthesis_num',0);
$itemMeta = \mt\Item::get($itemId);
@ -344,11 +352,81 @@ class HeroController extends BaseAuthedController {
));
}
public function beforeHeroReset(){
$hero_unnid = getReqVal('hero_unnid',0);
$heroDb = Hero::find($hero_unnid);
if (!$heroDb){
$this->_rspErr(1, "param hero_unnid error");
return;
}
$paramMeta = \mt\Parameter::getListValue('hero_reset_cost');
if (!$paramMeta){
$this->_rspErr(1, "parameter hero_reset_cost is null ");
return;
}
$actual_price = 0;
foreach ($paramMeta as $value){
$temp = explode(":",$value);
if ($heroDb['hero_lv'] == $temp[0]){
$actual_price = $temp[1];
}
}
$piece = 0;
$serum = 0;
$gold = 0;
for ($i=1;$i<=$heroDb['hero_lv'];$i++){
$heroLevelMeta = mt\HeroLevel::getByLevel($i);
$piece += $heroLevelMeta['piece'];
$serum += $heroLevelMeta['serum'];
$gold += $heroLevelMeta['gold'];
}
$this->_rspData(array(
'ceg' => $actual_price,
'gold' => $gold,
'piece' => $piece,
'serum' => $serum,
));
}
/*
英雄重置
英雄重置 2:5|3:10|4:15|5:20|6:25|7:30|8:35|9:40|10:45|11:50|12:55|13:60|14:65|15:70
*/
public function heroResetLevel(){
$hero_unnid = getReqVal('hero_unnid',0);
$price = getReqVal('price', 0);
$heroDb = Hero::find($hero_unnid);
if (!$heroDb){
$this->_rspErr(1, "param hero_unnid error");
return;
}
if ($heroDb['hero_lv'] <= 1){
$this->_rspErr(1, "This is the lowest level of hero");
return;
}
$paramMeta = \mt\Parameter::getListValue('hero_reset_cost');
if (!$paramMeta){
$this->_rspErr(1, "parameter hero_reset_cost is null ");
return;
}
$actual_price = 0;
foreach ($paramMeta as $value){
$temp = explode(":",$value);
if ($heroDb['hero_lv'] == $temp[0]){
$actual_price = $temp[1];
}
}
if($price != $actual_price){
$this->_rspErr(1, "The number of CEGs is incorrect ");
return;
}
$response = services\BlockChainService::gameItemMallBuy(
Transaction::RESET_HERO_LEVEL_TYPE, services\BlockChainService::formatCurrency($price), V_ITEM_RESET_CARD, 1);
$this->_setV(TN_DAILY_RESET_HERO_LEVEL_STATE, $hero_unnid, 1);
BcOrder::upsert($response['trans_id'], array(
'item_id' => V_ITEM_RESET_CARD,
'item_num' => 1,
'ext_data' => json_encode($hero_unnid),
));
$this->_rspData($response);
}
/*

View File

@ -114,22 +114,22 @@ class UserController extends BaseAuthedController {
}
}
if (SERVER_ENV == _TEST) {
array_push($addItems,
array(
'item_id' => V_ITEM_GOLD,
'item_num' => 500000
));
$itemIds = array(30100,30200,30300,30400,30500,30600,30700,30800,30900,31000,40702,40902,40102);
foreach ($itemIds as $row){
array_push($addItems,
array(
'item_id' => $row,
'item_num' => 1
));
}
}
// if (SERVER_ENV == _TEST) {
//
// array_push($addItems,
// array(
// 'item_id' => V_ITEM_GOLD,
// 'item_num' => 500000
// ));
// $itemIds = array(30100,30200,30300,30400,30500,30600,30700,30800,30900,31000,40702,40902,40102);
// foreach ($itemIds as $row){
// array_push($addItems,
// array(
// 'item_id' => $row,
// 'item_num' => 1
// ));
// }
// }
$awardService = new services\AwardService();
$propertyChgService = new services\PropertyChgService();

View File

@ -21,6 +21,7 @@ class Transaction extends BaseModel {
const BUY_EXP_ACTION_TYPE = 101;
const BUY_PASS_ACTION_TYPE = 102;
const BUY_GOODS_ACTION_TYPE = 103;
const RESET_HERO_LEVEL_TYPE = 104;
const BUY_END_ACTION_TYPE = 200;

View File

@ -4,9 +4,13 @@
namespace services;
require_once('mt/BattlePass.php');
require_once('mt/HeroLevel.php');
require_once('mt/Item.php');
require_once ('services/callback/ShopAddItemService.php');
use mt\BattlePass;
use mt\HeroLevel;
use mt\Item;
use phpcommon\SqlHelper;
class BuyPassCbService
@ -54,12 +58,99 @@ class BuyPassCbService
)),
));
}
break;
//重置英雄等级回调
case V_ITEM_RESET_CARD : {
$itemService->addGameLog($order['address'],"resetHero","begin",array(
'param1' => $order['order_id'],
'param2' => json_encode(array(
'item_id' => $order['item_id'],
'item_num' => $order['item_num'],
'hero_unnid' => json_decode($order['ext_data']),
)),
));
$this->_resetHeroLevel($order);
error_log("callback resetHeroLevel address: {$order['address']}, order_id: {$order['order_id']}, item_id: {$order['item_id']}, item_num: {$order['item_num']}");
$itemService->addGameLog($order['address'],"resetHero","end",array(
'param1' => $order['order_id'],
'param2' => json_encode(array(
'item_id' => $order['item_id'],
'item_num' => $order['item_num'],
'hero_unnid' => json_decode($order['ext_data']),
)),
));
}
default : {
}
}
}
private function _resetHeroLevel($order){
$heroDb = SqlHelper::ormSelectOne(
myself()->_getMysql($order['address']),
't_hero',
array(
'idx' => json_decode($order['ext_data'])
)
);
$piece_item_id = 0;
$metaList = Item::getMetaListByType(Item::FRAGMENT_TYPE);
foreach ($metaList as $meta){
if ($meta['relationship'] == $heroDb['hero_id']) {
$piece_item_id = $meta['id'];
break;
}
}
$piece = 0;
$serum = 0;
$gold = 0;
for ($i=1;$i<=$heroDb['hero_lv'];$i++){
$heroLevelMeta = HeroLevel::getByLevel($i);
$piece += $heroLevelMeta['piece'];
$serum += $heroLevelMeta['serum'];
$gold += $heroLevelMeta['gold'];
}
SqlHelper::update
(myself()->_getMysql($order['address']),
't_hero',
array(
'idx' => json_decode($order['ext_data'])
),
array(
'hero_lv' => 1,
'rand_attr' => $heroDb['base_attr'],
)
);
$conn = myself()->_getMysql($order['address']);
$this->_addBagItem($conn,$order['account_id'],$piece_item_id,$piece);
$this->_addBagItem($conn,$order['account_id'],V_ITEM_HERO_META,$serum);
$this->_addBagItem($conn,$order['account_id'],V_ITEM_GOLD,$gold);
$this->_updateDynData($order,TN_DAILY_RESET_HERO_LEVEL_STATE,json_decode($order['ext_data']));
}
private function _addBagItem($conn,$accountId,$itemId,$itemNum){
SqlHelper::upsert
($conn,
't_bag',
array(
'account_id' => $accountId,
'item_id' => $itemId
),
array(
'item_num' => function () use($itemNum) { return "item_num + {$itemNum}";},
'modifytime' => myself()->_getNowTime(),
),
array(
'account_id' => $accountId,
'item_id' => $itemId,
'item_num' => $itemNum,
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
)
);
}
private function _activateUser($address){
SqlHelper::update
(myself()->_getMysql($address),
@ -114,17 +205,17 @@ class BuyPassCbService
)
);
$this->_updatePassData($userDbNew);
$this->_updateDynData($userDbNew);
$this->_updateDynData($userDbNew,TN_DAILY_BUY_LEVEL_STATE,0);
}
private function _updateDynData($user){
private function _updateDynData($user,$x,$y){
SqlHelper::update
( myself()->_getMysql($user['address']),
't_dyndata',
array(
'account_id' => $user['account_id'],
'x' => TN_DAILY_BUY_LEVEL_STATE,
'y' => 0
'x' => $x,
'y' => $y
),
array(
'val' => 0,

View File

@ -58,7 +58,12 @@ class GameItemMallBuyOk {
}
private function _isVirtualItem($itemId){
return in_array($itemId, array(V_ITEM_EXP, V_ITEM_PASS));
return in_array($itemId, array(
V_ITEM_EXP,
V_ITEM_PASS,
V_ITEM_RESET_CARD,
)
);
}
private function _updateOrderState($address,$transId){