_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() ) ); } }