1
This commit is contained in:
commit
a7f65163af
@ -88,8 +88,9 @@ class BaseAuthedController extends BaseController {
|
||||
// }
|
||||
// }
|
||||
if (SERVER_ENV == _ONLINE) {
|
||||
//phpcommon\sendError(1001, 'session expiration');
|
||||
//die();
|
||||
phpcommon\sendError(1001, 'session expiration');
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$this->accountId = getReqVal('account_id', '');
|
||||
$this->sessionId = getReqVal('session_id', '');
|
||||
|
@ -124,6 +124,8 @@ class BlockChainController extends BaseAuthedController {
|
||||
switch ($type) {
|
||||
case 1:
|
||||
{
|
||||
myself()->_rspErr(1, 'server internal error');
|
||||
return;
|
||||
$heroDb = Hero::find($uniid);
|
||||
if (!$heroDb) {
|
||||
myself()->_rspErr(1, 'hero not found');
|
||||
@ -145,7 +147,7 @@ class BlockChainController extends BaseAuthedController {
|
||||
myself()->_getNowTime(),
|
||||
myself()->_getAddress()
|
||||
);
|
||||
Hero::safeUpdateTokenId($heroDb['hero_uniid'], $tokenId);
|
||||
Hero::safeUpdateTokenId(myself()->_getAccountId(), $heroDb['hero_uniid'], $tokenId);
|
||||
$heroDb = Hero::find($uniid);
|
||||
if (!$heroDb) {
|
||||
myself()->_rspErr(1, 'hero not found');
|
||||
|
110
webapp/controller/OutAppMintController.class.php
Normal file
110
webapp/controller/OutAppMintController.class.php
Normal file
@ -0,0 +1,110 @@
|
||||
<?php
|
||||
use phpcommon\SqlHelper;
|
||||
require_once('models/Nft.php');
|
||||
require_once('models/User.php');
|
||||
require_once('models/Hero.php');
|
||||
require_once('models/BuyRecord.php');
|
||||
require_once('services/NftService.php');
|
||||
require_once('mt/NftDesc.php');
|
||||
require_once('mt/Hero.php');
|
||||
require_once('mt/EconomyAttribute.php');
|
||||
|
||||
use models\Nft;
|
||||
use models\User;
|
||||
use models\Hero;
|
||||
use models\BuyRecord;
|
||||
|
||||
class OutAppMintController extends BaseController {
|
||||
|
||||
public function mintHero()
|
||||
{
|
||||
error_log(json_encode($_REQUEST));
|
||||
$accountId = getReqVal('account_id', '');
|
||||
//$accountAddress = User::findUserAddress($accountId);
|
||||
//$accountAddress = '0x0c6c7399f1b6b19e96950ef294685bfd0dc46434';
|
||||
$accountAddress = getReqVal('account_address', '');
|
||||
$toAddress = getReqVal('to_address', '');
|
||||
$uniid = getReqVal('uniid', 0);
|
||||
error_log(json_encode(array(
|
||||
'accoutn_id' => $accountId,
|
||||
'uuid' => $uniid
|
||||
)));
|
||||
$heroDb = Hero::findByAccountIdEx($accountId, $uniid);
|
||||
if (!$heroDb) {
|
||||
myself()->_rspErr(1, 'hero not found');
|
||||
return;
|
||||
}
|
||||
/*
|
||||
if (!$heroDb['seal_type']) {
|
||||
myself()->_rspErr(1, 'hero no seal');
|
||||
return;
|
||||
}*/
|
||||
$isMint = true;
|
||||
$tokenId = $heroDb['token_id'];
|
||||
if ($heroDb['token_id'] && $heroDb['activate']) {
|
||||
myself()->_rspErr(1, 'hero already on chain');
|
||||
return;
|
||||
$isMint = false;
|
||||
} else if (empty($tokenId) ){
|
||||
$tokenId = BuyRecord::genOrderId
|
||||
(
|
||||
GAME_ID,
|
||||
phpcommon\BC_FUNC_CREATION,
|
||||
myself()->_getNowTime(),
|
||||
$accountAddress
|
||||
);
|
||||
Hero::safeUpdateTokenId($accountId, $heroDb['idx'], $tokenId);
|
||||
$heroDb = Hero::findByAccountIdEx($accountId, $uniid);
|
||||
if (!$heroDb) {
|
||||
myself()->_rspErr(1, 'hero not found');
|
||||
return;
|
||||
}
|
||||
if ($heroDb['token_id'] != $tokenId) {
|
||||
myself()->_rspErr(500, 'server internal error');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$params = array(
|
||||
'c' => 'BcService',
|
||||
'a' => 'mintHero',
|
||||
'account_id' => $accountId,
|
||||
'account_address' => $accountAddress,
|
||||
'token_ids' => $tokenId,
|
||||
'nft_address' => NORMAL_HERO_CONTRACT_ADDRESS,
|
||||
'to_address' => $toAddress,
|
||||
'net_id' => NET_ID
|
||||
);
|
||||
error_log(json_encode($params));
|
||||
{
|
||||
$url = self::getWeb3ServiceUrl();
|
||||
$response = '';
|
||||
if (!phpcommon\HttpClient::get
|
||||
($url,
|
||||
$params,
|
||||
$response)) {
|
||||
myself()->_rspErr(500, 'server internal error');
|
||||
die();
|
||||
return;
|
||||
}
|
||||
error_log($response);
|
||||
$rspObj = json_decode($response, true);
|
||||
if ($rspObj['errcode'] == 0) {
|
||||
myself()->_rspData(array(
|
||||
'trans_id' => '',
|
||||
'trans_req' => $rspObj['trans_req']
|
||||
));
|
||||
} else {
|
||||
myself()->_rspErr(500, 'server internal error');
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static function getWeb3ServiceUrl()
|
||||
{
|
||||
$web3ServiceCluster = require_once('../config/web3service.cluster.php');
|
||||
return $web3ServiceCluster[rand() % count($web3ServiceCluster)];
|
||||
}
|
||||
|
||||
}
|
@ -442,4 +442,65 @@ class OutAppNftController extends BaseController {
|
||||
return $quality;
|
||||
}
|
||||
|
||||
public function getHeroList()
|
||||
{
|
||||
$accountId = getReqVal('account_id', '');
|
||||
$rows = SqlHelper::ormSelect(
|
||||
myself()->_getMysql($accountId),
|
||||
't_hero',
|
||||
array(
|
||||
'account_id' => $accountId,
|
||||
)
|
||||
);
|
||||
$rspData = array(
|
||||
'rows' => array()
|
||||
);
|
||||
foreach ($rows as $row) {
|
||||
$info = array(
|
||||
'uniid' => '',
|
||||
'net_id' => 0,
|
||||
'contract_address' => '',
|
||||
'token_id' => '',
|
||||
'owner_address' => '',
|
||||
'meta_url' => '',
|
||||
'name' => '',
|
||||
'item_id' => 0,
|
||||
'type' => 0,
|
||||
'image' => '',
|
||||
'on_sale' => 0,
|
||||
'detail' => array()
|
||||
);
|
||||
$heroDb = $row;
|
||||
$info['uniid'] = $heroDb['idx'];
|
||||
$heroAttrs = emptyReplace(json_decode($heroDb['wealth_attr'], true), array());
|
||||
$heroResult = \mt\EconomyAttribute::getAttrValue($heroAttrs);
|
||||
$wealth = $heroResult['wealth'];
|
||||
$wealth_rate = $heroResult['wealth_rate'];
|
||||
$lucky = $heroResult['lucky'];
|
||||
$lucky_rate = $heroResult['lucky_rate'];
|
||||
$heroAbility = Hero::abilityInfo($heroDb);
|
||||
$heroMeta = \mt\Hero::get($heroDb['hero_id']);
|
||||
if ($heroMeta) {
|
||||
$itemMeta = \mt\Item::get($heroDb['hero_id']);
|
||||
$heroAtteMeta = \mt\EconomyAttribute::findByGrade($itemMeta['relationship'],$heroDb['quality']);
|
||||
//$info['meta_url'] = NFT_META_URL . '/hero/meta/' . $nftDb['net_id'] . '/' . $nftDb['token_id'];
|
||||
$info['name'] = $heroMeta['name'];
|
||||
$info['item_id'] = $heroMeta['id'];
|
||||
$info['type'] = Nft::HERO_TYPE;
|
||||
$info['image'] = 'https://res2.counterfire.games/nft/meta/' . $heroMeta['id'] . '_' . $this->getRealHeroQuality($heroDb) . '.gif';
|
||||
$info['detail']['quality'] = $this->getRealHeroQuality($heroDb);
|
||||
$info['detail']['max_mining_days'] = $heroAtteMeta['validTime'];
|
||||
$info['detail']['wealth'] = floor($wealth * (1+$wealth_rate));
|
||||
$info['detail']['lucky'] = floor($lucky * (1+$lucky_rate));
|
||||
$info['detail']['hp'] = $heroAbility['hp'];
|
||||
$info['detail']['atk'] = $heroAbility['attack'];
|
||||
$info['detail']['def'] = $heroAbility['defence'];
|
||||
$info['detail']['block'] = $heroAbility['block'];
|
||||
$info['detail']['crit'] = $heroAbility['critical'];
|
||||
}
|
||||
array_push($rspData['rows'], $info);
|
||||
}
|
||||
myself()->_rspData($rspData);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -72,6 +72,22 @@ class Hero extends BaseModel {
|
||||
return self::internalFind($accountId, User::findUserAddress($accountId), $heroUniId);
|
||||
}
|
||||
|
||||
public static function findByAccountIdEx($accountId, $heroUniId)
|
||||
{
|
||||
$row = SqlHelper::ormSelectOne(
|
||||
myself()->_getMysql($accountId),
|
||||
't_hero',
|
||||
array(
|
||||
'idx' => $heroUniId,
|
||||
'account_id' => $accountId,
|
||||
)
|
||||
);
|
||||
if ($row) {
|
||||
$row['hero_uniid'] = $row['idx'];
|
||||
}
|
||||
return $row;
|
||||
}
|
||||
|
||||
public static function findByTokenId($tokenId)
|
||||
{
|
||||
$row = SqlHelper::ormSelectOne(
|
||||
@ -673,19 +689,18 @@ class Hero extends BaseModel {
|
||||
}
|
||||
}
|
||||
|
||||
public static function safeUpdateTokenId($heroUniId, $tokenId)
|
||||
public static function safeUpdateTokenId($accountId, $heroUniId, $tokenId)
|
||||
{
|
||||
if (self::find($heroUniId)) {
|
||||
myself()->_getSelfMysql()->execScript(
|
||||
myself()->_getMysql($accountId)->execScript(
|
||||
'UPDATE t_hero SET token_id=:token_id ' .
|
||||
'WHERE idx=:idx AND token_id IS NULL;',
|
||||
'WHERE idx=:idx AND account_id=:account_id AND token_id IS NULL;',
|
||||
array(
|
||||
':idx' => $heroUniId,
|
||||
':account_id' => $accountId,
|
||||
':token_id' => $tokenId,
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public static function updateByTokenId($tokenId, $fieldsKv)
|
||||
{
|
||||
|
@ -28,6 +28,7 @@ class Nft extends BaseModel
|
||||
const EXPLORER_TYPE = 9; //Explorer
|
||||
const CANDY_TYPE = 10; //CANDY
|
||||
const GOLD_BULLION_TYPE = 11; //金砖
|
||||
const GCARD_HERO_TYPE = 12; //游戏内合成的nft英雄
|
||||
const RING_TYPE = 19; //戒指
|
||||
const AVATAR_TYPE = 30; //装饰
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user