function CreateSigBatch($lastGeneratedSigId, $sigCount) { global $db, $sigUpdatedCount; $queryString = 'SELECT * FROM ' . DB_TABLE_PREFIX . "data WHERE sigId > {$lastGeneratedSigId} ORDER BY sigId LIMIT {$sigCount}"; $queryResult = $db->Query($queryString); if ($queryResult->num_rows == 0) { exit; } $lastSigId = 0; $debugOutput = ''; while ($userSig = $queryResult->fetch_assoc()) { if (IsTimeEnough()) { $isSigCreated = Sig::Create($userSig['sigId'], $userSig['playerId'], $userSig['bnetServerNum'], $userSig['playerAccount'], $userSig['sigBackgroundIndex'], $userSig['playerStatsIndex'], $userSig['lang'], $userSig['region'], $userSig['characterCode']); $debugOutput .= $userSig['sigId'] . "\n"; $sigUpdatedCount++; $lastSigId = $userSig['sigId']; } else { break; } } SaveNextNum($lastGeneratedSigId, $lastSigId, $debugOutput); }
<?php exit; require_once 'config.php'; require_once 'utils.php'; require_once 'sig.php'; // http://eu.battle.net/sc2/en/profile/248533/1/KageyamA/ // http://eu.battle.net/sc2/ru/profile/222461/1/RAZERiNSo/ // http://eu.battle.net/sc2/en/profile/1951456/1/Mdfst/ladder/29186 // http://eu.battle.net/sc2/en/profile/151411/2/SCIIAntonio/ // http://eu.battle.net/sc2/ru/profile/215861/2/Aaron/ // http://eu.battle.net/sc2/ru/profile/74373/2/BVOne/ // http://eu.battle.net/sc2/ru/profile/2175278/1/BRuǂMakka/ // http://eu.battle.net/sc2/en/profile/3391476/1/IlIlIlIlIlIl/ // http://sc2ranks.com $isSigCreated = Sig::Create('1', 74373, 2, 'BVOne', 13, 2, 'ru', 'EU', 293); // http://us.battle.net/sc2/en/profile/1644048/1/IAmTheWalrus/ //$isSigCreated = $sig->Create( '1', 1644048, 1, 'IAmTheWalrus', 130, 0, 'ru', 'US', 777 ); var_dump($isSigCreated); if ($isSigCreated) { echo '<img src="../1.png">'; } else { echo 'err'; } echo date('H:i', time());
if (!$sigId) { $isPlayerNew = true; $queryString = 'SELECT MAX(sigId) as maxSigId FROM ' . DB_TABLE_PREFIX . 'data'; $queryResult = $db->Query($queryString); if ($queryResult) { $row = $queryResult->fetch_assoc(); $sigId = $row['maxSigId'] + 1; } else { exit; } } if (!($playerId && $bnetServerNum && $playerAccount && $sigBackgroundIndex && isset($playerStatsIndex))) { exit('err'); } require_once 'sig.php'; $isSigCreated = Sig::Create($sigId, $playerId, $bnetServerNum, $playerAccount, $sigBackgroundIndex, $playerStatsIndex, $lang, $region, $characterCode); if ($isSigCreated) { // сохраняем параметры в базу для sigCron.php if ($isPlayerNew) { $queryString = "INSERT INTO " . DB_TABLE_PREFIX . "data\r\n\t\t\t( sigId, playerId, bnetServerNum, playerAccount, sigBackgroundIndex,\r\n\t\t\tplayerStatsIndex, lang, region, characterCode )\r\n\t\t\tvalues(\t'{$sigId}', '{$playerId}', '{$bnetServerNum}', '{$playerAccount}',\r\n\t\t\t'{$sigBackgroundIndex}', '{$playerStatsIndex}', '{$lang}', '{$region}', '{$characterCode}' )"; } else { $queryString = "UPDATE " . DB_TABLE_PREFIX . "data SET\r\n\t\t\tbnetServerNum='{$bnetServerNum}', playerAccount='{$playerAccount}',\r\n\t\t\tsigBackgroundIndex='{$sigBackgroundIndex}', playerStatsIndex='{$playerStatsIndex}',\r\n\t\t\tlang='{$lang}', region='{$region}', characterCode='{$characterCode}'\r\n\t\t\tWHERE sigId='{$sigId}'"; } $result = $db->Query($queryString); if ($result) { echo 'ok;' . $sigId; } else { exit('err'); } } else { exit('err');
/** * @param int $sigId * @param int $playerId * @param int $bnetServerNum * @param string $playerAccount * @param int $sigBackgroundIndex * @param int $playerStatsIndex * @param string $lang * @param string $region * @param int $characterCode * @return boolean */ public static function Create($sigId, $playerId, $bnetServerNum, $playerAccount, $sigBackgroundIndex = 1, $playerStatsIndex, $lang, $region, $characterCode) { // ник preg_match('/[^a-z0-9\\-ǂ]*/ui', $playerAccount, $match); if ($match[0]) { // с русскими символами $fontAccount = 'calibri.ttf'; } else { $fontAccount = 'eurostile_ext_med.otf'; } $fontAccount = SIG_BASEDIR . 'php/' . $fontAccount; // echo $playerAccount.' '.$fontAccount."\n"; // языки \ локали $locale['ru']['notRanked'] = ' НЕТ РЕЙТИНГА'; $locale['ru']['place'] = 'МЕСТО'; $locale['ru']['points'] = 'ОЧКИ'; $locale['ru']['region'] = 'РЕГИОН'; $locale['ru']['wins'] = 'ПОБЕД'; $locale['en']['notRanked'] = ' NOT YET RANKED'; $locale['en']['place'] = 'PLACE'; $locale['en']['points'] = 'POINTS'; $locale['en']['region'] = 'REGION'; $locale['en']['wins'] = 'WINS'; if (!($lang == 'ru' || $lang == 'en')) { $lang = 'ru'; } $bnetSubDomain = 'eu'; if ($region === 'US' || $region === 'KR') { $bnetSubDomain = strtolower($region); } elseif ($region === 0) { $region = false; } $sigPath = SIG_BASEDIR . $sigId . '.png'; require_once 'network.php'; $playerAccountUrl = urlencode($playerAccount); $relativePlayerAccountUrl = "/sc2/en/profile/{$playerId}/{$bnetServerNum}/{$playerAccountUrl}/"; $relativePlayerAccountUrlForRegExp = "/sc2/en/profile/{$playerId}/{$bnetServerNum}/{$playerAccount}/"; $data = Network::GetHTTPData("http://{$bnetSubDomain}.battle.net" . $relativePlayerAccountUrl . 'ladder/', 'id="portrait', 'class="module-right'); if (!$data) { return false; } switch ($playerStatsIndex) { case 0: $playerStatsType = '1v1'; break; case 1: $playerStatsType = '2v2'; break; case 2: $playerStatsType = '3v3'; break; case 3: $playerStatsType = '4v4'; break; default: $playerStatsType = '1v1'; break; } if ($characterCode) { $regionX = 133; } else { $regionX = 170; } if ($characterCode || $region) { $playerAccountY = 19; } else { $playerAccountY = 24; } // получаем число ачивок preg_match('/h3>([\\d]*)</si', $data, $match); $playerAchievements = $match[1]; // определяем координаты портрета персонажа if (preg_match("#portraits/([-\\d]+).jpg.*?'\\) ([-\\d]+)px ([-\\d]+)px no#si", $data, $match)) { // из какой заготовки будем брать $portraitImg = 'portraits-' . $match[1]; // координаты, откуда будем брать $portraitX = abs($match[2] * PORTRAIT_KOEFICENT); $portraitY = abs($match[3] * PORTRAIT_KOEFICENT); } else { SaveForDebug("portraitImg is empty, http://{$bnetSubDomain}.battle.net" . $relativePlayerAccountUrl . 'ladder/'); return FALSE; } if (preg_match('#<a class="league" href="([\\d]+)\\#current-rank">[\\w\\s]+<strong>' . $playerStatsType . '[\\w\\s]*</strong>.*?<a href="' . $relativePlayerAccountUrlForRegExp . '"[\\s]+class="race-([\\w]+)".*?Rank[\\s]+([\\d]+)#si', $data, $match)) { $currentRankUrl = $match[1]; // место $isPlayerHasRank = true; $playerRank = $locale[$lang]['place'] . ': ' . $match[3]; // раса $playerRace = $match[2]; } else { $playerStats = ' ' . $playerStatsType . $locale[$lang]['notRanked']; $leagueImg = 'none'; $isPlayerHasRank = false; $playerRace = 'random'; } if ($isPlayerHasRank) { $data = Network::GetHTTPData('http://' . $bnetSubDomain . '.battle.net' . $relativePlayerAccountUrl . 'ladder/' . $currentRankUrl, '<head.*>', 'id="current-rank".*?tr class="row2"'); if (!$data) { return false; } // лига if (preg_match_all('|<title>' . $playerStatsType . ' ([\\w]+) |si', $data, $match)) { $leagueImg = strtolower($match[1][0]); } else { $leagueImg = 'none'; } if (preg_match('|id="current-rank"(.*?)tr class|si', $data, $match)) { $data = $match[1]; if (preg_match_all('|<td class="align-center">([\\d]+)</td>|si', $data, $match)) { $playerPoints = $locale[$lang]['points'] . ': ' . $match[1][0]; $wins = $match[1][1]; if (isset($match[1][2])) { $lose = $match[1][2]; $playerStats = "{$wins} / {$lose}"; $playerWinRate = round($wins * 100 / ($wins + $lose)) . ' %'; } else { $playerStats = $locale[$lang]['wins'] . ': ' . $wins; } } } } $playerImgResource = imagecreatetruecolor(358, 68); // берем шаблон $templateImg = imagecreatefrompng(SIG_BASEDIR . 'img/sig/med_back_' . $sigBackgroundIndex . '.png'); // белый цвет по контуру становится прозрачным $transparentColor = imagecolorallocate($playerImgResource, 255, 255, 255); imagecolortransparent($playerImgResource, $transparentColor); // берем портрет $portrait = imagecreatefrompng(SIG_BASEDIR . 'img/sig/' . $portraitImg . '.png'); // лигу $league = imagecreatefrompng(SIG_BASEDIR . 'img/sig/leg_' . $leagueImg . '.png'); // расу $raceTemplateImg = imagecreatefrompng(SIG_BASEDIR . "img/sig/race_{$playerRace}.png"); // выбираем подходящий цвет текста и фон для bnetId list($textColor, $bnetIdTpl) = Sig::SelectTextColorAndBnetIdTplByBackgroundIndex($templateImg, $sigBackgroundIndex); // выводим все // первая строка, первый блок if (isset($playerRank)) { imagettftext($templateImg, TEXT_FONT_SIZE, 0, 101, 46, $textColor, FONT_STATS_RANK, $playerRank); } // первая строка, второй блок if (isset($playerPoints)) { imagettftext($templateImg, TEXT_FONT_SIZE, 0, 162, 46, $textColor, FONT_STATS_RANK, $playerPoints); } // вторая строка, первый блок if (isset($playerStats)) { imagettftext($templateImg, TEXT_FONT_SIZE, 0, 101, 57, $textColor, FONT_STATS_RANK, $playerStats); } // вторая строка, второй блок if (isset($playerWinRate)) { imagettftext($templateImg, TEXT_FONT_SIZE, 0, 162, 57, $textColor, FONT_STATS_RANK, $playerWinRate); } $box_nik = imagettfbbox(11, 0, $fontAccount, $playerAccount); // 237 - 12 - $box_nik[ 2 ] = 225 - $box_nik[ 2 ] imagettftext($templateImg, 11, 0, 223 - $box_nik[2], $playerAccountY, $textColor, $fontAccount, $playerAccount); if (isset($playerAchievements)) { imagettftext($templateImg, 9, 0, 302, 19, $textColor, FONT_ACHIEVEMENTS, $playerAchievements); } if (isset($playerStatsType)) { imagettftext($templateImg, 9, 0, 320, 51, $textColor, FONT_ACHIEVEMENTS, $playerStatsType); } if ($characterCode) { imagettftext($templateImg, 8, 0, 191, 31, $textColor, FONT_STATS_RANK, ' ID: ' . $characterCode); } if ($region) { imagettftext($templateImg, 8, 0, $regionX, 31, $textColor, FONT_STATS_RANK, $locale[$lang]['region'] . ': ' . $region); } imagecopyresampled($playerImgResource, $templateImg, 0, 0, 0, 0, 358, 68, imagesx($templateImg), imagesy($templateImg)); imagecopyresampled($playerImgResource, $portrait, 237, 12, $portraitX, $portraitY, 46, 46, 46, 46); imagecopyresampled($playerImgResource, $league, 292, 31, 0, 0, 26, 28, 26, 28); imagecopyresampled($playerImgResource, $raceTemplateImg, 219, 43, 0, 0, 18, 18, 18, 18); imagepng($playerImgResource, $sigPath); // не забываем освобождать за собой память imagedestroy($playerImgResource); imagedestroy($templateImg); imagedestroy($portrait); imagedestroy($league); imagedestroy($raceTemplateImg); return true; }