forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Black Bird (http://forum.boolean.name/showthread.php?t=16374)

EvilChaotic 23.02.2012 18:08

Black Bird
 
Посоны, привет!

Как уже некоторые знают - я получил работу в нехилой компахе на свою специальность. Теперь у меня универ и работа.. дальше я прихожу почти ночью домой, делать что-то большое нет сил и сильно не хочется.. Да и профита мало. Поэтому, все старые проекты, которые я делал и не закончил под большим вопросом. Тем не менее - у меня все зашибись, теперь есть деньги и почти все, что я хотел.

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

За ночь и сегодняшний день сделал "онлайновые" самолетики. По ходу изучения примеров у меня накопился такой огромный ящик вопросов.. и некому задать.



Самый большой вопрос, который возникал почти во всех местах, связанный се сетью: КАК ПРАВИЛЬНО?

Собственно на данный момент есть клиент и сервер.
Сервер может обслуживать сразу ряд клиентов. Работает реалтаймовое подключение игрока в мир и проработан дисконект. Сами самолеты летают на физике Bullet. Сама физика считается на клиентах! Сервер имеет только ряд функций по модерации игроков (кик, дисконект, репозиция игрока и тп) а также предоставляет подключаемым клиентам данные о других игроках. Нету никаких "угадываний нажатий клавиш", клиент предоставляет серверу свою позицию, а сервер раз в некоторое время отправляет всем клиентам информацию. Все это дело оформлено на UDP. Первое впечатление после работы с сетью: оху**ь.

Собственно не получилось решить самую главную проблему.
Дома стоит роутер на четыре компа. Каждый имеет свой такого плана 192.168.1.2. Поэтому работает только локальная сеть. Как все это дело можно оформить и не в локале? Пните в нужном направлении и сегодня вечером уже можно будет полетать, пострелять!

PS. Squid просто исчез!?

h1dd3n 23.02.2012 20:21

Ответ: Black Bird
 
Цитата:

Сообщение от EvilChaotic (Сообщение 220350)
Собственно не получилось решить самую главную проблему.
Дома стоит роутер на четыре компа. Каждый имеет свой такого плана 192.168.1.2. Поэтому работает только локальная сеть. Как все это дело можно оформить и не в локале? Пните в нужном направлении и сегодня вечером уже можно будет полетать, пострелять!

Нужно иметь белый внешний IP, и пробросить на роутере порты (порт). Потом поднять сервер и коннектиться по внешнему ипу.

HolyDel 23.02.2012 21:03

Ответ: Black Bird
 
Цитата:

Сами самолеты летают на физике Bullet. Сама физика считается на клиентах!
уже неправильно, на клиентах можно считать только не геймплей-специфик части. считаем все на сервере :)
кстати, сервер ты на чем писал?

пс. скрин, как всегда, зачетный :)

moka 23.02.2012 23:25

Ответ: Black Bird
 
Цитата:

Сообщение от HolyDel (Сообщение 220358)
уже неправильно, на клиентах можно считать только не геймплей-специфик части. считаем все на сервере :)

Поддерживаю.

Сервер должен отвечать за все просчёты влияющие на геймплай и доступность информации. Клиент же должен получать ТОЛЬКО ту информацию которую должен (если чужой корабль ушёл в инвиз, то слать инфу о его позиции НЕЛЬЗЯ, т.к. простой чит сниффа (симулируем пакет от сервера типо "противник 42 вышел из инвиза", и мы снова его видим).
Таких читов может быть куча и повсюду. Например если пытаешься стрелять во врага, и что-то стоит на пути, если проверку будет делать клиент и слать пакет стрельбы серверу, а сервер будет тупо стрелять - то тут wallhack легко реализовать.
В политике сетевых отношений, Клиент - это лох, который всё выполняет, раб, и лишь просит разрешения на то или иное действие, которое не факт что выполнится. А Сервер - это босс, он всё решает, и лишь он всё знает.
Сервер должен быть устойчив на любой спам, и любую ересь от клиентов и ещё других приложений. Должен качественно уметь отсоединять клиентов, и сообщать об этом также качественно. Проблемы большие будут на каждом шагу.

Сеть, это большой лес. Писать сервер на каком-нибудь блице, я настоятельно не рекомендую.

Клиент - это рендер.
Сервер - это мозг.

Насчёт соединений, есть возможности обхода NAT'а, но это не просто, блицом этого не реализуешь. Можно конечно сделать сервер отдельно, который будет обходить NAT, и паралельно с сервером запускать игровой клиент (как в HL, там на деле запускается dedicated сервер, как процесс, и скрывается консоль), тот кто хостит игру, на деле запускает сервер, и такой же клиент как и все другие игроки, и сам к себе коннектится.
Пока нету возможности обойти программно NAT, можешь забиндить сервер на прослушку любого IP (хз как в блице), далее запускать сервер на определённом порту, выбери какойнибудь 20ххх, далее, идёшь в настройки роутера, и там устанавливаешь port forwarding на свой комп, указывая порт сервера.
Для теста попробуй сам к себе зайти, но у клиента устанавливай внешний IP. Узнать его тут.

EvilChaotic 23.02.2012 23:56

Ответ: Black Bird
 
Пропарился с роутером пол дня, ничего хорошего не получилось.
Сервер и клиент написаны на блитце. Не думал, что так все плохо будет с сетью. Намеки на организации архитектуры понял.
Блин, неужели все зря.

Randomize 24.02.2012 09:14

Ответ: Black Bird
 
Цитата:

Сообщение от EvilChaotic (Сообщение 220371)
Пропарился с роутером пол дня, ничего хорошего не получилось.
Сервер и клиент написаны на блитце. Не думал, что так все плохо будет с сетью. Намеки на организации архитектуры понял.
Блин, неужели все зря.

Hamachi :)

Или как сказал МоКа Port Forwarding:
Нечто похожее на это:


Проверить открытость порта из вне можно тут:
http://www.canyouseeme.org/

Ещё бывает, что проблема не в твоём роутере, а у провайдера. Тогда при создании сервера надо чётко указывать ip на котором происходит слушание пакетов. Это можно делать например в RakNet (для Blitz3D есть? А на Blitz3D ли ты пишешь?)
Ещё посмотри у своего провайдера услугу "внешний ip". С такой штукой можно хостить что хочешь без запар вообще.

Цитата:

Сообщение от EvilChaotic (Сообщение 220371)
PS. Squid просто исчез!?

2-3 недели назад был

И да, рад тебя видеть! :)

pozitiffcat 24.02.2012 09:30

Ответ: Black Bird
 
Читал статью какого-то мощного чувака, что все просчеты выполнять только на сервере. Сервер посылает каждому клиенту его данные, тогда будет синхронно, причем что бы исключить рывки при передвижении, нужно передавать не координаты объекта, а кнопки которые он нажал, а они уже обрабатываются клиентом! Короче это жесточайший гемор, я как то баловался танчики писал, что - то получалось, но я так и не осилил работу без глюков. При плохой связи, например получается, что кнопка как-бы заедает... При хорошей связи все окей. Мой совет будешь писать, держи клиент на удаленном сервере VPS, подключай 3G модем и тестируй, добивайся работы без лагов. Тот кто говорит, что на 3G нельзя добиться хорошей работы онлайн - это бред. Я играл в WOW с пингом 400.

moka 24.02.2012 15:09

Ответ: Black Bird
 
Цитата:

Сообщение от pozitiffcat (Сообщение 220387)
Читал статью какого-то мощного чувака, что все просчеты выполнять только на сервере. Сервер посылает каждому клиенту его данные, тогда будет синхронно, причем что бы исключить рывки при передвижении, нужно передавать не координаты объекта, а кнопки которые он нажал, а они уже обрабатываются клиентом! Короче это жесточайший гемор, я как то баловался танчики писал, что - то получалось, но я так и не осилил работу без глюков. При плохой связи, например получается, что кнопка как-бы заедает... При хорошей связи все окей. Мой совет будешь писать, держи клиент на удаленном сервере VPS, подключай 3G модем и тестируй, добивайся работы без лагов. Тот кто говорит, что на 3G нельзя добиться хорошей работы онлайн - это бред. Я играл в WOW с пингом 400.

