Форумы на Наша-Life
Home user CP  
Календарь событий Найти других пользователей Часто задаваемые Вопросы Поиск  
Автор
Тема
Создать Новую Тему    Ответить
Plotnick
(Senior Member)

Зарегистрирован: Aug 2005
Проживает: Russian Federation/Sankt-Petersburg
Написал: 246 сообщений

Оценка: 8 Votes 8 чел.

Сетевые команды, обмен данными с сервером
Сообщение #1096156
Вопрос №1

Имеется ли возможность запрограммировать сервер на прием каких-то кастомных команд извне?

Например: требуется написать удаленное приложение, которое управляло бы погодой на карте. Приложение должно установить связь с сервером и отправлять ему команды. Например: запустить дождь/снег и т.д.

Вопрос №2

Возможно ли установить с сервером двустороннюю связь?

Например: та же реализация кастомных команд, но работающая в две стороны. Чтобы не только внешнее приложение, знающее IP и порт сервера могло к нему обращаться, но и чтобы сервер мог зафиксировать это приложение и отправлять ему собственные уведомления о происходящем на сервере.
"Нет ни одной избитой темы, которую нельзя было бы избить еще раз". (С)
Old Post 20-02-2014 08:54
Plotnick отсутствует Посмотреть данные 'Plotnick' Отправить Приватное Сообщение для 'Plotnick' Найти другие сообщения 'Plotnick' Добавить Plotnick в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Plotnick
(Senior Member)

Зарегистрирован: Aug 2005
Проживает: Russian Federation/Sankt-Petersburg
Написал: 246 сообщений

Оценка: 8 Votes 8 чел.

Сообщение #1096186
Вот пошарил, есть что-то похожее, но в одну сторону. То есть, эта фишка только для управления сервером годится.
Хотя есть какой-то респонз и можно добиться своего путём опросов.
"Нет ни одной избитой темы, которую нельзя было бы избить еще раз". (С)

Поправил Plotnick 20-02-2014 в 15:07

Old Post 20-02-2014 15:02
Plotnick отсутствует Посмотреть данные 'Plotnick' Отправить Приватное Сообщение для 'Plotnick' Найти другие сообщения 'Plotnick' Добавить Plotnick в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Barnacle
(Монтировкой не бить!)

Зарегистрирован: Jun 2008
Проживает: Российская Федерация/Кемеровская обл./Юрга
Написал: 7106 сообщений

Оценка: 83 Votes 83 чел.

Developer Старожил Юморист 
Сообщение #1096188
Эта штука для управления выделенным сервером через клиент. Т.е. не через консоль сервера, а вбив его пароль в клиенте.

И в чём смысл отдельной программы, когда выделенный сервер - это и есть отдельная программа?

Также, не проще ли сделать всю логику каких-то событий прямо в самой карте, а не через отдельные команды?
Old Post 20-02-2014 15:13
Barnacle отсутствует Посмотреть данные 'Barnacle' Отправить Приватное Сообщение для 'Barnacle' Найти другие сообщения 'Barnacle' Добавить Barnacle в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
fake100
(Леплю из брашей ... Недорого)

Зарегистрирован: Jan 2009
Проживает: Россия/Санкт-Петербург
Написал: 528 сообщений

Оценка: 17 Votes 17 чел.

Developer 
Сообщение #1096197
Цитата:
Оригинальное сообщение от Barnacle
Также, не проще ли сделать всю логику каких-то событий прямо в самой карте, а не через отдельные команды?

К тому же уже на запущенной карте можно через консольные команды управлять энтитями и таким образом теоретически менять погоду или все что угодно.

Поправил fake100 20-02-2014 в 19:34

Old Post 20-02-2014 16:41
fake100 отсутствует Посмотреть данные 'fake100' Отправить Приватное Сообщение для 'fake100' Посетить домашнюю страничку fake100 Найти другие сообщения 'fake100' Добавить fake100 в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Plotnick
(Senior Member)

Зарегистрирован: Aug 2005
Проживает: Russian Federation/Sankt-Petersburg
Написал: 246 сообщений

Оценка: 8 Votes 8 чел.

