protected function _exec()
 {
     $itemId = $this->getParam('itemId', 'int');
     $characterId = $this->getParam('heroid', 'int');
     $itemDef = get_xml_def($itemId);
     if (empty($itemDef)) {
         $this->throwException("itemId is not item {$itemId}");
     }
     $itemMgr = new UserGameItemManager($characterId);
     $itemMgr->subItem($itemId, 1);
     $hero_mgr = new CharacterAccountManager();
     $hero_account = $hero_mgr->getCharacterAccount($characterId);
     $new_hero_info = StaticFunction::resetCurPower($hero_account);
     $cur_power = $new_hero_info['power'];
     if ($itemId == "80000") {
         $heroChange = array('power' => $cur_power + 50, 'powertime' => $new_hero_info['powertime']);
     } else {
         if ($itemId == "80001") {
             $heroChange = array('power' => StaticFunction::getTotalPower(StaticFunction::expToGrade($new_hero_info['exp']), StaticFunction::expToVip($new_hero_info['vip'])), 'powertime' => $new_hero_info['powertime']);
         }
     }
     $hero_mgr->updateUserStatus($characterId, $heroChange);
     $itemMgr->commitToDB();
     $heroChange['item_id'] = $itemId;
     return $heroChange;
 }
 protected function _exec()
 {
     $gameuid = $this->getParam('gameuid', 'int');
     $specId = $this->getParam('specId', 'string');
     $battletype = $this->getParam('battletype', 'string');
     $heroId = $this->getParam('heroid', 'int');
     $rewards = $this->getParam('battlerewards', 'array');
     $itemMgr = new UserGameItemManager($heroId);
     $hero_mgr = new CharacterAccountManager();
     $hero_info = $hero_mgr->getCharacterAccount($heroId);
     $new_hero_info = StaticFunction::resetCurPower($hero_info);
     $totalPower = StaticFunction::getTotalPower(StaticFunction::expToGrade($hero_info['exp']), StaticFunction::expToVip($hero_info['vip']));
     $cur_power = $new_hero_info['power'];
     if ($cur_power < StaticFunction::$power_battle_cost) {
         $this->throwException("power is not enough ,cur power = {$cur_power} , totalpower = {$totalPower} , oldpower = {$heroId}");
     } else {
         $heroChange = array('power' => $cur_power - StaticFunction::$power_battle_cost, 'powertime' => $new_hero_info['powertime']);
         if ($battletype == "Ordinary") {
             $newItemId = $specId;
         } else {
             $newItemId = 100000 + intval($specId);
         }
         $itemInfo = $itemMgr->getItem($newItemId);
         if ($itemInfo['count'] < 3) {
             $this->throwException("this battle spec id {$newItemId} do not have 3 star");
         }
         $itemMgr->subItem("80003", 1);
         foreach ($rewards as $oneReward) {
             if ($oneReward['item_id'] == 'coin') {
                 $userMgr = new UserAccountManager();
                 $userMgr->updateUserCoin($gameuid, $oneReward['count']);
             } else {
                 if ($oneReward['item_id'] == 'exp') {
                     $heroChange['exp'] = $oneReward['count'];
                 } else {
                     $itemMgr->addItem($oneReward['item_id'], $oneReward['count']);
                 }
             }
         }
         $itemMgr->commitToDB();
         $hero_mgr->updateUserStatus($heroId, $heroChange);
         return TRUE;
     }
     return FALSE;
 }
 public static function getCharacterLevel($exp)
 {
     return StaticFunction::expToGrade($exp);
 }
 public static function resetCurPower($hero_info)
 {
     $power = $hero_info['power'];
     $powertime = $hero_info['powertime'];
     $totalPower = StaticFunction::getTotalPower(StaticFunction::expToGrade($hero_info['exp']), StaticFunction::expToVip($hero_info['vip']));
     $curpower = 0;
     if ($power >= $totalPower) {
         $curpower = $power;
     } else {
         $curpower = $power + floor((time() - $powertime) / StaticFunction::$POWER_CYCLE);
         $curpower = min($curpower, $totalPower);
     }
     $hero_info['power'] = $curpower;
     $hero_info['powertime'] = time();
     return $hero_info;
 }