diff --git a/webapp/controller/OutAppNftController.class.php b/webapp/controller/OutAppNftController.class.php index db038c49..fa47f6a0 100644 --- a/webapp/controller/OutAppNftController.class.php +++ b/webapp/controller/OutAppNftController.class.php @@ -3,6 +3,8 @@ use phpcommon\SqlHelper; require_once('models/Nft.php'); require_once('models/User.php'); require_once('models/Hero.php'); +require_once('models/Chip.php'); +require_once('models/ChipPage.php'); require_once('services/NftService.php'); require_once('mt/NftDesc.php'); require_once('mt/Hero.php'); @@ -325,6 +327,7 @@ class OutAppNftController extends BaseController { $info['detail']['def'] = $heroAbility['defence']; $info['detail']['block'] = $heroAbility['block']; $info['detail']['crit'] = $heroAbility['critical']; + $this->fillHeroDetail($heroDb, $info); } } } @@ -475,15 +478,48 @@ class OutAppNftController extends BaseController { $info['detail']['def'] = $heroAbility['defence']; $info['detail']['block'] = $heroAbility['block']; $info['detail']['crit'] = $heroAbility['critical']; - $info['detail']['chip_slots'] = 0; - $info['detail']['combat_ability_1'] = 0; - $info['detail']['combat_ability_2'] = 0; + $this->fillHeroDetail($heroDb, $info); } array_push($rspData['rows'], $info); } myself()->_rspData($rspData); } + private function fillHeroDetail($heroDb, $info) + { + $info['detail']['chip_slots'] = 0; + $info['detail']['combat_ability_1'] = ''; + $info['detail']['combat_ability_2'] = ''; + $chipPageDb = ChipPage::find($heroDb['idx']); + if ($heroDb['quality'] > 1 && $chipPageDb){ + $data = emptyReplace(json_decode($chipPageDb['data'], true), array()); + $info['detail']['chip_slots'] = count($data); + foreach ($data as $value) { + $chipDb = Chip::findEx($value['chip_id']); + if (!empty($chipDb)) { + self::mergeAttr($attr, emptyReplace(json_decode($chipDb['rand_attr'], true), array())); + } + } + } + } + + public static function mergeAttr(&$tarAttrs, $srcAttrs) + { + foreach ($srcAttrs as $srcAttr) { + $found = false; + foreach ($tarAttrs as &$tarAttr) { + if ($tarAttr['attr_id'] == $srcAttr['attr_id']) { + $tarAttr['val'] += $srcAttr['val']; + $found = true; + break; + } + }//end for tarAttrs + if (!$found) { + array_push($tarAttrs, $srcAttr); + } + } + } + private function isWingHero($tokenId) { return $tokenId > 6240603010001668 && $tokenId <= 6240603010002168;