SteamDB

» » » Большие хитрости PAC3

Большие хитрости PAC3

Я нашел только одно руководство по ПАК3 (русскоязычное конечно же), и то, похоже больше на справочник, в этом же руководстве я постараюсь раскрыть базис работы в этом аддоне
Введение
Если вы еще не знаете, что такое PAC3, то объясняю - это аддон, позволяющий изменять вашу плеермодель, а также любые энтити, хозяином которых вы являетесь, с помощью тех моделей и текстур, что имеются в игре, и даже вне её (с небольшими условиями)

Часто можно встретить на серверах-песочницах, реже на других режимах, но суть везде одна - изменить модель и придать ей уникальности, ведь в отличие от pointshop'а, который есть на каждом втором сервере независимо от режима игры, ПАК3 позволяет вам свободно использовать имеющиеся в игре модели, и поэтому для новичков он вызывает порой странное удивление.

Пример простой работы (нижний скриншот - оригинальная модель):


Прежде чем начнем стоит отметить, что не смотря на то, что ПАК3 поддерживает и кастомные модели (модели извне в формате .obj), злоупотреблять им не стоит, ибо он вполне может вызывать серьезные провисания на всём сервере, или по-крайней мере у определенных людей.
Интерфейс и работа с ним

На скриншоте, слева можно увидеть интерфейс самого аддона. Изначально у вас будет только одна группа, однако нажав на неё с помощью ПКМ (правой кнопкой мыши), вы увидите целые разделы, но не пугайтесь, всё разбирать в данном руководстве не будем, этим будете заниматься вы во время освоения аддона, разберемся с основами.
wear - эта кнопка наденет ваш прикид. РАК3 не будет показывать вашу работу остальным игрокам до тех пор, пока вы не нажмете её, так что если другие игроки не будут видеть вашу ♥♥♥♥♥♥♥♥♥♥♥♥ую модель, а вы будете - то в первую очередь нажмите на эту кнопку.
copy, paste, cut - очевидно, скопировать, вставить и вырезать
paste properties - вставить только свойства скопированного объекта
clone - клонировать

experimental
- если вы скачиваете обычный РАК3, то у вас не будет этого раздела, ибо в моем случае используется последняя версия с github'а, впрочем там каких-то особых функций и нет, и на некоторые сервера устанавливают ту же версию с гитхаба, но такие еще найти надо
advanced - это продвинутый уровень, хотя правильней будет сказать специализированный. Там есть custom animation, который позволяет вам делать собственную анимацию модели; projectile - сделает из вас пушку, стреляющую снарядами, которые вы сами сделаете; command - на самом деле ничего сложного, просто при использовании в связке с event'ом будет вписывать от вашего лица команду в консоль, удобно в одиночной игре, потому-что позволит использовать РАК3 в связке с другими аддонами, использующие консольные команды.
entity - всё, что связано с объектом издевательств, т.е. вы не добавляете по сути чего-то нового, но изменяете к примеру анимацию вашей модели, её материал и эмоции (виа фэйспозинг)
model - это уже добавление пропа к вашей модели, а также её изменение: материал, кости и т.д. (к слову, эти параметры можно применить и к своей плеермодели, просто достаточно создать что-то нажав ПКМ по вашей энтити)
effects - это эффекты, т.е. звуки, свет и т.п.
modifiers - модификаторы, которые изменяют объект к которому они подставлены.

group - это создание новой группы, на модели это не отразится, это нужно только для распределения объектов в интерфейсе
event - события, отдельная ветвь, заслуживающая раздела. Когда он неактивен, то все привязанные к нему предметы не будут показываться, и соответственно наоборот. Интересно то, что на этом завязано много интересных работ в РАК3, как например на моей старой модели менялся камуфляж с помощью ивентов.

save, load, remove - загрузить, сохранить вашу работу. Удалить выделенный сегмент в ней
Положение, угол и размер объекта
Теперь когда с интерфейсом всё ясно, стоит перейти к делу: создайте модель, и вы увидите три линии с кругами на концах - с помощью них вы можете изменять положение объекта в пространстве, точно также как и угол. Просто потяните за кружки в сторону, убедитесь только в том, что хотя-бы одна из двух оставшихся линий смотрит почти прямо в экран, чтобы было удобнее работать. Изменить угол можно с помощью стрелок, расположенных в середине данных линий. Каждая линия имеет свой цвет, и из уроков геометрии вы знаете, что в трехмерном пространстве координаты называются XYZ, так вот, X - это зелёная, Y - это красная, а Z - синяя.

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

Если же нужно изменить размер только одной стороны, то используйте scale, числа в котором расположены в порядке названия координат, т.е. также XYZ, где последнее число это Z, а первое X.
Подробнее о моделях
Теперь вам известно как перемещать модели в пространстве, значит - следует переходить дальше. Во-первых, стоит выбрать что-то получше, обычного белого шарика - и чтобы не искать модель в спавнменю и не копировать её название, что многие наверное не умеют делать, в РАК3 есть кнопка, которая откроет вам необходимый список, в данном случае - моделей.

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

Ниже находится поле "material", по такому же принципу вы можете выбрать текстуру накладываемую на вашу модель, однако если вам нужно больше свободы в материалах, то для этого есть отдельный объект, о котором писать пока не стану, но в нем достаточно много настроек.

Чтобы изменить то, какой кости привязан объект, найдите поле "bone", и при нажатие на троеточие каждая кость будет видна уже на вашей плеермодели в виде квадратиков с названиями. Выберите нужную, но об этом будет подробнее позже.

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

eye angles
- меняет ориентацию координат XYZ, теперь X координата будет направлена туда же, куда и глаза. Удобно при создании каких-нибудь дронов, следующих за игроком.

position offset
- изменяет визуальное положение модели, т.е. модель поменяет положение, однако её центр, представленный в виде точки из которой исходят координаты - останется на месте.

angles offset - тоже самое, только с углами
Я ♥♥♥♥ как назвать этот раздел
У вас есть какая-то модель на голове, если вы нажмете ПКМ на неё и создадите ещё модель - то она будет дочерней, т.е. теперь любое перемещение основной модели изменит положение и дочерней. Чаще всего это используется в больших билдах, где много моделей, которые зависят друг от друга, но также можно просто добавлять такие, чтобы не было беспорядка в интерфейсе.

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

Нажмите ПКМ на группу, и найдите раздел "effect", там, вы должны выбрать "sprite". Без лишних слов - это текстура, которая будет показываться вам всегда одной стороной, она используется в игре для эффектов блика, искажений воздуха из-за огня, и для дыма, на самом деле есть еще способы использовать это, но вы сами найдете применение.

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

Изначально текстурой спрайта будет кружок, который используется для обозначения обычных эффектов, которые спавнятся виа спавнменю, и чтобы изменить это, спуститесь в заголовок "generic" и найдите поле "sprite path" и также как и с материалами выберите нужную, однако учитывайте, что есть текстуры, которые оканчиваются на *_noz или *_ignorez, избегайте таких текстур, потому-что исходя из названия они игнорируют координату широты и будут видны сквозь ЛЮБЫЕ стены.

Вот и результат, конечно не очень удачно использовать это на примере плеермодели, но позже я покажу, как можно создать на основе спрайтов лазерный прицел на ваше оружие. Теперь же приступим к хвосту.

Его можно создать в том же разделе, что и спрайт, он будет называться trail и в принципе с ним особо работать не нужно. Думаю с интерфейсом вы к этому времени разобрались, и сможете сами поиграться с настройками. Скажу лишь то, что start size и end size - это размер в начале и конце хвоста, а lenght - это его длина, исчисляемая в ♥♥♥♥♥♥ знает каких величинах.
События (event) на примере ноклипа
Создайте ивент, он не находится в каком-то разделе. Настоятельно рекомендую добавлять ивенты в отдельные группы, но это необязательно, если у вас стоит галочка на параметре "affect children only", всё потому-что без неё, или находясь в группе с другими объектами, событие будет влиять на все остальные объекты в этой группе, поэтому дабы избежать неприятных ситуаций учитывайте это.

