Перейти к содержимому
MisterFunny01

Хочу написать программму, которая при нажатии клавиши выдает менб выкл.

Рекомендуемые сообщения

Мне надо чтобы поверх шела и прочего была заливка в центре допустим белого цвета, и там было 3 кнопки. Одна по центру и с права и лева

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хоспади, можешь воспользоваться библеотекой GUI от ECS, темболее там есть документация (правда, там тонна фич не задокументирована), посмотри исходники MineOS, я обычно так делаю когда пишу какую нибудь прошку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, Fronun сказал:

Хоспади, можешь воспользоваться библеотекой GUI от ECS, темболее там есть документация (правда, там тонна фич не задокументирована), посмотри исходники MineOS, я обычно так делаю когда пишу какую нибудь прошку.

Эти фичи фиг найдешь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
31 минуту назад, MisterFunny01 сказал:

Мне надо чтобы поверх шела и прочего была заливка в центре допустим белого цвета, и там было 3 кнопки. Одна по центру и с права и лева

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

 

Использовать готовые библиотеки для новичка проще. Но надо изучить их API, который может оказаться бесполезным в других случаях.

Писать самому сложнее, но такой подход позволит сосредоточиться только на знании API OpenComputers, не имея дела с особенностями работы чужих библиотек.

 

Каков твой выбор?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, eu_tomat сказал:

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

 

Использовать готовые библиотеки для новичка проще. Но надо изучить их API, который может оказаться бесполезным в других случаях.

Писать самому сложнее, но такой подход позволит сосредоточиться только на знании API OpenComputers, не имея дела с особенностями работы чужих библиотек.

 

Каков твой выбор?

Я с луа не знаком вообще. Я с питоном хорошо так дружу и немного с джавой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, MisterFunny01 сказал:

Я не знаю. Мне надо чтобы ТЫК и комп вырубился и все в этом роде

Ну, формулировать за тебя условия задачи и выполнять решение я точно не буду. Я могу помочь лишь наводящими вопросами. Ещё могу указать на ошибку, если, конечно, замечу её. Могу подсказать, как сделать код лучше.

 

Поэтому твоя первая задача заключается в чёткой формулировке, что именно ты хочешь получить. А то получится как в том анекдоте: в Фотошопе нужна только одна кнопка  "сделать красиво".

 

4 минуты назад, MisterFunny01 сказал:

Я с луа не знаком вообще. Я с питоном хорошо так дружу и немного с джавой.

А вот и ответ. Сначала надо изучить Lua. В простых примерах. Для начала сгодится HelloWorld какой-нибудь. Но можно и сейчас начать с чего-нибудь простого. Например, с программы без GUI, которая может выключить компьютер в зависимости от решения пользователя. Или даже не выключить, а просто сообщить о выборе пользователя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
-- подключаем библеотеку
local GUI = require("GUI")
local computer = require("computer")


local mainContainer = GUI.fullScreenContainer()
mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x2D2D2D))

local shutdownbutton = mainContainer:addChild(GUI.button(2, 2, 30, 3, 0xFFFFFF, 0x555555, 0x880000, 0xFFFFFF, "Жмякай"))

shutdownbutton.onTouch = function()
computer.shutdown()
end

Screenshot_5.thumb.png.7e38d831ac52b6e38ed3088d62ea0ca2.png

 

только добавь layout чтобы автоматом была на центре.

Изменено пользователем Fronun

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

это только для одной кнопочки, но если хочешь много кнопочек использовать то лучше это использовать.

local GUI = require("GUI")
local computer = require("computer")


local mainContainer = GUI.fullScreenContainer()
mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x2D2D2D))

local layout = mainContainer:addChild(GUI.layout(1, 4, 1, 1, 1, 1))

local function button(text)
  return layout:addChild(GUI.button(2, 2, 30, 3, 0xFFFFFF, 0x555555, 0x880000, 0xFFFFFF, text))
end

button("лол").onTouch = function()
GUI.alert("KEK")
end

mainContainer:drawOnScreen(true)
mainContainer:startEventHandling()

правда у меня криво получилось.....

Изменено пользователем Fronun

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
21 час назад, MisterFunny01 сказал:

Эти фичи фиг найдешь.

 

Какие именно фичи интересуют? Какие фичи фиг найдешь? Создание окошка с кнопочками - дело пары минут, описанное в деталях в документации:

 