Сообщение #1096212
Я попытался абстрагироваться от основной мысли, чтобы не перегружать задачу деталями. Возможно зря.
Мысль была в том, чтобы попытаться создать на сорс масштабный мир, пригодный для написания ММОРПГ. В единицах измерения сорса, максимальный размер карты примерно 10 кв. км. Это довольно скромно. Возможным решением задачи увеличения игрового пространства было бы разнесение игровых локаций по разным серверам. В принципе, сервер обрабатывающий одну карты является самодостаточным за исключением незначительных деталей. Например, смена дня и ночи на всех серверах должна происходить синхронно. Регулировать и распределять данные между всеми серверами могла бы специальная программа, некий корневой сервер.

Цитата:
Оригинальное сообщение от Barnacle
Эта штука для управления выделенным сервером через клиент. Т.е. не через консоль сервера, а вбив его пароль в клиенте.

И в чём смысл отдельной программы, когда выделенный сервер - это и есть отдельная программа?


Когда я играл в КС 1.1 - 1.6 была такая виндозная программка, которая отображала список серверов, количество игроков, карту и т.д. При помощи команды rcon_password можно было через эту программу кикать игроков, менять карту и прочее.
Иными словами, если есть протокол обмена данными, то он может быть воспроизведен каким угодно приложением, это не обязательно должна быть игра. Клиентом может быть что угодно.

Технически, задача видится так:

    Есть корневой сервер. Он занимается тем, синхронизирует сервера управляющие отдельными картами. Также он управляет подключением игроков и перенаправлением их на дочерние сервера.
    Есть ряд дочерних серверов. Каждый такой сервер управляет отдельной локацией. При переходе игрока на другую локацию сервер должен путем запроса к корневому серверу определить адрес новой локации и вынудить клиента выполнить команду "disconnect; connect <адрес>"
    Наконец клиент - это обычный клиент. Одно лишь только изменение в нем, это то, что по команде сервера он должен выполнить ту самую команду перехода на другой сервер.
Old Post 20-02-2014 19:31
Plotnick отсутствует Посмотреть данные 'Plotnick' Отправить Приватное Сообщение для 'Plotnick' Найти другие сообщения 'Plotnick' Добавить Plotnick в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
fake100
(Леплю из брашей ... Недорого)

Зарегистрирован: Jan 2009
Проживает: Россия/Санкт-Петербург
Написал: 528 сообщений

Оценка: 17 Votes 17 чел.

Developer 
Сообщение #1096214
Цитата:
Оригинальное сообщение от Plotnick
Я попытался абстрагироваться от основной мысли, чтобы не перегружать задачу деталями. Возможно зря.
Мысль была в том, чтобы попытаться создать на сорс масштабный мир, пригодный для написания ММОРПГ. В единицах измерения сорса, максимальный размер карты примерно 10 кв. км. Это довольно скромно. Возможным решением задачи увеличения игрового пространства было бы разнесение игровых локаций по разным серверам.

Имею дело с этим движком уже 5-6 лет, и имхо пытаться сделань на нем ММОРПГ - это чертовски плохая идея, это как пытаться проехать ралли Дакар на копейке жигулей.
Даже если взять максимальный размер карты, вы столкнетесь с невозможностью достаточно детализировать карту и одновременно с проблемой производительности, да и вообще не понятна вся эта морока с кучей серверов, когда есть другие движки где можно сделать огромную цельную карту.
Чтобы сделать все в удобоваримом виде на сорс вам придеться переписать половину движка, столкнуться с кучей странных проблем, плохим инструментарием и прочими прелестями, ну и времени вы потратите в 3 раза больше чем на каком нибудь новом движке.
Сорс это все таки про синглплеер и про мультиплеер на небольших картах.
Old Post 20-02-2014 19:46
fake100 отсутствует Посмотреть данные 'fake100' Отправить Приватное Сообщение для 'fake100' Посетить домашнюю страничку fake100 Найти другие сообщения 'fake100' Добавить fake100 в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
 
Barnacle
(Монтировкой не бить!)

Зарегистрирован: Jun 2008
Проживает: Российская Федерация/Кемеровская обл./Юрга
Написал: 7106 сообщений

Оценка: 83 Votes 83 чел.

