![]() |
Ответ: Black Bird
Цитата:
|
Ответ: Black Bird
Цитата:
кстати, сервер ты на чем писал? пс. скрин, как всегда, зачетный :) |
Ответ: Black Bird
Цитата:
Сервер должен отвечать за все просчёты влияющие на геймплай и доступность информации. Клиент же должен получать ТОЛЬКО ту информацию которую должен (если чужой корабль ушёл в инвиз, то слать инфу о его позиции НЕЛЬЗЯ, т.к. простой чит сниффа (симулируем пакет от сервера типо "противник 42 вышел из инвиза", и мы снова его видим). Таких читов может быть куча и повсюду. Например если пытаешься стрелять во врага, и что-то стоит на пути, если проверку будет делать клиент и слать пакет стрельбы серверу, а сервер будет тупо стрелять - то тут wallhack легко реализовать. В политике сетевых отношений, Клиент - это лох, который всё выполняет, раб, и лишь просит разрешения на то или иное действие, которое не факт что выполнится. А Сервер - это босс, он всё решает, и лишь он всё знает. Сервер должен быть устойчив на любой спам, и любую ересь от клиентов и ещё других приложений. Должен качественно уметь отсоединять клиентов, и сообщать об этом также качественно. Проблемы большие будут на каждом шагу. Сеть, это большой лес. Писать сервер на каком-нибудь блице, я настоятельно не рекомендую. Клиент - это рендер. Сервер - это мозг. Насчёт соединений, есть возможности обхода NAT'а, но это не просто, блицом этого не реализуешь. Можно конечно сделать сервер отдельно, который будет обходить NAT, и паралельно с сервером запускать игровой клиент (как в HL, там на деле запускается dedicated сервер, как процесс, и скрывается консоль), тот кто хостит игру, на деле запускает сервер, и такой же клиент как и все другие игроки, и сам к себе коннектится. Пока нету возможности обойти программно NAT, можешь забиндить сервер на прослушку любого IP (хз как в блице), далее запускать сервер на определённом порту, выбери какойнибудь 20ххх, далее, идёшь в настройки роутера, и там устанавливаешь port forwarding на свой комп, указывая порт сервера. Для теста попробуй сам к себе зайти, но у клиента устанавливай внешний IP. Узнать его тут. |
Ответ: Black Bird
Пропарился с роутером пол дня, ничего хорошего не получилось.
Сервер и клиент написаны на блитце. Не думал, что так все плохо будет с сетью. Намеки на организации архитектуры понял. Блин, неужели все зря. |
Ответ: Black Bird
Цитата:
Или как сказал МоКа Port Forwarding: Нечто похожее на это: ![]() Проверить открытость порта из вне можно тут: http://www.canyouseeme.org/ Ещё бывает, что проблема не в твоём роутере, а у провайдера. Тогда при создании сервера надо чётко указывать ip на котором происходит слушание пакетов. Это можно делать например в RakNet (для Blitz3D есть? А на Blitz3D ли ты пишешь?) Ещё посмотри у своего провайдера услугу "внешний ip". С такой штукой можно хостить что хочешь без запар вообще. Цитата:
И да, рад тебя видеть! :) |
Ответ: Black Bird
Читал статью какого-то мощного чувака, что все просчеты выполнять только на сервере. Сервер посылает каждому клиенту его данные, тогда будет синхронно, причем что бы исключить рывки при передвижении, нужно передавать не координаты объекта, а кнопки которые он нажал, а они уже обрабатываются клиентом! Короче это жесточайший гемор, я как то баловался танчики писал, что - то получалось, но я так и не осилил работу без глюков. При плохой связи, например получается, что кнопка как-бы заедает... При хорошей связи все окей. Мой совет будешь писать, держи клиент на удаленном сервере VPS, подключай 3G модем и тестируй, добивайся работы без лагов. Тот кто говорит, что на 3G нельзя добиться хорошей работы онлайн - это бред. Я играл в WOW с пингом 400.
|
Ответ: Black Bird
Цитата:
Клиент шлёт изменение состояния клавишь, всё примитивно просто: игрок зажал вверх, игрок отпустил вверх, и т.п. Сервер далее считает всё исходя из инпута, далее выдаёт игрокам уже координаты объектов. Выдача данных должна быть в виде снимков мира, в весьма постоянной переодичности. Синхронности это никакой не даёт - клиент будет отставать сам от себя в ДВА пинга. А действие других игроков в адрес тебя, будет на сервере обрабатываться с разностью в ТРИ пинга.. Поэтому есть разные методы синхронизации, сам термин называется dead reckoning. Есть два метода - интерполяция, и экстраполяция. Первый подрузумевает плавное применение данных от прошлого до последнего данного в наличии. Как поняли тут будет задержка - отставание от сервера в ДВА С ПОЛОВИНОЙ пинга. Поэтому есть экстраполяция. Это попытка предсказывания следующих данных на основе прошлых. Зная направление движения объекта и скорость - не сложно вычислить его будущую позицию. Но это не просто, нужно использовать сплайны. Дальность предсказывания должна равняться ровно одному пингу между принимающим данные и сервером. Даже собственные данные, применяются не сразу, а только как достигнут сервер на самом деле, но ещё не пришли на клиент - получается, что сам свои данные будешь силой задерживать во времени в размере своему пингу. Таким образом все клиенты будут пытаться симулировать мир максимум приблизительно как на сервере в данный реальный момент. Также отсылая например данные о выстреле на сервер, если это моментальный выстрел (не летящий снаряд), то сервер принимая данные, должен вычислять в прошлом, назад в размере на один пинг от посылающего, т.к. когда он посылал пакет с выстрелом, то основывался на состоянии мира в тот момент на клиенте, но сервер получит пакет позже на один пинг, поэтому он вежливо берёт данные из прошлого, и делает вычисления там. На сервере нужно реализовывать машину времени, длиной в максимум секунду (имхо), с наличием всех времени зависимых данных на каждый тик за последнюю секунду. Например если у нас UPS (update per second) == 30, то сервер должен хранить времени зависимые данные со всех этих 30 тиков. Такие данные как положение персонажа - времени зависимые. Или например жив или мёртв - тоже времени зависимое, т.к. игрок Х может умереть от выстрела игрока А у которого пинг 30, а игрок Б тоже убил у себя игрока Х, но пинг у него 200. Убили они его в реальном времени почти в один момент, но игрок Б чуток раньше (на 50 мс например). Но сервер получит сперва пакет от игрока А, и обрабатывает его в прошлом на 30 мс. Далее через ещё 120 мс после обработки, прийдёт пакет от игрока Б, который если вернуться на 200мс назад, убил игрока Х, который чуть позже также был убит игроком А, но ведь игрок Б раньше это сделал, а из-за пинга мы получили данные позже. Но ведь игрок Б - сделал это раньше. Вот такой пример-парадокс. И таких парадоксов будет уйма, постоянно! Работать с сетью - это большой геморой, и приступать к кодингу сервера, без долгого штурма пачек бумаги и брэйнстормов с друзьями - тупо нельзя, иначе потратите время, потом переписывать будете. Да и чтобы создать лаги - не нужно 3G, это очень просто симулировать, реализовав очередь при отсылке и приёме от сервера, внеся туда немного хаоса. |
Ответ: Black Bird
Интересно а есть ли готовые движки для C++ на основе ГеймОбъектов как в BlitzMax?
|
Ответ: Black Bird
Цитата:
|
Ответ: Black Bird
Кстати, имхо сервер тебе лучше написать на пурике. Он прост в освоении после блитца (тоже бейсик по сути). Но он может запускаться под линуксом (то есть сервер ты можешь поднять совершенно бесплатный), у него есть многопоточность, хороший сетевой код, а главное - он не жрет 100% системы как блитц и в нем можно вообще не грузить графический режим з.ы. |
Ответ: Black Bird
В BlitzMax реализовано в виде объектов. Какая то хитрая система синхронизации, я уже не помню, баловался года 2 назад, но мне понравилось.
Имею ввиду сетевые движки для c++ |
Ответ: Black Bird
Цитата:
Все исходники там Цитата:
На счёт пурика не согласен. Я считаю, что пурик дырявая неюзабельная кулебяка. Ничего стоящего на нём ещё не видел. Его внутренняя организация - чистой воды хулиганство. Для сервера рекомендую C#, Java ну или BlitzMax (благо он имеет весь нужный функционал) Если тупо потренироваться то можно и Blitz3D. |
Ответ: Black Bird
Насчёт пурика - поддерживаю.
Рекомендую C#, ну или Java. Но по мне так с C# проще работать, и он в некоторых моментах конкретно лучше, а в некоторых (имхо менее значительных, хуже). Плюс msdn документация очень удобная. Кстати, EVE сервер на пурике расписанный ;) |
Ответ: Black Bird
серверу евы приписывают самые разные языки, от пурика до эрланга )
|
Ответ: Black Bird
Цитата:
|
Ответ: Black Bird
Цитата:
|
Ответ: Black Bird
О плюсах речи нету. Но если он желает заниматься сетью, то блиц - не путь.
|
Ответ: Black Bird
Цитата:
ЗЫ. не подумайте, что я себя хвалю.. это я просто написал, что в любой ситуации есть выход. |
Ответ: Black Bird
Цитата:
|
Ответ: Black Bird
@Randomize
|
Ответ: Black Bird
Цитата:
|
Ответ: Black Bird
Я не прогер, только на блитце.
Устроился сюда моделлером С плюсами плохо, в третем семестре универа пришлось выучить немного явы. Но чтобы нормально сделать - надо знать больше. Ладно пока что не суть, т.к. пока плотно не собираюсь этим заниматься. Сервак пока что будет держаться на hamachi. Версия хачика значение не имеет. Завтра я положу сюда первые наработки и надеюсь, что кто-нибудь захочет потестить Вот данные к хачику: Лог:BlackBird_server Пас:BlackBird_server Сегодня с утра опять сижу и програмлю: 1) Сделал из плейна воду. 2) Из юниверса подключил синглсюрфейсную партикловую систему и сделал первые эффекты. 3) Подключил саундменеджер. 4) Воткнул тайминг на отправку пакетов. Теперь в секунду отправляется примерно 10 пакетов с клиента на сервер и обратно. На клиентах эти значения сглаживаются. 5) Худ буду делать на базе жоперхеда. 6) Сменил характеристики пушек и сделал управление ротацией самолета тверже. 7) PROFIT! 8) Окончательно убедился в том, что физика Bullet работает хреново в ксорсе - чем ниже фпс тем больше дерганье затыки у мешей на клиенте игрока. В юниверсе на простых юнитах тоже, кстати. + Самолеты меняют положение стабилизаторов и крыльев в зависимости от режима полета. В общем все делается на скорую руку, чтобы уже завтра можно было полетать. ![]() Пойду пилить таблицу и ракеты. |
Ответ: Black Bird
|
Ответ: Black Bird
Погуглил про этот Транзас: Российская группа компаний Транзас (TRANsport SAfety Systems) – производитель и поставщик: береговых систем безопасности судоходства; морского и авиационного бортового оборудования; интегрированных навигационных комплексов; широкого спектра морских и авиационных тренажеров; аэронавигационного обеспечения. :4to: херасебе :4to: |
Ответ: Black Bird
|
Ответ: Black Bird
Цитата:
|
Ответ: Black Bird
Цитата:
3д рейкаст об хулл? Колиизии и их респонс для воздушных объектов? |
Ответ: Black Bird
Цитата:
Хотя может я не прав и у Эвила действительно наполеоновские планы |
Ответ: Black Bird
Просто миниигрушка будет.
Я через час выложу сюда тест. Те, кто захочет попробовать подключайтесь постепенно в хамачи. ====================================== Ребят, 20 мин. Баг с подключением оказался немного крутовытый. |
Ответ: Black Bird
BLACK BIRD test
http://rghost.ru/36721227 Итак, все желающие полетать и пострелять могут конектиться к нашей сети в хамачи: Лог:BlackBird_server Пас:BlackBird_server Гемплей пока что прост: За каждый сбитый самолет игроку перечисляется некоторое кол-во очков. Лучший игрок будет в новой деме летать на самолете.. побольше) Таблица находится в левом верхнем углу. Управление как в Copperhead. WASD - тудысюды При полной скорости тянем мышку вверх или вниз для крена самолета. Как только скорость сбрасывается он автоматически выпрямляется по горизонту переходя в hover режим. Shift - форсаж. LMC,RMC - пулеметы и ракеты. Кнопки надо зажимать. Открываем Main.cfg и вбиваем туда свой ник. Много багов, так что прошу терпения. Выходить из игры ESC ил F10. Вылетать с ошибкой или снимать задачу крайне не желательно. Иначе сервер придется перезапускать. Каждый 15 мин сервак будет перезапускаться. В хамачи еще есть 2 места. |
Ответ: Black Bird
|
Ответ: Black Bird
Спасибо всем, кто потратил время и потестил игру!
Тест закрыт, дальше на следующей недели будет следующий. С новыми фичами! Все получат новые самолеты! Но и читы на этот раз не прокатят :D ![]() |
Ответ: Black Bird
Эх, а я посмотреть хотел ))) Чет тупо виснет! :)
|
Ответ: Black Bird
Цитата:
|
Ответ: Black Bird
блиииин. тут такая туса, а я на работе :(
|
Ответ: Black Bird
О_о как эт все долго, ну лан, тогда уж лучше следующей недели ждать бум :) А так по скринам супер :super:
|
Ответ: Black Bird
Подожду версию без хамачи, у меня к нему личная неприязнь
Таки разобрался вчера с хамачи. Так что если что, постараюсь поучаствовать в следующем залете |
Ответ: Black Bird
Завтра намечается новый тест, где-то ближе к 16:00
Сделано большое обновление, хотя это не очень коснется новой техники.
![]() Попытаюсь решить такие проблемы завтра:
Перед началом теста все из списка хамачи будут удалены. Всем старым игрокам нужно будет перезайти. Сделано будет для того, чтобы оставить место для новых игроков, вместо тех, кто участвовать не сможет. PS. Клиент придется скачать полностью, патчей для старых версий не будет. т.к. обновления коснулись практически все файлы. |
Ответ: Black Bird
|
Ответ: Black Bird
Здорово. Но вот..
"Файл удален" или я не туда посмотрел? |
Ответ: Black Bird
Цитата:
Читайте, что я пишу выше. |
Ответ: Black Bird
Black Bird Test 2
Клиент: http://rghost.ru/36840222 Итак, второй тест. Тут я постарался убрать старые баги, привести все в порядок, добавить новых фичей, пушек и самолетов, улучшить гемплей. Чтобы играть нужно сделать три вещи: 1) Подключится через хамачи на наш сервер. (Как это сделать -написано выше) 2) Скачать клиент отсюда: http://rghost.ru/36840222 3) Открыть в папке с клиентом Main.cfg и вбить в строку ClientName = Player вместо "Player" свой ник с булки. Дальше можно смело запускать Client.exe Работать сервак будет где-то до 21:00. Перезагружаться по мере возникновения проблем. Летаете, мочите всех подряд, собирайте ящики, набивайте очки и поглядывайте в ЧАТ в нижнем левом углу :) Каждый самолет имеет свои характеристики и оружия, свою броню и тп. Раздача печенек произойдет прямо по ходу игры. Если при старте маленькое окошко игры повисло: 1) Возможно сервер лежит или рестартится. 2) Вы не подключены в хамачи к нашему серверу. Разрешение игры лучше не менять, иначе может съехать худ. в хамачи есть еще три места. Очень хотел бы увидеть вас там!) |
Ответ: Black Bird
|
Ответ: Black Bird
Вложений: 4
Вид из моей уютной кабины
|
Ответ: Black Bird
В общем тестировал сегодня со всеми, очень понравилось, прикольно, но не хватает очень много на стороне клиента плюшек.
Например система стрельбы ракетами, прикольная, т.к. ракеты контролируются мышкой, но при этом это сбивает прицел для туррели. Но это имхо ок. А вот то что не чувствуется дистанция ракет и других персонажей - это имхо важно. Для этого есть имхо две идеи как можно это улучшить: 1. Ракеты должны подсвечиваться аугментной реальностью, и иметь данные о дистанции. 2. Радар. На деле это нужно 3д радар, с плоскостью и вертикальными линиями для улучшения ориентации в пространстве и понимании где кто находится. Ракеты тоже должны находиться на этом радаре. Желательно и патроны туреллей. Конечно такой элемент в интерфейсе весьма тяжёлый, и требует очень много усилий для реализации. Плюс, ну тут не прими как недостаток - у тебя опыта работы с сетью не так и много, плюс объём работы большой. Но нужна синхронизация и предсказания (экстраполяция), а не интерполяция. Иначе картинки у игроков сильно отличаются.. В такую игру хочется иметь наводную базу с туреллями, которую будут игроки атаковать, точнее две базы (две команды). |
Ответ: Black Bird
Появилась возможность играть без хамачи.
Ну как, прошлые версии понравились по игре? Стоит - ли развивать тему? Скорее всего это последнее, во что я вложусь на ксорсе. Планируется гаражик, что-то вроде World of tanks, можно будет настроить свой самолет , купить новый и тп. Ну и по игре самой - режим с базами, как Мока предложил. Что скажите? |
Ответ: Black Bird
Ни на один тест увы не смог попасть, а очень хотелось, люблю авиасимуляторы. Скрины радуют. Если есть время - конечно развивай.
|
Ответ: Black Bird
Продолжай, если хочется.
Мне понравилось как мы полетали в прошлый раз) |
Ответ: Black Bird
Работа продолжается.
Поработал в сабере, получил опыта, открыл блек бирд. Сразу кучу всего пределал) Графика снова будет переработана. Прикрутил оптимизации, поднял около 30ти фпс, это хватит, чтобы обустроить игровую сцену. Убрал лишнее из худа, переделал работу с камерой. на карте предположительно будет ночной каньон. Может кто-нибудь подкинит каких-нибудь крутых идей, кроме выше пречисленных? Идеи должны быть направленны на поднятие гемплея. Пока идеи такие: 1) Добавить на Q/E какие-нибудь финты с уворотами от ракет 2) Можно сделать какие-нибудь абилити для игроков на кнопку X. Например сброс ИК ловушек, починка и тп. 3) Ангар, где можно настроить самолет и купить новый, также с оружием для него. 4) Добавить небольшую РПГ систему. За сбитого игрока будет начисляться опыт, за опыт начисляется уровень, уровень может давать доступ к новым самолетам и оружиям, абилитям. Сразу возникает вопрос как потом отделять нубов от высокоуровневых игроков. 5) Можно попробовать воткнуть на мой сайт статистику. 6) Есть идея летать не только на самолетах. Хочется какие-нибудь штуки с множеством турелей что-ле. Или открыть классы самолетов, сделать перехватчиков, истребителей, что-то в таком духе. Отсюда можно будет делить абилки. 7) Ракеты поделить на:
9) Убрать физику баллет. |
Ответ: Black Bird
Переделать сетевую часть, с нормальной и честной синхронизацией с экстраполяцией (а то из-за задержки, стреляя и попадая - не попадает).
|
Ответ: Black Bird
Цитата:
Знач так, идея такая. На клиенте будут отслеживаться нажатые клавиши, кнопки посылаются на сервер, сервер их обсчитывает и посылает посчитанные пакеты клиентам. Полученные пакеты клиент будет приводить в действие на экране игрока, движение самолетов будет немного сплайниться. |
Ответ: Black Bird
Суть "справедливых" решений заключается в том кто решает что игрок попал, а кто нет, и на основании каких данных.
Т.к. избежать задержки невозможно, и данные с одного клиента будут идти до другого за промежуток времени задержки одного клиента плюс задержки другого, то тут нужно думать о симуляции "будущих" данных на клиентах. Суть проста: Authoritative Server <> Client модель самая стойкая и популярная на данный момент. Сервер всегда прав и просчитывает всё сам. Клиент лишь "просит" у сервера всё, и отдаёт ему собственный ввод. Сервер получает ввод и симулирует поведение сетевых объектов. Затем с определённой частотой раздаёт клиентам пакеты состояний. Частота раздач намного меньше чем частота симуляции. Например симуляция может быть 30 тактов в секунду, а раздач 10 в секунду. Следственно клиент должен сглаживать данные. Но т.к. мы уже говорили о том что клиент должен предсказывать, следственно получая данные от сервера, клиент должен вычислять предполагаемые будущие данные, и затем симулировать поведение уже с расчётом на предполагаемые данные. Это называется экстраполяция. Долгота предположений должна зависеть от промежутка времени между пакетами состояния мира (в данном случае 100 мс), плюс собственный пинг (сглаженный по времени), таким образом клиент будет пытаться предположить весьма далеко состояние которое на самом деле сейчас происходит на сервере. Задача симулировать как можно ближе реальное состояние на данный момент у всех клиентов. Собственные данные, применять сразу, но смешивать с предполагаемыми данными как и других клиентов, сглаживать границу своей симуляции так, чтобы не сильно отличалось от данных при экстраполяции, но и не чувствовалось лага, иначе игроку очень не понравиться задержка реакции, тем более в такой активной игре. Далее самое сложное, это серверная часть. Т.к. симулируем всё на клиентах приближенно к серверным в реальном времени данным, ошибка будет, но мы её не учитываем. Задача тут, является вычисления в прошлом. Например клиента А с задержкой 80мс, в момент 100мс, стреляет. Пакет приходит на сервер уже в момент 180мс, но данные основывались на 80мс времени ранее. Для справедливости, сервер должен посмотреть на критичные данные для справедливых вычислений (позиции самолётов), на 80мс назад по времени с момента получения пакета (180мс), сделать вычисления, и послать клиенту ответ. Клиент же уже всё симулировал (выстрел), но реально попал или нет, узнал только от сервера на 300мс. Почему не 260? Потому что сервер посылает пакеты обновлений каждые 100мс. И лишь потом мы можем увидеть изменения в ХП у противника, и возможно эффекты взрывов (если уже не симулировал). Отклик будет 200мс хоть и задержка у клиента 80мс. Хитрости которые можно тут применить, это полёт пули на клиенте, как раз не мгновенный, когда сервер же вычисляет всё сразу (лучи), тем самым можно клиенту дать инфу о поподаниях, даже до того как у клиента пуля долетит до противника. Следственно с такой хитростью, упрощается логика на сервере, и не чувствуется лага. |
Ответ: Black Bird
Ок я понял. Спасибо.
Рассихра происходит из-за отсутствия алгоритма, который будет считать следующее положение тела еще до прихода пакета. Особенно на высоких скоростях. И да, еще раз подумал насчет подсчетов попаданий. У меня сделано не правильно, мягко говоря. Суть в том, что текущая система зависима от фпс клиента. Полный п*. Новая система будет примерно такая, основанная на таймере. У пушки будет радиус действия, т.е. скорость * время на жизнь в секундах. До цели будет посчитан радиус, если он в зоне поражения, и игрок стреляет то проверяем как стоит на клиенте прицел. Если прицел будет стоять в положении на опережении, а цель прибудет в будущую позицию вместе с пулей через дистанцию / скорость времени то засчитываем попадание. Отсюда следуюет, что все эти трейсеры и ракеты будут просто тупо выступать в качестве эффекта) Как-то так.
![]() Пока вот пилю, сломались максы, переустановка не помогает..тупо провисы на загрузке. Хз как теперь экспортить. |
Ответ: Black Bird
Шикарно
|
Ответ: Black Bird
|
Часовой пояс GMT +4, время: 03:38. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot