Помощь - Поиск - Пользователи - Календарь
Полная версия: Статус шарда
Город Мастеров > РЕДАКТОРЫ > Шарды рунета
_kaa_
В свое время Kristin@ переделала проверку статуса шарда с C# на php.
Как оказалось народ до сих пор ищет подобные скрипты, поэтому кину сюда вариант.

status.php
CODE

<?php
$address='udp://viking.r86.net';   #Адрес шарда
$port=5121;                        #и порт.
$refresh=120;                      # время обновления в секундах

###################################################
###################################################

$status = fsockopen($address,$port);
socket_set_timeout($status, 000010);
fwrite($status,"\x42\x4E\x58\x49\x00\x14");
$_data = fread($status, 5000);
if($_data)
{
  $_data = explode(ord("|"),substr($_data,10,2));
  $_data = unpack("C*", $_data[0]);
  $result['players']     = $_data[1];
  $result['players_max'] = $_data[2];
  $result['color']    = '#078F07';
}
else
{
  $result['players']     = 0;
  $result['players_max'] = 0;
  $result['color']    = '#FF2020';
}
fclose($status);

###################################################
echo "<meta http-equiv='REFRESH' content='$refresh'>";
echo '<body style="background: '.$result['color'].';margin: 0 0 0 0; padding 0 0 0 0;font-family: Arial;font-size: 12px;color:yellow">';
echo $address.":".$port."[";
echo $result['players'].'/'.$result['players_max']."]";

?>



Удобно расположить на рабочем столе, с помощью ActiveDesktop.

Пример работы тут
baskan
yes.gif За пример наш адресс взяли, хотя мы и искали yes.gif
Вот вопросик у меня тут появился, как это мне впихнуть в блок PHPNuke black eye.gif , ибо там ведь html код нужен.
_kaa_
QUOTE (baskan @ Sep 20 2005, 15:10)
yes.gif За пример наш адресс взяли, хотя мы и искали yes.gif
Вот вопросик у меня тут появился, как это мне впихнуть в блок PHPNuke black eye.gif , ибо там ведь html код нужен.

если оно называется _php_nuke, то php наверняка держит. бери скрипт и ищи куда прикрутить.

ps. учите матчасть. phpnuke поставили - имейте совесть, хотя бы книжку по php почитайте.
helvene
Что я вижу:
QUOTE
udp://viking.r86.net:5121[0/0]


Все правильно?
Если да, то есть ли решения, наподобие этого, не требующие php?
_kaa_
В скрипте все описанно, если хотите можете реализовать подобное фактически на любом языке, который позволяет организовать tcpip подключение.
По сути это простое подсоединение по udp протоколу к нужному серверу, запись нескольких байт и чтение ответа. В ответе и содержится количество игроков.
Сам скрипт возращает ответ в визуальной форме, т.е. цветом бакграунда. Зеленый - работает, красный - висит. Цифры - так, заодно, раз уж прочитали их все равно.
2_advanced
*цензура покусала*

Такие вещи даже в слух говорить нельзя! smile.gif
RiPPeR
/Offtop
Халявный хостинг с доступом во внешний инет не найдете? А то на моем халявном такие вещи думаю не будут работать, а попробовать хочется.
baskan
holm.ru
RiPPeR
Там нету вшених коннектов, уже нашел другой smile.gif
[MoF]Darth_Nick
http://nwvault.ign.com/View.php?view=other.Detail&id=322

тут вроде чо та похожее
alMuk
CODE
#include <iostream>
#include "winsock2.h"

void main()
{
using namespace std;

WSADATA wsaData;
SOCKET SendSocket;
sockaddr_in Addr;
int Port = 5122;
char Buff[1024] = {0x42, 0x4E, 0x58, 0x49, 0x00, 0x14};
int BufLen = 1024;
int AddrSize = sizeof(Addr);

WSAStartup(MAKEWORD(2,2), &wsaData);

SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

Addr.sin_family = AF_INET;
Addr.sin_port = htons(Port);
Addr.sin_addr.s_addr = inet_addr("81.176.64.171");

sendto(SendSocket,
 Buff,
 BufLen,
 0,
 (SOCKADDR *) &Addr,
 sizeof(Addr));

recvfrom(SendSocket,
 Buff,
 BufLen,
 0,
 (SOCKADDR *)&Addr,
 &AddrSize);

cout << "Server Address: " << "81.176.64.171:" << Port << endl;

cout << "Players: " << (short)Buff[10]<< endl;
cout << "Players Max: " << (short)Buff[11] << endl;
   
closesocket(SendSocket);

WSACleanup();
return;
}

Вот аналогичный код на с++ (by me crazy.gif ), может кому-то будет интерестно, правда за пример взят другой шард drag.gif
Richard
Вобщем усовершенстовал код Каа.
Пример тут: http://nwn-yugra.r86.net/
И тут у меня возник вопрос. Можно ли с помощью аналогичных запросов ввести отображение персонажей на сервере? Я понимаю что классы\рассы\и тд это надо MySQL, а вот вывод типа акк | имя чара я считаю вполне реальным. Поправте меня если я неправ.
Balgarat
возможно т.к. такое было на экзисе...
[MoF]Darth_Nick
помойму(!) пакет о акках к клиенту не приходит(или я не заметил), а приходит только о чарах...но мне сделать не удалось(вернее влом было crazy.gif и потом подумал, что идея бредовая)
http://nwcustom.jino-net.ru/nwn_servers.php
больше помойму и не надо (основываясь на буржуйском скрипте) ...
Balgarat где ты это там увидел без БД о.О

З.Ы. я выше давал ссылку, там ф-ция реализована ParsePlayerList, только помойму не пашет
Richard
Да убогий этот буржуйский скрипт. Слишком много лажи. Я конечно не говорю что у меня супер пупер скрипт, но тем не менее статус и кол-во игроков отображено. А большего в принципе и не надо пока что.
Zirrex
Тоже пример отображения статуса сервера. Шард Амен.

Кстати, в чем убогость того скрипта, информацию, какую нужно для быстрого ознакомления, он отображает.
[MoF]Darth_Nick
много лишнего..
у тебя, по ссылке, первая строка - Array..массив в виде строки

mysql дает намного больше возможности..( ну думаю, это вы и без меня знаете smile.gif )
Zirrex
[MoF]Darth_Nick, может и лишнее, только ведь это не напрягает smile.gif Про массив знаю, все забываю убрать.

Кстати, если уж использовать программу мониторинг, то для этого дела очень хорошо подходит программа Hlsw. Конечно, она не отображает имена и тип пользователя на сервере, ибо эту опцию отключили, но всю остальную информацию выводит отлично.
kreon
Касаемо списка игроков, я видел вариант через базу данных.
А вообще, там надо просто пакеты отсылать аля клиент. Вон 2_advanced думаю вполне может описать процедуру логинья на сервере и запроса списка игроков biggrin.gif
Richard
2_адвансед блестни)
То что каким то макаром шауты НД видны на Кормире меня уже немного настораживает)))
2_advanced
списки все - через самопальный ЕЛК (проверялку чаров/акков)
через неделю покажу рабочий сабж

зы. а легче вобще сделать скриптами + NWNX и всю инфу пихать в БД
в 1.67 даже есть функция для получения портрета
Richard
Ну это все конечно хорошо. Только вот я несмог настроить на рабочий лад nwnx на FreeBSD. Может кто помочь с этим?
[MoF]Darth_Nick
в 1.66 можно плюгин юзать, чтобы портрет получить... готовый где-то видел
2_advanced
у меня бетка 1.67.. под нее уже все переделал
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.