Всем доброго времени суток! Вот решил написать обзор на плагин, который, как мне кажется, больше всего интересует всех. Это плагин NETwork. Является самым востребованным плагином из всех, так как, уверен, каждый хотел-бы сделать свою он-лайн игру на конструкторе. В этой статье я напишу Вам как им пользоваться, какие есть условия, события, параметры, о всех его секретах и недостатках.
Начнем, пожалуй, с того, что рассмотрим условия Условие - это набор действий, при выполнении которых выполнятся другие действия. (По крайней мере, так себе их представляю я)
=====Раздел "Messages" (Послание, или как у нас принято - сообщение)
> On any Massage (При любом сообщении) Очень полезно для чата, если нам нужно, чтобы поступило, например, не конкретное сообщение, а любое.
> On Massage (При сообщении ...) Тут, в отличии от предыдущего пункта, берется во внимание только то сообщение, которое вы указали. Может понадобится для выполнения определенных действий, т.е. "Если пришло сообщение Server Closed, то отключится от сервера". Но для этого лучше использовать пакетный тип передачи данных. О нем и говорится в следующем разделе.
=====Раздел "Packet" (Пакет)
> On Packet type (При пакете типа ...) Самое важное условие, на котором все базируется. Вообще сообщения, можно было бы основать и на таком способе передачи данных, но все же автор плагина решил упростить нам жизнь, и отвел для них отдельные каналы, по которому они передаются. О каналах передачи пакетов мы поговорим позже, а пока я расскажу, для чего используют это условие. Оно, аналогично условию "On Massage" исполняет действие, если на ваш компьютер, подключенный к серверу, придет конкретный пакет, который вы указали. Например: Как узнать, к кому пришло сообщение, и от кого оно отправлено?
Тут мы видим, что при приходе сообщения "RemovePlayer" и сравнения, существует ли игрок с таким ID у Вас в клиенте по "прикрепленным" данным к пакету удаляется копия спрайта этого игрока с таким ID. Зачем это нужно? При выходе игрока из сервера, чтобы тот не "стоял" на карте без действия, он автоматически удаляется. Это удобнее и для пользователя, и для сервера. Также тут вы увидели параметр GetToken(Network.PacketData,1,","). Для чего он нужен, я расскажу в разделе параметры.
=====Раздел "Triggers" (триггеры - простейшие условия, выполняющие логическую функцию с обратной связью. Часто называют "повторителями")
> On connect (При успешном подключении к серверу) > On connect filed (Если подключится к серверу не удалось) > On disconnect (При выходе из сервера)
Вышепоказанный раздел, как мне кажется, не требует разжёвывания, итак все понятно для чего и как это используют.
Теперь, когда мы разобрались с условиями, переходим еще в один немаловажный глобальный раздел - Действия
=====Раздел "Client" (Клиент, т.е. "рабочая среда" пользователя, подключенного к серверу)
> Connect (Подключится к ...) Нужно для подключения к серверу. Пусть вас не пугают параметры, которые нужно указать. Я сейчас объясню, для чего они нужны. Host - IP-адрес сервера к которому нужно подключится. Если вы хотите подключится к локальному серверу (для игры по локальной сети) просто укажите "localhost" Host port - это порт сервера, по которому будут передаваться данные. Его указание нельзя упускать из виду, это самая важная часть подключения! Просто укажите тут DNS/UDP порт сервера, к которому будет подключаться клиент. При этом, он обязательно должен быть "открыт" у владельца сервера на компьютере или в маршрутизаторе. Channels - это те самые каналы, о которых я обещал рассказать Вам ранее. Каждый канал - это отдельный "путь" передачи пакетов. Для чего они нужны? В основном, чтобы не загружать один и тот же "путь" передачи, и для индефикации пакетов. Например, в один канал можно посылать системные пакеты (кик, бан, проверка он-лайна), а в другой пакеты позиции игрока и информации о нем. User Data - Количество портов, которые анализируются и рассматриваются сервером в очереди. 0 - не ограниченное, однако даже если поставить 1, то результат не изменится, разве что на сервер подсоединятся 2 пользователя одновременно.
> Disconnect (Отключится от сервера)
=====Раздел "Massage" (Сообщение)
> Send Massage (Послать сообщение) Думаю, тут не возникнет вопросов. Тут, кстати, тоже можно указать канал, по которому передастся сообщение
=====Раздел "Packet" (Пакет)
> Send packet reliable (Отправить приоритетный пакет) Этот пакет используется для передачи важных данных, таких как количество денег у игрока, его характеристики, или системные пакеты, типа бан, кик, смена ника и т.д.
> Send position packet (Отправить пакет позиции) Нужен для быстрой передачи данных, которые не требуют надежности и дальнейшей обработки, типа передачи позиции игрока на карте
=====Раздел "Server" (Сервер)
> Host server (Создать сервер) Тут нужно указать 3 параметра Host Port - порт, "открытый" на Вашем компьютере или маршрутизаторе. Подробнее в разделе Client. Max Clients - максимальное количество клиентов на вашем сервере. При попытке подключения большего количества, просто будут игнорироваться. Chanels - количество каналов для передачи данных. Подробнее в разделе Client.
Наконец то, мы обошли два самых важных глобальных раздела этого плагина - Условия и действия. Но! Остались еще параметры... Их немного, но без них невозможно обойтись!
=====Параметры
> Get ping round trip time (Вывести время, за которое пакет проходит на сервер, и обратно. Иным словами - пинг) Кто играл в он-лайн игры, тот сразу поймет, что конкретно обозначает пинг. Зная пинг можно вычислить PPS - Packets Per Second ("Пакетов в секунду". Иногда ошибочно называют FPS) по этой формуле: 1000 / Network.RoundTripTime (количество миллисекунд в секунде, деленные на пинг)
> Packet Data (Вывести данные из пакета) Самый важный параметр. Выводит данные отправленные в пакете. Отлично сочитается с GetToken -ами, если нужно передать больше, чем 1 параметр. Например:
Как видите, все 3 значения разделены ":". Это делается для того, чтобы можно было "достать" GetToken -ом нужное значение. Например, если мы введем GetToken(Network.PacketData,2,":"), то мы выведем значение "player.X".
> Get Massage (Вывести данные из сообщения) Тут не должно возникнуть вопросов... Мы получаем сообщение (условием On Massage/On any Massage) и вставляем его в поле чата (Text > Set text > Network.Message).
=====На заметку
Если Вы передаете числовые данные, то при выводе, всегда "загоняйте" их под int( переменная ) - это превратит их в числа. Часто, тип передаваемых данных путается, и вы будете 2 часа искать ошибку, но так и не поймете, что, например, переменная "255" - текст! А текст, как известно, не воспринимается сравнивающими условиями.
=====Недостаток плагина.
Есть определенная группа пользователей, которые не могут подсоединится к серверу, так-как Win7 блокирует некоторые возможности плагина. Их вход на сервер пагубно отображается на нем - он просто перестает нормально работать, пока не перезапустится. Чтобы избавится от них - сделайте проверку. Типа отправлять каждую секунду пакет "проверка" на протяжении 10 секунд. Если по окончании проверки придет 10 пакетов - значит это нормальный пользователь, подходящий для игры. Если же нет - (отправится больше/меньше пакетов) предупредите их о том, чтобы запустили программу "В режиме совместимости". Спасибо xxxShade за эту информацию
=========================================== Вот и все. Больше я ничего не могу рассказать, все остальное Вы узнаете сами. Спасибо за внимание. Если увидели ошибку - не надо флудить, просто напишите мне в комментариях, а лучше в лс.
Урок написал AntiAlianKiller (Даниил Гапонов). Специально для форума Gcup.ru
Как видите, все 3 значения разделены ":". Это делается для того, чтобы можно было "достать" GetToken -ом нужное значение. Например, если мы введем GetToken(Network.PacketData,2,":"), то мы выведем значение "player.X".
Как? где логика? ведь 2 - это Global id
Сообщение отредактировал Gammeza - Среда, 10 Апреля 2013, 15:17
Нет. Геттокен "достает" значение ОТ 2 ":" до следующего. После второго, как раз, и идет "player.X"
Не достает она "от второго", дело в другом.
Отправляем такой пакетик: Create:player;153;82 Create в данном случае будет названием/типом пакета, который не входит в Network Data. ":" - обязательно ставится и разделяет название от данных. player;153;82 - будет Network Dat'ой
И токен с сепаратором ";" выделит из него значения таким образом: 1) player 2) 153 3) 82
На счет двоеточия не уверен, возможно может быть использован другой символ. Главное убрать заблуждения на счет выделения данных токеном.
Есть определенная группа пользователей, которые не могут подсоединится к серверу. Неизвестна причина, почему. Возможно из-за того, что они обладают уникальными способами передачи данных, или из-за отсутствия нужных библиотек на компьютере. Их вход на сервер пагубно отображается на нем - он просто перестает нормально работать, пока не перезапустится. Чтобы избавится от них - сделайте проверку. Типа отправлять каждую секунду пакет "проверка" на протяжении 10 секунд. Если по окончании проверки придет 10 пакетов - значит это нормальный пользователь, подходящий для игры. Если же нет - (отправится больше/меньше пакетов) значит у пользователя несоответствующее подключение.
Спам пакетами, из-за которых вешается серв, лечится запуском приложения в режиме совместимости. Тем самым можно сделать чтобы выгнанным пользователям, из-за несоответствии пакетов, выдавать уведомление о запуске в режиме совместимости.
xxxShade, совместимость с чем? Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
Сообщение отредактировал last2424 - Четверг, 25 Июля 2013, 21:52
Ваш внешний IP можно узнать >>ТУТ<< С другого компьютера к local-host серверу подключиться не возможно, разве что между ними протянуть локальный кабель (создать локальную сеть из нескольких компьютеров). Если Вы хотите, чтобы клиент подключался через сеть интернет, надо указывать внешний IP (Например, Host - "46.172.207.116"). Серверу указывать IP не нужно, он автоматически хостит на всех IP, даже на доменных именах ( использует структуру INADDR_ANY ) ╔Искусственный интеллект - EVAbot ╠Убийственная музыка - EpicMus ╠Roguelike - Watcher of Dungeon ╠Однокнопочная стратегия - One Button Epic Battle ╠Он-лайн шутер - You Can Not win ╠Текстовый квест - TimeLess ╚Уникальный кликер - MineClick
Сообщение отредактировал AntiAlianKiller - Воскресенье, 28 Июля 2013, 17:04
AntiAlianKiller, да, я хочу именно, что бы кто-то подключался к моему серверу через IP Но почему-то не работает...
Вот когда "localhost" - есть подключение и сервер видит подключающегося, а как только вписываю вместо "localhost" свой IP "11.222.333.444" - не конектит... Т.е. я сам к себе подключиться не могу через IP адрес... Может дело в роутере? И если да, то как это исправить?
Host port - это порт сервера, по которому будут передаваться данные. Его указание нельзя упускать из виду, это самая важная часть подключения! Просто укажите тут DNS/UDP порт сервера, к которому будет подключаться клиент. При этом, он обязательно должен быть "открыт" у владельца сервера на компьютере или в маршрутизаторе.
Видимо ты проигнорировал эту часть статьи. Гайды по открытию портов для разных производителей роутеров ты можешь найти в гугле. Для TP-link, например, вводишь в строке браузера "192.168.0.1", затем вводишь ник пароль ( по умолчанию admin/admin ), затем переходишь в раздел "Forwarding", и нажимаешь "Add new...". Эта процедура обязательна только для хостеров (сервера), клиенту этого делать не обязательно. ╔Искусственный интеллект - EVAbot ╠Убийственная музыка - EpicMus ╠Roguelike - Watcher of Dungeon ╠Однокнопочная стратегия - One Button Epic Battle ╠Он-лайн шутер - You Can Not win ╠Текстовый квест - TimeLess ╚Уникальный кликер - MineClick
Сообщение отредактировал AntiAlianKiller - Пятница, 02 Августа 2013, 00:29
_ToBe_, попробуй 127.0.0.1 в ковычках. Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)