This commit is contained in:
aozhiwei 2022-01-06 17:14:12 +08:00
parent 765a6117e8
commit 34af585100
3 changed files with 29 additions and 19 deletions

View File

@ -9,6 +9,9 @@ require_once('mt/HeroQuality.php');
require_once('models/Hero.php'); require_once('models/Hero.php');
require_once('models/HeroSkin.php'); require_once('models/HeroSkin.php');
require_once('services/AwardService.php');
require_once('services/PropertyChgService.php');
use phpcommon\SqlHelper; use phpcommon\SqlHelper;
use models\Hero; use models\Hero;
use models\HeroSkin; use models\HeroSkin;
@ -95,7 +98,7 @@ class HeroController extends BaseAuthedController {
$this->_rspErr(1, '英雄不存在'); $this->_rspErr(1, '英雄不存在');
return; return;
} }
if ($heroDb['state'] == Hero::GETED_STATE) { if ($heroDb['state'] != Hero::GETED_STATE) {
$this->_rspErr(3, '试用英雄不能操作'); $this->_rspErr(3, '试用英雄不能操作');
return; return;
} }
@ -107,11 +110,6 @@ class HeroController extends BaseAuthedController {
$this->_rspErr(2, '锁定期间不能操作'); $this->_rspErr(2, '锁定期间不能操作');
return; return;
} }
$initLevelMeta = mt\HeroLevel::getByQualityLevel(1, 1);
if (!$initLevelMeta) {
$this->_rspErr(100, '服务器内部错误');
return;
}
$currLevelMeta = mt\HeroLevel::getByQualityLevel($heroDb['quality'], $heroDb['hero_lv']); $currLevelMeta = mt\HeroLevel::getByQualityLevel($heroDb['quality'], $heroDb['hero_lv']);
if (!$currLevelMeta) { if (!$currLevelMeta) {
$this->_rspErr(100, '服务器内部错误'); $this->_rspErr(100, '服务器内部错误');
@ -156,9 +154,8 @@ class HeroController extends BaseAuthedController {
$this->_rspErr(3, $this->_getLackItemErrMsg($lackItem)); $this->_rspErr(3, $this->_getLackItemErrMsg($lackItem));
return; return;
} }
$oldAttr = json_decode($heroDb['rand_attr'], true); $attrs = emptyReplace(json_decode($heroDb['rand_attr'], true), array());
$randAttr = $oldAttr; $ret = mt\HeroLevel::addRandAttr($nextLevelMeta, $attrs);
$ret = mt\HeroLevel::getRandAttr($initLevelMeta, $nextLevelMeta, $oldAttr, $randAttr);
if (!$ret) { if (!$ret) {
$this->_rspErr(2, '服务器内部错误'); $this->_rspErr(2, '服务器内部错误');
return; return;
@ -166,10 +163,15 @@ class HeroController extends BaseAuthedController {
$this->_decItems($costItems); $this->_decItems($costItems);
Hero::update($heroUniId, Hero::update($heroUniId,
array( array(
'level' => $heroDb['level'] + 1, 'hero_lv' => $heroDb['hero_lv'] + 1,
'rand_attr' => json_encode($randAttr) 'rand_attr' => json_encode($attrs)
) )
); );
$propertyChgService = new services\PropertyChgService();
$propertyChgService->addHeroChg();
$this->_rspData(array(
'property_chg' => $propertyChgService->toDto(),
));
} }
public function upgradeQuality() public function upgradeQuality()
@ -181,7 +183,7 @@ class HeroController extends BaseAuthedController {
$this->_rspErr(1, '英雄不存在'); $this->_rspErr(1, '英雄不存在');
return; return;
} }
if ($heroDb['state'] == Hero::GETED_STATE) { if ($heroDb['state'] != Hero::GETED_STATE) {
$this->_rspErr(3, '试用英雄不能操作'); $this->_rspErr(3, '试用英雄不能操作');
return; return;
} }

View File

@ -98,6 +98,7 @@ class Hero extends BaseModel {
'account_id' => myself()->_getAccountId(), 'account_id' => myself()->_getAccountId(),
'hero_id' => $heroMeta['id'], 'hero_id' => $heroMeta['id'],
'hero_lv' => 1, 'hero_lv' => 1,
'quality' => 1,
'hero_tili' => $realHeroMeta ? $realHeroMeta['tili'] : 0, 'hero_tili' => $realHeroMeta ? $realHeroMeta['tili'] : 0,
'state' => self::GETED_STATE, 'state' => self::GETED_STATE,
'skill_lv1' => 1, 'skill_lv1' => 1,
@ -135,6 +136,7 @@ class Hero extends BaseModel {
'account_id' => myself()->_getAccountId(), 'account_id' => myself()->_getAccountId(),
'hero_id' => $heroMeta['id'], 'hero_id' => $heroMeta['id'],
'hero_lv' => 1, 'hero_lv' => 1,
'quality' => 1,
'hero_tili' => $realHeroMeta ? $realHeroMeta['tili'] : 0, 'hero_tili' => $realHeroMeta ? $realHeroMeta['tili'] : 0,
'state' => self::TRY_STATE, 'state' => self::TRY_STATE,
'try_count' => $tryCount, 'try_count' => $tryCount,

View File

@ -19,15 +19,21 @@ class HeroLevel {
return getXVal(self::$qualityLevelHash, $quality . '_' . $level, null); return getXVal(self::$qualityLevelHash, $quality . '_' . $level, null);
} }
public static function getRandAttr($initMeta, $nextMeta, $oldAttr, &$newAttr) public static function addRandAttr($levelMeta, &$attrs)
{ {
$initAttr = mt\AttrHelper::parseAttrCfg($initMeta['rand_attrs']); $attrArr = StrHelper::parseList($levelMeta['rand_attrs'], array('|', ':'));
$nextAttr = mt\AttrHelper::parseAttrCfg($next['rand_attrs']); foreach ($attrArr as $tuple) {
if (!mt\AttrHelper::canMergeCfg($initAttr, $nextAttr)) { $attrId = $tuple[0];
return false; $type = $tuple[1];
$val = rand($tuple[2], $tuple[3]);
foreach ($attrs as &$attr) {
if ($attr['attr_id'] == $attrId &&
$attr['type'] == $type) {
$attr['val'] += $val;
break;
}
}
} }
mt\AttrHelper::randAttr($newMeta, $newAttr);
mt\AttrHelper::mergeAttr($oldAttr, $newAttr);
return true; return true;
} }