Ты видимо очень не внимательно читал, т.к. всё напутал.
Клиент шлёт изменение состояния клавишь, всё примитивно просто: игрок зажал вверх, игрок отпустил вверх, и т.п.
Сервер далее считает всё исходя из инпута, далее выдаёт игрокам уже координаты объектов. Выдача данных должна быть в виде снимков мира, в весьма постоянной переодичности.
Синхронности это никакой не даёт - клиент будет отставать сам от себя в ДВА пинга.
А действие других игроков в адрес тебя, будет на сервере обрабатываться с разностью в ТРИ пинга..
Поэтому есть разные методы синхронизации, сам термин называется dead reckoning.
Есть два метода - интерполяция, и экстраполяция. Первый подрузумевает плавное применение данных от прошлого до последнего данного в наличии. Как поняли тут будет задержка - отставание от сервера в ДВА С ПОЛОВИНОЙ пинга.
Поэтому есть экстраполяция. Это попытка предсказывания следующих данных на основе прошлых. Зная направление движения объекта и скорость - не сложно вычислить его будущую позицию. Но это не просто, нужно использовать сплайны.
Дальность предсказывания должна равняться ровно одному пингу между принимающим данные и сервером.
Даже собственные данные, применяются не сразу, а только как достигнут сервер на самом деле, но ещё не пришли на клиент - получается, что сам свои данные будешь силой задерживать во времени в размере своему пингу.
Таким образом все клиенты будут пытаться симулировать мир максимум приблизительно как на сервере в данный реальный момент.
Также отсылая например данные о выстреле на сервер, если это моментальный выстрел (не летящий снаряд), то сервер принимая данные, должен вычислять в прошлом, назад в размере на один пинг от посылающего, т.к. когда он посылал пакет с выстрелом, то основывался на состоянии мира в тот момент на клиенте, но сервер получит пакет позже на один пинг, поэтому он вежливо берёт данные из прошлого, и делает вычисления там.
На сервере нужно реализовывать машину времени, длиной в максимум секунду (имхо), с наличием всех времени зависимых данных на каждый тик за последнюю секунду. Например если у нас UPS (update per second) == 30, то сервер должен хранить времени зависимые данные со всех этих 30 тиков.
Такие данные как положение персонажа - времени зависимые. Или например жив или мёртв - тоже времени зависимое, т.к. игрок Х может умереть от выстрела игрока А у которого пинг 30, а игрок Б тоже убил у себя игрока Х, но пинг у него 200. Убили они его в реальном времени почти в один момент, но игрок Б чуток раньше (на 50 мс например). Но сервер получит сперва пакет от игрока А, и обрабатывает его в прошлом на 30 мс. Далее через ещё 120 мс после обработки, прийдёт пакет от игрока Б, который если вернуться на 200мс назад, убил игрока Х, который чуть позже также был убит игроком А, но ведь игрок Б раньше это сделал, а из-за пинга мы получили данные позже. Но ведь игрок Б - сделал это раньше.
Вот такой пример-парадокс. И таких парадоксов будет уйма, постоянно! Работать с сетью - это большой геморой, и приступать к кодингу сервера, без долгого штурма пачек бумаги и брэйнстормов с друзьями - тупо нельзя, иначе потратите время, потом переписывать будете.

Да и чтобы создать лаги - не нужно 3G, это очень просто симулировать, реализовав очередь при отсылке и приёме от сервера, внеся туда немного хаоса.

pozitiffcat 24.02.2012 15:50

Ответ: Black Bird
 
Интересно а есть ли готовые движки для C++ на основе ГеймОбъектов как в BlitzMax?

Randomize 24.02.2012 16:13

Ответ: Black Bird
 
Цитата:

Сообщение от pozitiffcat (Сообщение 220413)
Интересно а есть ли готовые движки для C++ на основе ГеймОбъектов как в BlitzMax?

Это ты к чему и что за ГеймОбъекты?

Amatsu 24.02.2012 17:32

Ответ: Black Bird
 

А в какой конторе работаешь, если не секрет?


Кстати, имхо сервер тебе лучше написать на пурике. Он прост в освоении после блитца (тоже бейсик по сути). Но он может запускаться под линуксом (то есть сервер ты можешь поднять совершенно бесплатный), у него есть многопоточность, хороший сетевой код, а главное - он не жрет 100% системы как блитц и в нем можно вообще не грузить графический режим

з.ы.

Уж не над Star Conflict случаем работаешь? Уж больно тамошний дизайн на твой похож

pozitiffcat 24.02.2012 17:32

Ответ: Black Bird
 
В BlitzMax реализовано в виде объектов. Какая то хитрая система синхронизации, я уже не помню, баловался года 2 назад, но мне понравилось.
Имею ввиду сетевые движки для c++

Randomize 24.02.2012 17:51

Ответ: Black Bird
 
Цитата:

Сообщение от pozitiffcat (Сообщение 220423)
В BlitzMax реализовано в виде объектов. Какая то хитрая система синхронизации, я уже не помню, баловался года 2 назад, но мне понравилось.
Имею ввиду сетевые движки для c++

BlitzMax/mod/brl.mod/blitz.mod
Все исходники там

Цитата:

Сообщение от Amatsu (Сообщение 220422)
он не жрет 100% системы как блитц

Цикл без задержек должен жрать 100% системы. ( while(True){} напиши в плюсах ) Если в цикле вызывать пускай даже незначительный Delay то управление быстрее перейдёт к остальным процессам в ОС и "жрать" программа на блице будет как положено.

На счёт пурика не согласен. Я считаю, что пурик дырявая неюзабельная кулебяка. Ничего стоящего на нём ещё не видел. Его внутренняя организация - чистой воды хулиганство. Для сервера рекомендую C#, Java ну или BlitzMax (благо он имеет весь нужный функционал) Если тупо потренироваться то можно и Blitz3D.

moka 24.02.2012 18:50

Ответ: Black Bird
 
Насчёт пурика - поддерживаю.
Рекомендую C#, ну или Java. Но по мне так с C# проще работать, и он в некоторых моментах конкретно лучше, а в некоторых (имхо менее значительных, хуже). Плюс msdn документация очень удобная.

Кстати, EVE сервер на пурике расписанный ;)

HolyDel 24.02.2012 20:21

Ответ: Black Bird
 
серверу евы приписывают самые разные языки, от пурика до эрланга )

pozitiffcat 25.02.2012 10:49

Ответ: Black Bird
 
Цитата:

