|
|
|
|
| Создаём модель - Cs-Elite
|
|
|
|
| |
Делаем
модель. Часть 1 - Инструментарий.
Многие из нас, в своё время
задумывались
как же всё таки сделать самому модель для игры? Именно об этом пойдёт
речь в моём блоге. Вы узнаете о том, как моделировать, текстурить,
скинить(привязывать кости к объекту), делать развертку под
текстурированию и многое другое.
Поскольку в сети
очень мало информации на данную тему, ой))) она просто мизерна, я всё
же решил поделиться с вами моим опытом. В свое время, я участвовал в
разработке нескольких игровых проектов которые уже выпущены, не будем
афишировать и перейдём к теме.
Пользоваться мы с вами будем
следующими "инструментами":
1.
Первый и основной - Autodesk 3ds Max 2009 - скачать триал версию на
30-ть дней, абсолютно работоспособную можно на официальном сайте, но
правда там уже Autodesk
3ds Max 2010
заполните форму и качайте (но всё же попробуйте найти 2009 версию, так
как я к ней привык, и потом в 2010 версии макса не так уж много
нововведений, и потом из-за разности версий могут, у нас возникать
разногласия по некоторым моментам).
2. Плагины экспорта и
импорта
формата smd в 3ds Max.
3. Декомпилятор "*.mdl" файлов Kratisto's Mdl Decompiler
1.2.
4. Компилятор "*.qc" файлов GUI StudioMDL 1.0.
5.
И конечно голова и руки из плеч растущие.
О каждом инструменте в
подробностях вы узнаете в следущих
статьях. |
|
Делаем
модель. Часть 2 - Интерфейс 3ds
Max 2009.
Ну что же,
приветствую вас на втором уроке, а
точнее продолжение первой части Делаем модель. Часть 1 - Инструментарий.
В прошлом уроке, мы рассматривали софт - при помощи которого будем
создавать модель оружия для cs 1.6, так сказать с нуля отмоделим и
экспортируем в движок half-life и сможем побегать в cs, со своим
собственно-отмоделеным оружием. И в этом нам с вами поможет Autodesk
3ds Max 2009.
Интерфейс:
Подробней про интерфейс:
Main Toolbar -
главная панель инструментов, выделено синим цветом.
-
функции Undo и Redo, то есть вернуть действие назад или
перематать в перёд.
- Select and
Link выделить и
прилинковать(присоединить), Unlink Selection розлинковать
выделенное, Bind to Space Warp
прилинковать к динамическим
утилитам (физические природные силы - гравитация, ветер и т.п.)
-
селектор фильтра, в данный момент поставлен на "All" - то есть,
при выделении будут выделяться абсолютно все объекты, если же мы
поставим например "Lights" - соответственно выделятся лишь
источники освещения(очень полезный фильтр когда с сцене много объектов),
далее следует Select Object - выделить объект, Select by Name
- выделить из вписка(по имени, типу объекта, цвету, количеству
триугльников), Selection Region
- способ выделения(прямоугольный, в виде окружности, произвольный и
т.п.), для выбора способа - зажмите на соответствующую иконку левой
кнопкой и в меню выбирайте, также существует "горячая" клавиша "Q"
- для быстрого выбора, и последняя Window/Crossing -
переключатель, также относится к способам выделения объекта, в режиме Window
- чтобы выделить объект он должен полностью попасть под область
выделения, Crossing Примечание: в
обоих режимах можно выделить объект кликнув на его грань.
- Select
and Move выделить и переместить, Select and Rotate выделить и
вращать, Select and Scale выделить и масштабировать, Reference
Coordinate System - система координат "pivot'a" относительно
объекта, Use Pivot Point Center - положения опорной точки
относительно объекта.
О самых важных функциях главной панели
инструментов - я рассказал, поехали дальше...
Command Panel
- командная панель,
выделено красным цветом.
- во-вкладке Create(создать)
находятся
практически все объекты которые можно создать в максе, мы
зачастую будем пользоваться Geometry -> Standard Primitives, если
прошуршать все примитивы, можно найти прямоугольник, сферу, цилиндр,
конус и др., ах да, - каким боком к примитивам чайник приставили я не
знаю)).
- вкладка Modify(модификаторы
объекта/объектов) это именно то, за что я лично люблю макс, о списке
модификаторов мы поговорим позже.
И под конец урока
рассмотрим рабочее окно Viewpor,
оно выделено зелёным цветом.
По-дефолту(по-умолчанию,
- буду использовать в последующих уроках это название, так что не
пугайтесь) макс нам предлагает 4 окна, в левом верхнем углу всех окон,
можно увидить вид, проекцию(top - сверху, font - спереди, left
- слева, perspective - 3d режим, также существуют back, right,
bottom и user). На свое усмотрение, можно поменять их
местами в конфигурации окон.
-
также рассмотрим панель навигации в окнах, Maximize Viewport Toggle
- переключатель увеличения/уменьшения окна(выделено желтым цветом,
работает просто, - выделяем нужное окно и жмём эту кнопку, и работаем
во весь экран). Также стоит отметить Orbit вращение
во-вьюпорте(находится слева от Maximize Viewport Toggle).
На этом урок подошел к концу, благодарю за внимание.
- стоить обвести
лишь грань объекта для
полного выделения(извините за тавтологию xD).
|
|
Делаем
модель. Часть 3 - Импорт и экспорт
smd в 3ds Max 2009.
Вот вы меня
наверное спросите: "А при чём здесь smd,
когда в папке с контрой одни mdl
- Ответ прост: smd
- составляющая mdl файла, то есть mdl это контейнер для smd
файлов и текстур, думаю не запутал :D. Я надеюсь вы уже скачали
плагины(см. Делаем модель. Часть 1 - Инструментарий (СМ), и
ждёте следующих инструкций.
Установка плагинов:
Итак,
перед нами должно быть 2 архива в которых находятся плагины под разные
версии макса, в нашем случае берём под "2009" и в зависимости от ос(у
меня winхр 32-bit) берём 2 файла, примерно называются SMDImporter.dli
- плагин импорта и соответственно SMDExporter.dle - экспорта, и
копируем в папку(у вас может быть другая) D:\Program Files\3ds Max
2009\plugins.
Доступ к плагинам из макса:
[Импорт]
File -> Import -> из списка "Тип файлов" выбираем Valve SMD
(*.SMD)
[Экспорт] File -> Export -> из списка "Тип
файлов" выбираем Source SMD (*.SMD)
Как видите ничего
сложного, делайте по инструкции, изучите и двигаем дальше... файлы?" |
|
|
|
Делаем
модель. Часть 4 - компиляция,
декомпиляция mdl, qc-скрипт.
Сегодня я
расскажу о чисто-технических
моментах, которые не относятся к моделированию. Мы поговорим о
компиляции, декомпиляции mdl файлов, а также о скрипте QC под движок
Half-Life для мода Counter-Strike 1.6. Эта информация очень важна, т.к.
данных в особенности о скрипте - в сети очень мало, на самом деле, я и
сам до конца не знаю весь QC-скрипт, но о самых важных командах - без
которых не возможен экспорт, а также про маленькие нюансы - пойдёт речь
в этой статье.
В первую очередь поговорим о декомпиляторе,
зачастую это самый первый шаг с которого, нужно начинать создавать
модель. Я надеюсь вы уже скачали и распаковали Kratisto's Mdl
Decompiler 1.2.
Что же собой представляет эта маленькая, но очень толковая программка?
Запускается она с команданой строки и нужна для распаковки mdl файлов,
работает очень просто, - берём например из папки "...\Counter-Strike
1.6\cstrike\models" файл "v_ak47.mdl"(это стандартная модель ак, вид
от первого лица) и копируем в папку с декомпилятором, затем запускаем "decompile_all.bat"
и программа автоматом распакует все mdl файлы находящиеся в данной
папке и рассортирует их по подпапкам создав при этом один лог для всех
файлов, в нашем случае мы видим папку "v_ak47" и лог.
Изучаем папку "v_ak47":
- файлы текстур в формате "bmp";
-
"f_ak47_template.smd" собственно модель автомата с привязанными
костями;
- "lhand.smd" и "rhand.smd" модель левой и
правой руки, также с привязанными костями;
- файлы анимации, внутри
их - нет абсолютно никаких моделей: "draw.smd", "idle1.smd",
"reload.smd", "shoot1.smd", "shoot2.smd", "shoot3.smd",
описывать не буду, - т.к. файлы говорят сами за себя.
- скрипт "v_ak47.qc"(открыть
можна любым текстовым редактором, например блокнот) о нём пойдёт речь
дальше.
QC-скрипт
Файлы
*.qc - можно считать неким паспортом к модели, в нём идёт описание
всего что будет находится в конченой модели. Основная задча .qc-файла -
говорить компилятору, где искать текстуры и .SMD-файлы. Также скрипт
определяет информацию которая относится к игровому движку, как анимаци,
звуки и др.
Разберём скрипт на отдельном примере "v_ak47.qc":
/*
==============================================================================
QC
script generated by Half-Life MDL Decompiler 1.2
2003, Kratisto.
Based on code from Valve's HL SDK.
v_ak47.mdl
Original
internal name:
"v_ak47.mdl"
==============================================================================
*/
$modelname
"v_ak47.mdl"
$cd ".\"
$cdtexture ".\"
$scale 1.0
$cliptotextures
$bbox
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
$cbox 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000
$eyeposition 0.000000
0.000000 0.000000
//reference mesh(es)
$body "rhand"
"rhand"
$body "lhand" "lhand"
$body "weapon"
"f_ak47_template"
// 2 attachment(s)
$attachment 0 "Bone
04" 2.750000 -22.500000 2.900000
$attachment 1 "Bone52" 0.000000
-3.000000 0.000000
// 4 hit box(es)
$hbox 0 "Bone04" -1.980000
-8.880000 -1.020000 1.730000 0.030000 1.090000
$hbox 0
"Bone_Righthand" -1.340000 -2.980000 -0.410000 1.430000 0.000000
0.630000
$hbox 0 "Bone01" -1.720000 -8.900000 -1.020000 1.990000
0.020000 1.090000
$hbox 0 "Bone_Lefthand" -1.520000 -3.073735
-0.410000 1.250000 0.000000 0.630000
// 6 animation sequence(s)
$sequence
"idle1" "idle1" fps 30
$sequence "reload" "reload" fps 37 { event
5004 13 "weapons/ak47_clipout.wav" } { event 5004 57
"weapons/ak47_clipin.wav" }
$sequence "draw" "draw" fps 30 { event
5004 11 "weapons/ak47_boltpull.wav" }
$sequence "shoot1" "shoot1"
fps 20 { event 5001 0 "22" }
$sequence "shoot2" "shoot2" fps 20 {
event 5001 0 "22" }
$sequence "shoot3" "shoot3" fps 20 { event 5001 0
"22" }
// End of QC script. Описание
команд QC файла
$modelname
"v_ak47.mdl" - имя исходного файла который создаст компилятор
$cd
".\" - папка где находятся файлы моделей и анимации
$cdtexture
".\" - папка с текстурами
$scale 1.0 - коэффициент
масштабирования модели
$cliptotextures
- при наличии в скрипте, будет говорить компилятору не обрезать
неиспользуемые участки текстур, при отсутствии - компилятор автоматом
обрежет неиспользуемые участки текстур
$externaltextures -
дополнительная команда, создаст файл ak47T.mdl и запишет в него текстуры
$body
"rhand" "rhand" - модель правой руки, в первых скобках название,
во-вторых имя исходного файла без smd
$body "lhand" "lhand" -
см. выше
$body "weapon" "f_ak47_template" см. выше
Примечание:
командой $body нужно перечислить все отдельные файлы моделей smd.
$attachment
0 "Bone 04" 2.750000 -22.500000 2.900000 - определяет место
возникновения событий(появление моделей, спрайтов), далее расшифровка:
$attachment
<ID#> <bone> <X>
<Y> <Z>:
<ID#> - уникальный идентификатор,
максимум 4, тоесть <0> | <1> | <2> | <3>
<bone>
- имя кости
<X> <Y> <Z>
- определяет положение события по осям XYZ относительно прикрепленной
кости, например возьмём следующие координаты
<0><5><5> следовательно, координаты нашей кости будут
<0><0><0> и событие будет отображаться со-сдвигом по
оси-x - неизменно, оси-y - на 5 юнитов, оси-z - также 5 юнитов.
Далее следуют хит-боксы, определяется командой $hbox,
создает хит боксы вокруг костей, зачастую используется для коллизии,
например - попадание пуль. Если чесно я незнаю каким макаром к модели
от первого лица относится хитбоксы)), ну да ладно, если стандартные
модели их содержат, мы тоже будем их делать. Кстати делаются они
автоматом, при компиляции, об этом чуть позже.
С анимацией
немного посложнее.
Работает она за следующим принципом: минимум
который нужен для нормального экспорта
$sequence
"[имя анимации]" "[путь к файлу без smd]" [количество fps в анимации]
см.ниже
$sequence "idle1" "idle1" fps 30
Как видите, всё просто, мы могли применить эту схему к любой анимации
"reload", "draw", "shoot", но, есть одно НО)), мы же хотим увидеть
спрайты выстрела и услышать звуки, для этого подключим события и звуки
в нужную анимацию.
$sequence
"reload" "reload"
fps 37 { event 5004 13 "weapons/ak47_clipout.wav" } { event 5004 57
"weapons/ak47_clipin.wav" }
Расшифровка:
"имя: reload" "имя файла: reload" {событие 5004 на 13 кадре
возпроизвести звук из файла "weapons/ak47_clipout.wav"} {событие 5004
на 57 кадре возпроизвести звук из файла "weapons/ak47_clipin.wav"}
Примечание:
событие 5004 отвечает за воспроизведение звука из файла Дальше
больше. Выстрелы:
Дефолтная модель предлагает нам следующее решение:
$sequence
"shoot1" "shoot1" fps 20 { event 5001 0
"22" }
Как видите абсолютно никакой логики)) - это на заметку
программерам "Вентиля" Как
сказал однажды Петросян (с) "Мы
пойдём своим путём!", и сделаем читабельное и понятное описание событий,
поехали:
$sequence
"shoot1" "shoot1" fps 20 {
event 5004 0 "weapons/ak47-1.wav" } { event 5001 0 "muzzleflash3.spr" }
Примечание:
событие 5001 отвечает за появление спрайта на точке $attachment 0(см.
выше)
Примечание: можете использовать способ который вам по душе, я
же описал оба, работают как часы.
Ну наконец, - скрипт
закончился. Далее компиляция:
Итак вы уже запаслись софтом GUI StudioMDL 1.0
и открыли его. Интерфейс простейший - проблем возникнуть не должно.
Идём в File -> Load QC File открываем уже созданый нами скрипт
"v_ak47.qc", если видите следующий меседж [Opening
QC file - C:\Documents and Settings\Admin\Рабочий
стол\decompiler\v_ak47\v_ak47.qc]
[QC loaded O.K!]
значит всё прошло гладко - здесь всё как на мед-комиссии годен, негоден
третьего - нету)), ставим галку на "Dump Hitboxes"(автоматом
пропишутся хитбоксы $hbox) и в заключении жмём кнопку "Compile",
проверяем исходную папку и находим новосозданный "v_ak47.mdl",
бросаем в папку с cs и играем.
Советы:
-
во-избежание любых проблем с правильным экспортом - используйте такую же
разметку как и в дефолтных скриптах;
- используйте комментарии для
описания тех или иных действий в скрипте:
Многострочный
/*
here is your comment
here is your comment
here
is your comment
*/ Однострочный
//
here is your comment -
постарайтесь не использовать в комментариях
кириллицу;
- всегда думайте головой, если последнее не помогло пишите
будем разбираться.
На этом урок закончен, большое спасибо, ждите
продолжения.
|
|
Делаем
модель. Часть 5 - Редактирование
модели.
Я вас
категорически приветствую (с)Гоблин,
наступил долгожданный момент увидить, всё мной нижеописанное - в
действии. Это будет заключительный урок из серии "С чего начать".
Сегодня я расскажу о том, как из обычной модели для cs 1.6 сделать
нечто другое, - то что нравится вам, ну в данном случае это понравилось
мне. В статье пойдёт речь не совсем о редактировании, больше это похоже
будет на дополнение, некий апгрейд. Стартовая модель ак-47 - поехали.
Перед тем как приступить к импорту модели сделайте следующую процедуру:

