game2006api/webapp/services/callback/BuyPassCbService.php
hujiabin a49918b880 1
2023-07-03 11:30:40 +08:00

246 lines
8.4 KiB
PHP

<?php
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
{
public function process($order){
error_log("BuyPassCbService----------------");
$itemService = new ShopAddItemService();
switch ($order['item_id']){
//购买通行证回调
case V_ITEM_PASS : {
$itemService->addGameLog($order['address'],"buyItem","begin",array(
'param1' => $order['order_id'],
'param2' => json_encode(array(
'item_id' => $order['item_id'],
'item_num' => $order['item_num'],
)),
));
$this->_activateUser($order['address']);
error_log("callback buyBattlePass address: {$order['address']}, order_id: {$order['order_id']}, item_id: {$order['item_id']}, item_num: {$order['item_num']}");
$itemService->addGameLog($order['address'],"buyItem","end",array(
'param1' => $order['order_id'],
'param2' => json_encode(array(
'item_id' => $order['item_id'],
'item_num' => $order['item_num'],
)),
));
}
break;
//购买等级回调
case V_ITEM_EXP : {
$itemService->addGameLog($order['address'],"buyItem","begin",array(
'param1' => $order['order_id'],
'param2' => json_encode(array(
'item_id' => $order['item_id'],
'item_num' => $order['item_num'],
)),
));
$this->_updateUserLevel($order['address'],$order['item_num']);
error_log("callback buyPassExp address: {$order['address']}, order_id: {$order['order_id']}, item_id: {$order['item_id']}, item_num: {$order['item_num']}");
$itemService->addGameLog($order['address'],"buyItem","end",array(
'param1' => $order['order_id'],
'param2' => json_encode(array(
'item_id' => $order['item_id'],
'item_num' => $order['item_num'],
)),
));
}
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,$itemService);
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,$addItemService){
$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'],
)
);
$addItemService->addItem($order['address'],$piece_item_id,$piece);
$addItemService->addItem($order['address'],V_ITEM_HERO_META,$serum);
$addItemService->addItem($order['address'],V_ITEM_GOLD,$gold);
$this->_updateDynData($order,TN_DAILY_RESET_HERO_LEVEL_STATE,json_decode($order['ext_data']));
}
private function _activateUser($address){
SqlHelper::update
(myself()->_getMysql($address),
't_user',
array(
'address' => $address
),
array(
'activated' => 1,
'activatetime' => myself()->_getNowTime(),
)
);
$userDb = SqlHelper::ormSelectOne(
myself()->_getMysql($address),
't_user',
array(
'address' => $address
)
);
$this->_updatePassData($userDb);
}
private function _updateUserLevel($address,$exp){
$userDb = SqlHelper::ormSelectOne(
myself()->_getMysql($address),
't_user',
array(
'address' => $address
)
);
$expNew = $userDb['exp'] + $exp;
$levelNew = $userDb['level'];
BattlePass::getExpByLv($levelNew,$expNew);
SqlHelper::update
(myself()->_getMysql($address),
't_user',
array(
'address' => $address
),
array(
'exp' => $expNew,
'level' => $levelNew,
)
);
$userDbNew = SqlHelper::ormSelectOne(
myself()->_getMysql($address),
't_user',
array(
'address' => $address
)
);
$this->_updatePassData($userDbNew);
$this->_updateDynData($userDbNew,TN_DAILY_BUY_LEVEL_STATE,0);
}
private function _updateDynData($user,$x,$y){
$x = intval($x) ;
$y = intval($y) ;
SqlHelper::update
( myself()->_getMysql($user['address']),
't_dyndata',
array(
'account_id' => $user['account_id'],
'x' => $x,
'y' => $y
),
array(
'val' => 0,
'modifytime' => myself()->_getNowTime()
)
);
}
private function _updatePassData($user){
$currSeasonMeta = BattlePass::getCurrentSeason();
$passDb = SqlHelper::ormSelectOne(
myself()->_getMysql($user['address']),
't_user_pass',
array(
'account_id' => $user['account_id'],
'season_id' => $currSeasonMeta['id'],
)
);
$rewards = emptyReplace(json_decode($passDb['data'], true), array());
foreach ($rewards['basic'] as &$reward){
if ($user['level'] >= $reward['level'] && $reward['state']==-1){
$reward['state'] = 0;
}
}
if ($user['activated']){
foreach ($rewards['platinum'] as &$reward){
if ($user['level'] >= $reward['level'] && $reward['state']==-1){
$reward['state'] = 0;
}
}
}
SqlHelper::update(
myself()->_getMysql($user['address']),
't_user_pass',
array(
'account_id' => $user['account_id'],
'season_id' => $currSeasonMeta['id'],
),
array(
'data' => json_encode($rewards),
'modifytime' => myself()->_getNowTime()
)
);
}
}