Сообщение от MoKa (Сообщение 220430)
Насчёт пурика - поддерживаю.
Рекомендую C#, ну или Java. Но по мне так с C# проще работать, и он в некоторых моментах конкретно лучше, а в некоторых (имхо менее значительных, хуже). Плюс msdn документация очень удобная.

Кстати, EVE сервер на пурике расписанный ;)

писал сетевые приложения (не игровые), на c++, c#, java, ИМХО удобней всего c#, java чуть по замороченей.

Amatsu 25.02.2012 12:05

Ответ: Black Bird
 
Цитата:

Сообщение от pozitiffcat (Сообщение 220480)
писал сетевые приложения (не игровые), на c++, c#, java, ИМХО удобней всего c#, java чуть по замороченей.

Вы перечитайте пост Эвила и подумайте - при его загруженности, при том что он уже нашел себе специальность, навыки для которой нужно развивать в первую очередь - вы хотите чтобы он после работы ночью сидел и пытался освоить плюсы?

moka 25.02.2012 17:31

Ответ: Black Bird
 
О плюсах речи нету. Но если он желает заниматься сетью, то блиц - не путь.

pozitiffcat 25.02.2012 17:56

Ответ: Black Bird
 
Цитата:

Сообщение от Amatsu (Сообщение 220481)
Вы перечитайте пост Эвила и подумайте - при его загруженности, при том что он уже нашел себе специальность, навыки для которой нужно развивать в первую очередь - вы хотите чтобы он после работы ночью сидел и пытался освоить плюсы?

Что же у него за работа такая на которой нельзя развиваться. Когда я устроился на работу программистом, я знал только Delphi. Потом получая каждый раз новое задание, писал на разных языках, библиотеках, что бы знать их все. Таким образом, я знаю все базовые ЯП, хоть и не профи, гугл на помощь всегда придет.
ЗЫ. не подумайте, что я себя хвалю.. это я просто написал, что в любой ситуации есть выход.

Amatsu 25.02.2012 18:12

Ответ: Black Bird
 
Цитата:

Сообщение от pozitiffcat (Сообщение 220521)
Что же у него за работа такая на которой нельзя развиваться. Когда я устроился на работу программистом, я знал только Delphi. Потом получая каждый раз новое задание, писал на разных языках, библиотеках, что бы знать их все. Таким образом, я знаю все базовые ЯП, хоть и не профи, гугл на помощь всегда придет.
ЗЫ. не подумайте, что я себя хвалю.. это я просто написал, что в любой ситуации есть выход.

Да, ты много написал, вот только сначала ты должен был задать вопрос - а правильно ли ты решил, что Эвил устроился куда-то именно программистом, а не моделлером, навыки которого ему надо сейчас развивать в первую очередь? Или ты вдруг решил, что он мог устроиться на "крутую работу" как программист на блитце?

Платон Александрович 25.02.2012 19:13

Ответ: Black Bird
 
@Randomize

Цитата:

Сообщение от Randomize (Сообщение 220425)
Я считаю, что пурик дырявая неюзабельная кулебяка. Ничего стоящего на нём ещё не видел.

Стоящее это например что?

Цитата:

Сообщение от Randomize (Сообщение 220425)
Его внутренняя организация - чистой воды хулиганство.

Ась?

pozitiffcat 25.02.2012 21:08

Ответ: Black Bird
 
Цитата:

Сообщение от Amatsu (Сообщение 220524)
Да, ты много написал, вот только сначала ты должен был задать вопрос - а правильно ли ты решил, что Эвил устроился куда-то именно программистом, а не моделлером, навыки которого ему надо сейчас развивать в первую очередь? Или ты вдруг решил, что он мог устроиться на "крутую работу" как программист на блитце?

ну вроде как он прогер, вот и решил.

EvilChaotic 25.02.2012 21:13

Ответ: Black Bird
 
Я не прогер, только на блитце.
Устроился сюда моделлером

С плюсами плохо, в третем семестре универа пришлось выучить немного явы. Но чтобы нормально сделать - надо знать больше. Ладно пока что не суть, т.к. пока плотно не собираюсь этим заниматься.

Сервак пока что будет держаться на hamachi. Версия хачика значение не имеет. Завтра я положу сюда первые наработки и надеюсь, что кто-нибудь захочет потестить
Вот данные к хачику:
Лог:BlackBird_server
Пас:BlackBird_server

Сегодня с утра опять сижу и програмлю:
1) Сделал из плейна воду.
2) Из юниверса подключил синглсюрфейсную партикловую систему и сделал первые эффекты.
3) Подключил саундменеджер.
4) Воткнул тайминг на отправку пакетов. Теперь в секунду отправляется примерно 10 пакетов с клиента на сервер и обратно. На клиентах эти значения сглаживаются.
5) Худ буду делать на базе жоперхеда.
6) Сменил характеристики пушек и сделал управление ротацией самолета тверже.
7) PROFIT!
8) Окончательно убедился в том, что физика Bullet работает хреново в ксорсе - чем ниже фпс тем больше дерганье затыки у мешей на клиенте игрока. В юниверсе на простых юнитах тоже, кстати.
+ Самолеты меняют положение стабилизаторов и крыльев в зависимости от режима полета.