Когда вы создали ивент, он по сути своей ничего не делает - модель не изменяет, ваши группы тоже. Чтобы он начал хоть что-то делать, вам нужно вписать то, что активирует событие. Однако в этом вы немного ограничены, потому-что для этого есть отдельный список "event", находящийся в "generic". Найдите там "is_in_noclip"


Теперь, когда у нас есть событие, которое активируется нахождением в ноклипе, нужно добавить то, что происходит после активации события. В данном случае я хочу сделать анимацию плавания в воздухе. Для этого нажмите правой кнопкой мыши по ивенту, и в разделе "model" найдите "animation", и в поле "sequence name" найдите анимацию плавания. Лучше всего использовать поиск, который находится в самом низу списка. Впишите туда "swim" и вы найдете все анимации, которые содержат это слово.


Всё работает, за исключением того, что наоборот. Чтобы этого избежать поставьте в вашем ивенте галочку на "Invert" и всё должно теперь быть как следует.
Изменение определенного оружия
Теперь разберемся со звуком, а также с усложненными ивентами. Дело в том, что событие из прошлого раздела было простым - ты либо в ноклипе, либо нет, однако есть также события, которые требует конкретных условий, в нашем случае это "weapon class". Чтобы он вам нужно вписать название оружие, использование которого активирует событие.

Создайте ивент, вместо "is_in_noclip" найдите "weapon class" и теперь выйдите из РАК3 и откройте спавнменю, список оружия. Я выбрал револьвер. Нажмите правой кнопкой по нему - Copy to Clipboard, теперь название оружия скопировано в буфер обмена и вставьте название в самое нижнее поле "find", под заголовком "arguments". Добавьте под ивент какую-нибудь модель, проверьте инвентирование события и у вас должна появляться модель только при использовании выбранного оружия.
Улучшение плеермодели
Теперь, когда основы уже изучены, и опыта скорей всего набралось побольше, приступим к новому уровню. Мне нравится модель, что я использую, но некоторые мелочи мне захотелось изменить - не в обиду автору, просто дело вкуса, а у меня чаще всего "выбор настоящего гурмана", поэтому я собираюсь изменить прическу Вольчице, а также засучить ей рукава.

В первую очередь я создаю две группы под изменяемые руки, это необязательно, и скорей всего придет само, после того, как начнете увеличивать масштаб своей работы. В них я добавляю кости из раздела "model", или "entity", разницы никакой. С помощью этих объектов я изменяю размер предплечий Вольчице, до тех пор, пока он не будет равен 0.1, за исключением X координаты, которую лучше оставить в том же размере, но это зависит от случая.


Теперь я могу добавить новые руки без боязни, что куртка будет проглядываться сквозь них. Далеко ходить не надо, в списке моделей спуститесь вниз, и вы найдете папку "addons", очевидно - что она для ваших аддонов, в число которых входит и РАК3. Автор добавил несколько моделей ткани, а также части тела для женщин и мужчин, впрочем даже полноценные тела он также добавил, оттуда я возьму правую и левую руку. Учитывайте, что аддоны там показываются и ваши тоже, однако это не значит, что остальные их увидят, поэтому берите модели из тех аддонов, которые установлены на сервере


Изменяю кости, к которым они привязаны на предплечье, подгоняю по положению и углам, но на размеры мне ♥♥♥♥♥♥♥♥♥♥, ибо из-за того, что центр модели находится не на самой руке, она увеличивается вместе с расстоянием от центра до руки, проще говоря - смещается, и заниматься этим мне совсем в лом. Из-за того, что модель выходит дальше в плечо - нужно использовать "clip" находящийся в разделе "modificators", он обрезает модель, и я создал два таких, чтобы убрать ладонь и плечо. Теперь остается подогнать только по цвету и готово. На самом деле идеально было бы взять текстуру тела с этой модели и налепить её на руки, добавив все те характеристики, что присущи оригинальной текстуре, но об этом позже.


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

