Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MetroEX - универсальный инструмент для работы с ресурсами игр серии Метро
GAMEINATOR forums > Общие разделы > Создание и модификация игр. Геймдев.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
iOrange
Цитата(xrModder @ 08.03.2019, 19:00) *
В папке textures\part есть текстуры облака storm_***.512, но они неполные

Есть даже текстуры просящие о помощи ))

ТЫЦ


Witch-King
Цитата(xrModder @ 08.03.2019, 20:00) *
В папке textures\part есть текстуры облака storm_***.512, но они неполные sad.gif

Так ты путь переведи Текстуры\части от того они и не полные, их или собирать надо или я хз.
xrModder
Есть например storm_2_00000, 00006...00011, 00026...00031. Где остальные хз sad.gif
Xottab_DUTY
light_fonar, light_oblaka... Всё в лучших традициях biggrin.gif
DaaGuda
Не подскажите, что делать? Есть скажем текстура, есть нормали на него в 2048, но вот атласа карт на 2048 нет. Это так и должно быть? просто охото использовать текстуры в высоком разрешении.
тык
xrModder
Цитата(DaaGuda @ 09.03.2019, 02:05) *
Не подскажите, что делать? Есть скажем текстура, есть нормали на него в 2048, но вот атласа карт на 2048 нет. Это так и должно быть? просто охото использовать текстуры в высоком разрешении.
тык

Наверняка используется 1024 пиксельная карта. Нечто похожее видел ещё в первом сталкере.
DaaGuda
xrModder, всё бы хорошо, но сдк ругается, на то, что разный размер у текстур. А если растянуть, то и качество уходит?
xrModder
Цитата(DaaGuda @ 09.03.2019, 02:39) *
xrModder, всё бы хорошо, но сдк ругается, на то, что разный размер у текстур. А если растянуть, то и качество уходит?

Качество потеряешь это да, но это вблизи.
DaaGuda
xrModder, ок, буду экспериментировать.
xrModder
Знаменитое слово в текстуре террейна (кто-то вспоминает сталкер).
Осторожно! 18+
iOrange
Похоже на запечённый АО, надо в игре на это место посмотреть biggrin.gif
Hunter01
iOrange
А можно как то заделать так, что бы при экспорте в FBX был выбор, экспортить с костями, например, ставить галочку, а нет, галочку убрать, и тогда экспорт в FBX только тушки, без костей, мне например, с костями FBX не нужен, так как большинство монстров при попытке конверта их в FBX вылетает прога с ними.
Ну в общем, я имел ввиду что бы был выбор, кому нужна модель с костями, тот пусть конвертит поставив крестик, галочку, что то типа этого, а кому кости не нужны, но нужна именно тушка в FBX тот выберет конверт без костей.
FBX-модель наиболее лучше, чем в obj, там всё равно, куски полигонов на тушке, кое где вывернуты наизнанку, а в FBX всё нормально.
Это как на пример в GIMS-инпортере в максе, там есть функция загрузки модели после рипа, вместе с костями ( если они есть у модели ) по умолчанию, после установки GIMS'a там стоит галочка на загрузку модели из рипов, вместе с костями, я эту галочку убираю, мне не нужно, да и не доработана эта фишка там, и гружу чисто один меш, без костей.
Hunter01
Да, ещё, у меня почему то на моделях, после конверта их в FBX и затем загружаю их в макс 2010, но он мне показывает полностью серую модель, посмотрел каналы, а они почему то не с 1вого начинаются, а со 2го или 3тьего, то е, по умолчанию стоит, например 2рой канал, когда поправляешь на 1вый, текстура становится на место, по идее, после загрузки модели, каналы должны стаять на самом первом, не знаю почему так, может это только у меня, у меня модели сразу после загрузки в максы, что в fbx что в obj, серые без текстур, текстуры нужно ложить на них в ручную, а у всех, как я смотрю, почему то всё нормально, текстуры грузятся вместе с моделью.
xrModder
Продукция Сушкасампридумал
Thekello
Цитата(Hunter01 @ 09.03.2019, 21:55) *
Да, ещё, у меня почему то на моделях, после конверта их в FBX и затем загружаю их в макс 2010, но он мне показывает полностью серую модель, посмотрел каналы, а они почему то не с 1вого начинаются, а со 2го или 3тьего, то е, по умолчанию стоит, например 2рой канал, когда поправляешь на 1вый, текстура становится на место, по идее, после загрузки модели, каналы должны стаять на самом первом, не знаю почему так, может это только у меня, у меня модели сразу после загрузки в максы, что в fbx что в obj, серые без текстур, текстуры нужно ложить на них в ручную, а у всех, как я смотрю, почему то всё нормально, текстуры грузятся вместе с моделью.

