173 lines
4.8 KiB
PHP
173 lines
4.8 KiB
PHP
<?php
|
|
|
|
|
|
namespace services;
|
|
|
|
require_once ('services/callback/common/SignatureService.php');
|
|
require_once('mt/Item.php');
|
|
require_once('mt/Hero.php');
|
|
require_once('mt/Parameter.php');
|
|
require_once('mt/BattleBasicAttribute.php');
|
|
require_once('mt/BattleRandAttribute.php');
|
|
require_once('models/Hero.php');
|
|
|
|
use mt\BattleBasicAttribute;
|
|
use mt\BattleRandAttribute;
|
|
use mt\Item;
|
|
use mt\Hero;
|
|
use mt\Parameter;
|
|
use phpcommon\SqlHelper;
|
|
use models\Hero as HeroModel;
|
|
|
|
class MintNftHero
|
|
{
|
|
const TYPE_1 = 1;
|
|
const TYPE_2 = 2;
|
|
const TYPE_3 = 3;
|
|
const TYPE_4 = 4;
|
|
const TYPE_5 = 5;
|
|
const TYPE_6 = 6;
|
|
public function process()
|
|
{
|
|
SignatureService::web3ServiceCheck();
|
|
$address = getReqVal('address', '');
|
|
$tokenId = getReqVal('tokenId', '');
|
|
if (!$tokenId){
|
|
echo json_encode(array(
|
|
'errcode' => 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;
|
|
}
|
|
|
|
}
|