- 113
- 219 358
Ateros
Ukraine
เข้าร่วมเมื่อ 25 ก.ค. 2015
Канал о создании приложений и игр на JavaScript.
[Старт канала - 10.06.2022]
[Старт канала - 10.06.2022]
Доработка игрового алгоритма (#5)
Всем привет.
Это последний урок данной серии о создании 3д игры на React, с использование библиотеки Babylon JS. Так как в предыдущем уроке мы закончили создание графической составляющей нашей игры, в этом уже не будет работы с Blender, только программирование. А именно - доработаем игровой алгоритм.
В итоге у нас получится небольшая игра в которой привидение, находящееся в ночном лесу, должно найти три кристалла, собрать их и пройти сквозь портал. На это у него есть 5 минут.
Так что, нам надо будет запрограммировать алгоритм сбора и учета кристаллов, работу таймера, условие проигрыша и выигрыша.
Надеюсь курс вам понравился, не забудьте подписаться, поставить лайк, поделиться с друзьями и написать комментрий.
До встречи в следующих выпусках.
Курс по созданию 3д игры на Babylon JS: th-cam.com/play/PLfSrF_YWov8aS8aF3jEGkiVvZvjPUr-bA.html
Курс по дополненной реальности на Babylon JS: th-cam.com/play/PLfSrF_YWov8bcG70mgxIEdURUqW8V6xVI.html
Код урока:
github.com/ateros-lab/ghost-adventure/tree/78231a1d8214e7ae74e86a09863c06e21e4f8b74
Song: T-Mass - Ignoring My Heart [NCS Release]
Music provided by NoCopyrightSounds
Free Download/Stream: ncs.io/ignoringmyheart
Watch: th-cam.com/video/eT0tYnWX2sQ/w-d-xo.html
#react #game #javascript #3dgame #web #frontend #gamedev #webapp #webdevelopment #babylonjs
Это последний урок данной серии о создании 3д игры на React, с использование библиотеки Babylon JS. Так как в предыдущем уроке мы закончили создание графической составляющей нашей игры, в этом уже не будет работы с Blender, только программирование. А именно - доработаем игровой алгоритм.
В итоге у нас получится небольшая игра в которой привидение, находящееся в ночном лесу, должно найти три кристалла, собрать их и пройти сквозь портал. На это у него есть 5 минут.
Так что, нам надо будет запрограммировать алгоритм сбора и учета кристаллов, работу таймера, условие проигрыша и выигрыша.
Надеюсь курс вам понравился, не забудьте подписаться, поставить лайк, поделиться с друзьями и написать комментрий.
До встречи в следующих выпусках.
Курс по созданию 3д игры на Babylon JS: th-cam.com/play/PLfSrF_YWov8aS8aF3jEGkiVvZvjPUr-bA.html
Курс по дополненной реальности на Babylon JS: th-cam.com/play/PLfSrF_YWov8bcG70mgxIEdURUqW8V6xVI.html
Код урока:
github.com/ateros-lab/ghost-adventure/tree/78231a1d8214e7ae74e86a09863c06e21e4f8b74
Song: T-Mass - Ignoring My Heart [NCS Release]
Music provided by NoCopyrightSounds
Free Download/Stream: ncs.io/ignoringmyheart
Watch: th-cam.com/video/eT0tYnWX2sQ/w-d-xo.html
#react #game #javascript #3dgame #web #frontend #gamedev #webapp #webdevelopment #babylonjs
มุมมอง: 150
วีดีโอ
Работа над игровым дизайном (#4)
มุมมอง 11921 วันที่ผ่านมา
Продолжаем создание 3д игры на React JS, и сегодня поробатаем над игровым дизайном. Разместим все 3д обьекты на тех местах на которых они уже и будут находиться, разместим все три кристалла и также добавим дверь (ну или правильнее было бы сказать портал). В итоге у нас уже будет готовый уровень. Данным уроком мы закончим работу над графической состовляющей нашей игры. А уже в следующих уроках о...
Взаимодействие с игровыми обьектами (#3)
มุมมอง 136หลายเดือนก่อน
Всем привет. Это третий урок курса по созданию 3д игры на React JS. В этом уроке мы уже будем только программировать в отличии от предыдущего, где я показывал процесс создания графики для игры. Сегодня попробуем добавить на сцену новую 3д-модель такой колонны со светящимся красным кристаллом. А также запрограммируем логику для игры, так чтобы у пользователя была возможность подойти к кристаллу,...
Добавление главного героя и окружения (#2)
มุมมอง 121หลายเดือนก่อน
Всем привет. В этом видео я буду работать над созданием графической соствляющей нашей игры, а именно добавлю персонажа, настрою освещение, камеру и создам несколько декоративных элементов. В итоге у нас получится такая базовая сцена, которую в будущем можно будет расширять чтобы создать игровую локацию ночного леса. Сегодня я буду работать в основном в программе Blender. Если вам интересно 3д-м...
Делаем управление для персонажа (#1)
มุมมอง 875หลายเดือนก่อน
Всем привет. Этим видео начинаем новую серию уроков о создании 3D игры на React JS. Сегодня сделаем базовую 3д сцену в Blender, с помощью 3д-примитивов таких как сфера и плоскость. Настроим камеру и освещение, а после экспортируем готовую сцену в файл с форматом Babylon и попробуем импортировать ее в React-проект. Также начнем строить программную структуру игры, пропишем первый скрипт PlayerCon...
Создание 3д игры на React JS (часть 2/2)
มุมมอง 3902 หลายเดือนก่อน
Всем привет. В прошлом уроке я показал как создать визуальную часть игры в Blender и экспортировать в формат Babylon JS. А также мы разобрали как импортировать 3д сцену в проект на React JS. В этом урок поробатаем над программной частью - пропишем игровой алгоритм, чтобы можно было управлять моделькой игрока и перепрыгивать по платформам. По мере продвижения вверх будут появляться новые платфор...
Делаем 3D игру на React JS (часть 1/2)
มุมมอง 2653 หลายเดือนก่อน
Сегодня начнем делать вот такую 3д-игру в этом уроке сосредоточимся на вихуальной части, а в следующем напишем код. В результате на этом уроке научимся загружать готовую сцену в приложение на React JS, а потом создадим сцену в Blender. 0:00 - Вступление 0:13 - Как загрузить 3д сцену в React 2:58 - Как создать 3д игру в Blender 9:40 - Как экспортировать сцену в .babylon Урок по Blender: th-cam.c...
Приложение "Погода" - 2/2 (Tailwind CSS, React)
มุมมอง 6995 หลายเดือนก่อน
В предыдущем уроке ми написали основную логику приложения "Погода" на React JS, а сегодня уже будем работать над созданием интерфейс. Для стилизации компонент будем использовать библиотеку Tailwind. В начале уроке пройдемся по настройке и основным принципам работы с библиотекой, а дальше уже будем оформлять интерфейс. Также добавим график с помощью такой библииотеки как Chart.js. Покажу вам как...
Приложение "Погода" - 1/2 (Redux-toolkit, thunk, axios)
มุมมอง 5846 หลายเดือนก่อน
Продолжаем тему разработки на React, Redux-toolkit и в этом уроке научимся делать запрос на сервер, получать и обрабатывать данные. Реализуем код небольшого прилодения для отображения данных по погоде в определенном городе, который введет пользователь. Вы научитесь интегрировать Redux-Toolkit и Thunk для эффективного взаимодействия с сервером и API. Мы рассмотрим использование Axios для запросо...
Игра "Змейка" - 2/2 (React, Redux-toolkit)
มุมมอง 5846 หลายเดือนก่อน
Продолжаем создавать игру змейка на react js. В предыдущем урок мы познакомились с тем, как настроить store в redux-toolkit, а также подготовили внешний вид игры и создали основные компоненты. Сегодня же будем прописывать игровой алгоритм и познакомимся с различными деталями работы react и refux-toolkit (useRef, keys, useSelector, etc). В результате получится готовый проект, который можно добав...
Игра "Змейка" - 1/2 (React, Redux-toolkit)
มุมมอง 1.4K7 หลายเดือนก่อน
Продолжаем тему разработки на React JS. Сегодня начнем создавать игру Snake, на react, научимся подключать и настраивать redux-toolkit для взаимодействия со store. Познакомимся с тем как создавать slice, и взаимодействовать с данными в state. Также подготовим внешний вид игры, а уже в следующем напишем логику. Код урока: github.com/ateros-lab/snake-game #react #reactjs #уроки #практика #вебразр...
Игра "Крестики-нолики" (React)
มุมมอง 1K7 หลายเดือนก่อน
Всем привет. Сегодня напишем небольшую игру Крестики-нолики на React JS. Урок подойдет для тех кто только начал изучать реакт, что закрепить базовые знания JSX, того как работает стейт, как компоненты взаимодействуют между собой, условий рендериг и другое. Надеюсь урок вам понравиться, если что - напишите в комментариях если хотите больше таких уроков в формате "React практикум" Код урока можно...
Создание 2д-графики для игр - быстрый старт | Blender
มุมมอง 6349 หลายเดือนก่อน
#3данимация #3дмоделирование #blender В этом уроке покажу как стилизовать 3д-модель, которую мы сделали в предыдущем урок под 2д, чтобы сделать ассеты для 2д игры. В процессе стилизиурем материалы обьектов с помощью нод, покажу один из способов того, как создать трехмерный контур для обьектов, настроим камеру и свет, отрендерим все кадры анимации и уже готовый спрайт добавим в игру используя би...
Создание 3д-графики для игр - быстрый старт | Blender
มุมมอง 3939 หลายเดือนก่อน
На этом уроке познакомимся с тем как работать в программе Blender, а также рассмотрим такие темы как: 00:16 - Знакомство с программой 01:13 - 3д-моделирование (теория) 13:58 - 3д-моделирование (практика) 46:28 - Скульптинг 53:28 - Материалы 57:00 - Риггинг 01:00:57 - Анимация 01:02:30 - Рисование весов 01:07:06 - Добавление 3д-модели в игру и запуск анимации из кода 01:08:51 - Домашнее задание ...
Создание 3д игр - быстрый страт | Babylon.js
มุมมอง 1.4Kปีที่แล้ว
На канале есть курс, где я показывал процесс создание казуальной 3д игры с помощью такой библиотеки, как Babylon.js. Но я понимаю, что для многих проходить такой обьемный курс довольно сложно. Поэтому, чтобы вам было легче - подготовил этот урок. В результате, с полного нуля создадим игру, которая показана на картинках - есть дорога, по ней едет машинка, которой управляет игрок. Задача - обьезж...
Создание 2д игр - быстрый старт | Phaser.js
มุมมอง 2.1Kปีที่แล้ว
Создание 2д игр - быстрый старт | Phaser.js
Экспорт / импорт сцены в дополненной реальности на JavaScript + отслеживание рук | AR JS
มุมมอง 309ปีที่แล้ว
Экспорт / импорт сцены в дополненной реальности на JavaScript отслеживание рук | AR JS
Физика и игровой элемент, дополненная реальность, AR JS
มุมมอง 424ปีที่แล้ว
Физика и игровой элемент, дополненная реальность, AR JS
Перемещение, изменение размеров 3D обьекта в дополненной реальности, Gizmo Manager | AR JS
มุมมอง 293ปีที่แล้ว
Перемещение, изменение размеров 3D обьекта в дополненной реальности, Gizmo Manager | AR JS
Отображение html-элементов в AR-режиме, дополненная реальность на Babylon.js | AR JS
มุมมอง 684ปีที่แล้ว
Отображение html-элементов в AR-режиме, дополненная реальность на Babylon.js | AR JS
Создание AR-сцены в JavaScript, WebXR в Babylon.js | Дополненная реальность
มุมมอง 837ปีที่แล้ว
Создание AR-сцены в JavaScript, WebXR в Babylon.js | Дополненная реальность
Распознавание рук с камеры, в реальном времени с помощью Media Pipe, hand track js
มุมมอง 523ปีที่แล้ว
Распознавание рук с камеры, в реальном времени с помощью Media Pipe, hand track js
Распознавание точек на теле человека с изображения, TensorFlow Hub
มุมมอง 408ปีที่แล้ว
Распознавание точек на теле человека с изображения, TensorFlow Hub
Задачи классификации для ИИ TensorFlow.js, deep learning
มุมมอง 791ปีที่แล้ว
Задачи классификации для ИИ TensorFlow.js, deep learning
Практика построения модели машинного обучения с помощью TensorFlow.js
มุมมอง 2.2Kปีที่แล้ว
Практика построения модели машинного обучения с помощью TensorFlow.js
Теория построения нейронных сетей в TensorFlow.js
มุมมอง 1.6Kปีที่แล้ว
Теория построения нейронных сетей в TensorFlow.js
Мобильные приложения на JavaScript (PWA)
มุมมอง 2.8Kปีที่แล้ว
Мобильные приложения на JavaScript (PWA)
Как писать десктопные приложения на React JS | React + Electron
มุมมอง 11Kปีที่แล้ว
Как писать десктопные приложения на React JS | React Electron
[#5] Другие типы диаграмм | Визуалиция данных на JavaScript
มุมมอง 980ปีที่แล้ว
[#5] Другие типы диаграмм | Визуалиция данных на JavaScript
<button id="left" style=" font-size: 20pt; padding: 10pt; ">Left</button> <button id="right" style=" font-size: 20pt; padding: 10pt; ">Right</button> <p id="hero" style=" background-color: blue; font-size: 25pt; padding: 20pt; width: 30%; text-align: center; position: relative; left: 0px; ">Text</p> <script> let hero = window.document.querySelector('#hero'); let rightButton = window.document.querySelector('#right'); let leftButton = window.document.querySelector('#left'); let rightPosition = 0; let leftPosition = 0; const clickHandler = () =>{ if (hero.style.backgroundColor === 'grey') { hero.style.backgroundColor = 'blue'; } else { hero.style.backgroundColor = 'grey'; } } const rightHandler = () => { rightPosition = rightPosition + 20; hero.style.left = `${rightPosition}px`; } const leftHandler = () => { leftPosition = leftPosition - 20; hero.style.left = `${leftPosition}px`; } hero.onclick = clickHandler; rightButton.onclick = rightHandler; leftButton.onclick = leftHandler; </script> Всё работает. Но смущает что после нескольких кликов right при попытке нажать left кнопка переходит в исходное положение и потом двигается в лево. Как сделать так что бы после нажатия left расстояние отнималось не от исходного а от положения в котором она сейчас находится. const leftHandler = () => { leftPosition = leftPosition - 20; (если здесь поменять на leftPosition = rightPosition - 20; то кнопка срабатывает 1 раз и всё. Как автоматизировать шаблон?) hero.style.left = `${leftPosition}px`;
Можете попробавать создать вместо rightPosition и leftPosition одну переменную horizontalPosition и изменять только ее.
👍🏼👍🏼
Спасибо 🙏
Привет лучший как всегда 😊
Спасибо 🙏🙏
Когда ввожу npm create vite@latest и выбираю Svelte, TypeScript у меня выдает много разных ошибок, а если выбираю JavaScript, все нормально, что делать?
Может вот так получится - npm create vite@latest app-name -- --template svelte-ts
@@AterosDev сразу при написании этой команды (как и при обычном) вылезают, например, следующие ошибки в tsconfig.json: 1. File '@tsconfig/svelte/tsconfig.json' not found.ts 2. Option '--resolveJsonModule' cannot be specified when 'moduleResolution' is set to 'classic'. 3. Referenced project 'c:/Users/Alex/project/app-name/tsconfig.node.json' may not disable emit.
как сделать через елемент <div> в html текст в центре по висоте?
Здравствуйте. Извините, что так поздно отвечаю, вы наверное уже нашли решение, я напишу для других. Один из способов - добавить для div следующие css-свойства: display: flex; align-items: center;
@@AterosDev здраствуйте, спасибо что ответили, я еще не находил решения до таво как ви ответили
Рад, что смог помочь.
Не думаю что ты ответишь спустя такое время. Твой ролик пушка, занимаюсь фронтом давно но не знал что могу толком не добавляя новых знаний делать еще и десктопные приложения на js, это просто пушечно. Подскажи пожалуйста, если все же ответишь, вот есть puppeter на js, меня интересует, как я могу запускать puppeter через интерфейс электрона?
Спасибо, мне очень приятно 🙏 Рад, что вам понравился мой урок. Загуглите "межпроцессное взаимодействие в electron", надеюсь поможет.
сидел думал почему код не работает, пробовал через райт позицию, вернулся к вычетанию с лефт, дальше думал, в итоге я ивент действие забыл добавить, чтоб при нажатии оно запустилось)
Главное что все получилось, молодец 💪👍👍
Сильно! Как сложно конечно для того, кто только учится...... Всем Адекватности мира и добра, ребята.
Спасибо 🙏 Рад, что вам понравилось.
Не могу поверить как ты старался у меня получилось
Спасибо) Рад что у вас все получилось 🙏
Первый подобный пример без воды и лишней болтовни... Спасибо вам за вашу работу
Спасибо, мне очень приятно 🙏
Гениально
Спасибо)
Молодец
Спасибо)
Супер понятно,респект большой.
Покажи как сделать всплывающее окно при наведении мыши на какой нибудь объект
Посмотрим, может в следующих уроках...
очень круто!
Спасибо) 🙏
Прошу прощения, а можно ли на эти объекты добавлять свои текстуры? Скажем, картинки, через имг СКР, или что-то такое?
Здравствуйте. Да, конечно. Вот здесь у меня есть урок по этой теме - th-cam.com/video/D4Y-i1zPNBY/w-d-xo.html
@@AterosDev Окей, благодарю)
МОЛОДЦА !!!!
Спасибо)
Вот знаете , очень страшно , что после блока ютабчика - пропадут подобные авторы . Родной, ты не теряйся и дай знать , где тебе искать 🤝
Спасибо большое, мне очень приятно 🙏 Да, если что обьязательно.
Раньше делал небольшую игру на three а сейчас попробовал babylon. Заметил интернсный момент, js файл после сборки у three занимает 1mb. А у babylon 10mb. Для маленького проэкта бабилон уж очень тяжелая либа. Он настолько лучше по функционалу чтобы выбирать его?
Что касается работы с 3д в вебе, обе библиотеки хорошие, просто babylon предлагает немного больший функционал именно для создания игр.
Классные видосы
Спасибо 🙏
пожелаю удачи
Спасибо)
у кого не отображаются сердечки попробуйте изменить -2 на другие цифры, у меня : this.img.style.bottom = ((window.screen.height / 32) -6) * 32;
у кого дергается анимация удалите строчку: //this.img.style.widht = this.blockSize*4; там автор ошибся и написал WIDHT, а не WIDTH
Спасибо за урок. Подскажите, возникает следующая ошибка при запуске приложения на windows 7 "....exe. не является приложением Win32" Сборку делал как x32, так и x64 При запуске на win10,11 такой ошибки не возникает и приложение работает
Может поможет вот эта команда - npm run package -- --platform=win32 --arch=ia32
@@AterosDev пробовал, не помогает(
Здравствуйте. Нашел вот эту статью - www.electronjs.org/ru/blog/windows-7-to-8-1-deprecation-notice Кажется они прекратили поддержку windows ниже десятой. Я думаю можно попробавать (если делаете для себя и несложный проект) переустановить версию пакета на 22. Может так заработает...
Ссылка не рабочая(( Спасибо за подсказку, на виртуальной машине запустилось! На следующей неделе будем пробовать непосредственно на машинах с вин7 @@AterosDev
Извините, это я виноват, добавил скобку в конце поэтому не робатала ссылка. Уже исправил можете потом посмотреть если захотите. Рад, что смог помочь. Удачи вам с проектом.
Как сделать аналогично npm run make, только что бы на выходе получить .dmg для мак?
Привет. Вот здесь инструкция - www.electronforge.io/config/makers/dmg
@@AterosDev Спасибо за ответ! Уже разобрался с этим. Только есть нюанс, для мак сборку нужно тоже выполнять на маке
Да, конечно. И с линукс и виндовс так же, всегда надо на целевой платформе собирать. Не за что, обращайтесь если что.
как же оно лагает
Это просто на записи так, сама игра нормально работает
Давай еще не останавливайся
Спасибо за поддержку) 🙏
Нихерасебе
Красава, хороший канал!
Спасибо) 🙏
Спасибо за ваш труд❤ Очень помогает разобраться
Спасибо, мне приятно. Рад, что смог вам помочь 🙏
Полезно знать такие вещи для веб разработчика
У меня никак не получается, уже по всякому пытался получается просто белый экран у desktop, кто может помочь и как с вами связаться заранее спасибо
@Ateros нужна очень помощь
Здравствуйте. Извините, что так поздно отвечаю, вы наверное уже нашли решение. Если нет - можете попробовать задать вопрос на stackverflow, возможно кто-то уже сталкивался с таким. К сожалению пока-что единственный способ связи со мной - этот канал. Многие уже просили телеграм либо что-то такое, но я пока к этому еще не готов, может в будущем что-то придумаю...
Одним циклом наверное будет проще рисовать "сердечки": const addHearts = () => { for (let i = 0; i < maxLives; i++) if ( i < lives ) { let heartRed = new HeartRed(i) } else { let heartEmpty = new HeartEmpty(i) } }
Да, так лучше
Спасибо за видео, за терпеливое объяснение . Все на высшем уровне🔥
Спасибо, мне приятно 🙏
привеееееет!
Привет)
У меня лагает игра, но комп мощный, на всех пк лагает хз с чем связано
Та, которую я на github pages опубликовал, или ваш код?
Для рядового разработчика на реакте было понятно только первые 2 минуты)))) дальше пропасть) Как называется человек который для таких игр создаёт модели в блендере? Аниматор? 3D дизайнер?
Да, я понимаю. Подумал, что кому-то будет интересно посмотреть весь процесс создания игры. Но, конечно вам не обьязательно самому создавать модельки, есть множество ресурсов где можно бесплатно скачать уже готовые 3d ассеты и с их помощью конструировать свою игру. Вот некоторые из них: itch Kenney Reiner's Tilesets Craftpix OpenGameArt *да, человек который создает модельки - 3д-художник, либо 3д-дизайнер, а если делает анимацию то 3д-аниматор.
@@AterosDev спасибо за подробный ответ) Так то реально интересно поработать с 3д графикой)
Я рад, что вам понравилось) 🙏
Лучший урок по этой игре на реакте!
Спасибо 🙏 Рад, что вам понравилось)
Я думал, что выучив JS, пойму, как создавать сайты, но я тут, на этом видеоуроке и понимаю, насколько я узколобый, что ДАЖЕ И НЕ ЗАДУМЫВАЛСЯ ЧТО ТАК МОЖНО БЫЛО! Спасибо тебе за уроки, я впервые, за долгие годы изучения фронтенд(я ещё даже не junior) смог улыбнуться, увидев такой результат. И да, каждый видеоурок я -"А ЧЁ ТАК ТОЖЕ МОЖНО БЫЛО?" В общем ох и ах и одни эмоции)
Спасибо, мне очень приятно) Рад, что вам понравилось 🙏
@@AterosDev подскажите, а сколько стоит научиться у вас всему этому?
В настоящее время я не провожу платные курсы, но если в будущем что-то изменится я опубликую информацию на канале.
Чтобы сайты делать нужен html и cas
О, круто, спасибо
А есть ссылка на код?
К сожалению не сохранилось, извините
@@AterosDev Спасибо за видео!
как вытащить файлы в реакт приложение?
Имеешь ввиду как дать пользователю возможность выбрать файлы? Можешь попробовать вот это - www.electronjs.org/ru/docs/latest/api/dialog
У меня от первого урока не появилась сцена в "блендере"? Почему то не скачивается "вавилон"???
Попробуйте тот плагин (babylon2blender). А на счет второго - проверьте, есть ли файл по ссылке (иногда в cdn сервис может барахлить). Можете попробовать еще через npm, либо еще есть babylonjs-hook для реакта - github.com/brianzinn/babylonjs-hook
Супер!!!!!!
Спасибо) 🙏
Супер!!!!
Спасибо 🙏 Рад, что вам понравилось)
Не понятно? Как должна отобразиться сцена в "блендере"?
Проще всего использовать для блендера плагин babylon2blender. Вот здесь есть подробная инструкция, как использовать - doc.babylonjs.com/features/featuresDeepDive/Exporters/Blender
видос просто имба
Спасибо)
@@AterosDev можешь пожалуйста подсказать как собрать приложение для установки и запуска на линукс?
Вот этот гайд может помочь - www.electronjs.org/ru/docs/latest/development/build-instructions-linux
только ты кажется забыл объяснить чем именно не подходит browser router, ведь с ним всё работает точно так же
Здравствуйте. Это связано с тем, что в продакшене мы будем открывать файл, а не адрес сайта (2:59)
Блин мужик, я не понимаю почему так мало просмотров твоего материала, все по факту без воды,довольно просто и бесплатно, пусть записываются на скилбокс и не знают нифига
Спасибо, мне приятно) Главное, что вам пригодилось 🙏
Шикарно! то что нужно! Спасибо большое 🤜🤛
Спасибо 🙏 Рад, что вам понравилось)