У меня всё ок, это походу у тебя косяк sad.gif .
inuway
Цитата(Hunter01 @ 09.03.2019, 19:58) *
iOrange
А можно как то заделать так, что бы при экспорте в FBX был выбор, экспортить с костями, например, ставить галочку, а нет, галочку убрать, и тогда экспорт в FBX только тушки, без костей, мне например, с костями FBX не нужен, так как большинство монстров при попытке конверта их в FBX вылетает прога с ними.
Ну в общем, я имел ввиду что бы был выбор, кому нужна модель с костями, тот пусть конвертит поставив крестик, галочку, что то типа этого, а кому кости не нужны, но нужна именно тушка в FBX тот выберет конверт без костей.
FBX-модель наиболее лучше, чем в obj, там всё равно, куски полигонов на тушке, кое где вывернуты наизнанку, а в FBX всё нормально.
Это как на пример в GIMS-инпортере в максе, там есть функция загрузки модели после рипа, вместе с костями ( если они есть у модели ) по умолчанию, после установки GIMS'a там стоит галочка на загрузку модели из рипов, вместе с костями, я эту галочку убираю, мне не нужно, да и не доработана эта фишка там, и гружу чисто один меш, без костей.

Формата .obj более чем достаточно для импорта геометрии, не понимаю в чем проблема.
А .fbx на данный момент у меня тоже критует да, но нужно просто подождать версию 0.29, и думаю там всё будет работать.
DaaGuda
В связи большого объёма материала ищу человека для кооперации, который так же занимается перегонкой моделей под x-ray. Если ты этим заинтересован, то пиши в лс.
NiutoN
Здрайствуйте друзья)

Сходу благодарность iOrangeу з апрделланную работу) Но не все так гладко, и мне необходима ваша помощь...

Я работаю в UnrealEngine 4.21.2 но перечитав форум, я понял что схожую проблему получили пользователи 3d maxa. Думаю вам будет интересно как оно вышло и на других "инструментах".
Подробное описание и скрины - ниже:
Итак, проконвертировав модель и загрузив ее в проэкт я обнаружил что все модели "вывернутые", имеют нужную текстуру внутри и прозрачные снаружи (рис 1 и 2)


Пробовал решить проблему при помощи "костыля". Отобразил текстуру с двух сторон, но к сожалению Я радовался не долго, так как выяснилось, что освещение все-равно воспринимает модель "вывернутой"



На фото 3,4 и 5 это видно на примере цистерны с холодильником... А далее на скринах 6а и 6b мы видим две модели рядом (исправленная костылями и нет ) с освещением внутри и снаружи, но как вы понимаете работать с моделями в таком виде - нельзя..




А во только теперь я обнаружил что есть версия унпакера v028с и там походу все работает - норм. Извините за беспокойство, оюнарухил это только что. Сообщение всеравно оставлю, ибо много потратил сил rolleyes.gif Вот вам и мораль, ВНИМАТЕЛЬНЕЙ ЧИТАЙТЕ ФОРУМЫ laugh.gif
xrModder
NiutoN, эх ты laugh.gif
xrModder
Текстура с ироничной надписью "ЕШҚАЙДА", что в переводе "НИКУДА": textures\misc\train_station_name
Hunter01
Цитата(inuway @ 09.03.2019, 22:55) *
Формата .obj более чем достаточно для импорта геометрии, не понимаю в чем проблема.
А .fbx на данный момент у меня тоже критует да, но нужно просто подождать версию 0.29, и думаю там всё будет работать.

