308 lines
9.7 KiB
PHP
308 lines
9.7 KiB
PHP
<?php
|
|
|
|
require_once('mt/Hero.php');
|
|
require_once('mt/Item.php');
|
|
require_once('mt/HeroLevel.php');
|
|
require_once('mt/Skill.php');
|
|
|
|
require_once('models/Hero.php');
|
|
require_once('models/HeroSkin.php');
|
|
require_once('models/Nft.php');
|
|
require_once('models/ChipPage.php');
|
|
require_once('models/Gun.php');
|
|
require_once('models/HeroPreset.php');
|
|
require_once('models/Bag.php');
|
|
|
|
require_once('services/AwardService.php');
|
|
require_once('services/PropertyChgService.php');
|
|
require_once('services/LogService.php');
|
|
|
|
|
|
|
|
use phpcommon\SqlHelper;
|
|
use models\Hero;
|
|
use models\HeroSkin;
|
|
use models\ChipPage;
|
|
use models\Gun;
|
|
use models\Nft;
|
|
use models\HeroPreset;
|
|
use models\Bag;
|
|
use services\LogService;
|
|
|
|
class HeroController extends BaseAuthedController {
|
|
|
|
public function heroList()
|
|
{
|
|
$heroList = array();
|
|
Hero::getHeroList(function ($row) use(&$heroList) {
|
|
array_push($heroList, Hero::toDto($row));
|
|
});
|
|
$this->_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(),
|
|
));
|
|
}
|
|
|
|
|
|
}
|