Это нужно для того чтобы единицы измерения макса совпадали с движком
half-life.
Далее всё за планом, декомпилим v_ak47.mdl,
импортим файл f_ak47_template.smd:


1.
Парсер настроек SMD файла.
- Skip Mesh - не импортить
геометрию(меш);
- Skip Animation - не импортить анимацию,
следственно не будет костей и привязки.
В нашем случае нужно оставить
пустыми оба чекбокса т.к. нужно всё.
2.Настройки SMD импортёра.
SMD
Statistics(информация о файле):
- 42 кости;
- 258 вертекса;
-
454 фейса;
- 1 кадр анимации;
- 8 текстур.
Mesh Options(опции
геометрии):
- Import mesh - импортить геометрию;
- Rebuild
smoothing normals - сохранить группы сглаживания при импорте;
-
Import materials - тут всё ясно.
Bone/Animation Options(настройки
костей/анимации):
- Import bones - импортить кости;
- Use dummy
for orphan bones - использовать dummy как первичную кость;
- Use
dummy for end bones - использовать dummy как конечную кость;
- Skin
mesh to bones - привязать геометрию к костям;
-
Import first frame (reference) only - импортировать лишь первый кадр,
используется для reference моделей, здесь также можно ставить галку;
-
Reverse animation - обратная анимация;
Misc. Options(другие
опции):
- Convert from left handed coordinate space - ставьте галку
если импортите модель с левой руки(понять правильно);
Примечание:
dummy - вспомогательный объект в максе, может использоваться в роли
кости.
Важно:
reference-модель - не содержит абсолютно никакой анимации, в движке
half-life используется для передачи в анимацию - геометрии, текстур и
привязки костей(в нашем случае это f_ak47_template.smd).

Зачастую, помимо основной модели для удобства, я импортирую и модели
рук, они находятся в файлах lhand.smd(левая) и rhand.smd(правая).
Импорт
рук происходит по тому же принципу - что и основная модель, на
запрос Import Name Conflict введите имя объекта(любое, желательно чтобы
описывало его, в моём случае "left_hand" - для левой руки)

Важно:
импорт рук не обязательно делать в референсную модель, я делаю это
исключительно для удобства, чтоб видить как проходят руки через
основную модель, не затрагивает ли её части. Повторюсь это лишь для
удобства, делать не обязательно. Перед экспортом основной модели
f_ak47_template.smd модели рук(кости не трогать) нужно будет удалить.
А сейчас давайте временно скроем кости которые мешают осмотреть модель:

Переходим
во вкладку Display, и хайдим(скрываем) кости.
Важно: перед
экспортом обязательно включите показ костей
Подключаем
текстуры в сцену:
1. Идём в File -> Asset Tracking или Shift+T.
Asset Tracking - служит для отображения абсолютно всех текстур в сцене,
а также подключаемых ies-светильников и шейдеров. Если в друг текстуры
не отображаются, - нужно нажать кнопку Refresh(обновить) в левом
верхнем углу.
Выделяем все текстуры при помощи Shift+LB(левая
кнопка мыши), затем RB - выбираем пункт Set Path(выбрать путь) и
находим нужную нам папку.
2.
На втором скрине я уже выбрал путь к текстурам(у вас может быть другой
путь), но ещё не нажал кнопку OK, видно как все текстуры находятся в
статусе File Missing, то есть - не найдены.
3. Жмём OK,
видим что все текстуры перешли в статус Ok
- это именно то, что нам нужно. Закрываем Asset, но текстур как небыло
так и нету)), - это излишки макса. Мы могли бы пройтись по каждому
материалу отдельно и проставить отображение во-вьюпорте, ну это
довольно неприятная процедура, , а я насчитал там аж 8 материалов,
поэтому убиваем 2-х зайцев - сохраним файл и отобразим текстуры.
4.
File -> Save As... - сохраняем в формате .max(желательно
в той же папке).
5. Я назвал файл ak47_remake, сейвим...
6.
Сбрасываем сцену File -> Reset.
7. Открываем
только что сохранённую, File -> Open... находим,
открываем.
Результат:

Далее делаем то самое дополнение, лепим из бокса:

Дополнением будет Red Dot так называемая - красная точка, порылся в
нете и нашел неплохой скрин:

Совет:
перед тем как начать что-либо моделить, текстурить - поищите в сети
референсы(примеры)
Так как смысл данного урока - короткий путь к удачному экспорту, мы
пропускаем моделинг и текстурирование, о них пойдёт речь в следующих
статьях. Итак, смотрим что у меня получилось, не стоит забывать о том
движок Half-Life 1 очень слаб в поддержке большого количества
полигонов, именно поэтому red dot не промоделен так - как вы видите
выше на скриншоте:

Затекстурил и отмапил следующим образом:

Вкратце о тонкостях(если вы новичёк в максе - пропускайте шаг).
Начинаем
моделить
из бокса(бокс хорошо подошел в данном случае, зачастую начинаю
с плейна), поскольку материалы экспортируются через Multi/Sub Object(честно
признаться
я этому очень рад, не каждый движок даже в наше время может
позволить себе такую роскошь, многое также зависит и от экспортёра)
назначаем Mat ID нашей модели, так как в модели планируется
стёклышко делим модель(Red Dot) на 2 разных ID(почему - узнаете позже) -
то есть:
- основная часть ID = 9 текстура red_dot.bmp;
- стёклышко ID = 10 текстура red_dot_a.bmp.
Мапим,
текстурим. Присоединяем через Attach к основной модели(ак47),
далее Skin - Red Dot привязываем к основной кости Bone_AK47.
Осталось дело за малым - экспорт и QC скрипт:
Перезаписываем f_ak47_template.smd,
при экспорте обязательно укажите что экспортим для Half-Life 1 SMD:

Пример
скрипта под даную модель:
/*
==============================================================================
QC
script generated by Half-Life MDL Decompiler 1.2
2003, Kratisto.
Based on code from Valve's HL SDK.
v_ak47.mdl
Original
internal name:
"v_ak47.mdl"
==============================================================================
*/
$modelname
"v_ak47.mdl"
$cd ".\"
$cdtexture ".\"
$scale 1.0
$cliptotextures
$bbox
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
$cbox 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000
$eyeposition 0.000000
0.000000 0.000000
//reference mesh(es)
$body "rhand"
"rhand"
$body "lhand" "lhand"
$body "weapon"
"f_ak47_template"
// 2 attachment(s)
$attachment 0 "Bone 04"
2.750000 -22.500000 2.900000
$attachment 1 "Bone52" 0.000000
-3.000000 0.000000
$texrendermode "red_dot_a.bmp" "additive"
//
4 hit box(es)
$hbox 0 "Bone04" -1.980000 -8.880000 -1.020000
1.730000 0.030000 1.090000
$hbox 0 "Bone_Righthand" -1.340000
-2.980000 -0.410000 1.430000 0.000000 0.630000
$hbox 0 "Bone01"
-1.720000 -8.900000 -1.020000 1.990000 0.020000 1.090000
$hbox 0
"Bone_Lefthand" -1.520000 -3.073735 -0.410000 1.250000 0.000000 0.630000
//
6 animation sequence(s)
$sequence "idle1" "idle1" fps 30
$sequence
"reload" "reload" fps 37 { event 5004 13 "weapons/ak47_clipout.wav" } {
event 5004 57 "weapons/ak47_clipin.wav" }
$sequence "draw" "draw"
fps 30 { event 5004 11 "weapons/ak47_boltpull.wav" }
$sequence
"shoot1" "shoot1" fps 20 { event 5001 0 "22" }
$sequence "shoot2"
"shoot2" fps 20 { event 5001 0 "22" }
$sequence "shoot3" "shoot3"
fps 20 { event 5001 0 "22" }
// End of QC script.
А
теперь, почему мы делили на 2 разных ID наш Red Dot?
Ответ
прост:
к сожалению через материал, в т.ч. альфа канал, мы не можем добиться
эффекта прозрачности, но можно это сделать через скрипт QC, нужная
строка выделена жирным - сдесь думаю всё ясно.
Далее всё за
планом: компилим, получаем v_ak47.mdl,
копируем в папку cstrike/models. Эта модель не претендует на какие либо
аварды, это всего лишь рабочий пример.

Ну вот, очередной урок подходит до логического завершения, с вами был Joker автор, одно что могу вам
пожелать - это терпения в изучении Autodesk 3ds Max. Жду ваших
предложений и пожеланий.
Спасибо за внимание, до встречи.
|
|
|
|  |  |
|  |  |
|
|
|
|
| Профиль
|
|
|
|
|
|
Привет: Гость
Информация:
Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!
|
|
|
|
|
|
|
|
|
| Календарь
|
|
|
|
|
|
« Июль 2025 » | Пн | Вт | Ср | Чт | Пт | Сб | Вс | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
|
|
|
|
|
|
|
|
|
| Статистика
|
|
|
|
|
|
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
|
|
|
|
|
|