Esempio n. 1
0
File: sigCron.php Progetto: shrz/sig
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);
}
Esempio n. 2
0
File: sigTest.php Progetto: shrz/sig
<?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());
Esempio n. 3
0
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');
Esempio n. 4
0
File: sig.php Progetto: shrz/sig
 /**
  * @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;
 }