Проблема в obj, на некоторых моделях, с вывернутыми полигонами на частях тела всё ещё имеет место быть, у демона ( demon_m3 ), крылья, верхняя часть, и некоторые части шерсти наизнанку, у носача ( nosach ), на частях туловища у mantabat, ноги вывернуты, ну и так далее по мелочи, но сейчас уже, конечно не то что раньше было, у большинства моделей в obj с полигонами всё в порядке.
Например демона ( из той папки ( demon_m3 ) не могу в FBX, вылетает прога, а в obj у него вывернуты полигоны на частях тушки.
Конечно я уверен, что уважаемый iOrange в новых версиях программы, всё это поправит. smile.gif
Thekello
Ребята, кто-нибудь находил вагон для авроры(Купе)?Подскажите пожалуйста как папка называется и где находиться smile.gif
и ещё фурнитуру к нему там кровати smile.gif
GreenTachyon
iOrange, спасибо за крутую тулзу!
Теперь я смогу лепить [/color]говно[color="#000000"]фанарты еще и по по этой игруле)
Картинко

Удалось дернуть одну из моделек Мельника со скелетом, так что он следующая жертва))
Вот и мопэд для него есть)
Велодрезина
GreenTachyon
Цитата(Thekello @ 10.03.2019, 21:25) *
Ребята, кто-нибудь находил вагон для авроры(Купе)?Подскажите пожалуйста как папка называется и где находиться smile.gif
и ещё фурнитуру к нему там кровати smile.gif


dynamik/objects/vagon_pas -- базовая модель интерьера/экстерьера, дверь, сцепка
static/vagon_pas -- опять модель экстерьера(без внутренностей), колесные тележки,окна
static/sostav -- всякие внутренние детали(в т.ч. и для метровагонов)
iOrange
Отчет по разработке - малозначительный для конечного пользователя, но огромный для меня - произошла смена технологий.
Раньше проект базировался на wxWidgets + OpenGL 3.3.
Теперь проект переехал на WinForms + Direct3D 11.0.

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

На данный момент полностью воссоздана версия v0.28c
Возьму день на отдохнуть drunk.gif , и полностью погружусь в раскопки скелетов, ибо пора бы уже версию v0.29 выпускать wink.gif

Так что всех кто ждет обновления - прошу извинить меня за растягивание, обещаю поднажать. shuffle.gif
Thekello
Цитата(GreenTachyon @ 10.03.2019, 23:32) *
Цитата(Thekello @ 10.03.2019, 21:25) *
Ребята, кто-нибудь находил вагон для авроры(Купе)?Подскажите пожалуйста как папка называется и где находиться smile.gif
и ещё фурнитуру к нему там кровати smile.gif


dynamik/objects/vagon_pas -- базовая модель интерьера/экстерьера, дверь, сцепка
static/vagon_pas -- опять модель экстерьера(без внутренностей), колесные тележки,окна
static/sostav -- всякие внутренние детали(в т.ч. и для метровагонов)

Спасибо большое smile.gif

Цитата(iOrange @ 11.03.2019, 07:27) *
Отчет по разработке - малозначительный для конечного пользователя, но огромный для меня - произошла смена технологий.
Раньше проект базировался на wxWidgets + OpenGL 3.3.
Теперь проект переехал на WinForms + Direct3D 11.0.

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

На данный момент полностью воссоздана версия v0.28c
Возьму день на отдохнуть drunk.gif , и полностью погружусь в раскопки скелетов, ибо пора бы уже версию v0.29 выпускать wink.gif

Так что всех кто ждет обновления - прошу извинить меня за растягивание, обещаю поднажать. shuffle.gif


Отлично smile.gif , жду с нетерпением новой обновы)
SkyLoader
Цитата(iOrange @ 11.03.2019, 07:27) *
Теперь проект переехал на WinForms + Direct3D 11.0.

Всё же предлагаю добавить сортировку древа контента, ибо нужные текстуры адово искать, когда всё вразнобой. А раз WinForms, то предлагаю воспользоваться вариантом, который юзаю сам:
Реализация

