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, ))){ 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; } $this->internalAddHero($tokenId,$itemId,$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,$itemId,$quality) { $randAttr = $this->_getRandAttr($itemId,$quality) ; $fieldsKv = array( 'hero_id' => $itemId, 'token_id' => $tokenId, 'hero_lv' => 1, 'quality' => 1, 'state' => 0, 'skill_lv1' => 1, 'skill_lv2' => 1, 'rand_attr' => json_encode($randAttr), 'lock_type' => 0, 'unlock_time' => 0, 'unlock_trade_time' => 0, 'activate' => 1, 'base_attr' => json_encode($randAttr), 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime() ); SqlHelper::insert( myself()->_getMysql(''), 't_hero', $fieldsKv ); } private function _getRandAttr($heroId,$quality){ $heroMeta = Hero::get($heroId); $baseAttr = Hero::getHeroAttr($heroMeta); $paramMeta = Parameter::getVal('quality',0); $attr = array(); if ($paramMeta){ $rate = explode('|',$paramMeta); foreach ($baseAttr as $value){ if (in_array($value['attr_id'],array(kHAT_Hp,kHAT_Atk,kHAT_Def))){ // $quality = self::_getAttrQuality($type); $minRate = $rate[$quality-1] * 100; $maxRate = $rate[$quality] * 100 - 1; if ($quality == 5){ $maxRate = $rate[$quality] * 100; } $finalRate = rand($minRate,$maxRate) / 100; if ( $value['attr_id'] == kHAT_Hp){ $attr_val = round($value['val'] * $finalRate,0); }else{ $attr_val = round($value['val'] * $finalRate,2); } array_push($attr,array( 'attr_id' => $value['attr_id'], 'val' => $attr_val, 'quality' => $quality, // 'rate' => $finalRate, ) ); } else { array_push($attr,array( 'attr_id' => $value['attr_id'], 'val' => $value['val'] , 'quality' => 0, ) ); } } } return $attr; } }