Developer Старожил Юморист 
Сообщение #1096216
Так ты собрался делать ММО с открытым миром на Source? Мой тебе совет: лучше найди какой-нибудь двиг, который изначально создавался для ММО, а не непредназначенный для этого.
Есть только Vindictus, насколько я знаю. Но там и модифицировали его сильно. В публичной версии движка, боюсь, что ты тупо упрёшься в лимиты и закрытые части.
По-моему даже на CryEngine проще такое сделать.
Old Post 20-02-2014 20:04
Barnacle отсутствует Посмотреть данные 'Barnacle' Отправить Приватное Сообщение для 'Barnacle' Найти другие сообщения 'Barnacle' Добавить Barnacle в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Plotnick
(Senior Member)

Зарегистрирован: Aug 2005
Проживает: Russian Federation/Sankt-Petersburg
Написал: 246 сообщений

Оценка: 8 Votes 8 чел.

Сообщение #1096218
Цитата:
Оригинальное сообщение от fake100
не понятна вся эта морока с кучей серверов, когда есть другие движки где можно сделать огромную цельную карту.


Я как раз и пытаюсь выяснить возможности движка, точнее движков. Я их буду еще изучать на предмет возможностей.
Но всё же, мне кажется, что даже если создать одну огромную карту, и движок её скушает, то одновременно с этим впихнуть на один сервер пару тройку сотен игроков будет уже куда более сложной задачей.
Еще я где-то читал, что возможности сорс 2013 в плане создания больших пространств улучшены по сравнению с предыдущими версиями. Я не пытаюсь оправдать сорс, моя задача на текущий момент в большей степени исследовательская.
"Нет ни одной избитой темы, которую нельзя было бы избить еще раз". (С)
Old Post 20-02-2014 20:10
Plotnick отсутствует Посмотреть данные 'Plotnick' Отправить Приватное Сообщение для 'Plotnick' Найти другие сообщения 'Plotnick' Добавить Plotnick в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Plotnick
(Senior Member)

Зарегистрирован: Aug 2005
Проживает: Russian Federation/Sankt-Petersburg
Написал: 246 сообщений

Оценка: 8 Votes 8 чел.

Сообщение #1096248
Вот схемка, как я вижу распределенный игровой мир на сорс.

Map: A, Map: B и так далее это обычные игровые сервера, наподобие серверов CS или DM. Один сервер - одна карта. Однако напрямую к ним игроки не могут подключаться.

Root - это головной сервер. Он занимается тем, что принимает решение на какой из серверов Map: X перенаправить клиента. У него тоже есть какая-то карта, но это может быть пустой невидимый бокс, т.к. клиент на этом сервере не задержится.

Клиент имеет возможность подключаться только к серверу Root, после чего сервер принимает решение куда перенаправить клиента. После того как клиент перенаправлен на один из серверов Map: X, он вступает в игру. Если в определенный момент альтер-эго клиента достиг на карте сервера "зоны перехода", сервер Map: X уведомляет Root, об этом событии. Root анализирует положение клиента и принимает решение о перенаправлении клиента на другой сервер, положим, Map: Y (зависит от того в какой зоне перехода оказался клиент). Далее Root отправляет серверу Map: X данные о том, что клиента надо перебросить на Map: Y. Map: X отдает клиенту команду "дисконнект/коннект". Клиент отключается от Map: X и подключается к Map: Y, и вступает в игру уже на другой карте. Переход произведен.

Вот такую систему хочу попробовать реализовать. Мне кажется она может быть работоспособной. Для этого необходимо иметь возможность серверу Root обмениваться данными с серверами Map: X. В свою очередь сервера Map: X должны уметь отдать клиенту команду на дисконнект/коннект.

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

Что скажете, о подобной схеме?
Прикрепленная картинка: [посмотреть в полный размер]
ef04ec71a00d8b90b7dff6b50129243a
"Нет ни одной избитой темы, которую нельзя было бы избить еще раз". (С)

Поправил Plotnick 21-02-2014 в 10:02

Old Post 21-02-2014 09:57
Plotnick отсутствует Посмотреть данные 'Plotnick' Отправить Приватное Сообщение для 'Plotnick' Найти другие сообщения 'Plotnick' Добавить Plotnick в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
KorDen
(Senior Member)

Зарегистрирован: Jul 2010
Проживает: /
Написал: 1729 сообщений

Оценка: 27 Votes 27 чел.

