246 lines
8.4 KiB
PHP
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()
|
|
)
|
|
);
|
|
}
|
|
|
|
|
|
|
|
} |