В общем все делается на скорую руку, чтобы уже завтра можно было полетать.


Пойду пилить таблицу и ракеты.

Randomize 26.02.2012 00:15

Ответ: Black Bird
 

Цитата:

Сообщение от Платон Александрович (Сообщение 220536)
@RandomizeСтоящее это например что?

Успешные программы сделаные на нём?
Например игры, а не то дерьмо, что хуже семплов Blitz3D?

Цитата:

Сообщение от Платон Александрович (Сообщение 220536)
Ась?

Безобразное IDE.

Не стандартизированное именование функций, поставляемых из коробки

Базовый набор функций для создания "оконных программ" на пару порядков меньше, чем у любого другого визуального языка

Бестолковая система опроса ввода.

Реальная кроссплатформенность достигается только с применением усилий.

Отсутствие ООП.

3D модуль отвратителен.

Amatsu 26.02.2012 01:12

Ответ: Black Bird
 
Цитата:

Сообщение от Randomize (Сообщение 220557)
Безобразное IDE.

Не стандартизированное именование функций, поставляемых из коробки

Базовый набор функций для создания "оконных программ" на пару порядков меньше, чем у любого другого визуального языка

Бестолковая система опроса ввода.

Реальная кроссплатформенность достигается только с применением усилий.

Отсутствие ООП.

3D модуль отвратителен.

То что выделено жирным - нахрена оно нужно серверной части? Под убунту пурик компилит прекрасно, факт (я лично этим занимался), создать на нем обычное консольное приложение не составляет труда. Зачем ему 3д модуль, кроссплатформенность в рамках одной программы и т.д.?


Погуглил про этот Транзас:

Российская группа компаний Транзас (TRANsport SAfety Systems) – производитель и поставщик:

береговых систем безопасности судоходства;
морского и авиационного бортового оборудования;
интегрированных навигационных комплексов;
широкого спектра морских и авиационных тренажеров;
аэронавигационного обеспечения.


:4to: херасебе :4to:

Randomize 26.02.2012 01:51

Ответ: Black Bird
 

Цитата:

Сообщение от Amatsu (Сообщение 220564)

То что выделено жирным - нахрена оно нужно серверной части? Под убунту пурик компилит прекрасно, факт (я лично этим занимался), создать на нем обычное консольное приложение не составляет труда. Зачем ему 3д модуль, кроссплатформенность в рамках одной программы и т.д.?

Это были недостатки пурика, ну да ладно.

Считаешь, что 3d математика не нужна для сервера 3д леталки? (ну это как минимум)

Amatsu 26.02.2012 02:32

Ответ: Black Bird
 
Цитата:

Сообщение от Randomize (Сообщение 220567)


Это были недостатки пурика, ну да ладно.

Считаешь, что 3d математика не нужна для сервера 3д леталки? (ну это как минимум)

Зачем ему обсчет 3д на сервере, если у него тупо корабли-точки и плоскости пола/неба?

Randomize 26.02.2012 02:49

Ответ: Black Bird
 
Цитата:

Сообщение от Amatsu (Сообщение 220575)
Зачем ему обсчет 3д на сервере, если у него тупо корабли-точки и плоскости пола/неба?

А меж полом и небом нет?
3д рейкаст об хулл?
Колиизии и их респонс для воздушных объектов?

Amatsu 26.02.2012 04:13

Ответ: Black Bird
 
Цитата:

Сообщение от Randomize (Сообщение 220577)
А меж полом и небом нет?
3д рейкаст об хулл?
Колиизии и их респонс для воздушных объектов?

зачем, если он делает простую сетевую леталку?
Хотя может я не прав и у Эвила действительно наполеоновские планы

EvilChaotic 26.02.2012 17:38

Ответ: Black Bird
 
Просто миниигрушка будет.
Я через час выложу сюда тест.
Те, кто захочет попробовать подключайтесь постепенно в хамачи.

======================================

Ребят, 20 мин.
Баг с подключением оказался немного крутовытый.

EvilChaotic 26.02.2012 19:13

Ответ: 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 места.

EvilChaotic 26.02.2012 20:21

Ответ: Black Bird
 
Зашибись полетали парни.


EvilChaotic 26.02.2012 21:26

Ответ: Black Bird
 
Спасибо всем, кто потратил время и потестил игру!
Тест закрыт, дальше на следующей недели будет следующий. С новыми фичами! Все получат новые самолеты! Но и читы на этот раз не прокатят :D

L-ee-X 26.02.2012 21:35

Ответ: Black Bird
 
Эх, а я посмотреть хотел ))) Чет тупо виснет! :)

EvilChaotic 26.02.2012 21:36

Ответ: Black Bird
 