В качестве донора будет Джули Киндман из первой части Evil Within, всё потому-что мне нравится её прическа, а еще у неё нет конкурентов. Однако помимо волос вместе с Джули идет всё остальное её тело: глаза, лицо там и всякое такое, что нам нужно убрать.

Ну тут всё просто, подгоняете модель, обрезаете с помощью "clip" всё, что не касается волос, и сталкиваетесь с проблемой, что часть головы всё ещё осталась. Для этого в РАК3 есть "submaterial", находящийся в разделе "entity", он ведет себя как обычный материал, за исключением того, что окрашивает не всю модель, а выбранную текстуру, которая в модели чаще всего не одна, в нашем случае волосы, лицо, глаза и всё остальное - разные текстуры, так что мы окрашиваем их в невидимый материал, на роль которого лучше всего подходит: vol_light001

Осталось только изменить цвет волос на более каноничный и дело сделано:
Изменение звука выстрела, добавление ЛЦУ и провода
Теперь вернемся к оружию, чтобы рассмотреть функции РАК3, о которых до этого не говорилось особо, а также я покажу как создать подобие ЛЦУ/Фонарика для вашего СМГ

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

Добавьте два одинаковых спрайта, на подобие тех, что использовались ранее, они будут использовать в качестве бликов, измените их размер по X и У координатам, для этого есть отдельные поля size x и size y, теперь у вас есть подобие фонарика.

Теперь приступим к ЛЦУ, и в отличие от фонарика, лазер - это узконаправленный поток света, поэтому так светиться он не должен, и в то же время, когда этот лазер направлен в вас, то блики будут не такими сильными, поэтому лучший способ - это использовать тонкие пропы, для имитации лучей.

Создайте две модели пластиковых плит из phx, у которых четыре на четыре плитки, у этих моделей соотношение текстур 1:1 и нет ничего, что может их деформировать, поэтому они идеально подходят. Уменьшите их по двум величинам, но по другой сделайте раза в 4-5 больше, или сразу дайте им текстуру спрайта и выбирайте размер исходя из этого. Самое главное - поставьте галочку на fullbright.

Из-за того, что модель не такая уж и тонкая, сбоку можно увидеть часть текстуры, которая в нашем случае проявляется как небольшое осветление, чтобы его убрать просто возьми clip и обрежьте. После этого поставьте галочку на "double face", потому-что после обрезания у модели пропала задняя сторона. Также обрежьте ту часть, что находится в корпусе. Скопируйте вашу модель лазера, и разверните её на 90 градусов, таким образом с какой стороны не посмотри - ваш луч будет выглядить реалистичным, а не 2Д текстурой, что подвержена перспективе.

Однако это ещё не всё. Этот лазер мнимый и очевидно, что он не оставляет точки на поверхности куда направлен луч. Тем не менее это можно исправить. Создайте еще один проп плитки 1х1 с той же текстурой, измените её по размеру так, чтобы точка выглядила пропорциональной лучу, и выбирая кость, нацельтесь в сторону, куда смотрит ваша плеермодель. Я не уверен, является ли это фишкой последних версий РАК3, но там вы найдете кость hitpos, к которой вы привяжите вашу точку, повернете её и получите полноценный лазер.

Теперь разберемся с веревками. Добавим кабель, идущий от ЛЦУ к корпусу СМГ. Для этого найдите "beam" в разделе "effects", переместите его к самому лазеру и добавьте модель, к которой кабель должен идти. Так уж работает этот объект. Можно использовать невидимый материал, но я не стану, ибо лень. В поле "end point name" выберите ту модель, которая будет использоваться для конца вашей веревки и готово.

