Неплохо было бы повесить статус Хантера с онлайном как на сайте. Для этого можно не лезть в базу на сервер, а всего лишь взять цифру со страницы http://asterios.tm/index.php
Предлагаю такой алгоритм: на странице http://asterios.tm/index.php 1) найти последовательность hunter.png 2) затем найти ближайшее после неё font color= 3) записать всё что до символа > (это статус сервера: green или red) 4) и после символа > записать всё до последовательности </font (это или цифры онлайна или надпись <b>off</b> ) 5) Записанные статус и онлайн кинуть в какой-то файл.
Кто может намутить такой скрипт или найти того, кто шарит? )
Для игры на втором х55 (или кача твинков) регайте аккаунт по ссылке. Заканчивать не больше одной профы в неделю с одного компьютера (проверка по HWID), чтобы дали бонус.
// Edit IPs below $loginIP = ""; // login server $gameIP = ""; // game server // Edit Ports if needed $loginPORT= "2106"; $gamePORT= "7777";
// No need to edit below unless you want to skin it $flogin = fsockopen ("$loginIP",$loginPORT, $errno, $errstr, 1); if(empty($loginIP) || empty($gameIP){$loginIP="No IP selected";$gameIP="No IP Selected"; if ($flogin){print "Login Server [$loginIP:$loginPORT]"; else {print "Login Server [$loginIP:$loginPORT]";
$fgame = fsockopen ("$gameIP",$gamePORT, $errno, $errstr, 1); if ($fgame){print "Game Server [$gameIP:$gamePORT]"; else {print "Game Server [$gameIP:$gamePORT]"; ?>
Для отображения статуса на странице сайта код:
Теперь создаём файл status.php и в него вставьте вот этот скрипт: Код:
$check = @fsockopen ("85.28.206.38","7777",$errno, $errstr,1); // измените 85.28.206.38 на IP, или URL где стоит ваш game server и порт 7777 на тот, который используете if($check) { header('content-type: image/png'); readfile('online.png'); // графический файл отображения статуса "Включен" } else { header('content-type: image/png'); readfile('offline.png'); // графический файл отображения статуса "Выключен"
}
Я бы изменил мир, но Бог не дает исходники...
Сообщение отредактировал MaxFriday - Суббота, 21.05.2011, 20:57
MaxFriday, сумничал, возми печеньку. да не про статус вопрос, а про число онлайна
и $dblogin" "$dbpass ты где возьмешь? как сказал админ, не хватит возраста вселенной подобрать
Для игры на втором х55 (или кача твинков) регайте аккаунт по ссылке. Заканчивать не больше одной профы в неделю с одного компьютера (проверка по HWID), чтобы дали бонус.
Atandil тут надо знать ип с портом мускуля... это уже сложнее... просто картинку копирнуть не катит) ща порою
з.ы. печенку взял)
Добавлено (21.05.2011, 21:10) --------------------------------------------- Цифры об онлайне берутся из базы, доступ к которой имеют только администраторы.
далее, писать скрипт который будет тырить с астериоса инфу об онлайне я буду до конца света))) тупо лень.
короче надо либо постоянно обновляющийся скрипт, либо никак. т.к. ты сам заметил, что лог с пассом к дб мы не получим) искать этот скрипт я нехочу =\ ушёл гамать
Я бы изменил мир, но Бог не дает исходники...
Сообщение отредактировал MaxFriday - Суббота, 21.05.2011, 20:58
Дата: Воскресенье, 22.05.2011, 11:33 | Сообщение # 7
Группа: Администраторы
Сообщений: 629
Статус: Offline
Вот, пока составил такой набросок скрипта:
Code
<!-- Выуживание онлайна сервера не из базы, а со страницы сайта --> <script language="JavaScript">
function online(way, nameserver) { // Поиск онлайна на странице сайта aster=new Array(); //страница сайта из строк - то, что нужно ещё как-то создать n=0; // номер строки страницы сайта
// 1) найти последовательность hunter.png starttxt=nameserver+'.png';
flag=false; while (flag=false) { if (aster[n].indexOf(starttxt)>0) {flag=true} else {n++}}; //нашли строку n с текстом hunter.png
// 2) затем найти ближайшую после неё строку со Status flag=false; while (flag=false) { if (aster[n].indexOf('Status')>0) {flag=true} else {n++}}; //нашли строку n с онлайном сервера
// 3) Определить статус (после 'font color=' статус сервера: green или red)
startstatus=aster[n].indexOf('font color=')+11; if (aster[n].charAt(startstatus)='r') {serveronline='Off'; return serveronline;} //Если сервер офф, то на этом определение онлайна прекращается
// 5) Записанные статус и онлайн напечатать. document.write("Hunter х55 online: "+online('asterios.tm/index.php','hunter'))
</script>
Осталось для его работы создать этот самый массив строк aster=new Array(); со страницы asterios.tm/index.php Для игры на втором х55 (или кача твинков) регайте аккаунт по ссылке. Заканчивать не больше одной профы в неделю с одного компьютера (проверка по HWID), чтобы дали бонус.
<html><head><title>Поиск онлайна со страницы</title></head> <body>Пробуем анализировать страничку сайта<br>Нужная нам строка онлайна Хантера вручную найдена как строка 108-я:<br><br>
<?php // Получить содержимое файла в виде массива. Получение HTML-кода с удаленного сервера. $aster = file('http://www.asterios.tm/index.php'); echo "$aster[108]"; ?> <br>И даже добавим 109-ю строчку<br> <?php echo "$aster[109]"; ?>
</body></html>
Для игры на втором х55 (или кача твинков) регайте аккаунт по ссылке. Заканчивать не больше одной профы в неделю с одного компьютера (проверка по HWID), чтобы дали бонус.
<html><head><title>Поиск онлайна со страницы</title></head><body> Нужная нам строка онлайна Хантера вручную найдена как строка 108-я: <br><br> <?php $aster = file('http://www.asterios.tm/index.php');
// Функция strip_tags() удаляет из строки все теги HTML и РНР, оставляя в ней только текст // string strip_tags(string строка [, string разрешенные_тerи]) $start = strip_tags($aster[108]);
// Функция strstr() возвращает часть строки, начинающуюся с первого вхождения заданной подстроки. $start2 = strstr($start, "Status:"); //убрали непонятные символы символы в начале строки
// Функция substr() возвращает часть строки, начинающуюся с заданной начальной позиции и имеющую заданную длину. // string substr(string строка, int начало [, int длина]) $on_hunt = substr($start2, 7); echo "Вот и нашли, что онлайн Хантера х55 равен $on_hunt"; ?> </body></html>
Ещё можно поизвращаться, чтобы и сама 108-я строчка находилась не вручную, но это уже мелочи.
Главная задача теперь как дать запрос со страницы юкоза на сайт, где этот скрипт будет работать (например, будет скрипт по ссылке http: //бесплатный_домен.белеберда.ru/x55online.php ) Для игры на втором х55 (или кача твинков) регайте аккаунт по ссылке. Заканчивать не больше одной профы в неделю с одного компьютера (проверка по HWID), чтобы дали бонус.
В самом коде же написано, что это ПХП, хотя в самом коде можно было не писать, оставляя вместо <?php ... ?> только <? ... ?>. Для игры на втором х55 (или кача твинков) регайте аккаунт по ссылке. Заканчивать не больше одной профы в неделю с одного компьютера (проверка по HWID), чтобы дали бонус.
Даже вот нашёл как результат скрипта php переделать в рисунок, чтобы его можно было вcтавить на страницу uCoz в виде <img src="http://какой-то_домен/online_hunter.php">
Code
<?php $aster = file('http://www.asterios.tm/index.php'); $start = strip_tags($aster[108]); //удалили из строки все теги HTML, оставив в ней только текст $start2 = strstr($start, "Status:"); //убрали непонятные символы символы в начале строки // Функция substr() возвращает часть строки, начинающуюся с заданной начальной позиции $on_hunt = substr($start2, 7);//вот и получили онлайн
$img="fon.png"; $pic = ImageCreateFrompng($img); //открываем рисунок в формате PNG $color=ImageColorAllocate($pic, 0, 255, 0); //получаем идентификатор цвета $x = 0; $y = 15;//координаты текста на картинке ImageTTFtext($pic, 12, 0, $x, $y, $color, "times.ttf", "$on_hunt");// вывели текст на изображение
Header("Content-type: image/png"); //указываем на тип передаваемых данных imagepng($pic);//наконец вывели сгенерированную картинку ImageDestroy($pic); //освобождаем память и закрываем изображение ?>
Только надо будет залить в папку скрипта рисуночек fon.png примерно размером 60x30 пикселей и шрифт times.ttf (можно скопировать из папки windows/fonts)
Осталась проблема с хостом, где это всё будет выполняться. На домашнем сервере, где я всё это тестил и отлаживал, работает. А вот бесплатные хосты ограничивают область доступа и не дают выполнить строку $aster = file('http://www.asterios.tm/index.php');
Поэтому снова надо что-то думать, как-то крутиться, искать решение — помогайте Для игры на втором х55 (или кача твинков) регайте аккаунт по ссылке. Заканчивать не больше одной профы в неделю с одного компьютера (проверка по HWID), чтобы дали бонус.
Состояние дел: пока работает только поиск онлайна (и оффтрейдеров в следующей строке):
Code
<html><head><title>Онлайн х55 Hunter</title></head> <body> <br>Открыли страницу http://asterios.tm/index.php <br><br> <?php // Получить содержимое файла в виде массива. Получение HTML-кода с удаленного сервера. $aster = file('http://asterios.tm/index.php');
//strpos -- Возвращает позицию первого вхождения подстроки //int strpos ( string haystack, string needle [, int offset] )
//$nh - номер строки начала нужного блока for ($nh=0; $nh<999; $nh++) { $pos_hunt = strpos($aster[$nh], "hunter.png"); if ($pos_hunt > 0) break; } //$ns - номер строки статуса for ($ns=$nh; $ns<999; $ns++) { $pos_hunt = strpos($aster[$ns], "Status"); if ($pos_hunt > 0) break; }
// Функция strip_tags() удаляет из строки все теги HTML и РНР, оставляя в ней только текст // string strip_tags(string строка [, string разрешенные_тerи]) $not_html = strip_tags($aster[$ns]);
// Функция strstr() возвращает часть строки, начинающуюся с первого вхождения заданной подстроки. $status = strstr($not_html, "Status:"); //убрали непонятные символы в начале строки
// Функция substr() возвращает часть строки, начинающуюся с заданной начальной позиции и имеющую заданную длину. // string substr(string строка, int начало [, int длина]) $on_hunt = substr($status, 7); echo"И нашли, что онлайн Хантера х55 равен "; ?> <b><font color=green><?echo"$on_hunt";?></font></b> <br>Из них написали .offline <? //$off_tr - число оффтрейдеров из строки следующей за онлайном $off_tr=substr(strstr(strip_tags($aster[$ns+1]), "Off-trade:"), 10); echo"$off_tr"; ?> <br><br><br><br> </body> </html>
Теперь определиться бы со вставкой результата на сайт юкоза. Ищем, где будет работать и создание картинки из текста. Для игры на втором х55 (или кача твинков) регайте аккаунт по ссылке. Заканчивать не больше одной профы в неделю с одного компьютера (проверка по HWID), чтобы дали бонус.
Ага, на том же хосте работает и формирование картинки из текста.
Вот готовый скрипт:
Code
<?php // Получить содержимое файла в виде массива. Получение HTML-кода с удаленного сервера. $aster = file('http://asterios.tm/index.php');
//strpos -- Возвращает позицию первого вхождения подстроки //int strpos ( string haystack, string needle [, int offset] )
//$nh - номер строки начала нужного блока for ($nh=0; $nh<999; $nh++) { $pos_hunt = strpos($aster[$nh], "hunter.png"); if ($pos_hunt > 0) break; } //$ns - номер строки статуса for ($ns=$nh; $ns<999; $ns++) { $pos_hunt = strpos($aster[$ns], "Status"); if ($pos_hunt > 0) break; }
// Функция strip_tags() удаляет из строки все теги HTML и РНР, оставляя в ней только текст // string strip_tags(string строка [, string разрешенные_тerи]) $not_html = strip_tags($aster[$ns]);
// Функция strstr() возвращает часть строки, начинающуюся с первого вхождения заданной подстроки. $status = strstr($not_html, "Status:"); //убрали непонятные символы в начале строки
// Функция substr() возвращает часть строки, начинающуюся с заданной начальной позиции и имеющую заданную длину. // string substr(string строка, int начало [, int длина]) $on_hunt = substr($status, 7);
$image = imagecreatetruecolor(40,20) // создаём изображение... or die('Cannot create image'); // ...или прерываем работу скрипта в случае ошибки imagefill($image, 0, 0, 0xFFFCD0); // зальем фон цветом $w = 3; //гориз. $h = 15; //верт. imagettftext( $image, // картинка, на которую накладываем текст 12, // размер шрифта 0, // угол наклона шрифта $w, $h, // координаты, соответствующие левому нижнему углу первого символа 0x00DD00, // цвет шрифта "times.ttf",// имя ttf-файла "$on_hunt" // нкладываемый текст ); header('Content-type: image/png'); // устанавливаем тип документа - "изображение в формате PNG". imagepng($image);//выводим сгенерированную картинку в формате PNG imagedestroy($image); // освобождаем память, выделенную для изображения ?>
Её-то и вставляем куда нужно тегом рисунка <img src="http://apo.u-gu.ru/img_onl_hunt.php">
Вроде вопрос решён, останется доработать три момента: 1. изменять цвет онлайна в зависимости от on/off сервера (это просто)
Строчку
Code
imagettftext( $image, // картинка, на которую накладываем текст 12, // размер шрифта 0, // угол наклона шрифта $w, $h, // координаты, соответствующие левому нижнему углу первого символа 0x00DD00, // цвет шрифта "times.ttf",// имя ttf-файла "$on_hunt" // нкладываемый текст );
заменяем теперь на
Code
if ($on_hunt == "off") {$color = "0xCB0000";} else {$color = "0x00CB00";} imagettftext( $image, // картинка, на которую накладываем текст 12, // размер шрифта 0, // угол наклона шрифта $w, $h, // координаты, соответствующие левому нижнему углу первого символа $color, // цвет шрифта "timesbd.ttf",// имя ttf-файла "$on_hunt" // накладываемый текст );
Вот, теперь off будет красненьким, а цифры онлайна зелёным.
2. изменять ширину картинки в зависимости от ширины текста (тоже не сложно)
$coord = imagettfbbox( 12, // размер шрифта 0, // угол наклона шрифта (0 = не наклоняем) "timesbd.ttf", // имя шрифта, а если точнее, ttf-файла "$on_hunt" // собственно, текст ); /* Функция imagettfbbox возвращает нам массив из восьми элементов, содержащий всевозможные координаты минимального прямоугольника, в который можно вписать данный текст. Индексы массива удобно обозначить на схеме в виде координат (x,y):
По этой схеме легко вычислить ширину и высоту текста: $width = $coord[2] - $coord[0]; $height = $coord[1] - $coord[7]; */ $width = $coord[2] - $coord[0] + 6; //добавим поля
Теперь будет формироваться картинка (с полями 3pt) шириной с надпись статуса (сколько занимают 0-4 символа)
3. для определения онлайна обращаться к сайту астериоса только, если от времени последнего формирования картинки прошло, скажем 30 секунд, чтобы предотвратить возможный бан. (вот тут ещё надо посоображать) Для игры на втором х55 (или кача твинков) регайте аккаунт по ссылке. Заканчивать не больше одной профы в неделю с одного компьютера (проверка по HWID), чтобы дали бонус.
<?php $s=$_GET["serv"]; if ($s=="ast") $block="tx.gif"; // Asterios if ($s=="hunt")$block="hunter.png";// Hunter x55 if ($s=="pr") $block="prime.png"; // Prime x1 if ($s=="emb") $block="ember.png"; // Ember x10
// Получить содержимое файла в виде массива. Получение HTML-кода с удаленного сервера. $aster = file('http://asterios.tm/index.php');
//strpos -- Возвращает позицию первого вхождения подстроки //int strpos ( string haystack, string needle [, int offset] )
//$nh - номер строки начала нужного блока for ($nh=0; $nh<999; $nh++) { $pos_hunt = strpos($aster[$nh], $block); if ($pos_hunt > 0) break;} //$ns - номер строки статуса for ($ns=$nh; $ns<999; $ns++) { $pos_hunt = strpos($aster[$ns], "Status"); if ($pos_hunt > 0) break;}
// Функция strip_tags() удаляет из строки все теги HTML и РНР, оставляя в ней только текст // string strip_tags(string строка [, string разрешенные_тerи]) $not_html = strip_tags($aster[$ns]);
// Функция strstr() возвращает часть строки, начинающуюся с первого вхождения заданной подстроки. $status = strstr($not_html, "Status:"); //убрали непонятные символы в начале строки
// Функция substr() возвращает часть строки, начинающуюся с заданной начальной позиции и имеющую заданную длину. // string substr(string строка, int начало [, int длина]) $on_hunt = substr($status, 7);
$coord = imagettfbbox( 12, // размер шрифта 0, // угол наклона шрифта (0 = не наклоняем) "timesbd.ttf", // имя шрифта, а если точнее, ttf-файла "$on_hunt" // собственно, текст ); /* Функция imagettfbbox возвращает нам массив из восьми элементов, содержащий всевозможные координаты минимального прямоугольника, в который можно вписать данный текст. Индексы массива удобно обозначить на схеме в виде координат (x,y):
По этой схеме легко вычислить ширину и высоту текста: $width = $coord[2] - $coord[0]; $height = $coord[1] - $coord[7]; */ $width = $coord[2] - $coord[0] + 4; //добавим поля
$image = imagecreatetruecolor($width,11) // создаём изображение... or die('Cannot create image'); // ...или прерываем работу скрипта в случае ошибки imagefill($image, 0, 0, 0xFFFFFF); // зальем фон (а то по умолчанию чёрный) $w = 2; //гориз. отступ для поля $h = 11; // $green = imagecolorallocate($image, 0, 0x9F, 0); $red = imagecolorallocate($image, 0xBB, 0, 0); $pos_off = strpos($aster[$ns], "off"); // ищем есть ли в строке статуса вместо числа надпись off if ($pos_off > 0) {$color = $red;} else {$color = $green;} imagettftext( $image, // картинка, на которую накладываем текст 12, // размер шрифта 0, // угол наклона шрифта $w, $h, // координаты, соответствующие левому нижнему углу первого символа $color, // цвет шрифта "timesbd.ttf",// имя ttf-файла "$on_hunt" // накладываемый текст );
header('Content-type: image/png'); // устанавливаем тип документа - "изображение в формате PNG". imagepng($image); //выводим сгенерированную картинку в формате PNG imagedestroy($image); // освобождаем память, выделенную для изображения ?>
Напомню, файл timesbd.ttf должен лежать в той же папке, что и файл скрипта (его туда можно залить, скопировав со своего компа из cистемной папки C:\Windows\Fonts ). Для игры на втором х55 (или кача твинков) регайте аккаунт по ссылке. Заканчивать не больше одной профы в неделю с одного компьютера (проверка по HWID), чтобы дали бонус.
На этом можно тему закрыть. Для игры на втором х55 (или кача твинков) регайте аккаунт по ссылке. Заканчивать не больше одной профы в неделю с одного компьютера (проверка по HWID), чтобы дали бонус.