Цитата:

Сообщение от L-ee-X (Сообщение 220667)
Эх, а я посмотреть хотел ))) Чет тупо виснет! :)

Сервер лежит. :) И ты в хамачи не подключен :) Свободно 1/8 мест.

HolyDel 26.02.2012 21:37

Ответ: Black Bird
 
блиииин. тут такая туса, а я на работе :(

L-ee-X 26.02.2012 21:38

Ответ: Black Bird
 
О_о как эт все долго, ну лан, тогда уж лучше следующей недели ждать бум :) А так по скринам супер :super:

Amatsu 26.02.2012 22:01

Ответ: Black Bird
 
Подожду версию без хамачи, у меня к нему личная неприязнь

Таки разобрался вчера с хамачи. Так что если что, постараюсь поучаствовать в следующем залете

EvilChaotic 04.03.2012 00:13

Ответ: Black Bird
 
Завтра намечается новый тест, где-то ближе к 16:00
Сделано большое обновление, хотя это не очень коснется новой техники.
  • Теперь добавлена возможность менять высоту машины при помощи Ctl/Space. А также больше смещаться в стороны при помощи A/D.
  • Первичные орудия теперь наводятся мышкой в любом направлении.
  • Добавлена работа с целями.
  • Ракеты теперь имеют большую скорость и наведение.
  • Введен боезапас в целях сокращения халявной стрельбы ракетами :) На карте теперь есть специальные коробки, которые его пополняют. Всего на первом самолете 12 ракет и 2000 снарядов. Коробка полностью перезаряжает все орудия на самолете.
  • Добавлено окошко чата. Можно болтать прямо во время полета.
  • Переделано подключение. Теперь практически всегда идет нормальное подключение к серверу.
  • Добавлена первая база данных сервера. Теперь она хранит и ваши самолеты :) И менять их вам я могу прямо во время игры. Менять ник при входа на сервер - нельзя, иначе база подумает что вы новый игрок и выдаст вам самый первой самолет и обнулит стату.
  • Переделана работа с физикой, гравитация стала минимальна.
  • Попытался убрать лаги, пришлось выбросить цикл с твинингом нафиг. При 70 фпс все двигалось как при 20. Пока что просто на вертсинхре работает. Потом прикручу нормальную организацию цикла.
  • Добавлены новые фичи в худ. Теперь видно боезапас, тангаж двигателей и дистанцию до цели.
  • Из старого Copperhead был вставлен самый тяжелый вертолет со всеми боевыми фичами. Завтра потестим его в деле)
  • Новые эффекты. Анимированные взрывы у ракет/шлейфы и тп. Новые звуки.
  • Новые параметры для орудий, трейсеров и самолетов:
    ProjectileDetonateRadius,ProjectileLauchEnt,Projec tileLauchSoundEnt,ProjectileExploEnt и тп.



Попытаюсь решить такие проблемы завтра:
  1. Все еще хреново работает смерть и Scores
  2. С сортировкой целей какая-то невиданная фигня.
  3. Пересадить Randomize на новый самолет.

Перед началом теста все из списка хамачи будут удалены. Всем старым игрокам нужно будет перезайти. Сделано будет для того, чтобы оставить место для новых игроков, вместо тех, кто участвовать не сможет.

PS. Клиент придется скачать полностью, патчей для старых версий не будет. т.к. обновления коснулись практически все файлы.

EvilChaotic 04.03.2012 14:54

Ответ: Black Bird
 
Можете начинать подключатся к хамачи:
log: BlackBird_server
pass: BlackBird_server

Есть три самолета. Кто хочет летать на чем-то получше, чем первая консервная банка - пишите сюда. Пока еще есть время.

В 16:00 тест, сервер будет включен.


FireOwl 04.03.2012 15:08

Ответ: Black Bird
 
Здорово. Но вот..
"Файл удален" или я не туда посмотрел?

EvilChaotic 04.03.2012 15:14

Ответ: Black Bird
 
Цитата:

Сообщение от FireOwl (Сообщение 221524)
Здорово. Но вот..
"Файл удален" или я не туда посмотрел?

Новый клиент выложу в 16:00, старый уже не нужен.
Читайте, что я пишу выше.

EvilChaotic 04.03.2012 16:05

Ответ: 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) Вы не подключены в хамачи к нашему серверу.

Разрешение игры лучше не менять, иначе может съехать худ.

в хамачи есть еще три места. Очень хотел бы увидеть вас там!)

EvilChaotic 04.03.2012 17:59

Ответ: Black Bird
 
Народу совсем мало.
Скрины не отборные конечно, но вот так:



Рандом отжигает на верте)

Всей толпой на меня :D Harter (c)

Randomize 04.03.2012 18:07

Ответ: Black Bird
 
Вложений: 4
Вид из моей уютной кабины

moka 04.03.2012 18:31

Ответ: Black Bird
 
В общем тестировал сегодня со всеми, очень понравилось, прикольно, но не хватает очень много на стороне клиента плюшек.

