_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'); $tokenId = getReqVal('token_id', '0'); $quality = getReqVal('quality', '0'); if (!$transId || !$tokenId || !$quality){ myself()->_rspErr(1, 'param error'); return; } if (NftUpEvent::find($transId)){ myself()->_rspOk(); return; } $heroDb = Hero::findByTokenId($tokenId); if ( !$heroDb ){ myself()->_rspErr(1, 'token_id param error'); return; } $nextQualityMeta = mt\HeroQuality::getByQuality($quality); if (! $nextQualityMeta){ $this->_rspErr(1, 'quality is full'); return; } // $idx = 0; // $found = false; // for ($i = 0; $i < kMaxHeroUpQualityNum; ++$i) { // $upHeroUniId = DynData::getV(TN_HERO_QUALITY_UP, $i); // if ($upHeroUniId == $heroDb['idx']) { // $idx = $i; // $found = true; // break; // } // } // if (!$found) { // $this->_rspErr(1, 'hero does not exist'); // return; // } // DynData::setV(TN_HERO_QUALITY_UP, $idx, 0); // DynData::setV(TN_HERO_QUALITY_UP, (int)$idx + 1000, 0); $heroLucky = \services\FormulaService::Hero_Advanced_Lucky_Value($heroDb['quality']); $nextHeroLucky = \services\FormulaService::Hero_Advanced_Lucky_Value($quality); $heroTili = \services\FormulaService::Hero_NFT_Maximum_Physical_Strength($heroDb['quality'],$heroLucky); $nextHeroTili = \services\FormulaService::Hero_NFT_Maximum_Physical_Strength($quality,$nextHeroLucky); Hero::updateByTokenId($tokenId, array( 'hero_tili' => $heroDb['hero_tili']+($nextHeroTili-$heroTili), 'skill_points' => $heroDb['skill_points'] + $nextQualityMeta['skill_point'], 'quality' => $quality, 'advanced_count' => $heroDb['advanced_count'] + 1, 'lock_type' => 0, 'unlock_time' => 0, 'labour' => 0, ) ); NftUpEvent::add( array( 'trans_id' => $transId, 'token_id' => $tokenId, 'value' => 1, 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime(), ) ); if ($quality > myself()->_getV(TN_HERO_MAX_QUALITY, 0)) { myself()->_setV(TN_HERO_MAX_QUALITY, 0, $quality); } $rankActivityService = new services\RankActivityService(); $rankActivityService->heroUpgradeQuality($quality); myself()->_rspOk(); } public function gunUpgradeQuality(){ $transId = getReqVal('trans_id', '0'); $tokenId = getReqVal('token_id', '0'); $quality = getReqVal('quality', '0'); if (!$transId || !$tokenId || !$quality){ myself()->_rspErr(1, 'param error'); return; } if (NftUpEvent::find($transId)){ myself()->_rspOk(); return; } $gunDb = Gun::findByTokenId($tokenId); if ( !$gunDb ){ myself()->_rspErr(1, 'token_id param error'); return; } $nextQualityMeta = mt\GunQuality::getByQuality($quality); if (!$nextQualityMeta) { $this->_rspErr(1, 'quality is full'); return; } // $idx = 0; // $found = false; // for ($i = 0; $i < kMaxHeroUpQualityNum; ++$i) { // $upGunUniId = DynData::getV(TN_GUN_QUALITY_UP, $i); // if ($upGunUniId == $gunDb['idx']) { // $idx = $i; // $found = true; // break; // } // } // if (!$found) { // $this->_rspErr(1, 'gun does not exist'); // return; // } // // DynData::setV(TN_GUN_QUALITY_UP, $idx, 0); // DynData::setV(TN_GUN_QUALITY_UP, (int)$idx + 1000, 0); $gunLucky = \services\FormulaService::Weapon_Advanced_Lucky_Value($gunDb['quality']); $nextGunLucky = \services\FormulaService::Weapon_Advanced_Lucky_Value($quality); $durability = \services\FormulaService::Weapon_NFT_Maximum_Durability($gunDb['quality'],$gunLucky); $nextDurability = \services\FormulaService::Weapon_NFT_Maximum_Durability($quality,$nextGunLucky); Gun::updateByTokenId($tokenId, array( 'durability' => $gunDb['durability']+($nextDurability-$durability), 'quality' => $quality, 'lock_type' => 0, 'unlock_time' => 0, 'labour' => 0, ) ); NftUpEvent::add( array( 'trans_id' => $transId, 'token_id' => $tokenId, 'value' => 1, 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime(), ) ); if ($quality > myself()->_getV(TN_GUN_MAX_QUALITY, 0)) { myself()->_setV(TN_GUN_MAX_QUALITY, 0, $quality); } $rankActivityService = new services\RankActivityService(); $rankActivityService->heroUpgradeQuality($quality); myself()->_rspOk(); } }