_rspData(array( 'hero_list' => $heroList )); } public function heroDetails() { $unique_id = trim(getReqVal('unique_id', 0)); if ( ! $unique_id) { $this->_rspErr(1, 'Please enter instructions'); return; } $heroDb = Hero::find($unique_id); if (! $heroDb){ $this->_rspErr(1, "You don't have the hero yet"); return; } $heroDb['tags'] = ''; if ($heroDb['token_id']){ $nftDb = Nft::getNft($heroDb['token_id']); $heroDb['tags'] = $nftDb['tags']; } $hero = Hero::toDto($heroDb); $this->_rspData(array( 'data' => $hero )); } public function skinList() { $heroId = getReqVal('hero_id',0); if (!$heroId){ $this->_rspErr(1, "param null"); return; } $itemMeta = \mt\Item::get($heroId); if (!$itemMeta || $itemMeta['type']!=\mt\Item::HERO_TYPE){ $this->_rspErr(1, "param error"); return; } $skinList = array(); $skinMeta = \mt\Item::getMetaListByType(\mt\Item::HERO_SKIN_TYPE); if ($skinMeta){ foreach ($skinMeta as $value){ if ($value['playerid'] == $heroId){ array_push($skinList,HeroSkin::toDto($value)); } } } $this->_rspData(array( 'skin_list' => $skinList )); } public function takeonSkin() { $heroUniId = getReqVal('hero_uniid', 0); $skinId = getReqVal('skin_id', 0); $heroDb = Hero::find($heroUniId); $heroSkinDb = HeroSkin::find($skinId); if (!$heroDb) { $this->_rspErr(1, "You don't have the hero yet"); return; } if (!$heroSkinDb) { $this->_rspErr(2, "You don't have the skin yet"); return; } HeroSkin::takeonSkin( $skinId,$heroDb['hero_id']); $this->_rspOk(); } public function upgradeLevelPreview(){ $heroUniId = getReqVal('hero_uniid', 0); $heroDb = Hero::find($heroUniId); if (!$heroDb) { $this->_rspErr(1, 'hero does not exist'); return; } $heroMeta = mt\Hero::get($heroDb['hero_id']); if (!$heroMeta) { $this->_rspErr(100, 'server internal error'); return; } $nextLevelMeta = mt\HeroLevel::getByLevel($heroDb['hero_lv'] + 1); if (!$nextLevelMeta) { $this->_rspErr(5, "It's already the highest level"); return; } $costItems = array( array( 'item_id' => V_ITEM_GOLD, 'item_num' => $nextLevelMeta['gold'] ), array( 'item_id' => V_ITEM_HERO_META, 'item_num' => $nextLevelMeta['serum'] ) ); $metaList = mt\Item::getMetaListByType(mt\Item::FRAGMENT_TYPE); foreach ($metaList as $meta){ if ($meta['relationship'] == $heroDb['hero_id']) { array_push($costItems,array( 'item_id' => $meta['id'], 'item_num' => $nextLevelMeta['piece'], )); } } $heroDto = Hero::toDto($heroDb); $newHeroDto = $heroDto; $newHeroDto['hero_lv'] += 1; $attrs_min = Hero::LvUpAddAttr($heroDb,\mt\HeroLevelAttr::MIN_RAND_ATTR); $attrs_max = Hero::LvUpAddAttr($heroDb,\mt\HeroLevelAttr::MAX_RAND_ATTR); $newHeroDto['rand_attr_min'] = $attrs_min; $newHeroDto['rand_attr_max'] = $attrs_max; $this->_rspData(array( 'old_hero' => $heroDto, 'new_hero' => $newHeroDto, 'cost' => $costItems )); } public function upgradeLv() { $heroUniId = getReqVal('hero_uniid', 0); $heroDb = Hero::find($heroUniId); $oldHero = Hero::toDto($heroDb); if (!$heroDb) { $this->_rspErr(100, 'param error or null'); return; } $heroMeta = mt\Hero::get($heroDb['hero_id']); if (!$heroMeta) { $this->_rspErr(100, 'server internal error'); return; } $nextLevelMeta = mt\HeroLevel::getByLevel($heroDb['hero_lv'] + 1); if (!$nextLevelMeta) { $this->_rspErr(5, "It's already the highest level"); return; } //校验英雄碎片数量 $piece_item_id = 0; $metaList = mt\Item::getMetaListByType(mt\Item::FRAGMENT_TYPE); foreach ($metaList as $meta){ if ($meta['relationship'] == $heroDb['hero_id']) { $piece_item_id = $meta['id']; break; } } $piece_num = Bag::getItemCount($piece_item_id); if ($piece_num < $nextLevelMeta['piece']){ $this->_rspErr(3, "Lack of hero piece"); return; } //校验英雄水晶数量 $num = Bag::getItemCount(V_ITEM_HERO_META); if ($num < $nextLevelMeta['serum']){ $this->_rspErr(3, "Lack of hero crystal"); return; } //校验用户gold数量 $costItems = array( array( 'item_id' => V_ITEM_GOLD, 'item_num' => $nextLevelMeta['gold'] ), // array( // 'item_id' => V_ITEM_DIAMOND, // 'item_num' => $nextLevelMeta['diamond'] // ) ); $lackItem = null; if (!$this->_hasEnoughItems($costItems, $lackItem)) { $this->_rspErr(3, $this->_getLackItemErrMsg($lackItem)); return; } $this->_decItems($costItems); Bag::decItem($piece_item_id,$nextLevelMeta['piece']); Bag::decItem(V_ITEM_HERO_META,$nextLevelMeta['serum']); $attrs = Hero::LvUpAddAttr($heroDb,\mt\HeroLevelAttr::FINAL_RAND_ATTR); Hero::update($heroUniId, array( 'hero_lv' => $heroDb['hero_lv'] + 1, 'rand_attr' => json_encode($attrs), 'state' => Hero::GETED_STATE, )); if ($heroDb['hero_lv'] + 1 > myself()->_getV(TN_HERO_MAX_LEVEL, 0)) { myself()->_setV(TN_HERO_MAX_LEVEL, 0, $heroDb['hero_lv'] + 1); } $newHero = Hero::toDto(Hero::find($heroUniId)); $propertyChgService = new services\PropertyChgService(); $propertyChgService->addHeroChg(); $propertyChgService->addUserChg(); $propertyChgService->addBagChg(); $this->_rspData(array( 'property_chg' => $propertyChgService->toDto(), 'old_hero' => $oldHero, 'new_hero' => $newHero, )); } public function presetHero(){ $heroUid = getReqVal('hero_uid',0); $heroDb = Hero::find($heroUid); if (! $heroDb){ $this->_rspErr(1, "You don't have the hero yet"); return; } $data = HeroPreset::getHeroPreset($heroUid); $this->_rspData(array( 'data' => $data, )); } public function applyHero(){ $heroId = getReqVal('hero_uid',0); $chipPageId = getReqVal('chip_page',0); $weaponUid1 = getReqVal('weapon_uid1',0); $weaponUid2 = getReqVal('weapon_uid2',0); $skillId = getReqVal('skill_id',0); $heroDb = Hero::find($heroId); if (! $heroDb){ $this->_rspErr(1, "You don't have the hero yet"); return; } $chipPageDb = ChipPage::find($chipPageId); if (! $chipPageDb){ $this->_rspErr(1, "You don't have the chip page"); return; } if ($weaponUid1){ $gunDb1 = Gun::find($weaponUid1); if (!$gunDb1){ $this->_rspErr(1, "You don't have the gun1 yet"); return; } } if ($weaponUid2){ $gunDb2 = Gun::find($weaponUid2); if (!$gunDb2){ $this->_rspErr(1, "You don't have the gun2 yet"); return; } } $skillMeta = \mt\Skill::get($skillId); if (! $skillMeta){ $this->_rspErr(1,'skill_id parameter error'); return ; } HeroPreset::upsertPreset($heroId,$skillId,$chipPageId,$weaponUid1,$weaponUid2); $propertyChgService = new services\PropertyChgService(); $propertyChgService->addGunChg(); $this->_rspData(array( 'property_chg' => $propertyChgService->toDto(), )); } }