connect | Дата: Вт, 2009-09-22, 16:05 | Сообщение # 1 |
Активный участник
Группа: Модераторы
Сообщений: 204
Награды: 1
Статус: Offline
| В этой ветке я предполагаю вести обсуждение нового сетевого кода для игры. Изменение протокола запланировано мной на последнюю стадию, предшествующую полному переходу с 075 на R2, либо даже на время после этого события. А пока я буду складывать тут обрывки мыслей и статей по различным моделям сетевого кода в известных играх, найденных в Сети. Ссылки * http://www.ra.is/unlagged/ от автора unlagged для Quake III * http://www.gamedev.ru/code/articles/?id=4254 С\С++ примеры сетевого кода * http://www.delphisources.ru/pages....04.html Введение в сетевое программирование
|
|
| |
connect | Дата: Вт, 2009-09-22, 16:11 | Сообщение # 2 |
Активный участник
Группа: Модераторы
Сообщений: 204
Награды: 1
Статус: Offline
| Серверная история событий Прием заключается в хранении на сервере происходящих на протяжении некоторого времени событий. Эти данные могут использоваться серверем при обсчете "запоздавших" пакетов от игрока с большим пингом. Клиентская обработка стрельбы Есть мод для ку3 с названием zero ping mod (zpm), его особенность заключается в том, что факт попадания в противника обсчитывается на машине игрока и отсылается серверу уже как данность. Пакеты обрабатываются по мере их получения. Т.е. если два человека отправляют пакет, содержащий информацию об их попадании в третьего игрока, фраг будет зачислен тому, чей пакет придет быстрее.
|
|
| |
connect | Дата: Вт, 2009-09-22, 16:24 | Сообщение # 3 |
Активный участник
Группа: Модераторы
Сообщений: 204
Награды: 1
Статус: Offline
| Quote (Mads) // Сетевой код: - увеличить максимальное кол-во игроков до 16. не для игры 8на8, а например чемп тдм 4в4: 8 игроков, 2 коача, судья(подробнее в пункте Общее) - нужны дедики. сделать такую же консольку как в ку3. графика не нужна, значит можно и под никс системы написать и под винду. - сделать, чтобы можно было запустить сервера на одной машине на разных портах. коннект будет происходить как и в ку3 connect xxx.xxx.xxx.xxx:port - а для простоты запуска дедика будет бат файл запускающий нфк.екзе дедиком. настройки выведем отдельным конфигом. и тут следует определить некие стандарты игры с соответсвующими конфигами. например: дуель, 2в2, цтф2в2, дом (3в3, нет карт, только дом1, на которой как раз получается 3в3), цтф (3в3, опять же нет карт. на цтф1 возможно играть 3в3, на цтф2 более, чем 2в2 не поиграешь, другие карты откровенно сосут), тдм (4в4, есть тестовые карты: новая тдм1, засада, 4х4, деланная когда-то видимо спайком) - в нфк нельзя играть за НАТом - откровенно говоря, сетевой код нфк полное говно. вечные лаги и пакетлоссы мешают нормальной игре по интернету. Нужны оптимизации как в цпма, по-скольку там сетевой код, наверно, лучший в мире на сегодняшний день(можно играть с америкой с пингом 150;)). например попадание инстант вепонов определяются на клиенте и тп. по этому поводу можно поговорить с курилкой или кейном, может подскажут #promode.ru@irc.quakenet.org Quote (Enforcer) Сейчас получается так, что координаты полета снарядов и прочее, сначало отсылаются серверу потом приходят тебе и только потом вырисовывается сам снаряд... Это есть зло Вариант фикса: вырисовывать всё нормально на клиентских машинах и на сервере, и только потом отсылать координаты, получается так что лагать ты будешь немного у дргих (если будешь) но в тоже время лаги твоей игре мешать не будут Второе это то что иной раз игроков типает при сильных лагах, он появляется неизвестно, где-то респаунится по несколько раз и прочее, надо бы както с этим бороться начинать потихоньку... Quote (Rh) Бывает так, если на серве 3 игрока (включая серва), то все нормально. Заходит 4-й и всех начинает лагать. Причем бывают т.н. "лагеры", которые лагают на данном серве всегда. А бывает так, что если этот 4-й игрок будет не 4-м, а 3-м (он войдет, а другой выйдет), то все нормально. А когда все 4 на карте, но начинаются лаги. Что происходит? - повышается пинг; - не срабатывают двери (клиент не может пройти, т.к. у него дверь закртыта, а на серве (всегда) и у других игроков (иногда) эта дверь отображается как надо, т.е. открытой); - все происходит с задержкой (через предмет пробежал, а он изчез с карты и появился в параметрах игрока (например армор) через 1-2 сек или больше; стрельба тоже с задержкой; все с задержкой; от рокета не увернуться т.к. у клиента отображается, что рокет еще летит, а на серве - что уже попал; и т.п.); - предметы иногда берутся игроком, но у него это не отображается (предмет как бы лежит на карте, но его там уже нет); - порой клиентам не видно, то что кто то или он сам взял квад или другой повэрап (т.е. игрок кваженый, а отображается как обычный); - баг, который у нас называется "слайдшоу", когда игрок вроде бы не лагает (предметы, двери, пинг - все нормально), но у этого игрока остальные игроки отображаются криво (не постоянно, а время от времени в течение игры) и он сам у других игроков переодически отображается также - появляется из ниоткуда, пробегает через стены, полтолки и т.п. Т.е. НФК его показывает не там, где он есть на самом деле. Этот баг сильно заметен на одной из старых версий НФК (тех что до 075), но и в 075 он иногда появляется и от чего зависит не ясно. Встречается в основном, когда 4 и больше игроков (т.е. что то вроде того, как описано выше - 3 игрока нормально +1 начинается вот эта хрень). Возможно это происходит и при меньшем количестве игроков, но при 4 такое было часто. - даже по лану (в т.ч. в комп.клубе) встречается баг - "даблкил", когда один игрок умирает за один раз дважды. Т.е. например два игрока стреляют в третьего и он умирает - каждому из стрелявших дают по фрагу (если команда, то ей два фрага), из убитого выпадают два оружия вместо одного (см. демку № 3 - на 3:55 - игра была на лан чемпе в комп.клубе). Также это возможно при игре 1на1, когда игрок себя случайно убивает своим рокетом, а в этот момент в него стреляет противник - то могут отнять за суицид фраг и еще приплюсовать один фраг врагу (тоже было на чемпе в комп.клубе). Если есть такая возможность, то лучше наверно будет "выдрать" нафиг старый сетевой код и вставить туда новый, хороший на базе того же Ку3, который в основе своей является мультиплеерной, сетевой игрой и по логике с сетевым кодом там должно быть все четко.
|
|
| |
Enforcer | Дата: Вт, 2009-09-22, 16:38 | Сообщение # 4 |
Инжинер
Группа: Модераторы
Сообщений: 1161
Награды: 9
Статус: Offline
| Rh оооо вот это он четко сетевой глюк вычислил а я собстно и непонимал отчего он, ОЧЕНЬ хорошо ! т.к. часто жалуются мол двери в цтф и прочем не открываются... Баги у нас есть сейчас надо хотяб торетически прогнать что как менять реально ли заменить сетевой код либо конкретно залать этот... И всё это подробненько это представить чтоб иметь четкое представление о том что как будет менятся и где в каких местах...
|
|
| |
connect | Дата: Вт, 2009-09-22, 17:05 | Сообщение # 5 |
Активный участник
Группа: Модераторы
Сообщений: 204
Награды: 1
Статус: Offline
| Чем больше сетевых багов нфки, мы сможем собрать, тем мне будет проще понять специфику.
|
|
| |
Rh | Дата: Вт, 2009-09-22, 22:04 | Сообщение # 6 |
Участник
Группа: Модераторы
Сообщений: 148
Награды: 4
Статус: Offline
| Quote (Enforcer) Однако там сеть имхо настолько связана с игрой что просто караул... проще наверно взять охрененный нож вырезать вобще весь мультиплеер оставить хотсит ну сетап и ещё пару пунктов, и отмочить новый мультиплеер в отдельном *.PAS файле на БАЗЕ ХОТСИТА какбы так... Имхо жесткачь нуу я высказал идею, версию. Я понимаю, что все это ляжет на плечи Коннекта, ну или еще кого, что возьмется помогать. Но никак не на мои. Но тем не менее придерживаюсь примерно такой же точки зрения. Другое дело я даже не знаю насклько глубоко надо его ампутировать. По мне так (чисто интуитивно) - чем глубже, тем для здоровья больного - лучше. А потом пришить новый, хороший. А не пытаться разобраться в том, что есть, пытаясь починить по кусочкам. Ну это я так. В десятый раз об одном и том же ).
|
|
| |
coolant | Дата: Ср, 2009-09-23, 08:36 | Сообщение # 7 |
Админ
Группа: Администраторы
Сообщений: 1109
Награды: 11
Статус: Offline
| Еще один баг, который происходит у меня почти в кадой игре - Когда игрока убивают, он не может реснутся по нажатию на выстрел, приходится ждать пока пройдет forcerespawn, что для ctf, dom, ast может обернутся проигрышем... Quote (connect) "даблкил", когда один игрок умирает за один раз дважды. Т.е. например два игрока стреляют в третьего и он умирает - каждому из стрелявших дают по фрагу Не только, при мне было не раз, когда за одно убийство давали два фрага одному игроку. Еще бывает так, что при смене карты серером, у клиента она не меняется (очень редко, но бывает). При нажатии на выстрел клиентом, на сервере выстрел не происходит. Когда клиент начинает стрелять из шафта, луча не видно и он не наносит дамаг, но патроны расходуются Не критичные глюки: При одновременном заходе на сервер двоих человек, одного не пускает. Когда сервер возвращается после альт-таба, все клиентские выстрелы за время альт-таба происходят одновременно. В общем основная масса клюков из-за пакетлоста, как его удастся решить, то играть станет намного легче.
|
|
| |
Rh | Дата: Ср, 2009-09-23, 13:52 | Сообщение # 8 |
Участник
Группа: Модераторы
Сообщений: 148
Награды: 4
Статус: Offline
| Quote (coolant) Когда сервер возвращается после альт-таба, все клиентские выстрелы за время альт-таба происходят одновременно. Да. Когда серв уходит в альт-таб, то остальные игроки могут двигаться, стрелять. Но урон в это время не наносится (рокеты, гранаты не взрываются, луч рейла не отображается) сами рокеты, гранаты, плазма и луч шафта отображаются. Двери не срабатываю и т.д. И только после возвращения серва из альт-таба, как сказал coolant, все выстрелы сделанные за это время наносят урон, и отображается то, что не отображалось во время альт-таба. Можно сделать так, что бы при уходе серва в альт-таб, остальные игроки могли продолжать нормальную игру? А над сервом был бы просто значок, что он в альт-табе (как сейчас). Но что бы его можно было, например, убить ). И сюда же: Когда игрок-клиент выходит альт-табом, то его через некоторое время (причем довольно быстро) дропает с серва. Это не удобно, когда, например собираешь народ и переодически вылазишь в мирку. Убрать этот дроп.
|
|
| |
Enforcer | Дата: Ср, 2009-09-23, 16:51 | Сообщение # 9 |
Инжинер
Группа: Модераторы
Сообщений: 1161
Награды: 9
Статус: Offline
| * пометочку для себя сделать в моде встроенный ирк чат чтоб люди не вылазили с игры когда собирают народ ))
|
|
| |
nurupo | Дата: Чт, 2009-09-24, 08:38 | Сообщение # 10 |
Форумозависим
Группа: Модератор Форума
Сообщений: 1124
Награды: 5
Статус: Offline
| Enforcer, ты уже давно об этом говорил, но так почему-то и не сделал))) Ну вроде все глюки перечислили, мне добавить нечего)) Кстати насчёт айтимов, которые не исчезают при их получении... Бесит, когда на ctf ты возвращаешься на базу и у тебя там стоит флаг и ты радуешься, что мол не успели забрать, а тут мимо пробегает чел из другой тимы с твоим флагом и убивает тебя xDDD Вот это реально пипец))
|
|
| |