Осталось только поиграться с другими настройками:
material - другие текстуры кабеля находятся в папке cables
bend - сила изгиба, чем выше число, тем длиннее веревка
frequency - это размер текстуры
resolution - насколько я понял - качество самой веревки, чем ниже, тем меньше сегментов
width - размер веревки

Теперь меняем звук стрельбы
Оставил напоследок, потому-что здесь ивенты. Первый у нас имеется, теперь второй - "animation event", вписывайте в поле "find" - "attack primary", и под новым ивентом добавьте "sound", находящийся в разделе "effects". В поле "sound" впишите название приятного вам звука, либо найдите его в списке. Я использовал звук взрыва, и горжусь собой. Теперь осталось поставить галочку на "overlapping", чтобы звук не исчезал сразу после нового выстрела и проверить ивенты на их работу.
Работа с прокси
Proxy - это модификатор, позволяющий изменять значение одной из характеристик с помощью различных функций, sin, cos и других. Он весьма удобен, потому-что значением может быть и положение объекта, и его цвет и многое другое.

Я использовал его на прицеле. Добавил модель, отдельно материал, находящийся в разделе "model", и уже к материалу добавил прокси, т.к. мне нужно изменение только текстуры.

Теперь чтобы понять как прокси работает, объясню его свойства.
input - это то, в следствие чего будет изменяться число, изначально стоит время и поэтому с его течением значение возрастает/убывает. Можно заменить и на что-нибудь другое, например кол-во брони, здоровья и т.п.
function - функция, по которой будет изменять число. Sin и cos - гармонические, и они будут достигать своего максимального значения, а после возвращаться к минимальному, при функции tg, же, число будет возрастать в геометрической прогрессии, и после вернется к минимальному. При abs и none (разницы между которыми я не заметил), число будет возрастать прямолинейно.
axis - координата по которой будет изменяться значение, пригодится при изменении, например: положении модели
min и max - минимальное и максимальное значение числа, ниже или выше которых прокси быть не может.
offset - "сдвигает" начальное значение прокси в сторону минимального или максимального, не изменяя последних.
input multiplier - скорость возрастания значения из min в max
input divider - я ♥♥♥♥
pow - тоже

После всего этого нас интересует variable name, - по сути туда вы вписываете характеристику, которую прокси будет изменять. Например цвет, прозрачность и такое всякое. В моем случае это положение текстуры на модели.

Теперь возьмем хвост, и с помощью прокси заставим его рисовать круг в пространстве. На самом деле тут всё просто, после создания трейла измените position offset, и добавьте прокси, что будет изменять углы (Angles вписывайте в variable name), в axis вписывайте координату, что направлена к вашему трейлу перпединкулярно и после выставите значение max на 360 и вы получите трейл, рисующий круг.
Добавление собственного контента
Помимо файлов самой игры, РАК3 вполне себе поддерживает загрузку контента извне. Таким образом можно перенести на своего персонажа собственные модели, текстуры и звуки, пусть и с небольшими ограничениями.

Во-первых: стоит зарегистрироваться на Dropbox, это облачное хранилище, с помощью которого РАК3 и получает ваш собственный контент. Не могу сказать, можно ли его заменить на что-либо еще, но все игроки использовавшие РАК3 для собственных моделей работали через него, собственно и я тоже, что меня устраивает.

Во-вторых: ваши модели будут сохраняться в формате .obj, не перенося особенности .mdl формата и других, таким образом на вашей модели не будет костей, а также ограничение в один материал

Добавление моделей
После вашей регистрации на Dropbox - вам даже не нужно его устанавливать, вы вполне можете работать с ним через браузер, что удобно, потому-что ничто не мешает вам использовать его в Shift+Tab меню игры.

После этого вам нужно найти любой сайт с .obj файлами, чаще всего там же вы найдете и текстуры для них. Скачиваете > перекидываете в Dropbox > создаете ссылку на файл. Теперь в самом РАК3 создаете обычную модель, и в поле, где находится её название вписывайте ссылку заменив ноль в конце на единицу

