Урок 19 | Unreal Engine 4 Blueprint Interface - Обмен данными между блупринтами

Поділитися
Вставка
  • Опубліковано 16 вер 2019
  • В этом уроке вы узнаете что такое Blueprint Interface и научитесь его применять в игровом движке Unreal Engine
    Мы создадим Blueprint логику для примера,
    в которой будем передавать данные между блупринтами с помощью BP Interface,
    и с помощью этих данных из одного блупринта будет меняться размер фигур в других блупринтах.
    Разовый донат new.donatepay.ru/@cyberstars
    Patreon - / cyberstars
    Discord - / discord
    Google Play - play.google.com/store/apps/de...
    Facebook - CyberstarsEn...
    Instagram - cyberstars_...
    ВКонтакте - cyberstars_entertainment

КОМЕНТАРІ • 95

  • @AndriiTurchynRieltorDnipro
    @AndriiTurchynRieltorDnipro Рік тому +3

    7:52 Блин.... я час потратил, что б исправить, а оказывается нужно дальше ролик посмотреть)))

  • @ltJetboy
    @ltJetboy 2 роки тому +10

    9:25 - вместо forloop испльзуем foreach, и получаем цикл, актуальный для любого количества элементов массива, он просто переберет все доступные по порядку. Если, конечно, у нас именно такой частный случай.

  • @CHUVAKRADIST
    @CHUVAKRADIST 3 роки тому +34

    Автор, за предыдущие видосы большое спасибо конечно, они хороши, но тут прям всё неверно рассказал. И то что в результате у тебя что то работает не доказывает обратное. Интерфейс - это темплейт класса а также его можно использовать как "тип" для объединения разных классов с одним интерфейсом в массивы их дальнейшую обработку как объекты общего типа. Это идёт из общей информации об ООП любого языка программирования. В 3 объекта у тебя команда не передалась не из-за того что "плохо работают параллельные задачи" а потому что ты просто получил все инстансы которые реализуют твой интерфейс и брал там только 0й элемент массива. Параллельных задач там написано не было вообще.
    Сори если задел. Без негатива < 3

    • @user-ot1hf9ov6s
      @user-ot1hf9ov6s 3 роки тому +28

      Чуть дополню, объяснив как в теории используются интерфейсы.
      Интерфейс служит для обозначения поведению объекта. Если без полиморфизма, то его можно использовать как маркер для определения "обладает ли объект какими-то свойствами", например, проверка возможности сортировки или сохранения объекта, но это уже глубокое программирование.
      Если же рассматривать вместе с полиморфизмом, как оно и положено, ибо само определение полиморфизма - "один интерфейс - множество реализаций", то пример использования интерфейса выглядит таким образом: создаем интерфейс Talker, в нем указываем, что у нас будут методы sayHello() и sayBye(), и затем реализуем этот интерфейс в классах Human, Cat, Dog. Эти 3 класса никак не связаны между собой, но у них есть общий интерфейс, это значит, что мы можем вызвать у них один и тот же метод и он будет работать у каждого по своему(как мы пропишем).
      Пример: human.sayHello выведет нам "Привет!", cat.sayHello выдаст "мяу", а dog.sayHello - "гав". Возьмем второй метод: human.sayBye - человек скажет "Пока!", а собака и кошка промолчат.
      Да, мы можем просто создать такие методы внутри каждого класса и без интерфейсов и просто написать все эти print("Привет!"), print("мяу"). Но, даже НО, это не будет работать так, как ему положено. Первая главная особенность - это то, что если класс реализует интерфейс, то он 100% имеет методы интерфейса, которые можно вызвать, а если это делать без интерфейса, то надо ручками проверять, что у каждого объекта есть нужный нам метод. И вторая особенность, которая вытекает из первой - мы можем группировать объекты которые реализуют один и тот же интерфейс в общую структуру, например массив, несмотря на то, что у них разные классы. Если вспомните первые видео, там там были массивы, но из одних только строк или целых чисел, или вертексов, а в данном случае в массиве будет все, что угодно лишь бы с нужным интерфейсом.
      Пример, который не имеет ничего общего с реальностью и так делать не стоит: мы прыгаем на полянку с кучей разных монстров(орки, тролли, гоблины, ламы, олени, пингвины), первая половина из которых агрессивные, вторая половина пассивные, реализуем у агрессивных монстров интерфейс, который и промаркирует их как агрессивных и имеет метод aggression и помещаем их в массив с агрессивными монстрами. И когда сработает триггер, мы пройдемся по массиву и у каждого монстра вызовем метод aggression, но у каждого типа монстра он будет работать по своему(как вы ему напишете), например, тролли сразу побегут атаковать, орки сначала что-то покричат, а потом тоже побегут атаковать, а гоблины просто будут наблюдать за игроком - и все это с помощью вызова одного и того же метода. Повторюсь, что так не делается, это просто пример.
      То есть все существа и вещи могут делать одни и те же вещи, но разными способами: move у людей, собак - ходьба, у лягушек и кузнечиков - прыжки, но это передвижение, fly у мух, самолетов, листов - одно и то же, но по-разному и тд.
      Если кто-то это прочитал вот это, то потратьте пару недель на базис по программированию и разбор принципов ООП - это крайне важно, если хотите не как попугаи повторять все по видео, а иметь представление как реализовать свои задумки и развиваться.

    • @user-ck7px2cj4h
      @user-ck7px2cj4h 2 роки тому +2

      @@user-ot1hf9ov6s Понято, гляну ООП, могу ли я задать вопрос вам, если где то не пойму ?!

    • @user-rr9im4lr3h
      @user-rr9im4lr3h Рік тому

      @@user-ot1hf9ov6s как этот самый базис и основы ООП найти?

    • @user-ot1hf9ov6s
      @user-ot1hf9ov6s Рік тому

      @@user-rr9im4lr3h какие нибудь курсы по программированию в ютубе. Язык не принципиален: С++, C#, Java, Python

    • @scathis1982
      @scathis1982 4 місяці тому

      @@user-ot1hf9ov6s Почему тот пример реализовывать на практике не стоит?

  • @user-ef8ll4ej4n
    @user-ef8ll4ej4n 4 роки тому +6

    Как всегда, качественное видео!

  • @SagittariusTV_UA
    @SagittariusTV_UA 4 роки тому +8

    Спасибо за полезную инфу,дружище!:)

  • @user-wq4go5gu2p
    @user-wq4go5gu2p 4 роки тому +3

    Увлекательно ,будем изучать

  • @ilyagum
    @ilyagum Рік тому +1

    Спасибо автору за подробное разжевывание темы! Использовать интерфейсы особенно для крупного проекта обязательно, но вот как, никак не мог найти вразумительного ответа, а здесь нашёл

  • @jockerlite
    @jockerlite 2 роки тому +1

    Красавчик, выручил с Get All Widget with Intarface.

  • @fidus5016
    @fidus5016 Рік тому

    Классные уроки!

  • @user-ec1td4wv8q
    @user-ec1td4wv8q 4 роки тому +2

    А я все в гугле инфу скала) а надо было к вам сразу идти

  • @resproject1731
    @resproject1731 2 роки тому +1

    Как всегда все доступно и разжевано. Спасибо!

  • @user-sc8dz8lt9g
    @user-sc8dz8lt9g 4 роки тому +6

    Все было понятно, спасибо за урок!

  • @user-sc4bh8fv8d
    @user-sc4bh8fv8d 4 роки тому +1

    Благодарю!

  • @shkolakrow
    @shkolakrow 4 роки тому +7

    Спасибо за новый информативный урок.... ура! я первая

  • @mightyminds5545
    @mightyminds5545 3 роки тому

    Как всегда замечательное объяснение. Лучшие уроки!

  • @annagrigio5042
    @annagrigio5042 4 роки тому +6

    Прекрасные квадраты. С треугольниками я бы не шутила - сам понимаешь

  • @user-vb8vn6mi4r
    @user-vb8vn6mi4r 2 роки тому

    Ну это просто 10 из 10!

  • @alekseyshevchenko306
    @alekseyshevchenko306 2 роки тому

    Спасибо большое!

  • @gregormihalchan9285
    @gregormihalchan9285 4 роки тому +3

    Ясно понятно интересно молодец.👍
    Однозначно лайк 👍

  • @AndriiTurchynRieltorDnipro
    @AndriiTurchynRieltorDnipro Рік тому

    спасибо

  • @manlok876
    @manlok876 4 роки тому +15

    Нет, это не так работает.
    Интерфейсы нужны не для того, чтобы "передавать данные множеству объектов". Они позволять дать набор одинаковых методов разным классам, подходящим для выполнения одной и той же задачи, и тем самым работать с ними схожим образом. По сути они описывают набор правил взаимодействия (потому так и называются). Это особенно нужно когда реализуешь эти методы в разных ветках иерархии классов, а множественное наследование запрещено (как в UE4) (да и вообще, множественное наследование для этого - плохая практика).
    Методы интерфейса не вызываются сразу на нескольких объектах, и поэтому нельзя передать ссылку на один объект с интерфейсом чтобы вызвать этот метод сразу на всех. Из-за этого и приходится делать "Get All Actors with Interface" и вызывать метод на каждом (а не из-за параллельности).
    И цикл ForEach там тоже прекрасно работает. Более того, как раз его и стоит использовать, поскольку размер полученного массива заранее неизвестен (ну, либо получать его размер по ходу и передавать в цикл For, но зачем?).
    А для того чтобы одним вызовом передать информацию нескольким объектам нужны диспетчеры, хотя на них придётся из каждого объекта подписываться.

    • @user-cx9qw7rr1r
      @user-cx9qw7rr1r 4 роки тому +6

      Сложно для понимания

    • @manlok876
      @manlok876 4 роки тому

      @@user-cx9qw7rr1r Короче: с интерфейсами в любом случае придётся вызывать методы у всех объектов отдельно. Чтобы передать всем сразу: используйте диспетчеры.

    • @cyberstars-5839
      @cyberstars-5839  4 роки тому +1

      Здравствуйте!
      Всё верно, но если б я объяснял подобным языком, то у людей появится только больше вопростов!
      BP interface Это промежуточные функции в которых нельзя строить логику, а только получать или задавать данные , и логика реализовывается в самом БП куда эта "функция" подключена , вот поэтому BP_Interface и годится для передачи данных. Это всё опять те же яйца только в профиль, СУТЬ ОДНА!.

    • @roman1324
      @roman1324 4 роки тому +4

      @@cyberstars-5839 Вообще интерфейсы придуманы для уменьшения "связанности". Он введен для "контракта" (в некоторых книгах так выражаются) на класс, который гарантирует присутствие методов с точными параметрами. Фраза "вот поэтому BP_Interface и годится для передачи данных" - не точная в данном применении, скорее "вот поэтому BP_Interface и годится для создания группы классов с одинаковым методом для передачи данных", как то так...

    • @dmitrybaltin6612
      @dmitrybaltin6612 3 роки тому +1

      @@cyberstars-5839 У вас отличные, технически грамотные уроки (я посмотрел уже с десяток), но, в данном случае, я с вами не согласен. Попытка замаскировать якобы сложные понятия примитивизмом, на мой взгляд, провалилась. Я из урока вообще не понял, о чем идет речь (несмотря на многолетний опыт программирования на C++ и C#), пока не стал ковыряться в движке и не увидел словосочетание Implement Interface в настройках блупринта. На мой взгляд, человеку, который до этого разобрался в предыдущих 18 уроках, пора бы к этому моменту знать, что речь идет об объектно-ориентированном программировании, и понимать его основные понятия. Что такое класс объекта и экземпляр, и как это применимо к блупринтам, что такое наследование (о множественном, несомненно, умолчать), и таким образом объяснить и интерфейсы тоже (кстати, наверняка в учебниках по Java и C# интерфейсы объясняются хорошо, можно там подсмотреть). Это всего лишь несколько понятий, ничуть не более сложных, чем, например, Actor, Component, в чем человек уже успешно разобрался. И это, несомненно, упростит понимание блупринтов, а не усложнит.

  • @bithack5612
    @bithack5612 3 роки тому

    Во спасибо разобрался для авто прогона массива использовал Reversi for !

  • @user-wz3zj1ft4g
    @user-wz3zj1ft4g Рік тому

    Спасибо.

  • @user-nl9oc9rp1h
    @user-nl9oc9rp1h 2 роки тому +1

    9:48 foreach loop будет работать. Проверил только что. Версия 4.27

  • @roman1324
    @roman1324 4 роки тому +7

    1) 7:52 - мы не передавали в три, ты же указал что индекс 0, в чем тут параллельность ?
    2) 9:55 - Почему логика работать не будет ? ArrayIndex из ForEachLoop не подойдет ?
    А ArrayElement почему не подойдет, без get ?

    • @cyberstars-5839
      @cyberstars-5839  4 роки тому +1

      1) в том , что передача идёт по одинаковым ссылкам одновременно, и то что индекс 0, это не означает, что мы передадим данные (scale 2) всегда первому БП.
      Я показываю, что это не так работает и трём БП нужны три ссылки на interface.
      2) На практике простой ForLoop работает лучше. с использованием ArrayElement - всем трём передать не получается.

    • @roman1324
      @roman1324 4 роки тому +3

      @@cyberstars-5839 , извини, но мне кажется кто то из нас не правильно понимает работу этого БП. Попробуйте отладить этот БП(с циклом) и увидите как все работает, а еще лучше отладить это в плюсовом коде. Просто я не понимаю о какой параллельности идет речь. Как я понимаю: там на "коллизию" срабатывает обработчик, в БП первая нода возвращает массив со всеми объектами которые поддерживают твой интерфейс. А дальше ты циклом обходишь массив и дергаешь метод интерфейса(с реализацией).
      Веду диалог, потому что сам хочу разбираться, но имеющаяся у меня информация не совпадает с твоей.

    • @cyberstars-5839
      @cyberstars-5839  4 роки тому +1

      ​@@roman1324 Проще говоря, я имею ввиду то, что нельзя за раз выполнять
      код/логику (параллельно), это возможно в плюсах.
      забегая вперёд скажу, что терминология везде своя - авторская,
      и если где то это описано другими словами, это не значит, что кто то не прав
      Блупринт выполняется последовательно - один поток данных, в случае очереди
      идёт прерывание CPU .
      Плюсы дают возможность многопоточности.
      Я показываю, что сразу параллельно кинуть ( scale 2 ) в три БП не выйдет.
      Поэтому беру цикл, ведь он выполняет логику друг за другом
      и да то , что я показываю в ролике вы описали верно.

    • @roman1324
      @roman1324 4 роки тому

      @@cyberstars-5839 Спасибо.

  • @elliotalderson6817
    @elliotalderson6817 4 місяці тому

    С П А С И Б О

  • @Skynet_is_Watching_You
    @Skynet_is_Watching_You 4 роки тому +5

    У тебя они одновременно не увеличивались только из за того что ты указал в Get - 0, Если просто засунуть Out Actors без Get (номер актера) в Target то все одновременно будут меняться

    • @user-wr8lz9rk4k
      @user-wr8lz9rk4k 3 місяці тому

      Но почему то из индекса 0 вытскаивается месседж, а из массива нет. и в поиске на находится.

  • @shinnok91
    @shinnok91 3 роки тому

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

  • @atomicwar2080
    @atomicwar2080 8 місяців тому

    а чем ивент диспатчер лучше такого способа? или в каком случае он, а в каком это?

  • @yellyex
    @yellyex 3 роки тому

    Чем интерфейс отличается от каста?

  • @bodamat
    @bodamat 4 роки тому +1

    Спасибо. У тебя очень крутие и информативние видео, но есть вопрос. Почему с foreach не будет работать? С foreach все отлично работает, только логіка чучуть другая.
    А что дает использование interface function from BP_interface. Где ее можна использовать? Для каких задач?

    • @cyberstars-5839
      @cyberstars-5839  4 роки тому +1

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

    • @bodamat
      @bodamat 4 роки тому +1

      @@cyberstars-5839 Спасибо

  • @user-nc8hp1pf1i
    @user-nc8hp1pf1i 4 роки тому

    Cyberstars Entertainment - Привет, а ты проводишь стримы?

  • @user-xn1ku6gs9z
    @user-xn1ku6gs9z 2 роки тому

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

    • @cyberstars-5839
      @cyberstars-5839  2 роки тому

      Тут гужно дуиать уже, гапримео можно использовать line trace

    • @Arthur-oy6kd
      @Arthur-oy6kd 2 роки тому

      При спавне есть ссылка на этот спавленный объект. Поэтому при вызове интерфейса передавать ему в target эту ссылку.

  • @rapatologyrrr472
    @rapatologyrrr472 4 роки тому +7

    Я бы обменялась данными

    • @xo0oxNicKeRxo0ox
      @xo0oxNicKeRxo0ox 4 роки тому +1

      Можем сразу в два блупринта

    • @rapatologyrrr472
      @rapatologyrrr472 4 роки тому

      Один не смазаный

    • @cyberstars-5839
      @cyberstars-5839  4 роки тому +1

      Зависит от опыта работы с блупринтами,
      по началу лучше передавать в один

    • @rapatologyrrr472
      @rapatologyrrr472 4 роки тому

      @@cyberstars-5839 я уже давно передаю в один и думаю пора попробовать что то новое

    • @cyberstars-5839
      @cyberstars-5839  4 роки тому +7

      @@rapatologyrrr472 Пока что, лучше глубже освоить работу с конкретным блупринтом, потом переходить на множество

  • @JohnSmith-tk2wp
    @JohnSmith-tk2wp 3 роки тому +7

    Называть это уроком можно с большой натяжкой. Я бы такое в качестве урока не рекомендовал никому.

    • @rapatologyrrr472
      @rapatologyrrr472 3 роки тому

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

    • @JohnSmith-tk2wp
      @JohnSmith-tk2wp 3 роки тому +1

      @@rapatologyrrr472 он не объясняет грамотно. Начало видоса не плохое, а дальше хуже и хуже. Такая же хуйня без структуризации на тяп ляп как и у остальных.

    • @rapatologyrrr472
      @rapatologyrrr472 3 роки тому

      John Smith тут как раз таки нормально подана информация, без лишней болтовни и всякой залупы отвлекающей, во всяком случае с этими уроками я хотя бы понимаю что, куда и зачем

    • @user-cx9qw7rr1r
      @user-cx9qw7rr1r 3 роки тому +2

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

  • @GreyGreydis_PoE
    @GreyGreydis_PoE 4 роки тому +1

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

    • @manlok876
      @manlok876 4 роки тому

      Если есть ссылка на объект - вызывайте метод или устанавливайте переменную напрямую, никаких проблем.
      Если ссылки нет - то да скорее всего стоит использовать диспетчеры.

    • @cyberstars-5839
      @cyberstars-5839  4 роки тому +3

      Здравствуйте! Попробуйте получить ссылку через переменную а не через 'get all actors' , и какая ошибка у вас?
      При работе с BP_interface, он может просто так перестать работать (если долго его мучать) , нужно его убрать и заново подсоединить в вашему блупринту.
      и если вы просто передаёте переменную, то можно обойтись и без BP_interface и Event_Dispatcher достаточно Cast to...

    • @GreyGreydis_PoE
      @GreyGreydis_PoE 4 роки тому

      @@manlok876 ​ Manlok , если эвент срабатывает по удалению объекта, то всё содержимое БП объекта удаляется вместе с ним, таким образом, вообще не важно, что мы используем, интерфейс, сслыку или функцию, это не сработает... Это честно говоря я так понял, но возможно я заблуждаюсь...

    • @GreyGreydis_PoE
      @GreyGreydis_PoE 4 роки тому

      @@cyberstars-5839 , у меня не совсем стандартная ситуация, я не могу получить ссылку при любом способе, точнее эта ссылка не валидна, с этим я разобрался...
      В любом случае спасибо...

  • @user-co3hx6xh5r
    @user-co3hx6xh5r 4 роки тому

    Пожалуйста покажи как сделать игровой магазин как в бравле или в фортнайте

  • @user-hy4jc3dj7z
    @user-hy4jc3dj7z 4 роки тому

    Я правильно понимаю, это можно сделать и через диспетчер событий?

  • @rst4m
    @rst4m Рік тому

    Учите английский в первую очередь!

  • @AntonLitvinov_moonslon
    @AntonLitvinov_moonslon 2 роки тому

    Нажав на АД

  • @greenpony1366
    @greenpony1366 Рік тому +1

    Может стоит удалить видео, чтобы не вводить в заблуждение начинающих?

  • @hrisogona9330
    @hrisogona9330 2 роки тому

    Помимо раздражающей, мешающей музыки слишком быстрая картинка. Тряц бряц и всё, окошко уже появилось, что чиво куда нажимать, слишком быстро, сложна сложна непонятна

  • @furry7708
    @furry7708 4 роки тому +5

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

    • @rapatologyrrr472
      @rapatologyrrr472 4 роки тому +5

      Музыка на протяжении видео еле слышна и воспринимать информацию вообще не мешает. Попробуй закрыть вкладку со звериным порно, может получится улучшить концентрацию

    • @furry7708
      @furry7708 4 роки тому

      @@rapatologyrrr472 мм.. шутки за 300...

    • @cyberstars-5839
      @cyberstars-5839  4 роки тому +2

      Очень жаль, что вы нас покидаете

    • @user-cx9qw7rr1r
      @user-cx9qw7rr1r 4 роки тому +1

      Плохо, что твои друзья останутся обделенными

    • @furry7708
      @furry7708 4 роки тому

      @@cyberstars-5839 неужели большинству зрителей нравится фоновая музыка?

  • @hrisogona9330
    @hrisogona9330 2 роки тому +1

    Ненавижу тебя и твою фоновую музыку. Вместо усвоения материала, по итогу только раздражение

    • @user-wr8lz9rk4k
      @user-wr8lz9rk4k 3 місяці тому

      ахахах)))))))) Кибер стар не обращай внимание на месячные

    • @user-wr8lz9rk4k
      @user-wr8lz9rk4k 3 місяці тому

      мне музыка по душе)))) У кибер стар отличный вкус) А вместо благодарности за его труды ты смеешь писать это. Деградация на лицо

    • @hrisogona9330
      @hrisogona9330 3 місяці тому

      @@user-wr8lz9rk4k Ты каналом ошибся, мамин меломан. Здесь не твоя школьная дискотека. Привык смотреть обучающий контент только с музыкой, фиксиков пересмотрел. Мне не интересно что тебе по душе и какой у тебя вкус. Не могу оценить труды КС т.к. музыка мешала. Что уже было разложено по полочкам. Если не понял, прочитай еще раз, потом еще, потом включи синий трактор, а то смысл текста до тебя доходит только с музыкой для малышей

    • @hrisogona9330
      @hrisogona9330 3 місяці тому

      @@user-wr8lz9rk4k Пойди с мамой своей поговори, вижу тебя беспокоит эта тема

    • @user-wr8lz9rk4k
      @user-wr8lz9rk4k 3 місяці тому

      Ну ты и фиксик)))))))@@hrisogona9330