This commit is contained in:
aozhiwei 2024-06-07 16:56:44 +08:00
parent 9df5e6ef19
commit 40a372b75b
2 changed files with 97 additions and 19 deletions

View File

@ -13,6 +13,7 @@ class Transfer extends BaseEventProcess {
const to = returnValues['to'];
const tokenId = returnValues['tokenId'];
await this.mustBeMint(to, tokenId, bcconst.BC_NFT_HERO);
if (bcutils.isSysAddress(from)) {
const airDropMeta = metaFactory.getAirDrop(
tokenId,
@ -20,21 +21,11 @@ class Transfer extends BaseEventProcess {
bcconst.BC_NFT_HERO,
this.getContractAddress());
if (airDropMeta) {
const exists = await this.exists721Nft(tokenId, this.getContractAddress());
if (!exists) {
await this.mint721Nft(
to,
tokenId,
airDropMeta['item_id'],
bcconst.BC_NFT_HERO,
this.getContractAddress(),
this.getBlockNumber()
);
}
await this.apiMint(to, tokenId, airDropMeta);
} else {
await this.ingameActivate(tokenId, bcconst.BC_NFT_HERO);
}
}
} else {
await this.add721NftRefresh
(
this.getNetId(),
@ -42,6 +33,7 @@ class Transfer extends BaseEventProcess {
this.getContractName(),
tokenId
);
}
await this.update721NftOwner(tokenId, this.getContractAddress(), to);
await this.markOk();
}

View File

@ -7,6 +7,8 @@ const config = require('j7/config');
const constant = require('common/constant');
const dbpool = require('common/dbpool');
const metaFactory = require('../../../metadata/factory');
const bchelper = require('common/bchelper');
const bcconst = require('common/bcconst');
let gSeqId = 1;
function genSeqId() {
@ -379,6 +381,90 @@ class BaseEventProcess {
}
}
async mustBeMint(to, tokenId, tokenType) {
const exists = await this.exists721Nft(tokenId, this.getContractAddress());
if (!exists) {
await this.mint721Nft(
to,
tokenId,
0,
tokenType,
this.getContractAddress(),
this.getBlockNumber()
);
}
}
async ingameActivate(tokenId, tokenType) {
const logHead = this.genLogHead(' ingameActivate ');
const tblName = bchelper.getNftTableName(tokenType);
if (!tblName) {
this.throwError(logHead + ' token_type error :' + tokenType);
return;
}
if (tokenType == bcconst.BC_NFT_HERO) {
await this.ingameActivateHero(tblName, tokenId, tokenType);
}
}
async ingameActivateHero(tblName, tokenId, tokenType) {
const logHead = this.genLogHead(' ingameActivateHero ');
{
const {err, row} = await this.gameDbConn(
'ormSelectOne',
tblName,
[
['active_token_id', tokenId],
]
);
if (err) {
this.throwError(logHead + err);
}
if (row) {
if (row['token_id'] == tokenId) {
return;
}
} else {
await this.addLog([
['type', 'ingameActivateHero'],
['subtype', 'active_token_id.notfound'],
['net_id', this.getNetId()],
['param1', tokenId],
['createtime', nowTime],
['modifytime', nowTime],
]);
}
}
const nowTime = utils.getUtcTime();
const {err} = await this.gameDbConn(
'update',
tblName,
[
['active_token_id', tokenId],
],
[
['token_id', tokenId],
['activate', 1],
['activate_time', nowTime],
['modifytime', nowTime],
['!account_id', () => {
return 'null';
}],
]
);
if (err) {
this.throwError(logHead + err);
}
}
async addLog(fieldsKv) {
const {err} = await this.bcEventDbConn(
'insert',
't_log',
fieldsKv
);
}
}
module.exports = BaseEventProcess;