2, 'errmsg' => "tokenId empty", )); die; } $itemId = getReqVal('itemId', ''); $itemMeta = Item::get($itemId); if (!$itemMeta || $itemMeta['type'] != Item::HERO_TYPE){ echo json_encode(array( 'errcode' => 2, 'errmsg' => "itemId error", )); die; } $quality = getReqVal('quality', 0); if (!in_array($quality,array( self::TYPE_1, self::TYPE_2, self::TYPE_3, self::TYPE_4, self::TYPE_5, self::TYPE_6, ))){ echo json_encode(array( 'errcode' => 2, 'errmsg' => "quality error", )); die; } error_log("MintNftHero-------------------".json_encode($_REQUEST)); if (!$this->verifyNftTokenId($tokenId)){ error_log("The token id does not exist"); echo json_encode(array( 'errcode' => 2, 'errmsg' => "tokenId error", )); die; } if ($this->verifyHeroTokenId($tokenId)){ error_log("An existing token"); echo json_encode(array( 'errcode' => 1, 'errmsg' => "tokenId error", )); die; } $heroMeta = Hero::get($itemMeta['id']); $this->internalAddHero($tokenId,$heroMeta,$quality); echo json_encode(array( 'errcode' => 0, 'errmsg' => "callback success", )); } private function verifyNftTokenId($tokenId){ $row = SqlHelper::ormSelectOne( myself()->_getMarketMysql(''), 't_nft', array( 'token_id' => $tokenId ) ); if ($row){ return true; } return false; } private function verifyHeroTokenId($tokenId){ $row = SqlHelper::ormSelectOne( myself()->_getMysql(''), 't_hero', array( 'token_id' => $tokenId ) ); if ($row){ return true; } return false; } private function internalAddHero($tokenId,$heroMeta,$quality) { $randAttr = $this->_getRandAttr($heroMeta['battleAttribute'],$quality) ; $attribute = \mt\EconomyAttribute::getAttribute($heroMeta['economyAttribute'], $quality); $fieldsKv = array( 'hero_id' => $heroMeta['id'], 'token_id' => $tokenId, 'hero_lv' => 1, 'quality' => $quality, 'state' => 0, 'skill_lv1' => 1, 'skill_lv2' => 1, 'rand_attr' => json_encode($randAttr), 'wealth_attr' => json_encode($attribute), 'lock_type' => 0, 'unlock_time' => 0, 'unlock_trade_time' => 0, 'activate' => 1, 'activate_time' => myself()->_getNowTime(), 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime(), 'seal_type' => HeroModel::SEAL_STATE, 'unseal_time' => myself()->_getNowTime(), ); SqlHelper::insert( myself()->_getMysql(''), 't_hero', $fieldsKv ); } private function _getRandAttr($heroId,$quality){ $attr = array(); $basicMeta = BattleBasicAttribute::get($heroId); if ($basicMeta) { for ($i=1;$i<=$quality;$i++){ $randMeta = BattleRandAttribute::getByWeight($basicMeta['randomAttribute_Default'],$i); if ($randMeta) { $result = BattleRandAttribute::getRandAttr($randMeta); if ($result){ foreach ($result as $value){ array_push($attr,$value); } } } } } return $attr; } }