Например система стрельбы ракетами, прикольная, т.к. ракеты контролируются мышкой, но при этом это сбивает прицел для туррели. Но это имхо ок.
А вот то что не чувствуется дистанция ракет и других персонажей - это имхо важно.
Для этого есть имхо две идеи как можно это улучшить:
1. Ракеты должны подсвечиваться аугментной реальностью, и иметь данные о дистанции.
2. Радар. На деле это нужно 3д радар, с плоскостью и вертикальными линиями для улучшения ориентации в пространстве и понимании где кто находится. Ракеты тоже должны находиться на этом радаре. Желательно и патроны туреллей.
Конечно такой элемент в интерфейсе весьма тяжёлый, и требует очень много усилий для реализации.

Плюс, ну тут не прими как недостаток - у тебя опыта работы с сетью не так и много, плюс объём работы большой. Но нужна синхронизация и предсказания (экстраполяция), а не интерполяция. Иначе картинки у игроков сильно отличаются..


В такую игру хочется иметь наводную базу с туреллями, которую будут игроки атаковать, точнее две базы (две команды).

EvilChaotic 10.06.2012 16:57

Ответ: Black Bird
 
Появилась возможность играть без хамачи.
Ну как, прошлые версии понравились по игре? Стоит - ли развивать тему?
Скорее всего это последнее, во что я вложусь на ксорсе.

Планируется гаражик, что-то вроде World of tanks, можно будет настроить свой самолет , купить новый и тп. Ну и по игре самой - режим с базами, как Мока предложил.

Что скажите?

St_AnGer 10.06.2012 17:21

Ответ: Black Bird
 
Ни на один тест увы не смог попасть, а очень хотелось, люблю авиасимуляторы. Скрины радуют. Если есть время - конечно развивай.

Harter 11.06.2012 16:26

Ответ: Black Bird
 
Продолжай, если хочется.
Мне понравилось как мы полетали в прошлый раз)

EvilChaotic 28.06.2012 18:56

Ответ: Black Bird
 
Работа продолжается.
Поработал в сабере, получил опыта, открыл блек бирд. Сразу кучу всего пределал) Графика снова будет переработана. Прикрутил оптимизации, поднял около 30ти фпс, это хватит, чтобы обустроить игровую сцену. Убрал лишнее из худа, переделал работу с камерой.
на карте предположительно будет ночной каньон.

Может кто-нибудь подкинит каких-нибудь крутых идей, кроме выше пречисленных? Идеи должны быть направленны на поднятие гемплея.

Пока идеи такие:
1) Добавить на Q/E какие-нибудь финты с уворотами от ракет
2) Можно сделать какие-нибудь абилити для игроков на кнопку X. Например сброс ИК ловушек, починка и тп.
3) Ангар, где можно настроить самолет и купить новый, также с оружием для него.
4) Добавить небольшую РПГ систему. За сбитого игрока будет начисляться опыт, за опыт начисляется уровень, уровень может давать доступ к новым самолетам и оружиям, абилитям. Сразу возникает вопрос как потом отделять нубов от высокоуровневых игроков.
5) Можно попробовать воткнуть на мой сайт статистику.
6) Есть идея летать не только на самолетах. Хочется какие-нибудь штуки с множеством турелей что-ле. Или открыть классы самолетов, сделать перехватчиков, истребителей, что-то в таком духе. Отсюда можно будет делить абилки.
7) Ракеты поделить на:
  • а) Не управляемые, большие повреждения и высокая скорострельность.
  • б) Ручное управление мышкой, средние повреждения
  • с) С наведением на таргет автоматически с использованием центрального круга(захват цели будет происходит в центре экрана, во время захвата нужно держать цель именно в круге).
8 ) Написать восьмой пункт просто для вида.
9) Убрать физику баллет.

moka 28.06.2012 20:22

Ответ: Black Bird
 
Переделать сетевую часть, с нормальной и честной синхронизацией с экстраполяцией (а то из-за задержки, стреляя и попадая - не попадает).

EvilChaotic 28.06.2012 20:37

Ответ: Black Bird
 
Цитата:

Сообщение от MoKa (Сообщение 231763)
Переделать сетевую часть, с нормальной и честной синхронизацией с экстраполяцией (а то из-за задержки, стреляя и попадая - не попадает).

Сетевую часть можно передать. Только мне нужны все тонкости правильной реализации. Физику баллет я скоро отключу.

Знач так, идея такая.
На клиенте будут отслеживаться нажатые клавиши, кнопки посылаются на сервер, сервер их обсчитывает и посылает посчитанные пакеты клиентам. Полученные пакеты клиент будет приводить в действие на экране игрока, движение самолетов будет немного сплайниться.

moka 29.06.2012 03:38

Ответ: Black Bird
 