Сообщение #1096341
Если брать "вообще" - возможность прямого обмена данными возможна. Как между двумя серверами, так и между любым приложениями.
Причем это во всю используется в плагинах.
Поясню подробнее - на игровых серверах практически везде стоит MetaMod Source - прослойка для других плагинов, и часто стоит SourceMod - плагин для MetaMod, обеспечивающий администрирование серверов. Так вот, если брать простой вариант - под SourceMod (SM) можно писать расширения и плагины. И давно существует расширение Socket, позволяющее напрямую создавать свои порты и подключаться к другим. Есть и много других расширений, реализующих какие-то конкретные протоколы - SourceIRC, штатный SM'овский MySQL, cURL.

Думаю такое можно сделать и прямо на уровне VSP (плагина напрямую под сервер).

Однако стоит ли? В GarrysMod есть серверы на 128 человек - проект GMod Tower - вот пример MMO на Source, хотя и на 256 челове одновременно онлайн. Там два сервера, и они связаны единой базой пользователей и их свойств (уровень и т.д.), но там нет такого, что игроки с одного сервера играют напрямую с теми кто подключен ко второму. Советую присмотреться к этому примеру

Поправил KorDen 23-02-2014 в 14:43

Old Post 23-02-2014 14:40
KorDen отсутствует Посмотреть данные 'KorDen' Отправить Приватное Сообщение для 'KorDen' Найти другие сообщения 'KorDen' Добавить KorDen в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Plotnick
(Senior Member)

Зарегистрирован: Aug 2005
Проживает: Russian Federation/Sankt-Petersburg
Написал: 246 сообщений

Оценка: 8 Votes 8 чел.

Сообщение #1096359
Цитата:
Оригинальное сообщение от KorDen
давно существует расширение Socket, позволяющее напрямую создавать свои порты и подключаться к другим.


Странно, как мне не пришло в голову просто дописать сервер при помощи своих сокетов? Это, наверное, самое простое решение. Расширение при этом особо и не нужно никакое, только если для существующих игр.
Тем более, что когда-то (в 2004 году, охтыж 10 лет почти прошло!), писал плагин для Миранды, который создавал соединение с сервером КС и выдавал всплывающие окошки, когда происходили какие-либо события (поднимался сервер, подключался игрок, менялась карта и т.д.)

Спасибо.
"Нет ни одной избитой темы, которую нельзя было бы избить еще раз". (С)

Поправил Plotnick 24-02-2014 в 07:49

Old Post 24-02-2014 05:45
Plotnick отсутствует Посмотреть данные 'Plotnick' Отправить Приватное Сообщение для 'Plotnick' Найти другие сообщения 'Plotnick' Добавить Plotnick в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Plotnick
(Senior Member)

Зарегистрирован: Aug 2005
Проживает: Russian Federation/Sankt-Petersburg
Написал: 246 сообщений

Оценка: 8 Votes 8 чел.

Сообщение #1097129
В общем получилось. Написал сокет клиент для серверной части, который связывается с каким-либо внешним сервером(не важно на чем написанным) и обменивается с ним при помощи запросов в json формате. Работает.
Единственно, пришлось изменить немного оригинальные сорцы клапана, а то они ради какой-то безопасности переопределили часть WinAPI вызовов.
"Нет ни одной избитой темы, которую нельзя было бы избить еще раз". (С)
Old Post 28-03-2014 11:34
Plotnick отсутствует Посмотреть данные 'Plotnick' Отправить Приватное Сообщение для 'Plotnick' Найти другие сообщения 'Plotnick' Добавить Plotnick в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Все время в GMT . Сейчас 23:36.
Создать Новую Тему    Ответить

Быстрый ответ
Ваше Имя:
Хотите Зарегистрироваться?
Ваш Пароль:
Забыли свой Пароль?
Вы можете оставлять свои комментарии анонимно, просто введя свои имя и оставив пустым поле пароля.
Ваш ответ:

[проверить размер]
[транслит в win] | [?]
[русская клавиатура]

Дополнительно: Подтверждение по E-Mail


Быстрый переход:
 
Оцените эту Тему:
 

Правила форума:
Создание Тем не разрешено
Создание Сообщений разрешено
Создавать Вложения не разрешено
Редактирование Сообщений не разрешено
Коды HTML запрещены
Коды форума разрешены
Смайлики разрешены
Коды [IMG] запрещены