This commit is contained in:
aozhiwei 2022-01-06 17:31:00 +08:00
parent 34af585100
commit cec0178662
2 changed files with 27 additions and 59 deletions

View File

@ -5,6 +5,7 @@ require_once('mt/Hero.php');
require_once('mt/Item.php'); require_once('mt/Item.php');
require_once('mt/HeroLevel.php'); require_once('mt/HeroLevel.php');
require_once('mt/HeroQuality.php'); require_once('mt/HeroQuality.php');
require_once('mt/AttrHelper.php');
require_once('models/Hero.php'); require_once('models/Hero.php');
require_once('models/HeroSkin.php'); require_once('models/HeroSkin.php');
@ -195,16 +196,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;
}
$initQualityMeta = mt\HeroQuality::getByQuality(1);
if (!$initQualityMeta) {
$this->_rspErr(100, '服务器内部错误');
return;
}
$currQualityMeta = mt\HeroQuality::getByQuality($heroDb['quality']); $currQualityMeta = mt\HeroQuality::getByQuality($heroDb['quality']);
if (!$currQualityMeta) { if (!$currQualityMeta) {
$this->_rspErr(100, '服务器内部错误'); $this->_rspErr(100, '服务器内部错误');
@ -212,12 +203,12 @@ class HeroController extends BaseAuthedController {
} }
$nextQualityMeta = mt\HeroQuality::getByQuality($heroDb['quality'] + 1); $nextQualityMeta = mt\HeroQuality::getByQuality($heroDb['quality'] + 1);
if (!$nextQualityMeta) { if (!$nextQualityMeta) {
$this->_rspErr(5, '已满级'); $this->_rspErr(5, '已满级1');
return; return;
} }
$nextLevelMeta = mt\HeroLevel::getByQualityLevel($heroDb['quality'] + 1, $heroDb['level']); $nextLevelMeta = mt\HeroLevel::getByQualityLevel($heroDb['quality'] + 1, $heroDb['hero_lv']);
if (!$nextLevelMeta) { if (!$nextLevelMeta) {
$this->_rspErr(5, '已满级'); $this->_rspErr(5, '已满级2');
return; return;
} }
$costItems = array(); $costItems = array();
@ -254,19 +245,13 @@ 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 = false;
{ {
$ret = mt\HeroQuality::getNextAttr($initQualityMeta, $nextQualityMeta, $oldAttr, $randAttr); $obtainAttrs = mt\HeroQuality::getRandAttr($nextQualityMeta);
if (!$ret) { mt\AttrHelper::mergeAttr($attrs, $obtainAttrs);
$this->_rspErr(2, '服务器内部错误');
return;
}
$oldAttr = $randAttr;
} }
{ {
$ret = mt\HeroLevel::getNextAttr($initLevelMeta, $nextLevelMeta, $oldAttr, $randAttr); $ret = mt\HeroLevel::addRandAttr($nextLevelMeta, $attrs);
if (!$ret) { if (!$ret) {
$this->_rspErr(2, '服务器内部错误'); $this->_rspErr(2, '服务器内部错误');
return; return;
@ -275,10 +260,16 @@ class HeroController extends BaseAuthedController {
$this->_decItems($costItems); $this->_decItems($costItems);
Hero::update($heroUniId, Hero::update($heroUniId,
array( array(
'hero_lv' => $heroDb['hero_lv'],
'quality' => $heroDb['quality'] + 1, 'quality' => $heroDb['quality'] + 1,
'rand_attr' => json_encode($randAttr) 'rand_attr' => json_encode($attrs)
) )
); );
$propertyChgService = new services\PropertyChgService();
$propertyChgService->addHeroChg();
$this->_rspData(array(
'property_chg' => $propertyChgService->toDto(),
));
} }
} }

View File

@ -6,45 +6,22 @@ use phpcommon;
class AttrHelper { class AttrHelper {
public static function parseAttrCfg($attrStr) public static function mergeAttr(&$tarAttrs, $srcAttrs)
{ {
$attrs = array(); foreach ($srcAttrs as $srcAttr) {
$strs = explode('|', $attrStr); $found = false;
foreach ($strs as $str) { foreach ($tarAttrs as &$tarAttr) {
$strs1 = explode('|', $attrStr); if ($tarAttr['attr_id'] == $srcAttr['attr_id'] &&
array_push($attrs, $tarAttr['type'] == $srcAttr['type']) {
array( $tarAttr['val'] += $srcAttr['val'];
'attr_id' => $strs1[0], $found = true;
'type' => $strs1[1], break;
));
}
return $attrs;
}
public static function mergeAttr($aAttr, $bAttr)
{
}
public static function canMergeCfg($aAttr, $bAttr)
{
foreach ($bAttr as $attr){
if (!array_find($aAttr, function($val) use($attr) {
if ($val['attr_id'] == $attr['attr_id'] &&
$val['type'] == $attr['type']) {
return true;
} }
return false; }//end for tarAttrs
})) { if (!$found) {
return false; array_push($tarAttrs, $srcAttr);
} }
} }
return true;
}
public static function randAttr($attr, $outAttr)
{
} }
} }