XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Желтая пресса: обучающие статьи
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

 
Steven Vesno

offline
Опыт: 3,136
Активность:
Ручной трансфер анимации (Перевод)
Роясь по форумам, обнаружил здоровскую статью, которой мне так не хватало ещё год назад. Ручной трансфер анимации может помочь там, где не удаётся сработать Oinkerwinkle-овской программкой для переноса анимации (особенно это касается тех случаев, когда переносятся отдельные анимки, а не в случае полной замены - у меня такие переносы получаются крайне редко).

Автор - Armel, взято с www.wc3campaigns.net, 12-07-2004, 20:43

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

Инструменты прошивки


Прежде всего, определимся с инструментарием:
- Yogbul's file converter для перегонки mdx в mdl и обратно
ЛИБО
- MDLVis последних версий
(Прим. перев.: добавил сам. Не обязателен, но с ним работа ОЧЕНЬ ускорится. В тот момент, когда я перевожу этот гайд, в ходу багфикс 1.39c. Есть на XGM.ru)
- War3ModelEditor aka Magos Editor (опционально, позволяет смотреть иерархию костей)

- War3Viewer (не обязателен, но тестировать модели будет гораздо быстрее; конечно, картинка не совсем соответствует WC3, WorldEdit был и остаётся конечным арбитром)
- WinMPQ или любой подобный MoPaQue-архиватор
- Блокнот форточковый обыкновенный либо его заменители

- Oinkerwinkle's key redistributer program - Программка для распределения ключевых кадров
- Светлая голова и прямые руки

Прошивка


В этой статье мы добавим анимацию Walk Defend от пехотинца людей (footman) к анимациям крестьянина (peasant). Сперва вытащим обе модели из war3.mpq с помощью War3Viewer-а или WinMPQ и конвертируем в mdl (Yogbul's file converter либо MDLVis). Mdl-файл футмена открываем блокнотом и ищем «sequences» (кто не знает, это список анимаций модели, почти в самом начале файла – для справки статья «Устройство файлов mdl» by Prot).
Копируем тот кусок, который касается ходьбы футмена (walk) а именно:
Код:
Anim "Walk Defend" {
Interval { 20000, 21100 },
MoveSpeed 110,
MinimumExtent { -37.5412, -31.6479, -3.83594 },
MaximumExtent { 50.1027, 36.0322, 94.4434 },
BoundsRadius 57.1482,
}
...
и втыкаем в конец списка анимаций крестьянина, mdl которого открыт тем же блокнотом:
Код:
MinimumExtent { -57.8447, -36.2669, -0.0542747 },
MaximumExtent { 70.507, 34.1633, 117.941 },
BoundsRadius 71.2252,
}
Anim "Stand Work Lumber" {
Interval { 193133, 193733 },
MinimumExtent { -57.8733, -43.083, -0.546668 },
MaximumExtent { 70.5075, 35.2598, 118.031 },
BoundsRadius 70.1906,
}
Anim "Walk Defend" {
Interval { 20000, 21100 },
MoveSpeed 110,
MinimumExtent { -37.5412, -31.6479, -3.83594 },
MaximumExtent { 50.1027, 36.0322, 94.4434 },
BoundsRadius 57.1482,
}
Прим. перев.: Не забудьте поправить число, стоящее сразу за «Sequences»! Насколько я помню, это общее количество анимаций в файле, а поскольку мы добавляем к ним ещё одну, то и число нужно увеличить на единицу.

