英雄重置
This commit is contained in:
parent
69ef2d3f8d
commit
72600db998
31
doc/Hero.py
31
doc/Hero.py
@ -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'],
|
||||
]
|
||||
},
|
||||
|
||||
]
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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){
|
||||
|
Loading…
x
Reference in New Issue
Block a user