local GUI = require("GUI")

--------------------------------------------------------------------------------

-- Создаем главный контейнер с черной фоновой палелью
local application = GUI.application()
application:addChild(GUI.panel(1, 1, application.width, application.height, 0x0))

-- Добавляем окошко в главный контейнер
local window = application:addChild(GUI.titledWindow(50, 22, 60, 14, "Акошко", true))

-- Добавляем лейаут размером 1х2 в окошко
local layout = window:addChild(GUI.layout(1, 2, window.width, window.height - 1, 1, 2))

-- Задаем размеры горизонтальных рядов для лейаута
layout:setRowHeight(1, GUI.SIZE_POLICY_RELATIVE, 1)
layout:setRowHeight(2, GUI.SIZE_POLICY_ABSOLUTE, 2)

-- Задаем режим выравнивание объектов для второго ряда по правому нижнему углу
layout:setAlignment(1, 2, GUI.ALIGNMENT_HORIZONTAL_RIGHT, GUI.ALIGNMENT_VERTICAL_BOTTOM)
-- ... направленние
layout:setDirection(1, 2, GUI.DIRECTION_HORIZONTAL)
-- ... расстояние между объектами
layout:setSpacing(1, 2, 3)
-- ... и отступ от правого нижнего угла
layout:setMargin(1, 2, 2, 1)

-- Доавляем текст в первый ряд лейаута
layout:addChild(GUI.text(1, 1, 0x0, "Я оч большой и важный текст"))

-- Меняем дефолтный ряд, в который будут добавляться объекты (можно через layout:setPosition(object), но лень)
layout.defaultRow = 2

-- Добавляем кнопочки
layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0xB4B4B4, 0xFFFFFF, 0x969696, 0xB4B4B4, "Отмена"))
layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0xB4B4B4, 0xFFFFFF, 0x969696, 0xB4B4B4, "Еще тык"))
-- При "тыке" на эту кнопочку комп будет вырубаться
layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0x696969, 0xFFFFFF, 0x969696, 0xB4B4B4, "Тык")).onTouch = function()
  require("computer").shutdown()
end

--------------------------------------------------------------------------------

-- Разово отрисовываем содержимое главного контейнера в принудительном режиме (для полной отрисовки буфера, вдруг опенось чет свое нарисует)
application:draw(true)
-- Начинаем обработку событий
application:start()

 

Результат:

 

jaYThVi.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, ECS сказал:

 

Какие именно фичи интересуют? Какие фичи фиг найдешь? Создание окошка с кнопочками - дело пары минут, описанное в деталях в документации:

 


local GUI = require("GUI")

--------------------------------------------------------------------------------

-- Создаем главный контейнер с черной фоновой палелью
local mainContainer = GUI.fullScreenContainer()
mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x0))

-- Добавляем окошко в главный контейнер
local window = mainContainer:addChild(GUI.titledWindow(50, 22, 60, 14, "Акошко", true))

-- Добавляем лейаут размером 1х2 в окошко
local layout = window:addChild(GUI.layout(1, 2, window.width, window.height - 1, 1, 2))

-- Задаем размеры горизонтальных рядов для лейаута
layout:setRowHeight(1, GUI.SIZE_POLICY_RELATIVE, 1)
layout:setRowHeight(2, GUI.SIZE_POLICY_ABSOLUTE, 2)

-- Задаем режим выравнивание объектов для второго ряда по правому нижнему углу
layout:setAlignment(1, 2, GUI.ALIGNMENT_HORIZONTAL_RIGHT, GUI.ALIGNMENT_VERTICAL_BOTTOM)
-- ... направленние
layout:setDirection(1, 2, GUI.DIRECTION_HORIZONTAL)
-- ... расстояние между объектами
layout:setSpacing(1, 2, 3)
-- ... и отступ от правого нижнего угла
layout:setMargin(1, 2, 2, 1)

-- Доавляем текст в первый ряд лейаута
layout:addChild(GUI.text(1, 1, 0x0, "Я оч большой и важный текст"))

-- Меняем дефолтный ряд, в который будут добавляться объекты (можно через layout:setPosition(object), но лень)
layout.defaultRow = 2

