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() ) ); } }