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

Asior

Пользователи
  • Публикации

    570
  • Зарегистрирован

  • Посещение

  • Победитель дней

    70

Сообщения, опубликованные пользователем Asior


  1.  

     

    Был бы спрос - было бы предложение...

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

    В моде 14 разных предмета, из них работают в одиночке только 6.

    Как на мой выбор оно тогда того не стоит, так-что пока автор не починит аддон, ему увы не место в моей сборке. Благо для моих потребностей хватит апгрейдов с других модов.

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


  2.  

     

    Dual Universe

    Только в открытую альфу это чудо поступит в 2020 году, как обещают разработчики.

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

    Kerbal Space Program - а вот это уже интересно, правда немного не понятно как там программировать. Играл в неё, но добраться смог максимум до муны, и то добрались только болтики от корабля.

    Насчет последней игры хз. Надо смотреть, но думаю это должно быть интересно.


  3. Идея хорошая но скучно играть будет и игра закончится через часов 20, к тому времени у тебя будет куча рейсов и собственно все, в ваниле больше делать то нечего. А если хочешь моего мнения о теории, то да, такое вполне возможно и несложно реализуемо. Только сервер накроется быстро, если систему ретрансляторов ставить, а вот огромная антенна тут помогла бы, но увы она роняет сервер и вообще не работает. А так чего придумывать то, на спавне стоит главный компьютер с командным блоком и принимает по вафле команды, например на телепортацию васи в ад.


  4. Привет всем механикам-технологам, и просто мимопроходящим.
    В этой небольшой статье я расскажу вам обо всех возможностях такого замечательного мода OpenTechnology.
    OpenTechnology является аддоном к всеми любимому моду OpenComputers.
    Автор мода известен как NEO. Тут Ссылка вы можете ознакомиться с его блогом, где он выкладывал обновления своего мода, делился мыслями и т.д.

    Данный аддон добавляет в игру некоторые новые структуры, предметы и блоки, которые сделают вашу игру более комфортной и расширят возможности роботов. Заранее предупреждаю, дистанция, сила атаки и расход энергии могут быть изменены в конфигурации мода. В этом обзоре я использую базовые настройки, которые идут с модом.
     
    Итак, коль упомянул роботов, начнем пожалуй с них. Довольно часто роботы сбегают от игроков и потом начинаются мученические поиски беглеца. Но OpenTechnology может вам помочь в поисках беглецов при помощи "Сканера роботов" :/. Он сканирует пространство радиусом в 40 метров и выводит в чат координаты беглеца.

    e58f266c776128e4e20c8965bfac0740.png

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

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

    d2cd7bba4614ecc3c39c8e933d02810e.png


    Технический уровень апгрейда Т3.
    Поддерживает следующие методы:
    tesla --название апгрейда
    attack() --атакует всех сущностей равномерно распределяя между ними урон. После вспышки перегревается
    checkOverHeated() --возвращает состояние катушки перегрелась или нет
    getMaxRadius() --возвращает максимальный радиус атаки.
    getDamage() --возвращает силу урона. Он распределяется равномерно, пример: допустим наш урон 20, 
    --если при атаке в зоне поражения находяться 5 сущностей, каждый получит 4 урона.
    getCoolingTicks()--возращает количество тиков требуемое для охлаждения катушки. 

     
    Радар Апгрейд и Антенна радара :/ - приборы позволяющие узнать точное местоположение мобов, игроков, лежащих на земле предметов в радиусе 15 метров. Интересен тем, что возвращает много точной информации о каждом, кто попал в зону сканирования. Но расход энергии к сожалению нереально велик. Устанавливаются как на робота, так и как внешнее оборудование для компьютера.

    214611991a7e1240699aeb3b02fd827c.png

    Технический уровень апгрейда Т1.
    Радар поддерживает следующие методы:
    radar --название апгрейда
    getPlayers() --возвращает таблицу со списком игроков что попали в зону скана. 
    --Радиус сканирования можно задать, без значений сканирует на максимальную дистанцию
    getMobs() --возвращает таблицу со списком мобов, что попали в зону скана
    getItems() --возвращает таблицу со списком предметов которые лежат на земле, что попали в зону скана
    getEntities() -- полное сканирование. Возвращает таблицу всех существ (предметы тоже)
    содержимое таблицы:
    {{armor = <уровень брони>, distance = <дистанция от сканера до существа>, 
    health = <уровень здоровья>, maxhealth = <максимальный уровень здоровья>, 
    name = <имя существа>, x = <координата по x>,y = <координата по y>,z = <координата по z>}...n = <количество существ>}

     
    Реактор Апгрейд - генерирует энергию за счет распада урановых стержней. Принцип работы тот же, что и у базового улучшения "Генератор", только в виде топлива используются одинарные урановые стержни. Зато энергии вырабатывает нереально много и довольно продолжительное время. Затолкать сдвоенные и счетверенные урановые стержни не представляется пока возможности, похоже размеры реактора не позволяют разместить их в нем.

    6d83fe6cc8e9e489fdeb59505fe57ae0.png

    Технический уровень апгрейда Т3.
    Реактор поддерживает следующие методы:
    reactor --название апгрейда
    activate() --запустить реактор
    deactivate() --заглушить реактор
    insert() --переместить из активного слота стержень в реактор
    count() --возвращает остаток времени работы уранового стержня. В тиках.

     
    На этом улучшения для роботов заканчиваются, но вот предметы мода еще нет.
     
    Контроллер АДД, Часть Антенны, Ячейка Антенны - это фрагменты огроменной вышки, которая позволяет передавать данные на огромное расстояние (2 км). Антенну строить довольно дорого, но если вы желаете дистанционно управлять роботами на большом расстоянии, это выбор для вас. К сожалению расход энергии на передачу данных довольно большой, а так-же невозможно открыть несколько каналов, но дистанцию можно еще сильнее увеличить, если задрать антенну еще выше. Для её постройки требуется соорудить следующую структуру:
    1 блок Контроллера АДД, 14 блоков Частей Антенны, 1 блок Ячейки Антенны

    1f05c57d395528f9fbe80502d08dfbac.png

    lde --название антенны
    События:
    ld_message --Агрументы - адрес отправителя, дистанция, сообщение :/
    Антенна поддерживает следующие методы:
    getMaxDistance() --Возвращает максимальную дистанцию передачи данных
    getDistance() --Возвращает установленное расстояние отправки данных
    getRealDistance() --Возвращает реальное расстояние отправки  данных. Оно рассчитывается так: Установленное Расстояние * (LDAControllerY + 16) / 256. Чем выше антенна - тем больше приближение к установленному расстоянию передачи
    getChannel() --Возвращает текущий канал передачи
    open(channel:int) --Открывает канал, очень долго, поэтому лучше не переключать часто
    setDistance(distance:int) --Устанавливает максимальное расстояние для передачи
    maxPacketSize() --Возвращает максимальный размер пакета
    broadcast(data:string) --Рассылает сообщение по каналу, услышат сообщение все кто к нему подключен :/
    send(address:string, data:string) --Отправляет сообщение конкретному адресату. Оба должны работать на одном канале :/

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

    da4b5f2ae840142f6c3b44f70bdc12ef.png

    Поддерживает следующие методы:
    world_interface --название компонента
    getOnlinePlayers() --выводит таблицу со списком игроков онланй
    getSpawnLocation(<Имя игрока>, <номер мира>) --выводит координаты точки воскрешения указанного игрока в указанном мире
    getActiveEffects(<Имя игрока>) --выводит таблицу наложенных на игрока эффектов, а также продолжительность действия и его цифровой код (Id)
    getPlayerHealth(<Имя игрока>) --выводит уровень текущего и максимального здоровья игрока
    getPlayerFoodStats(<Имя игрока>) --выводит показания запасов еды. Если используется какой-то мод, который добавляет сытости, то его параметры тоже выводятся в отдельную переменную
    getPlayerPosition(<Имя игрока>) --выводит поцицию игрока относительно глобальных координат в виде x,y,z,n где n-номер мира.
    getStackInSlot(<Имя игрока>, <номер ячейки инвентаря>) --выводит информацию по предмету что лежит в указанной ячейке инвентаря игрока
    destroyStackInSlot(<Имя игрока>, <номер ячейки инвентаря>) --уничтожает предмет находящийся в указанном слоте инвентаря игрока
    isFlying(<Имя игрока>) --проверяет летит игрок или нет. Возвращает true если летит или false иначе
    kill(<Имя игрока>) --убивает игрока :/
    heal(<Имя игрока>, <ед исцеления>) --моментально вылечивает игрока на указанное количество единиц
    kick(<Имя игрока>, <Причина>) --отключает игрока от сервера по указанной причине

     
    Контроллер мощности - прибор предназначенный для прераспределения энергии между энергобуферами или проводами. Внешне выглядит как энергобуфер, имеет 5 сторон приема энергии и 1 сторону для вывода её. Имеет внутренний интерфейс в виде двух полос с энергией и цифровым обозначением. Принцип действия: принимает в первый буфер любое количество энергии, затем при помощи компьютера перемещает указанную часть энергии во второй буфер и благополучно выводит её из себя через порт вывода. Фактически это управляемый компьютером трансформатор. Взаимодействует только с модом IC2. Имеет довольно интересную особенность, энергия из выходного буфера перетекает в энергобуфер моментально, несмотря на все ограничения по уровням пропуска энергии, тоесть 1000 eu/t перемещается в базовый деревянный энергобуфер не со скоростью 32 eu/t, а моментально, как ни странно, но взрыва не следует.

    ce4a9617157c16ca41e1b8bd7024cac6.png

    Поддерживает следующие методы:
    energy_controller --название компонента
    getInputBufferCapacity() --возвращает текущий уровень энергии входного буфера
    getOutputBufferCapacity  --возвращает вместимость входного буфера
    getEnergyInputBuffer() --возвращает текущий уровень энергии выходного буфера
    getEnergyOutputBuffer  --возвращает вместимость выходного буфера
    transform(<количество единиц энергии>) --перемещает указанное количество энергии из первого буфера во второй.

     
    Pid :/ - нажимная плита для взаимодействия компьютера с инвентарем игрока. Для взаимодейсвия с ней, надо встать на неё.

    cfbd2d97b499e50ac2e33347472dbd22.png

    Поддерживает следующие методы:
    pid --название компонента
    pullStackInSlot(<сторона где сундук>, <номер слота из инвентаря игрока>, <номер слота сундука>, <количество перемещаемых предметов>) --перемещает предмет из инвентаря игрока в сундук :/
    pushStackInSlot(<сторона где сундук>, <<номер слота сундука>, <номер слота из инвентаря игрока>, <количество перемещаемых предметов>) --перемещает предмет из сундука в инвентарь игрока :/
    getStackInSlot(<номер слота из инвентаря игрока>) --возвращает таблицу с информацией о содержимом слота из инвентаря игрока

     
    Связыватель инвентаря :/ - прибор который связывает инвентарь игрока с компьютером, то есть через него можно программно работать с инвентарем активировавшего его игрока. Работает независимо от местоположения игрока. Удобная штука для быстрой замены комплекта инструментов или например для быстрого очищения инвентаря от всякого хлама.

    ec44dd36ce8e8aac782916834378df2e.png

    Поддерживает следующие методы:
    pib --название компонента
    getTargetName() --возвращает ник привязанного игрока
    isConnected() --возвращает true/false если игрок доступен для работы, короче онлайн
    checkBinding() --проверяет привязку к игроку. Возвращает true/false
    pullStackInSlot(<сторона где сундук>, <номер слота из инвентаря игрока>, <номер слота сундука>, <количество перемещаемых предметов>) --перемещает предмет из инвентаря игрока в сундук :/
    pushStackInSlot(<сторона где сундук>, <<номер слота сундука>, <номер слота из инвентаря игрока>, <количество перемещаемых предметов>) --перемещает предмет из сундука в инвентарь игрока :/
    getStackInSlot(<номер слота из инвентаря игрока>) --возвращает таблицу с информацией о содержимом слота из инвентаря игрока :/

     
    Чатбокс - прибор позволяющий отправлять и получать сообщения из игрового чата. Имеет ограничение по радиусу действия и не может отправлять личные сообщения.

    8736fe3372acf85f26ac25cdb588f1c3.png

    chatbox --название компонента
    События:
    chat_message --Агрументы - адрес чатбокса, Ник игрока, сообщение
    chat_command --Возращает данные те же что chat_message. Однако вызывается только в том случае, если первый символ в сообщении был #. Кроме того, такие сообщения не видны в чате (только в чатбоксах).
    Поддерживает следующие методы:
    getRadius() --возвращает установленный радиус передачи сообщения
    getMaxRadius() --возвращает максимальный радиус передачи сообщения
    setRadius(<дистанция>) --устанавливает радиус в котором будут видны сообщения
    say(<Текст>) --выводит в чат сообщение

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

    ab761fcadf1f024055b453269981439a.png

    admin_chatbox --название компонента
    События:
    chat_message --Аргументы: адрес компонента, id измерения, playerPosX, playerPosY, playerPosZ, дистанция до игрока, имя игрока, сообщение.
    chat_command --Возращает данные те же что chat_message. Однако вызывается только в том случае, если первый символ в сообщении был #. Кроме того, такие сообщения не видны в чате (только в чатбоксах).
    Поддерживает следующие методы:
    say(message: string) --Отправляет всем игрокам сообщение message.
    tell(name: string, message: string) --Отправляет сообщение message игроку с ником name.

     
    Есть еще парочка блоков, но увы они отключены внутри мода, поэтому посмотреть на них не удастся. Кому интересно, это телепорт - который умеет отправлять не только существ, но и блоки(тех же роботов), большой конденсатор - просто батарейка с запредельной емкостью, она используется как накопитель энергии для телепорта.
    На момент написания статьи мод имеет версию OpenTechnology-0.6.17.
    Не все описанные блоки работают, не буду перечислять все проблемы этого мода, просто на каждой неработающей детали или функции поставлю знак ":/", надеюсь автор мода прочитает эту статью и постарается починить все, что неработает.
    Собственно программируйте, разрабатывайте новые интересные схемы и думаю мод OpenComputers вместе с аддоном OpenTechnology вам в этом очень помогут.
    А с вами был Asior и до скорых встреч на проекте Computercraft.ru

    • Нравится 6

  5.  

     

    Как он определял где дом?Мне интересен алгоритм того как он ломал всё,или там по аналогии с карьером?

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


  6. Хмм, странно, раньше как-то работало. Похоже что-то изменили. Ну да ладно, поработаем тогда велосипедокостылестроением.

    local event = require("event")
    local modem = require("component").modem
    modem.open(225) --порт по которому идет прием
     
    function onChatMessage(mass, s1, s2, s3, s4, s5, s6)
      print(mass)
      print(s1)
      print(s2)
      print(s3)
      print(s4)
      print(s5)
      print(s6)  
    end
    
    event.listen("modem_message", onChatMessage)
    

     


    ZRLIqev.png

     


  7.  

     

    Что-то я не понял. Если я вставлю ЭТО

    это не поможет. Вообще. Никак. Сказано же вырезали такую опцию. Так что крутись как-нибудь по другому, вон @@Fingercomp предлагает вариант свой, его пробуй. Или вообще не давай доступа шаловливым ручками пользователей к клавиатуре. Можно еще бесконечный цикл запустить без sleep тогда вообще фиг отрубишь. Или на версию постарее ОС откатиться. 


  8. @@kaka888, уже создают программу по вашему желанию. Функции конечно там другие, но программа в активной разработке, можете ознакомиться http://computercraft.ru/topic/2394-upravlenie-robotom-v-fone/ 

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


  9.  

     

    А еще знаю, что на CC мало кто сидит

    Вернее сказать вообще не сидит. Я пару лет тому назад разыскивал хоть один сервак с СС, итог - 3 сервера. Два из которых я и прогер уронили, один из них пришлось вообще вайпать, после моей шутки, а на последнем сервере, после того как я повторил его падение, просто усложнили крафт компьютеров, отложив падение сервера до того момента, как игроки до сложных крафтов дойдут. ОС теперь всем рулит! 


  10.  

     

    кнопка "ямка вместо дома"
     

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

     

     

    Так вот,у меня дилемма,что делать если нет модема и интернет карты?

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


  11.  

     

    И зачем управление с шелла?

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

    • Нравится 1

  12. И еще одно улучшение, добавь в начало программы переменную содержащую номер порта. Это позволит управлять конкретным роботом, а то если программа установлена на 2-более роботах, то начинается парад роботов на 400 метров от оператора. Ну и в программу для планшета так-же добавь возможность запуска с указанным портом, думаю разберешься как это сделать.

    > Tablet.lua 45
    

    И еще одна фишка, почитай вот эту тему, Как включить компьютер если заняты руки можно добавить разрешение на удаленный запуск.
    Так-же совсем забыли про редстоун, а как робот будет хозяина то запускать в дом?
    Вообще, как я думаю надо собрать своего рода универсальную программу, тоесть в роботе будет полная база по подключению тех или иных устройств, а на планшете доступ к ним. Например, в роботе есть красная плата, он передает данные на планшет, что такая карта есть и на планшете появляются опции разрешающие работу с ней. Или наоборот, красной платы нет, значит и опции для работы с ней вообще не нужны, следовательно не показываем их пользователю и все.
    Это конечно сложно, придется пересмотреть всю систему приема/передачи данных, но в разы удобнее.
    Далее рекомендую ознакомиться с темами:
    http://computercraft.ru/topic/982-biblioteka-dlia-raboty-s-mobilnym-mostom-klien/
    http://computercraft.ru/topic/2028-internet-modem-dlia-openos-cherez-irc/
    Это должно помочь в управлении роботом не только через wifi.
    Может добавить еще опцию управления роботом через шелл? Вот один из вариантов реализации такого
    http://computercraft.ru/topic/744-planshetnoe-upravlenie-robotom/
    Или вот, можно вытащить из управления дроном, там вообще чисто на шелле управление
    https://hastebin.com/etulijoyox.cs
    P.S. Не обновляй код на пастебине, просто под описанием темы добавь список версий, в спойлеры внеси, что добавил/пофиксил. Так будет интереснее наблюдать за прогрессом развития программы.

    • Нравится 2

  13. Офигенно, поздравляю с первой программой. Теперь парочку советов и идей. Фоновая программа это конечно круто, но роботом то нам хочется управлять секретно. Поэтому добавь проверку на то, есть ли модем на роботе, тогда это будет своего рода скрытый вирус. Дальше, добавь передачу данных инвентаря, чтобы видеть, чего там сперли. Также добавь опцию смены инструмента с выбором слота для его замены


  14. Зачем плагины то трогать? Кстати не пробовал добавлять ОС в приват?

    /rg addmember -n <id> [OpenComputers] <name>.robot --для роботов
    /rg removemember -n <id> [OpenComputers]           --для транспозеров и прочей ерунды
    
    

    А так, я даже удивлен, что кейпад другим игрокам в чужом привате недоступен.


  15. Вчера Asior думал, что это связано с верстаком тинкера, стоящего вплотную к сундуку

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

    Но сегодня краши продолжились, мы были с ним вдвоем на сервере. Я стоял АФК на ферме, ничего не трогал, но сервер крашился.

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

  16. Ну на каждом первом сервере не выйдет, но нубов которые вообще не шарят в ОС так гриферить можно. И админ ничего в логах не найдет, ограбил то робот собственный. Кстати на робокрафте бегали у игроков 5 роботов зараженных мною с похожей программой. Я под закрытие сервера хотел массовое ограбление активировать (ямку место дома) но не успел, в армию забрали.


  17. Можно то можно. Но вот только зачем? Пользоваться роботом всеравно не выйдет во время управления удаленно, там будет работать ваш демон (фоновый процесс). А пока программа будет ожидать действий которые возможно поступят по wifi или нет, она будет жрать и так малый объем памяти робота. Моё предположение, вы хотите создать вирус, чтобы угонять проданные другим роботы или что-то в этом роде.

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

    local event = require("event")
    local modem = require("component").modem
    modem.open(225) --порт по которому идет прием
    
    function onChatMessage(mass)
      for i=1,#mass do
        print(mass[i])
      end
    end
    
    event.listen("modem_message", onChatMessage)
    

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

    • Нравится 2

  18. Заюзал данную программу, офигенно сделано. Но есть небольшие правки. Надо подключить юникод, если хочется работать с русскими буковками в названии кнопок.

    --весь код нет смысла копировать поэтому куски кода вставлю
    local un = require("unicode") --подключить юникод
    
    ...
    
    local function drawButton(n) -- функция рисования кнопки
      gpu.setBackground(tButtons[n].color) -- задаем цвет кнопки
      gpu.setForeground(tButtons[n].textColor) -- задаем цвет текста
      gpu.fill(tButtons[n].X, tButtons[n].Y, tButtons[n].W, tButtons[n].H, ' ') -- заливаем область
      gpu.set(tButtons[n].X+(tButtons[n].W/2)-(un.len(tButtons[n].text)/2), tButtons[n].Y+(tButtons[n].H/2), tButtons[n].text) -- пишем текст по центру
    end
    

  19. Попробывал, сильно сложно, начинал разбиратся, сломал голову...

    Ну даже незнаю. там вроде все просто пошагово описано что где, куда и как. Попробуй пройти статью потихоньку набирая весь код, что предлагает Doob. Там просто нереально сильно все разжевано. Но коль не понятно, отделяю оттуда только 1 кнопку и даю тебе её код. Незнаю как это поможет.

     

     

     

    local gpu = require('component').gpu
    local computer = require('computer')
    local pull_e = require('event').pull
    local W, H = gpu.getResolution()
    local un = require("unicode")
    local b_color, f_color = gpu.getBackground(), gpu.getForeground()
     
    local tButtons = {
      {
        visible = false,
        X = 1, --местоположение кнопки по Х
        Y = 5, --местоположение кнопки по У
        W = 13, --длина кнопки (длина названия кнопки + 3)
        H = 1,   --ширина кнопки
        color = 0x008800, --цвет фона кнопки
        textColor = 0xffff00,  --цвет текста кнопки
        text = 'Йа кнопофка',  --текст кнопки
        action = function()  --функция с командами которые выполняются по нажатию, в этом примере простой вывод сообщения
          gpu.setForeground(0xffffff)
          gpu.set(1, 1, 'А я её действие')
        end
      }
    }
     
    local function drawButton(n) -- функция рисования кнопки
      gpu.setBackground(tButtons[n].color) -- задаем цвет кнопки
      gpu.setForeground(tButtons[n].textColor) -- задаем цвет текста
      gpu.fill(tButtons[n].X, tButtons[n].Y, tButtons[n].W, tButtons[n].H, ' ') -- заливаем область
      gpu.set(tButtons[n].X+(tButtons[n].W/2)-(un.len(tButtons[n].text)/2), tButtons[n].Y+(tButtons[n].H/2), tButtons[n].text) -- пишем текст по центру
    end
     
    local function toggleVisible(n) -- переключение видимости кнопки
      if tButtons[n].visible then -- если кнопка видима
        tButtons[n].visible = false -- отключаем
        gpu.setBackground(b_color) -- берем цвет фона, полученный при старте программы
        gpu.fill(tButtons[n].X, tButtons[n].Y, tButtons[n].W, tButtons[n].H, ' ') -- стираем кнопку
      else -- если кнопка не активна
        tButtons[n].visible = true -- активируем
        drawButton(n) -- запускаем отрисовку
      end
    end
     
    local function blink(n) -- мигание кнопки
      tButtons[n].color, tButtons[n].textColor = tButtons[n].textColor, tButtons[n].color -- меняем местами цвета фона и текста
      drawButton(n) -- отрисовываем кнопку
      os.sleep(0.09) -- делаем задержку
      tButtons[n].color, tButtons[n].textColor = tButtons[n].textColor, tButtons[n].color -- меняем цвета обратно
      drawButton(n) -- перерисовываем кнопку
    end
     
    gpu.fill(1, 1, W, H, ' ') -- очищаем экран
     
    for i = 1, #tButtons do
      toggleVisible(i) -- активируем каждую кнопку
    end
     
    while true do
      local tEvent = {pull_e('touch')} -- ждем клика
      for i = 1, #tButtons do -- перебираем все кнопки
        if tButtons[i].visible then -- если кнопка активна
          if tEvent[3] >= tButtons[i].X and tEvent[3] <= tButtons[i].X+tButtons[i].W and tEvent[4] >= tButtons[i].Y and tEvent[4] <= tButtons[i].Y+tButtons[i].H then -- если клик произведен в пределах кнопки
           blink(i) -- мигнуть кнопкой
           tButtons[i].action() -- выполнить назначенный код
           break
          end
        end
      end
    end
    

     

     

     

     

    8IWQHNy.png

     

     

    P.s Пришлось подтянуть библиотеку юникода еще, а то с русскими названиями букв оно работает ужасно криво.


  20. Ну и как создатель темы, начну пожалуй первым уже вторым ;) .

    Итак мой ник Asior. Как же он появился? Когда я пришел на проект я сначала думал зарегистрироваться под своим постоянным псевдонимом Chon (на тот момент я читал книгу "Наследница драконов" - Н. Кузьминой, и симпатизировал герою которого собственно и звали Шон), но что-то мне не понравилось и я решил создать новый ник. Немного погуглив я отыскал несколько генераторов ников, но пощелкав, понял, что ничего интересного прям они не предлагают. Поэтому я решил создать свой ник сам. На глаза попалась марка моего ноутбука Acer, немного поковеркав её я пришел к нику Asor. Но он как-то не особо звучал и я помнил о том, что в некоторых играх ник должен быть более 5 символов, поэтому я добавил приставку к нику on, и в итоге вышло Asoron. Конечно это никак не звучало, и еще немного поизменяв ник, я пришел к своему основному псевдониму Asioron. Ник мне понравился, но по произношению, как я посчитал, как-то длинно. Поэтому я сжал его и вышел мой текущий ник Asior. Однако, с того момента я начал пользоваться созданным мною ником абсолютно везде. Вот такая вот история.

    P.S И да, я не имею никакого отношения к заводу покрышек имени меня. Я про него спустя полгода только узнал. Если кому интересно мой ник по русски читается как Асиор и никак иначе.

    • Нравится 3
×
×
  • Создать...