-- Добавляем кнопочки
layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0xB4B4B4, 0xFFFFFF, 0x969696, 0xB4B4B4, "Отмена"))
layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0xB4B4B4, 0xFFFFFF, 0x969696, 0xB4B4B4, "Еще тык"))
-- При "тыке" на эту кнопочку комп будет вырубаться
layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0x696969, 0xFFFFFF, 0x969696, 0xB4B4B4, "Тык")).onTouch = function()
  require("computer").shutdown()
end

--------------------------------------------------------------------------------

-- Разово отрисовываем содержимое главного контейнера в принудительном режиме (для полной отрисовки буфера, вдруг опенось чет свое нарисует)
mainContainer:drawOnScreen(true)
-- Начинаем обработку событий
mainContainer:startEventHandling()

 

Результат:

 

jaYThVi.png

Ну да для тебя это пару мин. Я С ЛУА ТОЛЬКО ЗНАКОМЛЮСЬ. заранее соре за капс. Ну и спасибо за помощь

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, ECS сказал:

 

Какие именно фичи интересуют? Какие фичи фиг найдешь? Создание окошка с кнопочками - дело пары минут, описанное в деталях в документации:

 


local GUI = require("GUI")

--------------------------------------------------------------------------------

-- Создаем главный контейнер с черной фоновой палелью
local mainContainer = GUI.fullScreenContainer()
mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x0))

-- Добавляем окошко в главный контейнер
local window = mainContainer:addChild(GUI.titledWindow(50, 22, 60, 14, "Акошко", true))

-- Добавляем лейаут размером 1х2 в окошко
local layout = window:addChild(GUI.layout(1, 2, window.width, window.height - 1, 1, 2))

-- Задаем размеры горизонтальных рядов для лейаута
layout:setRowHeight(1, GUI.SIZE_POLICY_RELATIVE, 1)
layout:setRowHeight(2, GUI.SIZE_POLICY_ABSOLUTE, 2)

-- Задаем режим выравнивание объектов для второго ряда по правому нижнему углу
layout:setAlignment(1, 2, GUI.ALIGNMENT_HORIZONTAL_RIGHT, GUI.ALIGNMENT_VERTICAL_BOTTOM)
-- ... направленние
layout:setDirection(1, 2, GUI.DIRECTION_HORIZONTAL)
-- ... расстояние между объектами
layout:setSpacing(1, 2, 3)
-- ... и отступ от правого нижнего угла
layout:setMargin(1, 2, 2, 1)

-- Доавляем текст в первый ряд лейаута
layout:addChild(GUI.text(1, 1, 0x0, "Я оч большой и важный текст"))

-- Меняем дефолтный ряд, в который будут добавляться объекты (можно через layout:setPosition(object), но лень)
layout.defaultRow = 2

-- Добавляем кнопочки
layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0xB4B4B4, 0xFFFFFF, 0x969696, 0xB4B4B4, "Отмена"))
layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0xB4B4B4, 0xFFFFFF, 0x969696, 0xB4B4B4, "Еще тык"))
-- При "тыке" на эту кнопочку комп будет вырубаться
layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0x696969, 0xFFFFFF, 0x969696, 0xB4B4B4, "Тык")).onTouch = function()
  require("computer").shutdown()
end

--------------------------------------------------------------------------------

-- Разово отрисовываем содержимое главного контейнера в принудительном режиме (для полной отрисовки буфера, вдруг опенось чет свое нарисует)
mainContainer:drawOnScreen(true)
-- Начинаем обработку событий
mainContainer:startEventHandling()

 

Результат:

 

jaYThVi.png

Кстати это как раз для твоей ОСи

 

 

 

 

И НЕ ДАЙ БОГ КТО-ТО СКАЖЕТ ЧТО МАИНОС ЭТО ГРАФ. ОБОЛОЧКА

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, ECS сказал:

 

Какие именно фичи интересуют? Какие фичи фиг найдешь? Создание окошка с кнопочками - дело пары минут, описанное в деталях в документации:

 


local GUI = require("GUI")

--------------------------------------------------------------------------------

-- Создаем главный контейнер с черной фоновой палелью
local mainContainer = GUI.fullScreenContainer()
mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x0))

-- Добавляем окошко в главный контейнер
local window = mainContainer:addChild(GUI.titledWindow(50, 22, 60, 14, "Акошко", true))

-- Добавляем лейаут размером 1х2 в окошко
local layout = window:addChild(GUI.layout(1, 2, window.width, window.height - 1, 1, 2))

