Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Город Мастеров _ Шарды рунета _ Статус шарда

Автор: _kaa_ Sep 20 2005, 15:03

В свое время 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.

Пример работы http://kaa.mhost.ru/status.php

Автор: baskan Sep 20 2005, 15:10

yes.gif За пример наш адресс взяли, хотя мы и искали yes.gif
Вот вопросик у меня тут появился, как это мне впихнуть в блок PHPNuke black eye.gif , ибо там ведь html код нужен.

Автор: _kaa_ Sep 20 2005, 15:19

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

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

ps. учите матчасть. phpnuke поставили - имейте совесть, хотя бы книжку по php почитайте.

Автор: helvene Sep 20 2005, 16:17

Что я вижу:

QUOTE
udp://viking.r86.net:5121[0/0]


Все правильно?
Если да, то есть ли решения, наподобие этого, не требующие php?

Автор: _kaa_ Sep 20 2005, 16:44

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

Автор: 2_advanced Sep 20 2005, 17:27

*цензура покусала*

Такие вещи даже в слух говорить нельзя! smile.gif

Автор: RiPPeR Sep 21 2005, 12:35

/Offtop
Халявный хостинг с доступом во внешний инет не найдете? А то на моем халявном такие вещи думаю не будут работать, а попробовать хочется.

Автор: baskan Sep 21 2005, 15:15

holm.ru

Автор: RiPPeR Sep 21 2005, 18:17

Там нету вшених коннектов, уже нашел другой smile.gif

Автор: [MoF]Darth_Nick Sep 23 2005, 10:48

http://nwvault.ign.com/View.php?view=other.Detail&id=322

тут вроде чо та похожее

Автор: alMuk Dec 28 2005, 01:30

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 Jan 4 2006, 13:44

Вобщем усовершенстовал код Каа.
Пример тут: http://nwn-yugra.r86.net/
И тут у меня возник вопрос. Можно ли с помощью аналогичных запросов ввести отображение персонажей на сервере? Я понимаю что классы\рассы\и тд это надо MySQL, а вот вывод типа акк | имя чара я считаю вполне реальным. Поправте меня если я неправ.

Автор: Balgarat Jan 4 2006, 14:25

возможно т.к. такое было на экзисе...

Автор: [MoF]Darth_Nick Jan 4 2006, 14:27

помойму(!) пакет о акках к клиенту не приходит(или я не заметил), а приходит только о чарах...но мне сделать не удалось(вернее влом было crazy.gif и потом подумал, что идея бредовая)
http://nwcustom.jino-net.ru/nwn_servers.php
больше помойму и не надо (основываясь на буржуйском скрипте) ...
Balgarat где ты это там увидел без БД о.О

З.Ы. я выше давал ссылку, там ф-ция реализована ParsePlayerList, только помойму не пашет

Автор: Richard Jan 4 2006, 14:59

Да убогий этот буржуйский скрипт. Слишком много лажи. Я конечно не говорю что у меня супер пупер скрипт, но тем не менее статус и кол-во игроков отображено. А большего в принципе и не надо пока что.

Автор: Zirrex Feb 24 2006, 03:46

Тоже пример отображения статуса сервера. Шард http://nwn.fireground.ru/?legends=99.

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

Автор: [MoF]Darth_Nick Feb 24 2006, 06:06

много лишнего..
у тебя, по ссылке, первая строка - Array..массив в виде строки

mysql дает намного больше возможности..( ну думаю, это вы и без меня знаете smile.gif )

Автор: Zirrex Feb 24 2006, 13:24

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

Кстати, если уж использовать программу мониторинг, то для этого дела очень хорошо подходит программа http://www.hlsw.de/. Конечно, она не отображает имена и тип пользователя на сервере, ибо эту опцию отключили, но всю остальную информацию выводит отлично.

Автор: kreon Apr 1 2006, 21:20

Касаемо списка игроков, я видел вариант через базу данных.
А вообще, там надо просто пакеты отсылать аля клиент. Вон 2_advanced думаю вполне может описать процедуру логинья на сервере и запроса списка игроков biggrin.gif

Автор: Richard Apr 1 2006, 21:28

2_адвансед блестни)
То что каким то макаром шауты НД видны на Кормире меня уже немного настораживает)))

Автор: 2_advanced Apr 2 2006, 05:05

списки все - через самопальный ЕЛК (проверялку чаров/акков)
через неделю покажу рабочий сабж

зы. а легче вобще сделать скриптами + NWNX и всю инфу пихать в БД
в 1.67 даже есть функция для получения портрета

Автор: Richard Apr 2 2006, 09:02

Ну это все конечно хорошо. Только вот я несмог настроить на рабочий лад nwnx на FreeBSD. Может кто помочь с этим?

Автор: [MoF]Darth_Nick Apr 2 2006, 11:22

в 1.66 можно плюгин юзать, чтобы портрет получить... готовый где-то видел

Автор: 2_advanced Apr 2 2006, 16:34

у меня бетка 1.67.. под нее уже все переделал

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)