game2006api/webapp/controller/HeroController.class.php
hujiabin 1f7311fefb 1
2024-01-11 15:42:45 +08:00

414 lines
13 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('mt/HeroQuality.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('models/Transaction.php');
require_once('models/BcOrder.php');
require_once('services/AwardService.php');
require_once('services/PropertyChgService.php');
require_once('services/LogService.php');
require_once('services/BlockChainService.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 models\Transaction;
use models\BcOrder;
use services\LogService;
class HeroController extends BaseAuthedController {
public function heroList()
{
$heroList = array();
Hero::getHeroList(function ($row) use(&$heroList) {
// if(!in_array($row['hero_id'],array(30200,30700,31000))){
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'];
}
$resetLv_state = $this->_getDailyV(TN_DAILY_RESET_HERO_LEVEL_STATE, $unique_id);
$hero = Hero::toDto($heroDb);
$hero['avatarInfo'] = Hero::avatarInfo($heroDb);
$hero['resetLv_state'] = $resetLv_state;
$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;
}
$itemMeta = \mt\Item::get($skinId);
if ($itemMeta['isdefaultskin'] != 1 && !$heroSkinDb) {
$this->_rspErr(2, "You don't have the skin yet");
return;
}
HeroSkin::takeonSkin( $skinId,$heroDb['hero_id']);
$this->_rspOk();
}
/*
升阶预览
*/
public function upgradeQualityPreview(){
$itemId = getReqVal('itemId', 0);
$quality = getReqVal('quality', 0);
if ($quality == \mt\HeroQuality::MAX_QUALITY){
$this->_rspErr(5, "It's already the highest quality");
return;
}
$heroQualityMeta = \mt\HeroQuality::getByQuality($itemId,$quality+1);
if (!$heroQualityMeta){
$this->_rspErr(100, 'server internal error');
return;
}
$costItems = array(
array(
'item_id' => V_ITEM_GOLD,
'item_num' => $heroQualityMeta['gold']
),
array(
'item_id' => $heroQualityMeta['item'],
'item_num' => $heroQualityMeta['item_num']
),
);
$this->_rspData(array(
'cost' => $costItems
));
}
/*
英雄升阶
*/
public function upgradeQuality(){
$heroUniId = getReqVal('hero_uniid', 0);
$heroDb = Hero::find($heroUniId);
if (!$heroDb) {
$this->_rspErr(100, 'param error or null');
return;
}
if ($heroDb['quality'] == \mt\HeroQuality::MAX_QUALITY){
$this->_rspErr(5, "It's already the highest level");
return;
}
$heroQualityMeta = \mt\HeroQuality::getByQuality($heroDb['hero_id'],$heroDb['quality']+1);
if (!$heroQualityMeta){
$this->_rspErr(100, 'server internal error');
return;
}
$costItems = array(
array(
'item_id' => V_ITEM_GOLD,
'item_num' => $heroQualityMeta['gold']
),
array(
'item_id' => $heroQualityMeta['item'],
'item_num' => $heroQualityMeta['item_num']
),
);
$lackItem = null;
if (!$this->_hasEnoughItems($costItems, $lackItem)) {
$this->_rspErr(3, $this->_getLackItemErrMsg($lackItem));
return;
}
$this->_decItems($costItems);
Hero::update($heroUniId, array(
'quality' => $heroDb['quality'] + 1,
));
$propertyChgService = new services\PropertyChgService();
$propertyChgService->addHeroChg();
$propertyChgService->addUserChg();
$propertyChgService->addBagChg();
$this->_rspData(array(
'property_chg' => $propertyChgService->toDto(),
));
}
/*
升级预览
*/
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_new = Hero::nextLvAttr($heroDb);
$newHeroDto['rand_attr'] = $attrs_new;
$this->_rspData(array(
'old_hero' => $heroDto,
'new_hero' => $newHeroDto,
'cost' => $costItems
));
}
/*
英雄升级
*/
public function upgradeLvNew()
{
return
$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;
}
$costItems = array(
array(
'item_id' => V_ITEM_GOLD,
'item_num' => $nextLevelMeta['gold']
),
array(
'item_id' => V_ITEM_HERO_META,
'item_num' => $nextLevelMeta['serum']
),
);
$lackItem = null;
if (!$this->_hasEnoughItems($costItems, $lackItem)) {
$this->_rspErr(3, $this->_getLackItemErrMsg($lackItem));
return;
}
$this->_decItems($costItems);
// Bag::decItem(V_ITEM_HERO_META,$nextLevelMeta['serum']);
{
//埋点
$event = [
'name' => LogService::HERO_LEVEL_UP,
'val' => $nextLevelMeta['gold']
];
LogService::consumeGold($event);
}
$attrs = Hero::LvUpAddAttr($heroDb);
Hero::update($heroUniId, array(
'hero_lv' => $heroDb['hero_lv'] + 1,
'rand_attr' => json_encode($attrs['rand_attr']),
'base_attr' => json_encode($attrs['base_attr']),
//'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(),
));
}
/*
* 设置通用技能
*/
public function setHeroSkill(){
$skillId = getReqVal('skill_id',0);
$skillMeta = \mt\Skill::get($skillId);
if (! $skillMeta){
$this->_rspErr(1,'skill_id parameter error');
return ;
}
$userDb = $this->_getOrmUserInfo();
$hero_uid = $userDb['hero_id'];
$preset = HeroPreset::getHeroPreset($hero_uid);
HeroPreset::upsertPreset($hero_uid,$skillId,$preset['chip_page'],0,0);
$this->_rspOk();
}
}