-- Задаем размеры горизонтальных рядов для лейаута
layout:setRowHeight(1, GUI.SIZE_POLICY_RELATIVE, 1)
layout:setRowHeight(2, GUI.SIZE_POLICY_ABSOLUTE, 2)

-- Задаем режим выравнивание объектов для второго ряда по правому нижнему углу
layout:setAlignment(1, 2, GUI.ALIGNMENT_HORIZONTAL_RIGHT, GUI.ALIGNMENT_VERTICAL_BOTTOM)
-- ... направленние
layout:setDirection(1, 2, GUI.DIRECTION_HORIZONTAL)
-- ... расстояние между объектами
layout:setSpacing(1, 2, 3)
-- ... и отступ от правого нижнего угла
layout:setMargin(1, 2, 2, 1)

-- Доавляем текст в первый ряд лейаута
layout:addChild(GUI.text(1, 1, 0x0, "Я оч большой и важный текст"))

-- Меняем дефолтный ряд, в который будут добавляться объекты (можно через layout:setPosition(object), но лень)
layout.defaultRow = 2

-- Добавляем кнопочки
layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0xB4B4B4, 0xFFFFFF, 0x969696, 0xB4B4B4, "Отмена"))
layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0xB4B4B4, 0xFFFFFF, 0x969696, 0xB4B4B4, "Еще тык"))
-- При "тыке" на эту кнопочку комп будет вырубаться
layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0x696969, 0xFFFFFF, 0x969696, 0xB4B4B4, "Тык")).onTouch = function()
  require("computer").shutdown()
end

--------------------------------------------------------------------------------

-- Разово отрисовываем содержимое главного контейнера в принудительном режиме (для полной отрисовки буфера, вдруг опенось чет свое нарисует)
mainContainer:drawOnScreen(true)
-- Начинаем обработку событий
mainContainer:startEventHandling()

 

Результат:

 

jaYThVi.png

А если фон мне делать не надо. И как закрыть "АКОШКО"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@MisterFunny01, мяу, я так и не услышал, какие же фичи "фиг найдешь". Предположу тогда, что все они задокументированы.

 

14 часов назад, MisterFunny01 сказал:

А если фон мне делать не надо. И как закрыть "АКОШКО"

 

Фон - это своеобразная защита от "пустоты", предотвращающая эффект наложения кадров экранного буфера в стиле Windows XP. Если его убрать, то получится следующее:

 

wEH7e4M.png?1

 

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

 

Напомню также, что OpenOS работает не с экранным буфером, а напрямую с компонентом GPU, поэтому в буфере не будут содержаться данные о пикселях, установленных OpenOS. Так что вдвойне логично иметь фоновую панельку для стирания фона.

 

14 часов назад, MisterFunny01 сказал:

И как закрыть "АКОШКО"

 

1) Открываем документацию: https://github.com/IgorTimofeev/GUI

2) Кликаем в содержании на пункт GUI.object

3) Смотрим, что каждый объект имеет метод :remove()

4) Profit

 

Ежели требуется закрывать окно при клике, скажем, на кнопку отмены, то:

 

layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0xB4B4B4, 0xFFFFFF, 0x969696, 0xB4B4B4, "Отмена")).onTouch = function()
  -- Удаляем объект окна
  window:remove()
  -- Отрисовываем изменения сначала в буфер, а затем уже на экран
  application:draw()