Суть "справедливых" решений заключается в том кто решает что игрок попал, а кто нет, и на основании каких данных.
Т.к. избежать задержки невозможно, и данные с одного клиента будут идти до другого за промежуток времени задержки одного клиента плюс задержки другого, то тут нужно думать о симуляции "будущих" данных на клиентах.
Суть проста: Authoritative Server <> Client модель самая стойкая и популярная на данный момент.
Сервер всегда прав и просчитывает всё сам.
Клиент лишь "просит" у сервера всё, и отдаёт ему собственный ввод.

Сервер получает ввод и симулирует поведение сетевых объектов.
Затем с определённой частотой раздаёт клиентам пакеты состояний. Частота раздач намного меньше чем частота симуляции. Например симуляция может быть 30 тактов в секунду, а раздач 10 в секунду.
Следственно клиент должен сглаживать данные. Но т.к. мы уже говорили о том что клиент должен предсказывать, следственно получая данные от сервера, клиент должен вычислять предполагаемые будущие данные, и затем симулировать поведение уже с расчётом на предполагаемые данные. Это называется экстраполяция.
Долгота предположений должна зависеть от промежутка времени между пакетами состояния мира (в данном случае 100 мс), плюс собственный пинг (сглаженный по времени), таким образом клиент будет пытаться предположить весьма далеко состояние которое на самом деле сейчас происходит на сервере.

Задача симулировать как можно ближе реальное состояние на данный момент у всех клиентов.
Собственные данные, применять сразу, но смешивать с предполагаемыми данными как и других клиентов, сглаживать границу своей симуляции так, чтобы не сильно отличалось от данных при экстраполяции, но и не чувствовалось лага, иначе игроку очень не понравиться задержка реакции, тем более в такой активной игре.

Далее самое сложное, это серверная часть. Т.к. симулируем всё на клиентах приближенно к серверным в реальном времени данным, ошибка будет, но мы её не учитываем. Задача тут, является вычисления в прошлом.
Например клиента А с задержкой 80мс, в момент 100мс, стреляет. Пакет приходит на сервер уже в момент 180мс, но данные основывались на 80мс времени ранее. Для справедливости, сервер должен посмотреть на критичные данные для справедливых вычислений (позиции самолётов), на 80мс назад по времени с момента получения пакета (180мс), сделать вычисления, и послать клиенту ответ. Клиент же уже всё симулировал (выстрел), но реально попал или нет, узнал только от сервера на 300мс. Почему не 260? Потому что сервер посылает пакеты обновлений каждые 100мс. И лишь потом мы можем увидеть изменения в ХП у противника, и возможно эффекты взрывов (если уже не симулировал).
Отклик будет 200мс хоть и задержка у клиента 80мс.
Хитрости которые можно тут применить, это полёт пули на клиенте, как раз не мгновенный, когда сервер же вычисляет всё сразу (лучи), тем самым можно клиенту дать инфу о поподаниях, даже до того как у клиента пуля долетит до противника. Следственно с такой хитростью, упрощается логика на сервере, и не чувствуется лага.

EvilChaotic 30.06.2012 17:55

Ответ: Black Bird
 
Ок я понял. Спасибо.
Рассихра происходит из-за отсутствия алгоритма, который будет считать следующее положение тела еще до прихода пакета. Особенно на высоких скоростях.

И да, еще раз подумал насчет подсчетов попаданий. У меня сделано не правильно, мягко говоря.
Суть в том, что текущая система зависима от фпс клиента. Полный п*.

Новая система будет примерно такая, основанная на таймере.
У пушки будет радиус действия, т.е. скорость * время на жизнь в секундах.
До цели будет посчитан радиус, если он в зоне поражения, и игрок стреляет то проверяем как стоит на клиенте прицел.
Если прицел будет стоять в положении на опережении, а цель прибудет в будущую позицию вместе с пулей через дистанцию / скорость времени то засчитываем попадание. Отсюда следуюет, что все эти трейсеры и ракеты будут просто тупо выступать в качестве эффекта) Как-то так.
  • Убрал эту стремную физику и теперь самолет игрока не трясется.
  • Добавил всякие эффекты на форсаже, двигатели меняют цвет горения зависимости от скорости.
  • Ленс флеер, возможность обставить сцену статическими объектами.
  • Шлейфы vblur
  • Теперь есть конекшен таймуат, если сервер не доступен переходит в офлайновы режим, пишет ошибку.
  • Озвучка, радио переговоры в самолете.
  • Q/E - бочка
  • Чем сильнее наклон самолета, тем выше звук "искажения воздуха" ala Battletfield 3


Пока вот пилю, сломались максы, переустановка не помогает..тупо провисы на загрузке. Хз как теперь экспортить.

4yBa4Ok 30.06.2012 21:39

Ответ: Black Bird
 
Шикарно

EvilChaotic 01.07.2012 13:04

Ответ: Black Bird
 


Игра не работает.
Зае***л этот ксорс. Эти скрины последнее, что я сделал на нем.


Часовой пояс GMT +4, время: 03:38.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot