445 lines
14 KiB
PHP
445 lines
14 KiB
PHP
<?php
|
|
|
|
require_once('mt/Item.php');
|
|
require_once('mt/Currency.php');
|
|
require_once('mt/Hero.php');
|
|
require_once('mt/Parameter.php');
|
|
|
|
require_once('models/Nft.php');
|
|
require_once('models/Withdrawal.php');
|
|
require_once('models/Transfer.php');
|
|
require_once('models/UserWalletRecord.php');
|
|
require_once('models/NftUpEvent.php');
|
|
require_once('models/Hero.php');
|
|
require_once('models/Gun.php');
|
|
require_once('models/Chip.php');
|
|
require_once('models/DynData.php');
|
|
require_once('models/NftUpReceive.php');
|
|
require_once('models/Transaction.php');
|
|
|
|
require_once('phpcommon/bchelper.php');
|
|
|
|
use phpcommon\SqlHelper;
|
|
use models\Nft;
|
|
use models\Withdrawal;
|
|
use models\Transfer;
|
|
use models\UserWalletRecord;
|
|
use models\NftUpEvent;
|
|
use models\Hero;
|
|
use models\Gun;
|
|
use models\Chip;
|
|
use models\DynData;
|
|
use models\NftUpReceive;
|
|
use models\Transaction;
|
|
|
|
class CallbackController extends BaseController {
|
|
|
|
private function isTestMode()
|
|
{
|
|
return isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443 && SERVER_ENV == _TEST;
|
|
}
|
|
|
|
public function transfer()
|
|
{
|
|
$dir = getReqVal('dir', '');
|
|
$account = strtolower(getReqVal('account', ''));
|
|
$txHash = getReqVal('txhash', '');
|
|
$type = getReqVal('type', '');
|
|
$value = getReqVal('value', '0');
|
|
|
|
$gameId = 2006;
|
|
$channel = BC_CHANNEL;
|
|
$accountId = phpcommon\createAccountId($channel, $gameId, $account);
|
|
|
|
$conn = myself()->_getMysql($accountId);
|
|
if (UserWalletRecord::find($conn, $txHash)) {
|
|
myself()->_rspOk();
|
|
return;
|
|
}
|
|
UserWalletRecord::add($conn, $txHash, $dir, $account, $type, $value);
|
|
|
|
if (!in_array($dir, array(0, 1))){
|
|
myself()->_rspErr(1, '');
|
|
return;
|
|
}
|
|
|
|
if (!in_array($type, array(1, 2))){
|
|
myself()->_rspErr(2, '');
|
|
return;
|
|
}
|
|
if (strlen($value) <= 18){
|
|
myself()->_rspErr(4, '');
|
|
return;
|
|
}
|
|
$value = substr($value, 0, -18);
|
|
if ($value < 0 || empty($value)) {
|
|
myself()->_rspErr(3, '');
|
|
return;
|
|
}
|
|
|
|
$gold = 0;
|
|
$diamond = 0;
|
|
if ($type == 1) {
|
|
$gold = $value;
|
|
} else {
|
|
$diamond = $value;
|
|
}
|
|
if ($dir == 1) {
|
|
$gold = -$gold;
|
|
$diamond = -$diamond;
|
|
}
|
|
|
|
$userRow = SqlHelper::ormSelect(
|
|
$conn,
|
|
't_user',
|
|
array(
|
|
'account_id' => $accountId,
|
|
));
|
|
if ($userRow) {
|
|
SqlHelper::update(
|
|
$conn,
|
|
't_user',
|
|
array(
|
|
'account_id' => $accountId,
|
|
),
|
|
array(
|
|
'gold' => function() use($gold) {
|
|
return "CASE WHEN gold + ${gold} < 0 THEN 0 ELSE gold + ${gold} END";
|
|
},
|
|
'diamond' => function() use($diamond) {
|
|
return "CASE WHEN diamond + ${diamond} < 0 THEN 0 ELSE diamond + ${diamond} END";
|
|
},
|
|
));
|
|
} else {
|
|
SqlHelper::upsert(
|
|
$conn,
|
|
't_user_wallet_offline',
|
|
array(
|
|
'account_id' => $accountId,
|
|
),
|
|
array(
|
|
'gold' => function() use($gold) {
|
|
return "CASE WHEN gold + ${gold} < 0 THEN 0 ELSE gold + ${gold} END";
|
|
},
|
|
'diamond' => function() use($diamond) {
|
|
return "CASE WHEN diamond + ${diamond} < 0 THEN 0 ELSE diamond + ${diamond} END";
|
|
},
|
|
'modifytime' => myself()->_getNowTime()
|
|
),
|
|
array(
|
|
'account_id' => $accountId,
|
|
'gold' => $gold,
|
|
'diamond' => $diamond,
|
|
'createtime' => myself()->_getNowTime(),
|
|
'modifytime' => myself()->_getNowTime()
|
|
));
|
|
}
|
|
UserWalletRecord::update($conn,
|
|
$txHash,
|
|
array(
|
|
'state' => 1,
|
|
'modifytime' => myself()->_getNowTime()
|
|
));
|
|
|
|
myself()->_rspOk();
|
|
}
|
|
|
|
public function heroUpgradeQuality(){
|
|
$transId = getReqVal('trans_id', '0');
|
|
$tokenId1 = getReqVal('token_id1', '0');
|
|
$tokenId2 = getReqVal('token_id2', '0');
|
|
if (!$transId || !$tokenId1){
|
|
myself()->_rspErr(1, 'param error');
|
|
return;
|
|
}
|
|
$tranDb= Transaction::findEx($transId);
|
|
if (!$tranDb){
|
|
myself()->_rspErr(1, 'param error');
|
|
return;
|
|
}
|
|
if (NftUpEvent::find($transId)){
|
|
myself()->_rspOk();
|
|
return;
|
|
}
|
|
if (! $tranDb['result']){
|
|
NftUpEvent::add(
|
|
array(
|
|
'trans_id' => $transId,
|
|
'token_id' => $tokenId1,
|
|
'value' => 1,
|
|
'createtime' => myself()->_getNowTime(),
|
|
'modifytime' => myself()->_getNowTime(),
|
|
)
|
|
);
|
|
myself()->_rspOk();
|
|
return;
|
|
}
|
|
$heroDb = SqlHelper::ormSelectOne(
|
|
myself()->_getMysql(''),
|
|
't_hero',
|
|
array(
|
|
'token_id' => $tokenId1,
|
|
)
|
|
);
|
|
if ( !$heroDb ){
|
|
myself()->_rspErr(1, 'token_id param error');
|
|
return;
|
|
}
|
|
$nextQualityMeta = mt\HeroQuality::getByQuality($heroDb['quality']+1);
|
|
if (! $nextQualityMeta){
|
|
myself()->_rspOk();
|
|
return;
|
|
}
|
|
|
|
$heroLucky = \services\FormulaService::Hero_Advanced_Lucky_Value($heroDb['quality']);
|
|
$nextHeroLucky = \services\FormulaService::Hero_Advanced_Lucky_Value($heroDb['quality']+1);
|
|
$heroTili = \services\FormulaService::Hero_NFT_Maximum_Physical_Strength($heroDb['quality'],$heroLucky);
|
|
$nextHeroTili = \services\FormulaService::Hero_NFT_Maximum_Physical_Strength($heroDb['quality']+1,$nextHeroLucky);
|
|
SqlHelper::update
|
|
( myself()->_getMysql(''),
|
|
't_hero',
|
|
array(
|
|
'token_id' => $tokenId1,
|
|
),
|
|
array(
|
|
'hero_tili' => $heroDb['hero_tili']+($nextHeroTili-$heroTili),
|
|
'skill_points' => $heroDb['skill_points'] + $nextQualityMeta['skill_point'],
|
|
'quality' => $heroDb['quality']+1,
|
|
'advanced_count' => $heroDb['advanced_count'] + 1,
|
|
// 'lock_type' => 0,
|
|
// 'unlock_time' => 0,
|
|
'labour' => 0,
|
|
)
|
|
);
|
|
NftUpEvent::add(
|
|
array(
|
|
'trans_id' => $transId,
|
|
'token_id' => $tokenId1,
|
|
'value' => 1,
|
|
'createtime' => myself()->_getNowTime(),
|
|
'modifytime' => myself()->_getNowTime(),
|
|
)
|
|
);
|
|
$param = array(
|
|
'trans_id'=>$transId,
|
|
'token_id1'=>$tokenId1,
|
|
'token_id2'=>$tokenId2,
|
|
'token_type'=>1,
|
|
);
|
|
NftUpReceive::upsert($tranDb['account_id'],$param);
|
|
|
|
if ($heroDb['quality'] + 1 > $this->_getDynDataV($tranDb['account_id'],TN_HERO_MAX_QUALITY, 0)) {
|
|
$this->_setDynDataV($tranDb['account_id'],TN_HERO_MAX_QUALITY, 0, $heroDb['quality'] + 1);
|
|
}
|
|
myself()->_rspOk();
|
|
}
|
|
|
|
public function gunUpgradeQuality(){
|
|
$transId = getReqVal('trans_id', '0');
|
|
$tokenId1 = getReqVal('token_id1', '0');
|
|
$tokenId2 = getReqVal('token_id2', '0');
|
|
if (!$transId || !$tokenId1){
|
|
myself()->_rspErr(1, 'param error');
|
|
return;
|
|
}
|
|
$tranDb= Transaction::findEx($transId);
|
|
if (!$tranDb){
|
|
myself()->_rspErr(1, 'param error');
|
|
return;
|
|
}
|
|
if (NftUpEvent::find($transId)){
|
|
myself()->_rspOk();
|
|
return;
|
|
}
|
|
if (! $tranDb['result']){
|
|
NftUpEvent::add(
|
|
array(
|
|
'trans_id' => $transId,
|
|
'token_id' => $tokenId1,
|
|
'value' => 1,
|
|
'createtime' => myself()->_getNowTime(),
|
|
'modifytime' => myself()->_getNowTime(),
|
|
)
|
|
);
|
|
myself()->_rspOk();
|
|
return;
|
|
}
|
|
$gunDb =SqlHelper::ormSelectOne(
|
|
myself()->_getMysql($tranDb['account_id']),
|
|
't_gun',
|
|
array(
|
|
'token_id' => $tokenId1,
|
|
)
|
|
);
|
|
if ( !$gunDb ){
|
|
myself()->_rspErr(1, 'token_id param error');
|
|
return;
|
|
}
|
|
$nextQualityMeta = mt\GunQuality::getByQuality($gunDb['quality']+1);
|
|
if (!$nextQualityMeta) {
|
|
myself()->_rspOk();
|
|
return;
|
|
}
|
|
$gunLucky = \services\FormulaService::Weapon_Advanced_Lucky_Value($gunDb['quality']);
|
|
$nextGunLucky = \services\FormulaService::Weapon_Advanced_Lucky_Value($gunDb['quality']+1);
|
|
$durability = \services\FormulaService::Weapon_NFT_Maximum_Durability($gunDb['quality'],$gunLucky);
|
|
$nextDurability = \services\FormulaService::Weapon_NFT_Maximum_Durability($gunDb['quality']+1,$nextGunLucky);
|
|
|
|
SqlHelper::update
|
|
(myself()->_getMysql($tranDb['account_id']),
|
|
't_gun',
|
|
array(
|
|
'token_id' => $tokenId1,
|
|
),
|
|
array(
|
|
'durability' => $gunDb['durability']+($nextDurability-$durability),
|
|
'quality' => $gunDb['quality']+1,
|
|
// 'lock_type' => 0,
|
|
// 'unlock_time' => 0,
|
|
'labour' => 0,
|
|
)
|
|
);
|
|
NftUpEvent::add(
|
|
array(
|
|
'trans_id' => $transId,
|
|
'token_id' => $tokenId1,
|
|
'value' => 1,
|
|
'createtime' => myself()->_getNowTime(),
|
|
'modifytime' => myself()->_getNowTime(),
|
|
)
|
|
);
|
|
$param = array(
|
|
'trans_id'=>$transId,
|
|
'token_id1'=>$tokenId1,
|
|
'token_id2'=>$tokenId2,
|
|
'token_type'=>2,
|
|
);
|
|
NftUpReceive::upsert($tranDb['account_id'],$param);
|
|
if ($gunDb['quality'] + 1 > $this->_getDynDataV($tranDb['account_id'],TN_GUN_MAX_QUALITY, 0)) {
|
|
$this->_setDynDataV($tranDb['account_id'],TN_GUN_MAX_QUALITY, 0, $gunDb['quality'] + 1);
|
|
}
|
|
myself()->_rspOk();
|
|
}
|
|
|
|
public function chipUpgradeGrade(){
|
|
$transId = getReqVal('trans_id', '0');
|
|
$tokenId = getReqVal('token_id', '0');
|
|
if (!$transId || !$tokenId){
|
|
myself()->_rspErr(1, 'param error');
|
|
return;
|
|
}
|
|
|
|
$tranDb= Transaction::findEx($transId);
|
|
if (!$tranDb){
|
|
myself()->_rspErr(1, 'param error');
|
|
return;
|
|
}
|
|
if (NftUpEvent::find($transId)){
|
|
myself()->_rspOk();
|
|
return;
|
|
}
|
|
if (! $tranDb['result']){
|
|
NftUpEvent::add(
|
|
array(
|
|
'trans_id' => $transId,
|
|
'token_id' => $tokenId,
|
|
'value' => 1,
|
|
'createtime' => myself()->_getNowTime(),
|
|
'modifytime' => myself()->_getNowTime(),
|
|
)
|
|
);
|
|
myself()->_rspOk();
|
|
return;
|
|
}
|
|
|
|
$chipDb = SqlHelper::ormSelectOne(
|
|
myself()->_getMysql($tranDb['account_id']),
|
|
't_chip',
|
|
array(
|
|
'token_id' => $tokenId
|
|
)
|
|
);
|
|
if ( !$chipDb ){
|
|
myself()->_rspErr(1, 'token_id param error');
|
|
return;
|
|
}
|
|
$nextGrade = $chipDb['chip_grade']+1;
|
|
if ($nextGrade > 15){
|
|
myself()->_rspErr(1, 'Chip Lv upper limit');
|
|
return;
|
|
}
|
|
if ($nextGrade == 3 || $nextGrade == 5){
|
|
Chip::updateRandAttr($tranDb['account_id'],$chipDb);
|
|
}
|
|
$lucky = ltrim(\services\FormulaService::getChipLuckyValue($nextGrade),'-') ;
|
|
if ($nextGrade>=5){
|
|
$fieldsKv = array(
|
|
'lucky_temporary'=>$lucky,
|
|
'chip_grade'=>$nextGrade,
|
|
'supper_state'=>1,
|
|
'modifytime' => myself()->_getNowTime()
|
|
);
|
|
}else{
|
|
$fieldsKv = array(
|
|
'lucky_temporary'=>$lucky,
|
|
'chip_grade'=>$nextGrade,
|
|
'modifytime' => myself()->_getNowTime()
|
|
);
|
|
}
|
|
SqlHelper::update
|
|
(myself()->_getMysql($tranDb['account_id']),
|
|
't_chip',
|
|
array(
|
|
'token_id' => $tokenId,
|
|
),
|
|
$fieldsKv
|
|
);
|
|
NftUpEvent::add(
|
|
array(
|
|
'trans_id' => $transId,
|
|
'token_id' => $tokenId,
|
|
'value' => 1,
|
|
'createtime' => myself()->_getNowTime(),
|
|
'modifytime' => myself()->_getNowTime(),
|
|
)
|
|
);
|
|
myself()->_rspOk();
|
|
}
|
|
|
|
private function _getDynDataV($accountId,$x, $y, $val = 0){
|
|
SqlHelper::ormSelectOne(
|
|
myself()->_getMysql($accountId),
|
|
't_dyndata',
|
|
array(
|
|
'account_id' => $accountId,
|
|
'x' => $x,
|
|
'y' => $y,
|
|
)
|
|
);
|
|
}
|
|
private function _setDynDataV($accountId,$x, $y, $val = 0){
|
|
SqlHelper::upsert
|
|
(myself()->_getMysql($accountId),
|
|
't_dyndata',
|
|
array(
|
|
'account_id' => $accountId,
|
|
'x' => $x,
|
|
'y' => $y
|
|
),
|
|
array(
|
|
'val' => $val,
|
|
'modifytime' => myself()->_getNowTime()
|
|
),
|
|
array(
|
|
'account_id' => $accountId,
|
|
'x' => $x,
|
|
'y' => $y,
|
|
'val' => $val,
|
|
'createtime' => myself()->_getNowTime(),
|
|
'modifytime' => myself()->_getNowTime()
|
|
)
|
|
);
|
|
}
|
|
|
|
}
|