HLFX.Ru Forum Страницы (43): « Первая ... « 26 27 28 29 [30] 31 32 33 34 » ... Последняя »
Показать все 636 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Движкотред (https://hlfx.ru/forum/showthread.php?threadid=5356)


Отправлено Дядя Миша 22-12-2021 в 07:27:

Цитата:
FiEctro писал:
что все твердые тела должны обрабатываться единым образом

Живой человек и тумбочка это по твоему одинаковые твёрдые тела?
Никогда не принимай на веру то что написано в пейперах, если они не ссылаются на реально существующие игры. А если ссылаются - запусти эту игру и посмотри как оно там выглядит. Может там и есть тот самый мешок с гамном.

Все физические движки, которые были написаны в промежутке между 1998-м и 2006-м годом, как бы это помягче сказать - не учитывают наличие такой креатуры, как игрок. На них хорошо делать зрелищные сценки, гоночки, бильярды всякие. Но как только в сцену добавляется игрок, начинаются проблемы. Это понимали в Крайтеке, когда изначально писали свою физику, это поняли в Вальве, потому что в Сорс2 тоже самописный движок.
Рано или поздно тоже самое произойдет и с Юнити и Унреалом.
А эти симуляторы забудут и дропнут как страшный сон. Ты обрати внимание, что из них из всех по сути выжил только PhysX и то лишь потому, что авторы Новодекса изначально вдохновлялись квейком и ввели хотя бы кинематические тела изкаропки. У хавока на старте не было даже этого.
Но машинки там отвратительные. И до сих пор ситуация блокировки двери игроком не разрулена. Раньше в хидерах был хотя бы камент по этому делу, а потом его технично удалили.
В типичном игровом мире овердохрена вещей которые играют важную роль в геймплее, но при этом не являются честно симулируемыми.
Вот скажем взять конвейерную ленту. Это просто анизотропная поверхность. В старом физиксе такая была, в новом её выбросили.
Про взаимодействие с лифтами-давилками я вообще молчу. Опять же ни один из физических движков не учитывает наличие предиктинга.
Есть только вероятность, что это сработает. В итоге разработчик не контролирует почти ничего. Зато бочки реалистично катаются.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 22-12-2021 в 07:36:

Тоесть с дверями и лифтами особо вариантов нет? Либо удалять колайдер, либо толкать по ортогональному давлению вектору? Как вообще платформе узнать что на её пути застрял объект? И что делать в этом случае? Умножать вектор её движения на 0? Да и кинематический игрок сам как платформа будет вдавливать другие ригидбоди в стены.

Цитата:
Дядя Миша писал:
Все физические движки, которые были написаны в промежутке между 1998-м и 2006-м годом, как бы это помягче сказать - не учитывают наличие такой креатуры, как игрок. На них хорошо делать зрелищные сценки, гоночки, бильярды всякие. Но как только в сцену добавляется игрок, начинаются проблемы. Это понимали в Крайтеке, когда изначально писали свою физику, это поняли в Вальве, потому что в Сорс2 тоже самописный движок.
Рано или поздно тоже самое произойдет и с Юнити и Унреалом.
А эти симуляторы забудут и дропнут как страшный сон. Ты обрати внимание, что из них из всех по сути выжил только PhysX и то лишь потому, что авторы Новодекса изначально вдохновлялись квейком и ввели хотя бы кинематические тела изкаропки. У хавока на старте не было даже этого.


В юнити как раз физикс, но кинематический игрок там отвратительно взаимодействует с окружающим миром. Ситуацию ещё усложняет то что информацию о коллизии с этим миром можно получить в очень скудном количестве. В то время как с ригидбоди можно обрабатывать каждое касание.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 22-12-2021 в 07:47:

Цитата:
FiEctro писал:
В юнити как раз физикс, но кинематический игрок там отвратительно взаимодействует с окружающим миром

В ксаш-моде тоже Физикс. Потому что все остальные оказались еще хуже.
Впрочем даже там мне пришлось нагородить кастомную коллидилку.
Иначе игрок не скользил вдоль плоскости, постоянно застревал.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 22-12-2021 в 07:51:

Цитата:
Дядя Миша писал:
В ксаш-моде тоже Физикс. Потому что все остальные оказались еще хуже.
Впрочем даже там мне пришлось нагородить кастомную коллидилку.
Иначе игрок не скользил вдоль плоскости, постоянно застревал.


В юнити это довольно просто решается, чуть выше земли создаётся ещё один колайдер с нулевым трением.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Chyvachok 22-12-2021 в 10:25:

Насчет физ джижков, а можно ли вообще адекватно учитывать ситуацию когда дверь зажимает проп? Ведь трясучка зажатого предмета это не редкость, вспомнить ХЛ2 и Гмод в особенности, или тот же Сталкач, где тоже не редкость когда раггдол встряет в стену и его дико трясет.

В Сталкере еще очень не удобная настройка физических шейпов, там только можно определенный примитив указать для кости, прямоугольник, цилиндр или сфера, очень геморно настраивать шейпы для сложных физических объектов, помню матерился знатно когда решил перенести Скорпиона из УТ2004 (Тачка такая кто не играл в УТ2004) в Сталкер, там эти шейпы если это не квадратная нива довольно сложно сделать, приходилось добавлять кости чисто для шейпов, и прочий изврат, в ХЛ2 намного лучше придумали с физической моделью. Кстати заодно понял что не так со сталкерскими машинами, у них в принципе нет подвески.


Отправлено FiEctro 22-12-2021 в 11:06:

Цитата:
Chyvachok писал:
там только можно определенный примитив указать для кости, прямоугольник, цилиндр или сфера, очень геморно настраивать шейпы для сложных физических объектов,


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

Цитата:
Chyvachok писал:
Насчет физ джижков, а можно ли вообще адекватно учитывать ситуацию когда дверь зажимает проп? Ведь трясучка зажатого предмета это не редкость, вспомнить ХЛ2 и Гмод в особенности, или тот же Сталкач, где тоже не редкость когда раггдол встряет в стену и его дико трясет.



Трясучка происходит когда проп уже провалился достаточно глубоко либо вообще за карту но связан с другими частями объекта находящимися ещё на карте если это регдолл. А так его просто выталкивает и всё, вопрос только в какую сторону. В юнити обычно если два колайдера застряли друг в друге их либо выталкивает, либо они в этом месте игнорируют колизию и проваливаются друг через друга. Дребезг тоже встречается, но в освновном в тех случаях когда один объект выталкивает ригидбоди внутрь другого, вот они так между собой его и пинают туда сюда.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Chyvachok 22-12-2021 в 11:37:

Цитата:
FiEctro писал:
Это везде так


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

С Трясучкой, в ХЛ2 обычно она если объект придавило, а в сталкере раггдолы сами по себе встряют в стены.


Отправлено Дядя Миша 22-12-2021 в 12:47:

Цитата:
Chyvachok писал:
а можно ли вообще адекватно учитывать ситуацию когда дверь зажимает проп?

Без проблем. Если физический движок изначально точился под игровые ситуации, а не под "максимальную реалистичность симуляции", которая в игровых условиях нахрен никому не нужна. В сталкере бродишь часами по ландшафту, вдруг споткнулся о бочку, а она взяла и покатилась по склону.
Первая мысль - это чё? Вторая мысль, а тут же физика есть!
Вот только никому ни холодно ни жарко, если бы эта бочка была намертво припаяна к земле. На геймплей это вообще бы никак не повлияло.

Цитата:
Chyvachok писал:
там только можно определенный примитив указать для кости, прямоугольник, цилиндр или сфера

Это абсолютно везде так. Жирно будет персам полигональную коллизию каждый кадр перестраивать, да и смысла нет.

Цитата:
Chyvachok писал:
в ХЛ2 намного лучше придумали с физической моделью

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

Цитата:
FiEctro писал:
Трясучка происходит когда проп уже провалился достаточно глубоко либо вообще за карту

Я уже объяснял отчего берётся эта трясучка. В халфах все примитивы имели объем. Можно было взять произвольную точку в пространстве и сразу узнать где она находится - в пустоте или внутри солидного тела.
Сейчас вся коллизия полигональная, поэтому внутри любого тела - пустота. Если что-то в чём-то застряло, мы даже не можем понять что именно произошло и как это исправить. При том что ни один из вышеописанных движков очень не любит, когда телам напрямую присваивают новую позицию, потому что на новой позиции может оказаться что? Правильно, скопление других твёрдых тел. Из огня да в полымя. Поэтому применяется идиотский, но единственно возможный метод расталкивания объектов. В подавляющем большинстве случаев это неплохо работает и игрок вообще не замечает этого выталкивания.
Но иногда, когда объект уходит слишком глубоко начинается эта свистопляска. При том подходе, который используют эти движки никакого решения этой проблемы не существует. Единственное решение, которое напрочь исключало подобные проблемы - это возможность трассировки не точкой, не примитивом, а самим объектом. Поскольку объект может быть произвольной геометрии, задача сложная и в этих движках нет подобной возможности.
Как работают эти движки? Двигают все объекты. Затем смотрят, какие пересеклись друг с другом и начинают их расталкивать в полном соответствии с законами физики. Поскольку это внутри кадра, заметить то, что тела каждый раз друг в друга влезают невозможно. Но иногда попадается такое сочетание тел, что они застревают. То ли скорость высокая, то ли форма неудобная, то ли таймстеп из-за лага резко вырос.
Впрочем там всё держится на таймстепе и единственное предложенное решение - разбивать слишком большие шаги на сабстепы. Вот примерно так это и работает. В кваках оно не так. Там выполняется именно трассировка формой объекта вообще без учёта времени. Т.е. время никак не влияет на стабильность симуляции. А в дуум3 эта трасса может быть не только ббоксом, но и любой другой формы, втч и вогнутой.
Поэтому там нет никаких проблем, присущих этим физ.движкам, но есть другая проблема - деревянность симуляции. Трасса ведь лишь коллидит с объектом, но не двигает его. С другой стороны, в играх реалистичность симуляции не особо и нужна. Как раз потому что подавляющее большинство колоизиий это пара статика+динамика. А физ.движки всегда точились на пару динамика+динамика. Чтобы пирамида из бочек в демке красиво разваливалась. Но в играх это нахрен никому не упало.

Добавлено 22-12-2021 в 15:47:

Цитата:
Chyvachok писал:
сам генерит конвексный меш который как кулек всюмодель обворачивает

Hull Points

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Chyvachok 22-12-2021 в 13:50:

Цитата:
Дядя Миша писал:
сталкере бродишь часами по ландшафту, вдруг споткнулся о бочку, а она взяла и покатилась по склону.
Первая мысль - это чё? Вторая мысль, а тут же физика есть!


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

А вообще лично я обращяю внимание если в игре физика заюзана, к примеру первый Кризис в свое время очень порадовал своей разрушаемостью пальм, мебели и прочего, меня лично игра с физикой вполне может развлечь сама по себе. Вторая часть жаль увы потеряла вообще все фишки первой части кроме супер костюма, ни физики, ни уровней-песочниц, тогда вообще было проклятие Дутого Калла, когда все игры стали клонами Call Of Duty-подобных игр. Вообще именно взаемодействие с пропами в Кризисе одно из лучших, в отличии от ХЛ2 много предметов можно частично разрушать к примеру.

Кстати мне интересно, а насколько сложно определять что объект тащится или катится если он круглый, чтобы допустим добавить зацикленный звук бочки которая катится по склону, а не серия ударов игралась к примеру? В ХЛ2 вроде есть такое, в игре не сильно обращял внимание, но видел что есть звуки именно катания и тащения.


Отправлено Дядя Миша 22-12-2021 в 14:57:

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 23-12-2021 в 10:52:

Ещё такой вопрос, каким образом игрок определяет в халфе находится ли он на движущемся объекте или нет? И каким образом передаёт ему трансформации, особенно интересно - вращение, например когда игрок залез на фанк_ратинг.
Я так понимаю надо его при касании переводить как то в локальное пространство платформы, но не очень понимаю как, может формула какая есть?

>> Звук зациклен, но не с начала, а с первой трети.

Это в коде так?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Ku2zoff 23-12-2021 в 12:52:

Цитата:
FiEctro писал:
Это в коде так?

В самом звуке есть cue points. Они указывают начало и конец лупленного участка. То есть, звук начал играться, и играется до тех пор, пока не вызвать STOP_SOUND, или EMIT_SOUND с каким-нибудь другим (нелупленным) звуком, например null.wav.

Добавлено 23-12-2021 в 19:52:

ЕМНИП, звуки платформ, лифтов, дверей проигрываются таким способом.


Отправлено Дядя Миша 23-12-2021 в 13:06:

Цитата:
FiEctro писал:
каким образом игрок определяет в халфе находится ли он на движущемся объекте или нет?

Игрок об этом не знает ничего. Ну то есть он может проверить, на какой энтите он стоит, но в этом просто нет необходимости.

Цитата:
FiEctro писал:
И каким образом передаёт ему трансформации, особенно интересно - вращение, например когда игрок залез на фанк_ратинг.

Игрок не передаёт объектам никаких трансформаций. Ротатинг вращается сам по себе, а не потому что игрок на него залез. Может быть ты имеешь в виду такой ротатинг, с зубцами, уперевшись в которые, игрок бы смог его вращать, но в халфе такого нет, сам знаешь.

А если ты имеешь в виду, как ротатинг вращает самого игрока, то это делается в коде ротатинга, а игроку просто каждый кадр снимается флаг FL_ONGROUND, который в современных физ.движках является аналогом функции WakeUp или что-то вроде этого.

Цитата:
FiEctro писал:
Это в коде так?

Почему в коде? В звуке расставлены метки cue. Расставлять их можно с любого момента, хочешь полностью зацикленный звук, хочешь повтор со середины, да откуда угодно.
С этим кодом был единственный баг, что сообщение об остановке звука не всегда доходило с сервера, но это проблемы не звукового движка.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 23-12-2021 в 13:52:

Цитата:
Дядя Миша писал:
А если ты имеешь в виду, как ротатинг вращает самого игрока, то это делается в коде ротатинга, а игроку просто каждый кадр снимается флаг FL_ONGROUND, который в современных физ.движках является аналогом функции WakeUp или что-то вроде этого.


Да, я имею ввиду игрока стоящего на вращающейся платформе сделанной либо как func_rotating либо func_train, когда он вращается вместе с ней и может свободно по ней ходить. А про OnGroud странно, зачем его снимать? Ведь платформа это тоже поверхность на которой можно ходить и прыгать.

Я думал там что то вроде Transform Move = plat.position + input.position.normalized.

Где plat данные о перемещении платформы, а input направление получаемое с клавиатуры. Ну либо ещё как вариант назначать игрока дочерним объектом платформы. В общем интересно как оно там реализовано.

Цитата:
Дядя Миша писал:
Почему в коде? В звуке расставлены метки cue. Расставлять их можно с любого момента, хочешь полностью зацикленный звук, хочешь повтор со середины, да откуда угодно.


В какой программе такие метки ставить можно? Как пример.

Цитата:
Ku2zoff писал:
например null.wav.


Я вот кстати никогда не понимал прикола этой штуки. Там записан какой то пердёж, и при каждом воспроизведении звука у дверей и платформ слышен этот пердёж. Для чего это сделано?


__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 23-12-2021 в 14:43:

Цитата:
FiEctro писал:
когда он вращается вместе с ней и может свободно по ней ходить

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

Отсюда же и понятно зачем снимать флаг FL_ONGROUND. В пример с балкой, платформа бы ушла из под ног, а игрок так бы и остался висеть в воздухе. Правда ровно до момента начала собственного движения, но какая в сущности разница? Он ведь всё равно так висеть не должен.
Флажок возвращается обратно на место на том же кадре, после того как код физики игрока посчитает его обновлённое положение.

Цитата:
FiEctro писал:
Я думал там что то вроде Transform Move = plat.position + input.position.normalized.

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

Цитата:
FiEctro писал:
В какой программе такие метки ставить можно? Как пример.

Адоб Аудишен. Но вообще эти метки - часть стандарта wav. Так что много где.

Цитата:
FiEctro писал:
Там записан какой то пердёж

Это ошибки дискретизации. Не знаю как им это удалось, но там должна быть тишина.

Добавлено 23-12-2021 в 17:43:

Цитата:
Дядя Миша писал:
Затем, если объект застрял внутри платформы

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 13:33. Страницы (43): « Первая ... « 26 27 28 29 [30] 31 32 33 34 » ... Последняя »
Показать все 636 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024