Код
ref class NodeSorter : public System::Collections::IComparer
{
public:
    virtual int Compare(Object^ x, Object^ y)
    {
        System::Windows::Forms::TreeNode^ left = safe_cast<System::Windows::Forms::TreeNode^>(x);
        System::Windows::Forms::TreeNode^ right = safe_cast<System::Windows::Forms::TreeNode^>(y);

        if (left->Nodes->Count)
        {
            if (right->Nodes->Count)
                return left->Text->CompareTo(right->Text);
            return false;
        }

        if (right->Nodes->Count)
            return true;
        return left->Text->CompareTo(right->Text);
    }
}; // ref class NodeSorter


Применение:
После заполнения древа применить сортировку
Код
this->treeViewExample->TreeViewNodeSorter = gcnew NodeSorter();
this->treeViewExample->Sort();



P.S. Заметил, что экспорт в TGA сообщает об ошибке экспорта, даже если экспортировал текстуру. И также выдает ошибку, если отменить сохранения файла, закрыв окно выбора пути сохранения.
Antnigm
Спасибо огромное автору. Теперь как минимум можно ресурсы использовать для творчества.
Небольшая просьба - можно, чтобы кроме normal map извлекалась и bump текстура? В последней содержатся карты блеска, отражений и т.п.
iOrange
Цитата(SkyLoader @ 11.03.2019, 09:30) *
Всё же предлагаю добавить сортировку древа контента

Да, как я и писал выше - подобные просьбы и толкнули меня на смену платформы. Теперь реализовывать их будет гораздо проще.

Цитата(SkyLoader @ 11.03.2019, 09:30) *
Заметил, что экспорт в TGA сообщает об ошибке экспорта, даже если экспортировал текстуру. И также выдает ошибку, если отменить сохранения файла, закрыв окно выбора пути сохранения.

Да, это исправлено. Спасибо.

Цитата(Antnigm @ 11.03.2019, 09:34) *
можно, чтобы кроме normal map извлекалась и bump текстура? В последней содержатся карты блеска, отражений и т.п.

Как разберусь с материалами - так и добавлю. Пока даже нормармапы угадывать приходится.
iOrange
Кстати, спрошу вдруг кто натыкался - никто не находил в архивах шейдеры?

Я нашел только паки шейдеров для Dx11 рендера в патче. Но меня больше интересуют Dx12.
Если кто чего видел - отпишите мне плиз.

разбивка шейдерных паков на отдельные шейдеры

Код
use std::env;
use std::fs::File;
use std::io::prelude::*;

fn read_u32(buf: &Vec<u8>, offset: usize) -> u32 {
    let a = buf[offset + 0] as u32;
    let b = buf[offset + 1] as u32;
    let c = buf[offset + 2] as u32;
    let d = buf[offset + 3] as u32;

    (a | (b << 8) | (c << 16) | (d << 24))
}

fn main() {
    let args: Vec<String> = env::args().collect();
    if args.len() == 2 {
        let file_name = &args[1];
        let mut file = File::open(file_name).expect("file not found");

        let mut content: Vec<u8> = Vec::new();
        let file_size = file
            .read_to_end(&mut content)
            .expect("Can't read file content");

        let mut shd_idx: u32 = 0;
        let mut offset: usize = 44;
        while offset < file_size {
            let dxbc: u32 = read_u32(&content, offset);
            let size = read_u32(&content, offset + 24) as usize;

            if dxbc == 0x43425844 {
                let shader_name = format!("{}{:04}.bin", "shd_", shd_idx);
                let mut shd_file = File::create(shader_name).expect("Can't create output file");
                shd_file
                    .write(&content[offset..(offset + size)])
                    .expect("Can't write to output file");
                shd_file.sync_all().unwrap();

                println!("Unpacking shader #{} of size {}", shd_idx, size);

                offset += size + 8;
                while content[offset] == 0 {
                    offset = offset + 1;
                }

                shd_idx = shd_idx + 1;
            } else {
                // quit
                offset = file_size
            }
        }
    }
}
iOrange
Немного прогресса.
Изначальный мой подход к чтению скелета был неверен, ибо это тоже reflection (бывает с дебаг инфой и без оной).
Благодаря тому что у меня уже был написан костяк MetroReflection, чуть допилив его напильником получилось сделать универсальное и гибкое чтение скелетов.
Теперь читаются и встроенные в модель скелеты (такие, например, у крутилок в главном меню).