end

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чёт я соскучился по багам хп((( Вот только у меня вопрос, и он долго долго лежит у меня в голове, как ты делаешь меню? Как в ВК клиенте, или в Settings, я так понимаю ты просто добавляешь  GUI.button? Со скроллом?

Изменено пользователем Fronun

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
51 минуту назад, Fronun сказал:

Как в ВК клиенте, или в Settings, я так понимаю ты просто добавляешь  GUI.button? Со скроллом?

 

Почти. Для этого есть заранее заготовленный объект GUI.list, по факту представляющий из себя модифицированный GUI.layout с возможностью добавления кнопок-айтемов. А скролл осуществляется через методы setMargin/getMargin:

 

local GUI = require("GUI")
local image = require("image")

--------------------------------------------------------------------------------

local application = GUI.application()
application:addChild(GUI.panel(1, 1, application.width, application.height, 0x0))

-- Окошечко для листа
local window = application:addChild(GUI.filledWindow(40, 12, 80, 25, 0xE1E1E1))

-- Лист и крышка, визуально ограничивающая скроллинг
local list = window:addChild(GUI.list(1, 4, 22, window.height - 3, 3, 0, 0x2D2D2D, 0x696969, 0x2D2D2D, 0x696969, 0xE1E1E1, 0x2D2D2D))
local listCover = window:addChild(GUI.panel(1, 1, list.width, 3, 0x2D2D2D))

-- Кнопочки
list:addItem("Я почти кнопка")
list:addItem("И я тоже")
list:addItem("И я того же мнения")

-- Поддержка скроллинга
list.eventHandler = function(application, list, e1, e2, e3, e4, e5)
  if e1 == "scroll" then
    local horizontalMargin, verticalMargin = list:getMargin()
    list:setMargin(horizontalMargin, math.max(-list.itemSize * (#list.children - 1), math.min(0, verticalMargin + e5)))
    
    application:draw()
  end
end

-- Чтоб кнопочки окна были поверх всех объектов
window.actionButtons:moveToFront()

--------------------------------------------------------------------------------

application:draw(true)
application:start()

 

Результат:

 

9P4ch3U.png?1

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@ECS как в такое "очко" засунуть layout, а то уже себе окно прорублю себе в мозг.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
19 минут назад, Fronun сказал:

как в такое "очко" засунуть layout, а то уже себе окно прорублю себе в мозг.

 

Ну... наверное, как и в любой другой контейнер?

 

очко:addChild(GUI.layout(...))

 

Если требуется своеобразное переключение вкладок, то делай что-то типа этого:

 

local GUI = require("GUI")
local image = require("image")

--------------------------------------------------------------------------------

local application = GUI.application()
application:addChild(GUI.panel(1, 1, application.width, application.height, 0x0))

-- Окошечко для листа
local window = application:addChild(GUI.filledWindow(40, 12, 80, 25, 0xE1E1E1))

-- Лист, содержащий кнопки-вкладки
local list = window:addChild(GUI.list(1, 4, 22, window.height - 3, 3, 0, 0x2D2D2D, 0x696969, 0x2D2D2D, 0x696969, 0xE1E1E1, 0x2D2D2D))
-- Панель, визуально ограничивающая пространство скроллинга листа
local listCover = window:addChild(GUI.panel(1, 1, list.width, 3, 0x2D2D2D))
-- Лейаут с содержимым вкладок
local layout = window:addChild(GUI.layout(list.width + 1, 1, window.width - list.width, window.height, 1, 1))

-- Кнопки-вкладки
local function addTab(text, doSomething)
  list:addItem(text).onTouch = function()
    layout:removeChildren()
    doSomething()
    application:draw()
  end
end

addTab("Показать пикчу", function()
  layout:addChild(GUI.image(1, 1, image.fromString([[0803D8EC00D8EC00D8EC00D8EC00D8EC00D8EC00D8EC00D8EC00FB7900FB7900FB7900FB7900FB7900FB7900FB7900FB7900185A00185A00185A00185A00185A00185A00185A00185A00⣤]])))
end)

addTab("Показать текст", function()
  layout:addChild(GUI.text(1, 1, 0x696969, "Я есть грут"))
  layout:addChild(GUI.text(1, 1, 0x696969, "И я тоже"))
end)

addTab("Показать кнопку", function()
  layout:addChild(GUI.adaptiveRoundedButton(1, 1, 2, 0, 0x969696, 0xFFFFFF, 0x696969, 0xFFFFFF, "Вдави меня полностью"))
end)

addTab("Ой, все", function()
  -- )))))))000
end)

-- Поддержка скроллинга
list.eventHandler = function(application, list, e1, e2, e3, e4, e5)
  if e1 == "scroll" then
    local horizontalMargin, verticalMargin = list:getMargin()
    list:setMargin(horizontalMargin, math.max(-list.itemSize * (#list.children - 1), math.min(0, verticalMargin + e5)))
    
    application:draw()
  end
end

--------------------------------------------------------------------------------

-- Чтоб кнопочки окна были поверх всех объектов
window.actionButtons:moveToFront()
-- Отображаем сразу первую открытую вкладку
list:getItem(1).onTouch()
-- Запускаем приложуху
application:start()

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...