Однако текстур у модели нет, и в принципе ссылку на неё можно вставить в поле "material", но если у вашей модели есть несколько текстур, например: карта нормали, то стоит создать материал в виде отдельного объекта, ибо он позволит вам проецировать на модель все необходимые текстуры (однако не заигрывайтесь с этим, потому-что РАК3 придется скачивать каждую из текстур, поэтому если они слишком большого формата, то их стоит уменьшить, особенно если ваша модель маленькая)

Работа со звуком
С этим намного проще, РАК3 поддерживает обычный mp3, поэтому достаточно добавить его в Дропбокс и скопировать ссылку на файл в ваш редактор, где вы заранее создали "webaudio" объект, находящийся в разделе "effects", и вы готовы использовать его как обычный "sound", однако будьте аккуратны с ним, ведь многие люди несильно любят шум, вызывающий у них кровь из ушей (поэтому webaudio может быть недоступен на серверах)

Перенос моделей из аддонов
Если же вы не нашли подходящий obj файл, но нашли хороший аддон, из которого хотите забрать оружие, к примеру. То для этого нужно установить парочку программ:
  • Blender - в первую очередь, это бесплатный 3Д редактор, который можно найти в стиме
  • Blender source tools - дополнение к 3Д редактору, которое позволит вам открывать файлы smd, появляющиеся при декомпиляции модели
  • Crowbar Decompilator - как следует из названия, декомпилирует модель, что вы получите из следующей программы, и позволит вам работать с ней уже в Блендере
  • Gmad Extractor - им вы будете доставать все файлы, находящиеся в файле вашего аддона
Помимо этого, для работы с текстурами вам программа VTFEdit, который вы будете использовать для перевода изображения из .vtf формата в .png (.vtf формат, очевидно не поддерживается РАКом). Также вы сможете редактировать полученную текстуру.

Принцип работы я опишу кратко: открываете Gmad Extractor, и с помощью него достаете файлы из вашего аддона, после этого открываете Crowbar или VTFEdit (в зависимости от того, что вам нужно) и декомпилируете модель / переводите текстуры в .png формат, на этом работа с материалом закончена, и если не редактировать их, то можно уже добавлять в Дропбокс, но вот с моделями еще предстоит работа.

Открываете Блендер, в который вы установили дополнение для работы с .smd форматом моделей, и если вы видите, что модель разноцветная - то готовьтесь к нудной работе. Т.к. .obj формат поддерживает одну текстуру за раз, как уже было написано выше, вам придется разъединить модель по материалу. Это делается в два нажатия, однако после этого вам еще нужно посидеть в редакторе. Во-первых вам нужно приблизить все модели к своему центру, это нужно делать в Edit Mode, перенося выделенные полигоны к точке, которая чаще всего находится в центре всего поля. После этого вам нужно сохранить только по модели одного материала, т.е. поочередно удалять все модели, кроме одной, которую вы экспортируете в формате .obj (раньше я делал тоже самое с руками, т.е. делил руки на левую и правую, однако этого делать необязательно и можно просто в РАК3 использовать clip)

После этого вам нужно только перекинуть созданные файлы в Дропбокс и использовать их в самом РАК3, некоторые ухищряются таким образом перенести целых персонажей, но это придет само собой, главное захотеть и иметь фантазию.
Заключение
Хочется сказать, что РАК3 дает большое поле для ваших фантазий: вы можете как слегка улучшать свою плеермодель, так и конкретно переделать её, или создать с нуля; ну или же можно просто повеселиться с друзьями, никто этого не запрещал, и по сути это главный плюс аддона.

Впрочем стоит отметить, что помимо своей модели вы также можете изменять и предметы, принадлежащие вам: пропы, или машины. Это также позволит вам сделать что-то интересное.
мистер гавайи 2019 12 августа 2019 08:25
Если я что-нибудь еще вспомню, то добавлю сюда наверное
  • Нравится
  • 0