Осталось доразбираться с составными скелетами и будет версия v0.29
После которой я засяду за уже сами анимации.

Скриншотик для затравки:
inuway
iOrange
Уххх, мучаюсь я с этим скелетом.
Формат скелета большой и сложный (не то что в первом Метро 9 лет назад)
К тому же наличие тех или иных полей зависит от версий и прочих флагов....

Но! Прокрасноглазив пару ночей до состояния crazy.gif wacko.gif crutch.gif я смог кой-чего наваять wink.gif

Например, вот Lurker, еще недавно крашивший программу при попытке экспорта в FBX:


А вот .... хехе, интрига!
спойлер!

Тадам! Че я могу tongue.gif




Дайте мне денек на тесты-утряски, и будет версия v0.29

А я отсыпаться. lazy.gif
Antnigm
Цитата(iOrange @ 13.03.2019, 05:22) *
А вот .... хехе, интрига!
спойлер!

Тадам! Че я могу tongue.gif


Что-то дофига косточек на грудь. В игре у неё, вроде, и "физики" особой нет. Хотя может просто не замечал.

Тем временем уже первые кривые моды на сталкач подкатили. biggrin.gif
spoiler




lafugix
Цитата(Antnigm @ 13.03.2019, 12:06) *
Что-то дофига косточек на грудь.

Они на платок почти все. По идее в катсценах каких-нибудь более-менее юзаются, или просто чтобы он по ветру красиво развевался во время стартовой сцены на Каспии.
NiutoN
iOrange Скажи пожалуйста, а сделаешь ли ты утилиту, позволяющую запаковывать "измененные" файлы обратно в игру??

Я и мои друзья ждут с нетерпением этой тулзы...

iOrange
Цитата(NiutoN @ 13.03.2019, 15:51) *
а сделаешь ли ты утилиту, позволяющую запаковывать "измененные" файлы обратно в игру??

Такой функционал планируется, но обещать на данный момент ничего особо не могу
iOrange
Итак, обещанная v0.29
Основные изменения:
- смена платформы (с wxWidgets + OpenGL 3.3 на WinForms (CRL) + Direct3D 11.0)
- загрузка любых скелетов (надеюсь)
- экспорт в FBX со скелетом (теперь без падений (надеюсь))
- улучшена поддержка игровых текстур
- улучшение юзабилити (текстуры можно склоллить "тягая" мышкой, можно включать-выключать альфу кнопкой на панели)
- куча переписанного/дописанного кода для более правильной работы с игровыми форматами
- долгожданная сортировка файлов и папок*

* эта самая сортировка, огромному моему сожалению, занимает прилично времени (около 15 секунд), из-за огромного количества файлов в архиве. Я работаю над этим и постараюсь оптимизировать это. Заранее прошу прощения.

Как всегда - рад всем отзывам / предложениям.

Скриншот для порядку (хотя визуально мало что поменялось)

mmyr
Простите, всё отлично работает wink.gif Нужно было немного подождать.
Спасибо большое автору за его труды!
Hellroon
Цитата(iOrange @ 14.03.2019, 08:30) *
Итак, обещанная v0.29



беееез понятия в чем фишка, но у меня ту же самую Гуль не откывает) тыкнул на нее, и ничего
Antnigm
Hellroon, я так понимаю, программа пока работает только с файлами, имеющими расширение .model
.mesh и .ph_model она не открывает. Если первое - просто элемент меши, который собирается потом в .model (так что его не обязательно вытаскивать), то второе - х.з. Физическая модель (?)
Ты как раз попытался ph_model открыть.
SkyLoader
Цитата(iOrange @ 14.03.2019, 08:30) *
* эта самая сортировка, огромному моему сожалению, занимает прилично времени (около 15 секунд), из-за огромного количества файлов в архиве. Я работаю над этим и постараюсь оптимизировать это. Заранее прошу прощения.

А оно столько времени занимает даже при использовании BeginUpdate()/EndUpdate()? Просто как-то довольно долго получается. У меня обычно быстро обрабатывает:
Пример
Код
this->treeSpawns->BeginUpdate();

