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

Поиск по сайту

Результаты поиска по тегам 'LUA'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Блоги

  • Робот Байт
  • Fingercomp's Playground
  • 1Ridav' - блог
  • Totoro Cookies
  • Блог cyber01
  • IncluderWorld
  • KelLiN' - блог
  • Крутой блог
  • eutomatic blog
  • Programist135 Soft
  • Сайт в сети OpenNet
  • PieLand
  • Очумелые ручки
  • Блог недоблоггера
  • В мире Майнкрафт
  • LaineBlog
  • Квантовый блог
  • Блог qwertyMAN'а
  • some blog name
  • Дача Игоря
  • Путешествия Xytabich'а
  • Рецепты программирования
  • Шкодим по крупному
  • 123
  • mineOS и её удивительный мир
  • Поляна говнокода Bumer 32

Форумы

  • Программирование
    • Программы
    • База знаний
    • Разработчикам
    • Вопросы
  • Игровой раздел
    • Игровые серверы
    • Моды и плагины
    • Жалобы
    • Ивенты и конкурсы
    • Файлы
  • Общение
    • Задать вопрос
    • Обратная связь
    • Беседка
    • Шкатулка
  • Технический раздел
    • Корзина

Группы продуктов

Нет результатов для отображения.


Искать результаты в...

Искать результаты, которые...


Дата создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по количеству...

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

  • Начать

    Конец


Группа


AIM


MSN


ICQ


Yahoo


Jabber


ВКонтакте


Город


Интересы