Теперь небольшое теоретическое введение. «Граничным Ключевым Кадром» (Граничным КК) обзовём номер, который используется, чтобы определить, когда для модели наступает событие. В дальнейшем, говоря о ключевых кадрах (КК), будем понимать под этим их порядковые номера. Все анимации модели можно считать поданимациями условной общей анимации, они показаны в том самом порядке, в которой они в этой большой анимации следуют. Хорошо это видно, если открыть в MDLVis-е редактор анимаций и сравнить сперва общую линейку ключевых кадров, а потом линейки отдельных анимаций – они и есть куски этой общей линейки. Таким образом, в разделе ‘sequences’ – дословно ‘последовательность’, где они перечислены (Прим. перев.: если скажу «задекларированы», программисты сразу поймут, в чём соль), интервал каждой анимации образуется двумя граничными КК, определяющими момент начала и конца той или иной анимации. В дальнейшем увидим, что граничные КК ещё используются при описании костей (bone), анимаций геосетов (geoset), генераторов частиц (particle emitters), генераторов полос (ribbon emitters - обычно следы от взмахов оружием) и параметров событийных объектов (eventobject). Если что-то непонятно – смотрим опять же «Устройство файлов mdl».

Ну вот, с самым лёгким справились. Теперь подправим граничные КК анимации так, чтобы интервал анимациии располагался за последней анимацией крестьянина (в данном случае это будет замена {20000, 21100} на {200000, 201100}, то бишь простое прибавление 180000. Если сложно, вооружитесь калькулятором. Бэкапим, сохраняем файл.

Теперь самая нудная часть: открываем Oinkerwinkle's Key Redistributer.
Для тех, кто не знает, что делает эта программка. Ничего невозможного :). Она берёт все номера ключевых кадров со входа, принадлежащих начальному диапазону, и транслирует в конечный диапазон (в нашем случае прибавляет 180000) КАЖДЫЙ КК. Конечно, это можно делать ручками, но… а оно надо?
Задаём начальный и конечный КК на входе 20000 и 21100, а на выходе – 200000 и 201100 соответственно. Находим первую значимую кость крестьянина (Кость guts нам не нужна – это кость трупа, и она не анимируется) и соответствующую ей кость в mdl-файле футмена (у неё почти такое же имя). В нашем случае это будет кость «Bone_Pelvis», третья по счёту у крестьянина. Так, теперь видим список параметров анимации, он называется сдвигами или поворотами (у костей обычно происходят повороты, реже – параллельные переносы или сдвиги, и совсем редко – масштабирование; а у некоторых костей вообще может не быть анимационных параметров). Каждый из этих параметров располагается сразу за номером, который обозначает ключевой кадр (КК) анимации, на котором этот параметр пригодится. Легко сообразить, что все параметры конкретной анимации используют КК из интервала этой самой анимации.
Копируем у футмена все сдвиги между кадрами 20000 и 21100, вставляем их в «input» и жмём «Redistribute». Теперь вставляем перераспределённый блок с output-а после последнего сдвига соответствующей кости нашего несчастного крестьянина. Делаем то же для всех сдвигов и масштабирований всех костей.
ВНИМАНИЕ! Убедитесь в том, что вы не пытаетесь воткнуть поворот в список для сдвигов, это запорет модель. Секция для сдвига, поворота и т.д. в каждой кости отдельна и имеет заголовок. Повороты – к поворотам, сдвиги – к сдвигам.

ЗАМЕЧАНИЯ:
- У некоторых костей нет эквивалента во второй модели, и увы, обычно они бесполезны. Но иногда их можно реанимировать. Как? Простейший пример: вшиваем анимацию юнита без плаща (например, футмена) юниту с плащом (Сильване). Пробуем следующее: всё делаем так, как описано, но недостающие параметры анимации берём из другой модели (То есть, вшивая анимку «walk defend» от футмена Сильване, реанимируем плащ с помощью анимационных параметров самой Сильваны – из анимки «walk», или любого другого подходящего юнита с плащом).
- Во многих близзардовских моделях есть кости-заглушки (dummy bones), ассоциированные с так называемыми «помощниками» (helper). Поэтому, говоря о костях, имеем в виду и обычные кости, и «помощники». Если мы видим, что явно важная кость (root, head, foot, leg, pelvis, chest, arm, hand – все основные части тела) параметров анимации не имеет, то тут-то и надо сообразить, что дело нечисто. Ищем «родителя» кости – скорее всего, им окажется анимированный «помощник». Поэтому, производя трансфер анимации, лучше всего внимательно просмотреть все важные кости одну за другой и перенести анимацию для каждой, а затем просмотреть модель в War3Viewer-е (Прим. перев.: или в MDLVis-е) и проверить – возможно, некоторые кости нужно «реанимировать».
Прим. перев.: кстати, наш случай как раз такой. У футмена анимации заданы «помощниками», а у крестьянина – костями. Значимо ли это? Насколько я понял, нет. Просто пересаживаем параметры с «помощника» футмена на соответствующую кость крестьянина. Я никакой разницы не заметил.
- Иногда попадаются такие «нехорошие» модели, в которых название костей… скажем так, неинформативно. В таком случае придётся догадаться, какая кость какое назначение выполняет (Можно использовать программку модифицирования вершин – Oinkerwinkle's vertex modify); увы, изначальный гайд не содержит более никакой инфы по этому вопросу.
Прим. перев.: Несложно на самом деле +). Берём MDLVis, открываем в нём наш mdl и путём научного тыка выясняем, какая кость какую часть тела деформирует. Сравнив эти ценные данные для обоих моделей, обычно несложно сопоставить кости даже в случае мудрёных названий.
- В зависимости от того, как каждая кость использует свои параметры анимации (Линейный, Эрмитов, либо Безье-переход – linear, hermite, bezier), могут возникнуть некоторые графические казусы (так что удачно, что львиная доля костей использует Эрмитов переход). Решение этой проблемы в общем случае пока не известно, но если нужен трансфер кости от Эрмитова или Безье-перехода к линейному (без параметров InTan и OutTan), можно сделать обычное копирование, как описано, а потом удалить InTan и OutTan для каждого перенесённого параметра этой кости. Вроде работает.
(Прим. перев.: наверное, надо ещё и указатель Hermite в начале секции сдвига/поворота заменить на Linear или что-то в этом роде. Кто знает – поправьте меня.).
- Прямо перед списком последовательностей анимаций (Sequences), а также для каждой кости перед её секциями сдвига, поворота и масштабирования есть число, указывающее соответственно общее количество анимаций в модели и число параметров сдвига, поворота или масштабирования кости. Теоретически, поскольку при переносе анимации эти числа меняются, их надо править. Но если их не трогать, никаких глюков, по крайней мере в War3Viewer-е и Warcraft-е не замечено, поэтому можно их как бы и не корректировать. «Как бы» сказано потому, что эти числа могут оказаться важными для 3DSMax-а.
Прим. перев.: по-видимому, автор не прав. Я пробовал так делать – при просмотре MDLVis-ом не только не видна имплантированная анимация, но и портится анимация Death крестьянина. Поэтому ПРАВИТЬ ОБЯЗАТЕЛЬНО!!!!
- При редактировании mdl-файла будьте внимательны к синтаксису и почаще делайте бэкапы. Простая невнимательность или предшествовавшая бессонная ночь вполне может сказаться на работе с полумегабайтным текстовым файлом.
- Для полного счастья хорошо бы поправить также анимки геосетов (geosetanims), генераторы частиц (particle emitters), генераторы полос (ribbon emitters) и объекты событий (eventobjects), чтобы определить их видимость (особенно это важно для полного трансфера, когда все анимации одного юнита перешиваются анимациями другого), или они будут вылазить в самое неподходящее время (звук смерти во время мирного шествования юнита по зелёной лужайке относится как раз к таким случаям). Кроме того, если добавляется анимация типа Spell или Attack, включение и настройка particle/ribbon emitters значительно её украсит. В этих секциях обычно есть список, озаглавленный «visibility» и хранящий ключевые кадры, до которых они будут видимы/невидимы. Здесь всё просто, обычные булевы значения: 1 означает видимость, 0, соответственно, невидимость.
C помощью всё той же Oinkerwinkle's Key Redistributer поправляем эти блоки.
Добавка: Пример правки геосета – открываем mdl блокнотом и находим первый GeosetAnim. Выглядеть он будет так:
Код:
GeosetAnim {
Alpha 17 {
DontInterp,
133: 0,
1800: 0,
4633: 0,
14133: 0,
20167: 0,
23200: 0,
25467: 0,
27667: 0,
29100: 0,
31033: 0,
34333: 0,
38133: 0,
99800: 0,
183133: 0,
186600: 0,
191333: 0,
193133: 0,
}
GeosetId 2,
}

Что всё это значит? Данный геосет, т.е. поверхность, блок, на которые разделена модель, имеет особую видимость, указанную ниже. Конкретно этот геосет имеет ID 2 (см. внизу), то есть, учитывая, что нумерация идёт с нуля, с помощью MDLVis-а несложно выяснить, что это такое. Это мешок с золотом, который тащит крестьянин. Далее идёт список КК и булевы значения видимости (1 – видим, 0 – нет). Наша анимация Walk Defend к этому моменту уже должна работать, но мешок там видно. Поэтому убираем его, добавляя в конце строчку «200000: 0,». Не забываем, что число после Alpha обозначает количество вставленных КК. Мы добавили строку, поэтому его нужно увеличить на единицу.
По аналогии работаем с GeosetID 3, 4 и 5 (это связка дерева, кирка на поясе и скелет соответственно). Видимость всех этих геосетов в новой анимации нам не нужна.
С эмиттерами всё несколько сложнее - у них есть набор дополнительных настроек, позволяющих настроить их параметры. Про это есть хорошая статья Wolverine-а "War3ModelEditor: создание источников частиц". В том случае, если эмиттеры в модели уже есть, срабатывает и способ для ленивых: существующие эмиттеры просто перенастраиваются для работы в новых анимациях.
- С внешними объектами (всяческие вспышки при анимациях типа Spell, или, например, молния у Gryphon Rider-а при атаке) дело обстоит немногим сложнее. Они реализованы обычно дополнительными плоскостями, которые чаще всего масштабируются для создания нужного эффекта. Если в редактируемой модели они есть, самый простой способ - поступить с ними так же, как и с другими анимациями, только перенести их из этой же модели в саму себя. То есть сдублировать нужные строки, предварительно пропустив их через Key Redistributer (При этом нужно заново настроить диапазон, его output-границы берутся на глаз при предварительном просмотре той анимации, в которую собираемся добавлять блок).

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

Заключение


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

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

Прямая ссылка на пример: http://dump.ru/files/n/n056882716/

Credits


Автор статьи: Nicolas Armel (France, Lyon)
Разрешение на перевод: получено
«Indeed, I am the author of that article. I give you express permission to translate it. I'm just curious, in which language would that translation be?»
Вольный перевод: Steven Vesno.

Отредактировано Steven Vesno, 16.10.2007 в 06:56.
Старый 14.10.2007, 12:53
Warcryer
Бугага
offline
Опыт: 1,079
Активность:
Вроде неплохо,но неужели сам переводил?Прям сомнения берут...
Старый 14.10.2007, 13:07
Steven Vesno

offline
Опыт: 3,136
Активность:
Сам :): . Сильно обидно, что раньше не наткнулся. А то наличие десятков моделей разных авторов, построенных на анимации блэйдмастера орков, начинает немного огорчать, даже если сами модели выполнены на пять. Далеко не все готовы возиться с анимацией с нуля.
Ещё интересная идея была, видел где-то (кажется, на хайве) - там демонессе вшили движения гарпии, чтобы она летать могла.
Старый 14.10.2007, 14:25
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Particle/Ribbon emitters, Events, Lights, Global animations, Texture anims (!), еще чего-то.. много чего используют кадры, перечислил бы их все :)
Для выяснения иерархии костей/помощников проще использовать Вар3МоделЭдитор - его обязятельно добавь в список утилит да и вообще им удобно смотеть и менять иерархию моделек..
а так респект, хорошая работа

FellGuard добавил:
кстати, можно дублировать некоторые анимация прямо из самой модели) например у футмана можно взять аниму Stand Victory и поименовав Spell зашарашить тому же футу + наклеить два партикл эмиттера, получится колдующий фут) я так делал
Старый 14.10.2007, 14:49
Steven Vesno

offline
Опыт: 3,136
Активность:
Цитата:
Сообщение от FellGuard
Particle/Ribbon emitters, Events, Lights, Global animations, Texture anims (!), еще чего-то.. много чего используют кадры, перечислил бы их все :)
Для выяснения иерархии костей/помощников проще использовать Вар3МоделЭдитор...
FellGuard добавил:например у футмана можно взять аниму Stand Victory и поименовав Spell зашарашить тому же футу + наклеить два партикл эмиттера, получится колдующий фут)
Наверняка, но я с эмиттерами ещё вообще не работал, не говоря уже об анимации текстур. А War3ME вообще только позавчера содрал, до того как-то обходился тем, что есть.

Возможно, глупый вопрос: а можно триггерно повесить на заклинание существующую анимку?

Добавлено: вторая проба. ChaosWarlord-у by b17rider с hiveworkshop, явно сделанному на базе Рексара, вшиваются анимации Grunt-а. Модель немного сыровата, нужна корректировка (тело немного на землю опустить), но работает! Добавлены анимации attack 3, spell 2 и stand 3, откорректирована видимость. FellGuard, спасибо за подсказку про отключение риббон эмиттеров.
http://dump.ru/files/n/n4113946252/

Отредактировано Steven Vesno, 14.10.2007 в 19:20.
Старый 14.10.2007, 15:37
Кет

offline
Опыт: 111,109
Активность:
До этого можно бы в принципе и самому дойти, если хоть раз открыть mdl в блокноте...
Но статья норм.
Старый 15.10.2007, 20:55
Mastro

offline
Опыт: 14,878
Активность:
О ужос,много букофф...
Счаз ознакомлюсь

Mastro добавил:
Приера нету на хосте.
Старый 15.10.2007, 21:17
KO3bMA

offline
Опыт: 45,024
Активность:
Steven Vesno статья хорошая, и перевод хороший ( в плане читаемости - все понятно)
Цитата:
Сильно обидно, что раньше не наткнулся.
а на ХГМ в разделе моделлинг один моделлер (жаль, не помню кто) про ето уже рассказывал, жалко, мало кто заметил
Старый 16.10.2007, 17:40
CheGeWarA
Дядя Эрнесто
offline
Опыт: 7,510
Активность:
KO3bMA я помню, так как по моей просьбе он начал это изучать, а потом выложил для всех, но данный метод это геморой, лучше делать с нуля анимки
Старый 16.10.2007, 18:55
Steven Vesno

offline
Опыт: 3,136
Активность:
Цитата:
Сообщение от Кет
До этого можно бы в принципе и самому дойти, если хоть раз открыть mdl в блокноте...
Можно. Честно - мне для этого потребовалось бы дня четыре. А так - дошло за один.
Цитата:
Сообщение от CheGeWarA
...но данный метод это геморой, лучше делать с нуля анимки
Кто спорит - для тех, у кого руки из того места растут - лучше. У меня драйвер DirectHands и сейчас не новый, а когда я в прошлый раз ковырялся в анимациях... Либо в WE вообще модели не видать, либо она глючила по-чёрному.
Программа-то несложная получилась бы, участие человека нужно только на стадии сопоставления скелетов.
Старый 17.10.2007, 16:10
Steven Vesno

offline
Опыт: 3,136
Активность:
Сегодня ещё экспериментировал с трансфером. Не знаю, насколько это верно теоретически, но:
Имеем на входе кость с линейной анимацией (Linear). На выходе нужна Эрмитова (Hermite). Например, для того же трансфера анимации. Работал с Maiev.mdl.
Что делал:
  • В открытом блокнотом файле mdl в том блоке, где описываются КК нужной кости, заменяем слово Linear на Hermite.
  • После каждой строки с деформацией КК добавляем такие строчки:
InTan { 0, 0, 0, 1 },
OutTan { 0, 0, 0, 1 },
(То бишь нулевые вход-выход. Я пробовал только на Rotation, на Translation три параметра, а не четыре)
  • Сохраняем.
  • Открываем файл в MDLVis. Видим, что анимация действительно стала эрмитовой, но несколько изменилась и обрела жуткую корявость. От неё надо избавляться.
Открываем "корявую" анимацию в редакторе анимаций, выбираем вкладку "движение", затем задаём нужную кость в выпадающем списке и нажимаем кнопку поворота (повторюсь, я проверял только на одной кости и только на Rotation!!!).
Теперь по очереди прощёлкиваем все КК анимации, пока не наткнёмся на тот отрезок, где в анимации начинаются "артефакты", то бишь корявости. На ближайшем КК обнаруживаем сплайновую кривую, которая, если не ошибаюсь, характеризует плавность и распределение деформации по промежутку между КК (она будет нарисована на панели справа, в самом её низу).
ОБНУЛЯЕМ У КРИВОЙ ВСЕ ТРИ ПАРАМЕТРА ("Натяжение", "целостность", "наклон")!
На самом деле, не только и не всегда обнуление изничтожает "артефакты". Например, оно не всегда помогает, если кривая на первом и последнем КК анимации. В остальных 95% случаев - это как раз то, что нужно.
Повторяем нехитрую операцию для всех КК всех глючных анимаций.
  • Что имеем на выходе? Анимация кости сплайновая, и хотя она несколько изменилась по сравнению с оригиналом, изменения вполне приемлемы. Повторюcь, экспериментировал со стандартной моделькой Майев (у неё единственная "неправильная" кость - хэлпер bone_arm1_l), править пришлось обе атаки, death/dissipate, spell и кое-что из stand. На правку ушло минут десять. Результатом почти доволен, есть мелкая шероховатость в Channel. Не знаю, работает ли это в других случаях.
Предупреждая фразы про "делайте с нуля!" или "мазохизм!": мне нужно было именно это, и это получилось. Может, пригодится кому ещё.
Старый 09.11.2007, 16:41
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Steven Vesno, положил бы сюда пример для наглядности ну или хоть код.. Зачёт полезная информация
Старый 09.11.2007, 18:49
Steven Vesno

offline
Опыт: 3,136
Активность:
Пример
Цитата:
Сообщение от FellGuard
Steven Vesno, положил бы сюда пример для наглядности ну или хоть код.. Зачёт полезная информация
Хмм... Ну, вообще-то, я немного слукавил. Обрабатывал не совсем модель вардена, а модификацию, созданную на её основе. Поскольку анимация остаётся варденовской, разницы, в сущности, никакой нет... но меши немного другие.
http://dump.ru/files/n/n650374573/
В архиве три mdl-файла. Не хватает пары текстур, но в ВИСе это просматривать не мешает - графика здесь имхо только лишний вес. Номер 18 - линейная анимация, 19-0 - сплайновая с артефактами, 20 - пофиксенная.
Если открывать в блокноте, надо искать строку Helper "bone_arm1_l" {
Ниже шапки этой кости находятся разделы Translation (12 записей) и Rotation (48 записей). Вот последний-то раздел и нужен, файлы, фактически, отличаются только им:
Файл 18 - Linear, входных-выходных данных нет
Файл 19-0 - поменяно Linear на Hermite и дописаны нули
Файл 20 - фикс из MDLVis.

Кустарщина это, конечно, но сработало. Нормальный универовский студент со знанием математики и кривых Безье наверняка придумает способ получше.

Эхх... вот как доделаю... если доделаю... опять понадобятся текстуры, как и для орка-вождя :(. Скрещивание пошло гораздо сложнее, пытаюсь в одну кучу смешать DH, Demoness, Sylvanas и ещё парочку, чёрт его знает, что выйдет. Генетика...

Отредактировано Steven Vesno, 10.11.2007 в 00:08.
Старый 10.11.2007, 00:00

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 19:26.