// Очистка перед заполнением древа
this->treeSpawns->Nodes->Clear();
this->treeSpawns->SelectedNode = nullptr;

// Заполнение древа нодами
// ...

// Сортировка
this->treeSpawns->TreeViewNodeSorter = gcnew NodeSorter();
this->treeSpawns->Sort();

this->treeSpawns->EndUpdate();
iOrange
Цитата(SkyLoader @ 14.03.2019, 10:57) *
А оно столько времени занимает даже при использовании BeginUpdate()/EndUpdate()? Просто как-то довольно долго получается. У меня обычно быстро обрабатывает:

открой меня

Нет, при заполнении дерева я отключаю в нем сортировку и обновление
Код
this->treeView1->SuspendLayout();
this->treeView1->Sorted = false;
this->treeView1->TreeViewNodeSorter = nullptr;

Затем заполняю (это занимает около 0.7 секунд)
затем все включаю назад

Код
this->treeView1->Sorted = true;
this->treeView1->ResumeLayout();
this->treeView1->TreeViewNodeSorter = gcnew NodeSorter();


Кстати, Sort() вызывать не нужно, дерево реагирует на присвоение сортировщика и сразу сортируется.

Так вот вся основная работа происходит при присвоении сортировщика - тут мы и сидим около 15 секунд.
И все это внутри самого дерева.

Размер дерева - 203383 элементов (папки + файлы).

Я пока думаю над вариантами (отсортироваться самому перед заполнением дерева, переписать компонент дерева, т.д.)
slik
А on demand сортировки нет? Сортировать только то, что видно.
iOrange
Цитата(slik @ 14.03.2019, 15:41) *
А on demand сортировки нет? Сортировать только то, что видно.

Я исследую варианты оптимизации. Прошу прощения за неудобства.
SkyLoader
iOrange,
Цитата
SuspendLayout()

Это всё же не BeginUpdate() smile.gif Применение предложенного мной варианта отключает переотрисовку древа при каждом действии, будь то добавление нода или сортировка. Потому что отрисовка получается дорогая, особенно если количество нодов растет с каждым разом.
Сейчас даже сравнил. BeginUpdate() выигрывает в скорости у SuspendLayout() как минимум в два раза. И, кстати, лучше это:
Код
this->treeView1->TreeViewNodeSorter = gcnew NodeSorter();

применить до окончания работ с древом, то бишь до вызова EndUpdate().
iOrange
Цитата(SkyLoader @ 14.03.2019, 18:51) *
Это всё же не BeginUpdate()

Это не имеет значения, заполнение дерева занимает 700ms всего.
А вот после заполнения дерева - я включаю сортировку, и именно она тупит.

Цитата(SkyLoader @ 14.03.2019, 18:51) *
рименить до окончания работ с древом, то бишь до вызова EndUpdate().

Посмотрите как работает сортировка дерева - оно само включает Update перед началом сортировки
SkyLoader
Цитата(iOrange @ 14.03.2019, 20:11) *
Это не имеет значения, заполнение дерева занимает 700ms всего.

Ну так если BeginUpdate() быстрее хоть на сколько-то, то почему бы и нет?

Цитата(iOrange @ 14.03.2019, 20:11) *
Цитата(SkyLoader @ 14.03.2019, 18:51) *
рименить до окончания работ с древом, то бишь до вызова EndUpdate().

Посмотрите как работает сортировка дерева - оно само включает Update перед началом сортировки

Видимо в случае в активным BeginUpdate() при Update всё-равно игнорируется отрисовка, потому что перемещение сортировки в пределы BeginUpdate()/EndUpdate() даже визуально на форме заметно.
iOrange
Цитата(SkyLoader @ 14.03.2019, 19:27) *
Ну так если BeginUpdate() быстрее хоть на сколько-то, то почему бы и нет?

Попробовал BeginUpdate/EndUpdate - время не поменялось.
В ваших тестах у вас сколько нодов было?

У меня в профайлере показывает что все время мы сидим в сортировке, отрисовка даже не вклинивается там

Thekello
Добавьте пожалуйста в версию v3.0 выгрузку уровней cray.gifумоляю cray.gif
:(
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.