Найдено 147 результатов

  1. Начал писать радиоуправляемого робота, всё как обычно начиналось хорошо, но произошла такая хрень! Не хочет обрабатывать вот это событие: local a1, a2, a3, a4, a5, ev = event.pull("modem_message", _, serverAddr, 666) если делаю вот так: local a1, a2, a3, a4, a5, ev = event.pull("modem_message") всё работает, вот так опять нет: local a1, a2, a3, a4, a5, ev = event.pull("modem_message", _, _, 666) в общем перебрал все варианты, не могу понять где ошибка. Не обращайте внимание на лишние принты и переменные, это я уже не знал куда смотреть). Вот код: Клиент: local r = require("robot") local com = require("component") local event = require("event") local modem = com.modem local doit = {} doit.up = r.up doit.down = r.down doit.left = r.turnLeft doit.right = r.turnRight doit.around = r.turnAround doit.forward = r.forward doit.back = r.back doit.swing = r.swing doit.swingUp = r.swingUp doit.swingDown = r.swingDown doit.use = r.use doit.useUp = r.useUp doit.useDown = r.useDown doit.place = r.place doit.placeUp = r.placeUp doit.placeDown = r.placeDown modem.close() modem.open(666) modem.setStrength(500) local _, clientAddr, serverAddr, _, _, _ = event.pull("modem_message", _, _, 666, _, "gogo") modem.send(serverAddr, 666, clientAddr) print(serverAddr.."||") print(clientAddr) print("приступаю к циклу") while true do print("цикл") local a1, a2, a3, a4, a5, ev = event.pull("modem_message", _, serverAddr, 666) --------- FUCK!!!!!!!!!! print("считал сообщение") doit[ev]() print(a1,a2,a3,a4,a5,ev) end и сервер: local com = require("component") local event = require("event") local modem = com.modem modem.close() modem.open(666) modem.setStrength(500) modem.broadcast(666, "gogo") local _, _, _, _, _, clientAddr = event.pull("modem_message", _, _, 666) print(clientAddr) while true do local msg = io.read() modem.send(clientAddr, 666, msg) print("--"..msg) end заранее спасибо тем, кто откликнется.
  2. А что если добавить на форум небольшой блок-баннер (кое-кто предлагает вообще всплывающее окно), который будет появляться раз в неделю (к примеру), и задавать вопрос по Lua и OpenComputers. Я взял на себя смелость набросать пример на c9. (Да простят меня web-мастера, php-ниндзя, джедаи дизайна и прочие ценители прекрасного) Попробовать можно тут (временный адрес, если ссылка будет недоступна - пишите, я схожу разбужу сервак): https://lua-wizard-moonlightowl.c9users.io/ Рандомные задачки: https://lua-wizard-moonlightowl.c9users.io/index.php?q Сам код лежит тут: https://ide.c9.io/moonlightowl/lua-wizard Основная идея такова. Периодически заходя на форум, пользователь видит вопрос какого-либо формата: вопрос с однозначным ответом вопрос с ответом в виде кода вопрос с вариантами ответа вопрос с таймером (чтобы не было времени гуглить ответ =)) что-то еще Вопрос имеет награду в виде очков репутации, UU-монеток или чего-то еще. Награда может быть разной в зависимости от сложности вопроса. Вопрос недели устанавливает модер/админ, либо он сам выбирается из некой базы вопросов. Темы - программирование, OpenComputers, Lua.
  3. Лазил я по стандартным либам OpenOS и понял, что ничего не понимаю. К примеру: component.list("screen")() Зачем тут вторые скобки? :/ Но вообще вопрос вот в чем. Сталкивались ли вы с подробным описанием базовых либ OpenOS, пусть даже на английском. Хотелось бы подробненько прочитать.
  4. Все доброго времени суток. Собственно решил я заняться созданием велосипеда. Посмотрел коды одного (совсем-совсем) не известного человека и... начал писать свою либу. И все ничего... 78 строк кода написанные одним махом и не единой ошибки! Для меня это рекорд, но вот только сама программка работает как-то... Как-то не так. Проблема заключается в том, что почему-то отрисовываются копии... С объяснением тут будет сложненько потому лучше сразу скрины и саму либу. github: https://github.com/VladimirPruskalyow/OpenPrograms/blob/master/Library/DBuffer.lua По поводу: "Да эта либа будет сто лет отрисовывать!!1" - Я знаю, меня сейчас беспокоит не быстродействие а корректная работа. А вот это я запускал для проверки самой либы... local buffer = require("DBuffer") buffer.Start() buffer.Square(5, 5, 10, 20, 0xFF00FF, 0xFF0000, "S") buffer.Draw() local a, b, c = buffer.Get(56, 10) io.write(a, "\n", b, "\n", c) Так же стоит отметить, что функция Get проверяет пиксель не того прямоугольника который задан, а (хз откуда взявшегося) клона. Еще я проверял Get'ом buffer.new, и там тоже обнаруживался этот прямоугольник. Соответственно проблема в записи фигуры в буфер?! Но хоть убейте, я не понимаю откуда в 9 строках кода сидит ошибка. И... еще один пунктик. Отрисовка одного пикселя данной в либе функции Set дает такой же эффект: нужный пиксель+3 клона. P.S. Скрин сделан в Эмуляторе OC, но и в обычном майнкрафте все так же. P.S.S. Покорно прошу вашей помощи, потому что сам, хоть убейте, ошибки не вижу...
  5. Просто надо для системки безопасности дома
  6. А то в официальной документации ничего не понятно
  7. Добрый день игроки. Я хотел бы узнать, как опытные игроки проводят эксперименты по определению какой кусок кода работает лучше. А ещё хотел бы узнать, какой оператор будет работать быстрее: > или >= Например: y = x>13 and x<17 и y = x>=14 and x<=16 А может ещё быстрее работает оператор == ? Например: y = x==14 or y==15 or y==16
  8. Ходил я по стандартным API OC и нашел либу colors. Там можно обратиться к таблице colors.red и получить ее значение и наоборот - ввести colors[14] и получить red. Хотелось бы узнать как такое осуществляется. Не тупо же две таблицы одна из которых инверсированная по ключам и значениям первой.
  9. Собственно занялся я одной фуфней и встретился с ошибкой которую вообще не понимаю... Функция принимает путь к файлу и читает его. Начиная с шестого бита происходит запись в двухмерную таблицу. Эту же таблицу функция возвращает... Должна возвращать. Ошибка и сама функция в скриншотах. Возможно я тупой - не серчайте.
  10. Представьте, что вы написали программу, и вам нужно, чтобы некоторые настройки этой программы сохранялись на диск и считывались, да так, чтобы сам файл настроек был читаем, содержал комментарии, легко редактируем с помощью текстовых редакторов и сохранял целостность самого файла после перезаписи (не путал строки). Всё выше перечисленное я добавил в эту небольшую библиотеку, и честно сказать результатом доволен. Скачать можно коммандой с pastebin: pastebin get qDRfwGX3 /libs/settings.lua Функции Формат файла Методы Свойства Операторы (взаимодействие) Пример использования Старые версии (вдруг кому надо...) Библиотека ещё будет дорабатываться, в соответствии с вашими пожеланиями. Надеюсь оцените .
  11. Добрый день, игроки. Игра Cube, практически портирована с OpenOS на полноценный движок love2d. Осталось лишь генерацию комнат прикрутить и будет готова. Далее можно будет заниматься созданием предметов и прочего дополнительного материала. Вот вам для сравнения скрины игры на OpenOS и на love2d: Нововведения: Игра с плавным управлением (уже нет той пошаговости и пиксельности Возможность бега зажатием шифта Двери которые открываются на кнопку E (они со всех 4 сторон есть, но отрисовку для теста сделал только у верхней - фиолетового цвета) Гибкие настройки, такие как: ширина стен комнат, ширина прохода, размер комнат, скорость игрока, ускорение при беге и прочие переменные. То есть в случае чего можно легко настроить под себя игру. Скажу по секрету. Возможно даже будет в будущем когда нибудь добавлена прицельная стрельба мышкой и вражеские ИИ. Движок позволяет многое. И не смотрите на то что все соседние комнаты отображаются одновременно. Так происходит пока я не внедрил генерацию мира. Есть идеи по улучшению игры - пишите в комментарии. А с вами был qwertyMAN, удачи в программировании.
  12. Добрый день. Сегодня наткнулся вот на какую мысль. У меня ведь есть игра Cube. Идея моя, реализация тоже. А почему бы не сделать полноценную игру из того что есть. Для тех кто не знает о чём игра, вот пояснения правил игры: И тут я стал перебирать, что я могу сделать для продвижения разработки игры. Пути развития игры я для себя нашёл 3: Продолжать разрабатывать как игру под OpenOS (майнкрафт), где слабая графика, низкие возможности, 2D графика. Написать мод-мини-игру под майнтест, где будет уже 3D графика, больше простора для реализации (ловушки всякие и прочее), а так же дополнительные выходы из комнаты вверх и вниз (то есть 6 выходов из комнаты вместо 4 как в оригинале) Написать нечто большее с нормальной 2D графикой, без ограничений и сделать самостоятельную игру на движке love2D (если знаете другой хороший lua движок сообщите мне пожалуйста) Из этого мне понравился последний вариант и я решил набросать идеи для геймплея. Вот что из этого получилось: Игрок имеет показатели голода, здоровья, кислорода, давления и температуры Игрок имеет инвентарь на 10 вещей (примерно) Игрок двигается не попиксельно, а полноценно, как и всё что будет в игре отображаться В комнатах расставлены ловушки (турели, комнаты без воздуха, комнаты с большим атмосферным давлением, радиоактивные вещи и прочее) По комнатам разбросаны вещи (но некоторые могут быть заражены и вы об этом не узнаете напрямую) Вы можете разливать краску (разных цветов) в качестве меток, если найдёте её (ограниченное использование) Вы можете писать на стенах мелом (разных цветов) что угодно, если найдёте мел (ограниченное использование) Вы можете так же найти осколок и писать им на стенах, но будет тратится сила (неограниченное использование) Вы можете найти еду и восполнить сытость (еда может быть отравлена или заражена радиацией) Вы можете найти дозиметр который проверяет вещи на радиоактивность (радиоактивные вещи медленно уменьшают жизнь) Вы можете найти барометр который позволит проверить давление в комнате, а так же термометр (там где эти показатели ниже или выше нормы долго находится нельзя, а без этих инструментов вы не узнаете давление и температуру комнаты) Вы можете найти палку, которая позволит измерительные приборы пускать в комнату не заходя в неё (например пустить детектор кислотности в комнату где распылена кислота и таким образом не умереть от неё) Вы можете найти анализаторы газа, они показывают из чего состоит атмосфера комнаты (содержание кислот, щелочей и прочее в процентах) Вы можете найти спички (которые при активизации могут взорвать комнату с гремучим газом), а так же полезны в тёмных комнатах В игре можно найти листок/тетрадь и карандаш (по отдельности) которые позволят ввести ограниченное количество символов и вести записи. В игре можно будет найти клубок ниток, которым можно будет прокладывать из комнаты в комнату видимый путь (длинна клубка выражается в максимальном числе комнат) (следует помнить что двери меняют своё местоположение и вернуться назад не так просто как вам могло бы показаться без клубка) Вот в принципе и всё, я рассказал о возникших идеях и возможно как будет время примусь их осуществлять. А пока предлагаю вам, оценить данную задумку и высказать своё мнение по этому поводу. Что вам нравится, что нет, что я забыл перечислить и что нужно ввести в игру.
  13. Думаю большинство пользователей форума помнят банк, который был на IT, да, он был местами лагучий, но это же шедевр. Я еще не видел ни одного подобного проекта (OpenNet не в счет т.к. там все разнозненно было и не понятно нафига оно надо ). В связи с заинтересованностью несколькими людьми в банке (да и самому интересно его запустить) решил выложить некий мануал по его запуску. Возможно владельцы других серверов и проектов смогут его использовать у себя. Собственно приступим: Для начала некоторая терминология в программах банка и его алгоритм работы на словах: Термины: Терминал (terminal) - пользовательская часть, через которую игрок взаимодействует с банком. Представляет собой обычный компьютер с монитором и клавиатурой. Кассир (teller) - робот, задачей которого является обработка всех данных по покупке/продаже чего-либо в банке. Осуществляет финансовые операции (работа с балансом) в банке, также забирает товар, полученный от игрока (продажа в банк) и отправляет запросы командному блоку, на выдачу банковского пароля и выдачу предметов. Виртуальный командный блок (netcb) - обычный компьютер, который получает команды от робота и передает команды в командный блок Супервайзер (supervisior)- административный элемент банка, позволяет выполнять различные операции в нем (выключение компьютеров, блокировка/разблокировка терминалов, принудительное обновление цен, блокировка дверей в кабинках) Алгоритм работы банка на словах: 1. Пользователь заходит в кабинку, тыкает в терминал 2. Двери кабинки закрываются и пользователю предлагают ввести пароль (либо восстановить его) 3. Если пользователь успешно авторизовался, то в зависимости от выбранной услуги выполняются различные действия: В случае продажи предметов банку: Пользователь выбирает пункт "Продать", бросает предметы в "яму" Робот забирает их, считает, выгружает в сундук На экране терминала отображается количество предметов и сумма, которую банк заплатит игроку. Игрок нажимает кнопку "Продать" и сумма зачисляется ему на счет. В случае покупки предметов у банка: Пользователь выбирает пункт "Купить", выбирает товар Выбирает количество товара и нажимает купить Если у игрока достаточно средств, то с его счета списывается необходимая сумма. Робот посылает командному блоку команду на выдачу предметов игроку. Выдача предметов осуществлялась через плагин BetterEnderChest 4. Игрок заканчивает сессию в банке, терминал деавторизовывает игрока и открывает двери Теперь рассмотрим, что требуется для постройки банка: Для создания банка, а будем строить для начала только одну кабинку, дополнительно потребуется: Web-часть: PHP скрипт + база данных - через них осуществляются все операции по зачислению/списанию баланса, хранению банковской сессии и пароля. Игровая часть: Плагины: Серверный плагин Essentials - по умолчанию командный блок отправляет сообщение игроку в виде письма из плагина Essentials Серверный плагин BetterEnderChest - по умолчанию выдача купленных игроком предметов осуществляет в Эндер сундук, доступ к которому извне реализуется плагином. В плагине есть баг, не сохраняются метаданные (зачарования, уровни энергии и прочее) Моды: OpenComputers - компьютеры, роботы и т.п. IC2 Exp. - покупка энергии AFSU - огромное хранилище энергии, для хранения энергии, которую смогут купить Nuclear Control - информационные экраны по краям терминала для показа информации о доступной энергии Iron Chest - не обязательно, на случай, если игрока буду продавать огромными партиями Applied Energistics 2 - в ней будут храниться все ресурсы, проданные банку Advanced Solar Panels - квантовые генераторы, для продажи энергии RedLogic - освещение и липкий редстоун Блоки: Командный блок - собственно все операции по отправке сообщений и выдаче предметов будут проходить через него. Командные блоки должны быть включены в конфигах сервера. Необходимое ПО лежит здесь. ПО немного изменено,а именно удален механизм автоапдейта (кроме прайслиста) т.к. при создании банка могут появиться необъяснимые баги (оно загружает всегда обновленную версию, не смотря на вашу ) Web-часть: Данные о балансе игрока, его банковской сессии и пароле хранятся в базе данных, Opencomputers общается с ней с помощью PHP скрипта, отправляя запросы на него и получая соответствующий ответ. Поэтому для работы банка в первую очередь нужно обзавестись хостингом с поддержкой PHP. К сожалению локальные вебсервера не подходят (OpenComputers их просто не видит). Выполнение этой части делится на несколько этапов: Импортируем структуру базы данных Загружаем PHP файл Указываем параметры доступа к базе данных (в PHP скрипте) Указываем ключ авторизации (абсолютно случайный, но без спец.символов). При попытке запросить баланс или его изменить для игрока, в случае, если игрока не существует - он будет создан. Игровая часть: Не забудьте поставить плагины для сервера. Собственно приступим к постройке: 1. Супервайзер Первым делом сделаем супервайзера т.к. его адрес указывается во всех программах. Конфигурации компьютеров/роботов выкладываю такими, какие они были в оригинальном банке, может будет работать и на менее мощной комплектации. Конфигурация компьютера-супервайзера: Системный блок 3 уровня Жесткий диск 2 уровня (золотой) Планка оперативной памяти 3.5 Видеокарта 2 уровня Процессор 3 уровня Плата беспроводной сети Ставим системный блок, монитор, подаем энергию, устанавливаем операционную систему. (все как с обычным компьютером). Например так: Далее загружаем программу-супервайзера (папка supervisior в архиве) любым удобным для вас способом. Выполняем команду components , чтобы посмотреть адрес модема и записываем его, он еще пригодится. Можно также отредактировать init.lua, добавив перед строкой local result, reason = os.execute(os.getenv("SHELL")) строки print("Running Supervisor:") require('shell').execute('имяпрограммы-супервайзера', _G) , чтобы она загружалась при старте компьютера. Перезагружаем компьютер, если все хорошо - программа успешно запустится. На этом с супервайзером закончили. 2. МЕ-сеть (система хранения) Получаемые от игроков ресурсы нужно где-то хранить, поэтому сделаем МЕ-сеть. Конфигурация ее произвольна, но сделаем простую: МЕ контроллер Терминал МЕ накопитель Плотный кабель (будет идти к каждому кассиру) Несколько ячеек хранения. Например так: Построение первой кабинки: 1. Виртуальный командный блок Конфигурация виртуального командного блока (компьютера такая же, как и у супервайзера). Ставим компьютер, рядом с ним ставим адаптер, а к нему командный блок (например так: . Подаем питание, устанавливаем операционную систему. После установки операционной системы также выполняем команду components и записываем адрес модема виртуального командного блока. Теперь загружаем программу netcb (доступна в архиве) любым удобным вам способом. Можно также добавить ее в автозапуск по аналогии с супервайзером. 2. Комната кабинки. Разделяем кабинку на половины (для клиентов и внутреннюю часть). С одного краю делаем углубление в один блок(разделите ее на 2 части с помощью стеклянного блока), для робота-кассира. Например так: . Робот может забрать ресурсы даже сквозь стекло! Далее ставим монитор и клавиатуру(терминал), а также заряжающую плиту. Например так: . Подключаем к монитору (сзади) кабель, ведущий под кабинку. А в углублении ставим зарядное устройство и рядом с ним блок, на который ставим сундук. Например так: Далее делаем обыкновенные поршневые двери. При этом вместо красной пыли используем Red alloy wire из Red logic, край "провода" выводим вниз, под кабинку. Например так: Слева и справа от экрана терминала за стеклом ставим информационные панели из Nuclear Control (продвинутая панель+расширитель). Они будут показывать заказанный вами объем энергии и доступный всего (датчики разместим позднее). Например так: На этом с кабинкой временно закончили. 3. Терминал. Теперь настала очередь терминала (самого компьютера). Конфигурация аналогична супервайзеру и виртуальному командному блоку, но здесь еще добавляется интернет плата и вторая планка оперативной памяти 3.5 уровня. Ставим компьютер. Подаем энергию, устанавливаем операционную систему. Далее устанавливаем необходимое ПО: 3.1 Загружаем любым удобным способом все файлы из папки terminal. 3.2 Редактируем файл bank.ini, где в ID указываем номер кабинки (1), а в CB указываем адрес модема виртуального командного блока (вы его получили ранее). 3.3 Редактируем файл terminal.lua, указываем адрес модема супервайзера (29 строка) 3.4 Обязательно добавляем файл в автозагрузку (как описано в начале для супервайзера, запускать программу start). 3.5 Перезапускаем компьютер. Можно для проверки поставить рядом монитор, чтобы проверить работоспособность (должно вывести надпись "Логин". Если все хорошо, убираем монитор т.к. далее будет подключен монитор в кабинке (позже) 4. Управление дверями, хранилища энергии. Теперь нужно построить хранилища энергии. Привожу скриншоты, тут ничего сложного. 4.1 Сначала делаем такую конструкцию: 4.2 Добавляем красный камень (блок из ОС), провода разъединители и квантовые генераторы: 4.3 Соединяем проводами красный камень, терминал и монитор терминала (в кабинке): 4.4 Подводим красную пыль от двери к красному камню (блок из ОС), можно также поставить рычаг, для ручного блокирования дверей: 4.5 Берем два набора для энергетического хранилища (из Nuclear Control), одним тыкаем по ЭХПФ (AFSU) и вставляем в левую (от монитора терминала) информационную панель, а вторым тыкаем по заряжающей плите и вставляем в правую информационную панель. В результате левая показывает общее количество энергии в системе, а правая уровень энергии в заряжающей плите. С этой частью закончили, осталась одна. 5. Кассир (teller) Кассир это робот определенной комплектации. Поэтому сначала соберем его. Нам потребуется следующая комплектация: Системный блок 3 уровня Улучшение "Контейнер плат" 2 уровня Дисковод Улучшение "Контроллер инвентаря" Улучшение "Притягивающий луч" 4 улучшения "Инвентарь" Монитор 1 уровня Клавиатура Интернет карта Плата беспроводной сети Видеокарта 1 уровня Процессор 3 уровня 2 планки памяти 3.5 уровня Lua Bios Жесткий диск 3 уровня Как только робот будет собран, устанавливаем его на зарядное устройство в кабинке (за стеклом), "лицом" к дверям. Под зарядное устройство (снизу) подводим энергию, а также ставим рычаг и включаем его (чтобы включить зарядное устройство). Таким образом робот должен быть на бесконечной зарядке. Далее устанавливаем операционную систему После чего загружаем все файлы из папки teller. Редактируем bank.ini, где в ID ставим 1 (номер кабинки), а в CB ставим адрес модема виртуального командного блока Добавляем программу на автозапуск (запускаем программу start) Редактируем файл teller.lua. Изменяем следующее: VIRTUALCB (строка 35) - ставим адрес модема виртуального командного блока, SUPERVISOR (строка 36) - адрес модема супервайзера, KEY и KEY2 (можно ставить одинаковыми) - ключ доступа, который указали в PHP файле. Далее в коде находим и меняем ссылки на PHP скрипт (по умолчанию это строки 707,710,714,717,765,768,785,791,794). Меняем только часть ДО(!) знака вопроса. Сохраняем файл Вставляем в робота плату на красном камне 2 уровня. А теперь пробуем запустить нашего кассира. После запуска кассира нужно перезапустить компьютер с терминалом и попытаться (после запуска) авторизоваться в терминале. Осталось поставить на сундук (что над роботом) шину импорта, вставить в нее 2 модуля ускорения и подвести к ней МЕ-кабель. Вот собственно и все. Первая кабинка готова. Для создания дополнительных кабинок требуется повторить все 5 пунктов, что и для первой кабинки (создать новый КБ, новый терминал, нового кассира). А также сменить ID кабинки в bank.ini, teller.lua и terminal.lua Прайс лист с ценами доступен тут . Ссылка на pastebin прайслиста указывается в teller.lua строка 25 Не забудьте поставить эндер сундук, чтобы игроки смогли забрать купленное. Выражаю огромную благодарность разработчикам банка: Alex(AlexCC) и Totoro.
  14. LeshaInc

    Пишу движок

    Давно я тут ничего не писал. Надо реанимироваться. В общем, пишу я значит движок для LÖVE, ибо глаза режет код новичков в самом Lua и в LÖVE. Пишут всякий бред, все не удобно и не красиво. Чё за движок Значит, движок модульный, весь код пишем в модулях. Модули - просто хрени в которых хранится код. Уже сложилась такая структура и возможности модуля: клик. Если коротко - создается папка с модулем, создается там же файл init.lua. Собственно он и будет запускаться. Значит, структура всех этих свистелок и перделок выглядит следующим образом: Хочу обратить внимание на две папки: trash и res. В папке трэша хранится весь мусор (который надо удалить, но вдруг я откажусь от удаления того кода? че тогда? все пропало тогда! естественно на релизе не будет этой папки), в папке рес хранятся все ресурсы, к примеру картинки, музон, шрифты. Вот что еще стоит отметить, в папке classes храним все классы, которые могут понадобится в нескольких модулях. Например тот же класс для векторов, который нужен много где. Насчет производительности, значит, жрем мы очень мало. памяти всего ~30 мб (учитывая специфику love2d, который сам по себе жрет) ФПС пока выдает 35, посмотрим еще как будет на релизе(тьфу тьфу тьфу). Просьба Если есть возможность, пожалуйста, скиньте идейку для платформера, какого нибудь. В разумных пределах, естественно, не так чтобы "хачу платформир с графикой краисис три". В комменты это все к записи. Ииии, значит, потом я выберу норм идею и реализую на движке. Ну и не забуду вкрутить куда нибудь исходники движка, на гитхаб к примеру. Ну и все наверное, надо еще кучу всего пилировать.
  15. Добрый день, игроки и администрация. Эту тему я создал чтобы обсудить 2 вопроса: правила предъявляемые к турелям и идеи для улучшения турелей. Мне, как и многим игрокам интересны правила эксплуатации турелей, а именно: Можно ли убивать с помощью турелей на нейтральной земле, в приватах и админприватах Можно ли ставить турели на нейтральные земли? Рядом с приватами и админприватами? В каких случаях турели будут считаться ловушками, а в каких средством самообороны? Как предотвратить жалобы связанные с турелями? Имеет ли вообще смысл под них писать ПО, автонаведение или может их собираются запретить и это всё зря. Требования предъявляемые к ПО турелек. Нужно ли делать слипы в циклах? Если да, то они будут медленно работать. Если нет, то насколько это скажется на нагрузке на сервер? Нужно ли дописывать фильтры игроков/мобов для турелек? Писать ГУИ? Свои предложения по поводу ПО... Вторая тема, которую я хотел бы обсудить, это нововведения. Мы знаем что у этого мода открытый исходный код, а значит могут найтись игроки, которые этот код смогут улучшить. Предлагаю следующие нововведения: Улучшить то что имеем сейчас: Увеличить скорость поворота башни по вертикали и горизонтали Увеличить скорость стрельбы снаряда Сделать адекватное вращение по кругу (сейчас турель не проходит через южную точку, давая огромное преимущество цели) Добавить нововведения: Общие нововведения: В lua можно будет выбрать скорость снаряда В lua можно будет выбрать массу снаряда В lua выставляем урон от снаряда Всё это будет делаться для того, чтобы можно было вести огонь по кривой траектории. Потребляемая энергия при этом будет зависеть от этих трёх параметров. Расширенные нововведения: Предлагаю ввести виды вооружения турелей. Их можно выбирать программно из турели, либо делать несколько типов турели. В любом случае у нас будет выбор чем стрелять. Виды боеприпасов: Патроны (пулемёт): средняя скорость, низкое потребление энергии, небольшая масса снаряда отклоняющая снаряды вниз, (постоянная масса, скорость снаряда и урон), средний урон, разброс Снаряд (тяжёлая артиллерия): низкая скорость, среднее потребление энергии, большая масса снаряда сильно отклоняющая снаряды вниз, регулируемая в ПО масса и скорость снаряда [для ведение огня по кривой траектории], статичный урон - высокий урон по радиусу поражения, нет разброса Луч энергии (лазер): высокое потребление энергии, нет массы которая бы отклоняла снаряды, высокая скорость снаряда, высокий максимальный урон, нет разброса, в настройках lua можно указать скорость снаряда и урон, перезарядка зависит от потребления энергии, а та в свою очередь от настроек Типы боеприпасов: Зажигательные: наносит урон в радиусе, поджигает цель и спавнит огонь в радиусе (для артиллерии) Подрывные: наносит урон в радиусе и подрывает местность как TNT (для артиллерии) Ослепляющие: наносит эффект ослепления (для лазера) Охлаждающие: наносит эффект медленного хождения (для лазера) Перегревающие: наносит эффект иссушения (для лазера) Деморализующие: наносит эффект тошноты, которая мешает игроку уклонятся от снарядов других турелей (для лазера) Отравленные: наносит эффект отравления (для пулемётной турели) Любая турель делает выстрел частично опустошая свой внутренний буфер энергии. Турели могут сделать столько выстрелов залпом, сколько позволит внутренний буфер. Если энергии на выстрел нет, то он не производится. Так же было бы неплохо добавить улучшения объёма внутреннего буфера энергии и скорости его заполнения. Вот таким я вижу будущее этого мода. Если найдётся человек который в силах осуществить эти нововведения, будет очень хорошо.
  16. Здравствуйте, игроки. Сейчас мы будем разбирать устройство и преимущества моего лаунчера. Устройство: Вы запускаете данный лаунчер и видите список установленных игр Игры версией v1.0 и выше выделяются зелёным Игры ниже версии v1.0 (бета версии) выделяются жёлтым Игры который загружены с ошибкой выделяются красным Игра на которой мы стоим отображается синим Управление: Управление стрелками выделяет нужную строку Enter запускает программу, либо говорит что файл игры не найден. При нажатии на "V", включается и выключается отображение версий При нажатии "Q", игроком из белого списка, игра закрывается При нажатии "I", отображается информация о игре Как подключить игру: Скидываем файл игры в папку lib, или в корневую папку. Далее заходим в код лаунчера и в строке "-- загружаем игры" добавляем строку add_game("имя файла") Игра подключена и будет отображаться в списке, осталось лишь внедрить небольшие изменения в сам файл игры. Открываем код игры и пишем вот такую конструкцию: local output = { name = "<<Имя которое будет отображаться в списке>>", version = "<<Версия>>" autors = {"<<Ники авторов через запятую>>"} info = "<<Инфа о игре, правила игры и прочее описываем здесь>>"}output.func = function(input)<<Вся игра [либо любая другая прога], полностью, вставляется её код здесь>>return output Всё! Игра подключена и работает. Возможности файла лаунчера: Заходим в файл загрузчика и находи строку "-- настройки", там мы можем легко менять нужные нам параметры: Белый список определяющий кто может закрыть программу Чёрный список определяет кого лаунчер будет игнорировать Настройка цветов Настройка отступов от краёв экрана Настройка, отображаются ли изначально версии игр в списке Возможности подключенных игр: В функции игры мы получаем таблицу input, сейчас рассмотрим её возможности: input.name возвращает название игры input.version возвращает версию input.autors возвращает таблицу с списком авторов input.info возвращает информацию о игре input.Black_List возвращает список игроков из чёрного списка input.White_List возвращает список игроков из белого списка input.colors возвращает цвета использованные в лаунчере input.border возвращает отступы от краёв экрана из лаунчера Преимущества: Простой лаунчер Легко настроить Большая функциональность Защита от сочетания клавишь Alt + Ctrl + C [в том числе и во всех играх] (то есть вам не нужно больше беспокоится о безопасности игр) Недостатки: Не графонистый лаунчер Скрины: Установка лаунчера: pastebin get -f 7YB3qvxE Launcher.lua С вами был qwertyMAN, спасибо за внимание!
  17. §">topart LuaInteger library Библиотека для работы с разными системами счисления на чистом Lua. §">toc Содержание: §">toc Содержание §">about Описание §">doc Документация §">todec toDec §">fromdec fromDec §">custominteger CustomInteger §">customintegerto :to §">hexinteger HexInteger §">octinteger OctInteger §">bininteger BinInteger §">decinteger DecInteger §">get Скачать §">about Описание: Однажды @qwertyMAN написал библиотеку для работы с числами. Функции она предоставляла довольно нужные, но возможности у нее никакие - нельзя работать с нашими числами (умножать, вычитать, делить, сравнивать и т.д.), да и ООП там никакого и не было. Поэтому я решил написать свою библиотеку с блэкдж.... ООП и арифметикой. §">doc Документация: §">todec toDec(number: number, number: base) - number: result - переводит одну систему счисления в десятичную. Принимает число, которое будут переводить (обязательно в виде строки, например "FFFFFF") и основание системы счисления из которой переводят (например 16). Пример: print(int.toDec("F", 16)) -- 15 §">fromdec fromDec(number: number, number: base) - string: result - переводит десятичную систему счисления в другую с основанием base (например 16). Пример: print(int.fromDec(15, 16)) -- F §">custominteger class CustomInteger(string: number, number: base) - CustomInteger instance - класс системы счисления. Принимает число в виде строки, и его основание. С объектом мы можем делать любые действия (+, -, /, *, %, ==, >, <, >=, <=, ^) §">customintegerto :to(number: base) - string: result - переводит наш объект в другую систему счисления. Пример: a = CustomInteger("F", 16) print(a:to(10)) -- 15 §">hexinteger class HexInteger(string: number) - HexInteger instance - ссылка на CustomInteger с основанием 16 §">octinteger class OctInteger(string: number) - OctInteger instance - ссылка на CustomInteger с основанием 8 §">bininteger class BinInteger(string: number) - BinInteger instance - ссылка на CustomInteger с основанием 2 §">decinteger class DecInteger(string: number) - DecInteger instance - ссылка на CustomInteger с основанием 10 §">get Скачать: Ссылка на скачивание: http://pastebin.com/yg487hJ9 Библиотека написана на moonscript, поэтому если вы хотите получить moon исходник, напишите мне в личку.
  18. qwertyMAN

    Рабочее место qwertyMAN'a

    Здравствуйте, программисты и гости данного форума. Сегодня я бы хотел вам продемонстрировать, в каких условиях я пишу программы, чего я добился и что для себя подметил. Сначала я создал новый мир и поселился в уже отстроенном доме деревни. По ходу написания программ жители сильно раздражали и я их всех перерезал. Вот собственно моя лаборатория: Вот я написал и тестирую игру Cube v1.0: Там же я и тестировал свою библиотеку "Converter". Но через время я решил написать серверную версию игры Cube и сделал более удобную тестовую комнату: Вид сзади: По идее комната имеет удобно расположенные 2 компа и 1 сервер. Чтобы тестировать игру за двух игроков. Но пока ещё до этого как то не дошло. Вместо этого мы имеем 1 сервер, для написания "сердца" программы (которая на данный момент принимает и принтит запросы, а затем отправляет ответ обратно): Один комп, который программируем на отправку-принятие запросов и отображение происходящего в игре: (На первом скрине мы нашли 4 работающих сервера, их имена, и показали их порты. На втором попытались подсоединиться к несуществующему серверу и получили ошибку) А также есть один комп, который в цикле показывает какую клавишу мы набираем и ник игрока который нажал клавишу: (Мне очень удобно иметь такой комп на своём рабочем месте. Так как при написании я ориентируюсь на компы 1 и 2 уровня, я не делаю кнопочек. Вместо этого я использую только текстовый интерфейс, только консоль. А чтобы делать текстовый интерфейс, нужно знать номер клавиши. Этот комп как раз позволяет за секунды найти номер нажатой клавиши) Что же касается разработки "Cube online", я над ней работаю, по крайне мере основу которая находит сервера уже сделал. Возможно эти наработки буду использовать в другой серверной игре, так как меня пугает сложность переписывания кода игры Cube. Она заточена под одиночную игру. А тут надо пол кода сносить и писать заново, чтобы поддерживались несколько игроков. Впрочем, удручает и следующий фактор: не кто не станет готовую серверную версию игры ставить на сервер IT. По этому и не спешу разбираться с кодом и переписывать. Скорее уж что нибудь по проще сделаю на основе этих наработок. С вами был qwertyMAN, увидимся позже. Ссылки: Игра Cube v1.0 Библиотека "Converter"
  19. Универсальный конвертор систем счисления и цвета Добрый день, игроки. Если вы во время написания своей программы задавались вопросом: "А как же мне перевести один формат в другой", то эта тема для вас. Я бы хотел вам представить свою библиотеку, которая позволяет конвертировать совершенно любую систему счисления в десятичную и наоборот. А так же конвертировать RGB hex формат в обычный RGB и наоборот. Данная библиотека имеет следующие функции: Функции конвертации в десятичную систему счисления: conv.bin(input:number) Конвертирует бинарный код в десятичный conv.oct(input:number) Конвертирует восьмеричную систему счисления в десятичную conv.hex(input:string) Конвертирует шестнадцатиричную систему счисления в десятичную Необходимо вводить текстовый формат "FFFFFF" (не вводить формат 0x000000) conv.Engine(input:number/string, n:number) Движок для предыдущих функций - конвертирует число input:number/string из n системы счисления в десятичную. Необходима для нестандартных систем счисления. Настроена так, что можно вводить и текстовый hex формат "FFFFFF" Функции конвертации из десятичной системы счисления: conv.abin(input:number) Конвертирует десятичную систему счисления в двоичную conv.aoct(input:number) Конвертирует десятичную систему счисления в восьмеричную conv.ahex(input:number) Конвертирует десятичную систему счисления в шестнадцатиричную Возвращает текст в самодельном текстовом hex формата "FFFFFF" (не путать с форматом 0x000000) conv.aEngine(input:number, n:number) Движок для предыдущих функций - конвертирует число input:number из десятичной системы счисления в n-ную. Необходима для нестандартных систем счисления. Функции конвертации RGB кода: conv.getThreeColor(input:number/string) Возвращает три цвета RGB (обозначающие красный, зелёный, синий) Все три переменные имеют значения от 0 до 255 Принимает обычные числа, числа в формате 0x000000 и числа в текстовом hex формате "FFFFFF" conv.getColor(r:number/string, g:number/string, b:number/string) Возвращает цифровой формат RGB, который например можно использовать в component.gpu.setBackground(color) в своих программах Принимает обычные цифры, вот такой формат 0x00 и текстовый hex формат от "00" до "FF" на одну переменную conv.invertColor(input:number) Инвертирует цвет Может быть полезно, чтобы при отображении, текст всегда был виден на фоне. conv.sumColor(color_1:number, color_2:number) Принимает два цвета в формате 0x000000 или в виде обычных чисел Выводит средний цвет, который бы получился при смешивании Примечание: В lua стандартный hex формат 0x000000 автоматически преобразуется в десятичный. По этому поводу я создал свой текстовый hex формат "FFFFFF", вдруг кому пригодится, для отображения print() например. (можно вводить и большие и малые буквы в новом текстовом hex формате) Ссылка на код: http://pastebin.com/tzF3dr0M Ссылка на скачивание (если кому надо): https://yadi.sk/d/lAo2j9SwmjNxv P.S. Кто-то сегодня говорил про плюсы ООП и прочее. Ну что ж, если будет клон моей библиотеки на ООП, я только за.
  20. А ну-ка, знатоки, попробуйте ответить, - Что выведет нам на экран, такая вот, простейшая программа? t = {1,2,3} print(table.unpack(t)) print(0, table.unpack(t)) print(table.unpack(t), 4)
  21. Небольшое динамичное украшательство к праздникам. pastebin run M6z8f6q1
  22. У меня есть прототип объекта имеющего свои методы У другого объекта должны присутствовать все те же методы что и у первого объекта. Для создания объекта тараканы в голове сказали использовать метод метатаблицы __call Поначалу думал что сделаю что то вроде: --Здесь всё работает Object1 = setmetatable({},{ __call = function(self) return setmetatable({t=1},self) end }) Object1.__index = Object1 function Object1:method() print("method "..self.t) end obj = Object1() obj:method() --Вот тут уже нет Object2 = setmetatable(setmetatable({},Object1),{ __call = function(self) return setmetatable({t=2},self) end }) Object2.__index = Object2 function Object2:method2() self:method() end obj = Object2() obj:method2() и это будет работать. Но реальность меня огорчила...
  23. С выпиливанием вайтлиста стало как-то скучно. В общем имеем код "сжималки" с рабочим названием "Popoff2" local data = require('data') local function compress(str) local list = '' for i = 1, #str do if string.find(list, string.sub(str, i, i)) == nil then list = list .. string.sub(str, i, i) end end local lhex = string.format('%x', #str) for j = 1, 8-#lhex do lhex = '0' .. lhex end return data.md5(str) .. data.fromHex(lhex) .. list end Суть алгоритма: К примеру, закодируем строку 'helloworld' (строка короткая, сжатия нет, зато перебор быстрый) Получаем хеш и размер строки в двоичном виде (для примера размер указываем в четырех байтах), в конец добавляем используемые символы [FC5E038D38A57032085441E7FE7010B0] [0000000A] [lowerdh] = 24 байта из 10, но это всего-лишь пример (вообще, можно указать количество повторений для каждого символа, тогда на пермутациях можно выиграть очень много времени, а исходные данные предварительно жать через deflate) Чтобы вернуть исходные данные, надо перебором генерировать из указанных символов последовательность, указанной длинны. Очень неэффективно, но не в этом суть. Нужен алгоритм, при помощи которого можно подбирать исходные данные на нескольких устройствах несвязанных во времени и пространстве, т. е. чтобы диапазоны перебора предварительно разбивались на блоки, которые алгоритм будет обрабатывать отдельно. Какие есть предложения?
  24. Спустя месяц после открытия техно-лайта... Игрок приходит на спавн или в дц с очками, прилинковывает к терминалу, надевает... И теперь он всегда сможет понять где он, какое расстояние до ближайших важных и не очень точек, позволить наглядно показать где он своим друзьям и увидеть: где они. Как мне кажется, эта неплохая идея, что эта система будет популярна и полезна. Можно так же использовать пользовательский вариант, в котором можно буде настроить самоудаление вэйпоинтов и прочие приятные мелочи. Вариант вэйпоинта:
  25. В связи с переездом приходится закидывать все незаконченные программки в один файл и выкидывать на флешку. Давно хотел сделать модный файловый менеджер со свайпами и гибкой настройкой, но проигрывал в битве с ленью и временем. Концепция проста как тапок, при должном упорстве можно склепать за один вечер, но мне, видать не судьба. В общем суть такова: программа выводит список файлов в рабочей директории, раскидывая их по сетке, как сейчас модно в планшетах и мобильниках. Так как список файлов хранится в таблице, поделенной на экраны, свайп (либо клик по указателю) по горизонтали переключает экран, обновляя список файлов. Свайп по вертикали с верхней части экрана, разворачивает строку терминала в рабочей директории, свайп вверх сворачивает ее. Иконки файлов можно хранить в самом файле, либо в специальной папке (например специальная иконка для файлов .lua), отрисовка иконки происходит из простой таблицы цветов, как я предлагал здесь, этот способ удобен тем, что иконку можно набросать в текстовом редакторе. Так же, было бы удобно использовать экранную клавиатуру, это позволить настроить доступ, что очень полезно для установки открытых для использования компьютеров в общественных местах. Я пробовал сделать простую экранную клаву, но она выглядит слишком маленькой на мониторе Tier3, не знаю, как сделать опрятный ресайз.
×
×
  • Создать...