Перейти к публикации
Форум - ComputerCraft

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

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

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

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

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


Блоги

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

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

Категории и разделы

  • Программирование
    • База знаний
    • Библиотеки
    • Робототехника
    • Сетевые технологии
    • Игры
    • Операционные системы
    • Графика
    • Инфраструктура
    • Программы новичков
    • За пределами Minecraft
    • Всякое-Разное
    • Чулан
    • Стол заказов
    • Конкурсы
  • Игровой раздел
    • Игровые сервера
    • Предложения игроков по улучшению игрового процесса
    • Моды и плагины
    • Гайды, обзоры по модам
    • Жалобы на игроков
    • Заявки на разбан
    • Ивенты
  • Общение
    • Ответы на частые вопросы
    • Вопрос-ответ
    • Вопросник по Lua и модам Opencomputers и ComputerCraft
    • Беседка для программистов
    • Беседка-флудилка
    • Шкатулка
  • Технический раздел
    • Новости проекта
    • Предложения по улучшению работы форума и игровых серверов
    • Проблемы в работе игрового сервера, клиента, форума и их решение
    • Дубль аккаунты
    • Обратная связь
    • Архив
  • Новости Независимое государство
  • Беседка Независимое государство

Категории

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

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


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

Искать результаты, содержащие...


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

  • Начать

    Конец


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

  • Начать

    Конец


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

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

  • Начать

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


Gtalk


Facebook


Twitter


Город


Интересы

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

  1. Пилим игру всем форумом на LÖVE. Жанр: top-down шутер в стиле Crimson Land. Сеттинг математический: считаем определители матриц 10х10, бьем врагов знаком интеграла, дифференцируем экспоненту. Предполагается наличие мультиплеера. Графон двухмерный, векторный — рисовать будет @Totoro. @Totoro предложил вести разработку по принципу Git Flow: создаем feature ветку, ревьюим, мержим в dev, затем dev мержим в master и выпускаем релиз. Репа: https://gitlab.com/cc-ru/determinant. Присоединяемся. Обсуждаем в IRC.
  2. Здрассьте, господа, у нас тут превесёлая вещь случилась: спустя полгода разработки (причём круглым числом; 28 мая стартанули) у нас отрелизился репозиторий! Обозвали мы его Hel. В репозитории мы собрали и воплотили в жизнь все хорошие идеи и концепции, которые обсуждались здесь, чтобы получился максимально кавайный способ дистрибуции пакетов. Пользоваться репозиторием не сложнее, чем ставить программы с Pastebin. Для этого нужно знать только название пакета. Одна команда: $ hpm install <нужный пакет> И вуаля! Он уже установлен в нужную папку, все нужные библиотеки загружены и распиханы по системе. Можно запускать и работать. Но по сравнению с OPPM или Pastebin, hel несравненно удобнее. Он легковесный. Простой. Не требует регистрации. И СМС. Чем мы гордимся, безусловно. Установка программ производится с помощью одного легкого клиента (как у Pastebin), но в то же самое время, вам не нужно волноваться о библиотеках или версиях программы. Вы всегда можете найти и установить самую свежую версию (и даже не самую свежую), зная только название пакета (как в OPPM). Кстати, раз уж мы заговорили про OPPM. У нас клиент получился настолько охренительным, что вы можете теперь выкинуть oppm в помойку, наконец-то! В стандартный комплект поставки включён oppm-модуль с кэшированием (иными словами, вам не нужно будет ждать пару минут, пока пробрутфорсятся репозитории, сразу всё качается). Всё быстро, чётко, ясно. Юзается оно так: $ hpm oppm:install <имя пакета> Об остальных фичах читайте уже в мануале hpm, там всё есть.
  3. Сколько вы можете придумать способов напечатать фразу "Hello World!" десять раз, при помощи Луа? Мой вклад в копилку: 1) Рекурсией function hello(times) if times > 0 then print "Hello World!"; hello(times-1) end end hello(10) 2) Заменой local source = " " local hello = source:gsub(" ", "Hello World!\n") print(hello)
  4. Каждый, кто занимался разработкой человеко-машинного интерфейса под OpenOS, наверное знает какое это муторное занятие. Даже если Вы используете библиотеку GUI. То и дело приходится выходить из редактора кода, запускать свою программу, смотреть на результат своих стараний и снова заходить в редактор, чтобы исправить всего одну цифру. Предлагаемая система позволяет создавать интерфейсы программ не в текстовом редакторе, а в графическом при помощи мыши, но самое главное - результат своей работы Вы можете видеть сразу, не выходя из редактора. Построена система на основе уже известной Вам gui-библиотеки forms. При входе в FormsMaker мы видим пустую форму Щелкните правой кнопкой мыши в любом месте формы после чего откроется окно управления компонентом Выбрав пункт "Свойства Form1" можно (будет) редактировать свойства формы, такие как цвет рамка и т.д. Пункты "Add ..." добавляют на форму соответствующий компонент. Пункт "Проект" позволит управлять проектом: сохранять, компилировать и т.д. Для возврата к редактируемой форме выберите "Отмена" К примеру мы выбрали пункт "Add frame". Это добавит на нашу форму рамку. Таким же образом на рамку можно добавить кнопку. Щелкаем ПКМ на рамку и выбираем "Add button" Изменить размер рамки можно при помощи ЛКМ, потянув за правый-нижний ее угол А перемещать рамку по форме можно перетаскивая за любое свободное её место pastebin get wA5KMKav fmaker.lua Приму с благодарностью любую посильную помощь в развитии проекта, как в программировании, тестировании так и просто советом.
  5. Список игр: 1)Шашки 2)Камень-Ножницы-Бумага 3)Тетрис 4)Крестики-Нолики(любое поле, любая линия) 5)Сапёр 6)Пятнашки 7)mazeMaster(хз как назвать, тут короче лабиринты нужно проходить) 8)SameGame Следующий текст является пока что бредом, надеюсь скоро исправлю Так же я делал покер, там осталось исправить некоторые ошибки и будет готов, но руки никак не дотягиваются. Инструкция к играм: 1)в играх на 2х в начале появляется 2 серые рамки на которые нужно кликнуть чтобы определить кто игрок 1, а кто игрок 2. 2)в шашках если тебе нужно побить не выделяются остальные и поэтому может казаться что игра зависла(возможно потом исправлю) 3)в играх кроме КНБ при нажатии на клавиатуру игра автоматом выходит, так что будьте осторожны 4)в некоторых играх на первых строчках находится раздел Настроек, где можно устанавливать правила Планы: Update1(03.11.2016) Update2(04.11.2016) Update3(05.11.2016) Update4(06.11.2016) Update5(17.07.2018)
  6. Так как GET запросы, например, к http://www.timeapi.org/utc/now , требуют на выполнение определенного времени, до нескольких секунд, наличия интернет карты и кучи телодвижений, есть еще один вариант получения астрономического времени. Точное оно настолько, насколько точно его настроил админ на хосте. Стандартные функции date +%s в консоли и в интерпретаторе os.date() выдают пока черти что, 1970 год и время с потолка. Всякие счетчики работы Луа машины и ПК нам тоже не подходят, типа os.clock() и прочих. Но есть один способ. В ОС можно получить дату модификации файла методом lastModified('filename') из библиотеки filesystem в формате UNIX Ним и воспользуемся. Модифицируем вспомагательный файл и получим время модификации тут же. Вот функция получения времени: -- ======машинное время (время хоста)======= -- раскомментируйте библиотеку, если она не подключена в вашем коде --local fs = require("filesystem") --(установить для своего часового пояса, -12 : +13, например: -2 или 6) local TIME_ZONE = 2 --(не изменять!) local t_correction = TIME_ZONE * 3600 local function getTimeHost() local file = io.open('/tmp/unix.tmp', 'w') file:write('') file:close() local lastmod = tonumber(string.sub(fs.lastModified('UNIX.tmp'), 1, -4)) + t_correction --print(lastmod) -- Вариант 1 --local data = os.date('%x', lastmod) --local time = os.date('%X', lastmod) --return data, time -- Вариант 2, eсли нужно все по отдельности --local year = os.date('%Y', lastmod) --local month = os.date('%m', lastmod) --local day = os.date('%d', lastmod) --local weekday = os.date('%A', lastmod) --local hour = os.date('%H', lastmod) --local minute = os.date('%M', lastmod) --local sec = os.date('%S', lastmod) --return year, month, day, weekday, hour, minute, sec -- Вариант 3, но есть нюанс, если число минут(часов) 5, то и будет выдано 5, а не 05! --local dt = os.date('*t', lastmod) --return dt.year, dt.month, dt.day, dt.hour, dt.min, dt.sec -- Вариант 4, все в куче, как мы привыкли, в правильном формате local dt = os.date('%Y.%m.%d %H:%M:%S', lastmod) return dt end print(getTimeHost()) Вот выдержка из Советской Энциклопедии о UNIX времени. Часовой пояс установите, как Вам угодно (например, сейчас 2 на ИТ - это время Киев, 3 - МСК). Формат, который возвращает функция, тоже выберите, какой Вам удобно. Лишние закомментированные строки (--) удалите. Теперь легко можно в лог записать любое событие и приписать ему время. Так же можно легко узнать дату и день недели через 234 часов, 36 мин, 40 сек, например, предварительно переведя временной интервал в секунды и потом вернуть астрономическое время. Например вы хотите узнать, через сколько на ИТ вы скрафтите 100К ведер жидкой материи. Это например, 2256 год, 1 апреля, 12:50:12, если не останавливать "генмат" не на секунду Вот ретурн функции: Вариант 1: string, string 04/22/15 09:05:56 Вариант 2: number, number, number, string, number, number, number 2015 04 22 Wednesday 09 05 56 Вариант 3: number, number, number, number, number, number 2015 04 22 9 5 56 Вариант 4: string 2015.04.22 09:05:56 и т.п. По сути вся функция, это 7 строчек. Не нужно никаких гетзапросов выполнять, библ всяких и интернет карт. Подробнее о форматах os.date() здесь.
  7. Всем доброго времени суток. У меня в последнее время возникли мысли о новых технология для мода ОС, которые бы вывели мод и программирование под него на новый уровень. Теперь о том, что я хочу предложить: Мы знаем, что новички не умеют программировать, а некоторые даже не горят желанием заняться этим вообще. Предпочитая устанавливать MineOS и воображать себя крутыми хакерами. Вместо того, чтобы бороться с этой безграмотностью, предлагаю поддержать её, введя новую программу-конструктор. Который позволит нубам самим писать программы, используя этот конструктор. Пусть это и не решит проблему лени людей, зато (по плану) повысит популярность самого мода OpenComputers и возможно вдохновит пару игроков на освоение более подробно мода самостоятельно. Так как сам я написать такую прогу не смогу, по этому эта тема и создана. Дабы люди подумали над этим вопросом и при желании написали такую прогу. (Другие проекты, которые я в силах реализовать, я пока не спешу рассказывать всем)
  8. Всем добрый день. Уже давно хотел предложить создание следующих крутых прог. Я хочу предложить писать программы, представляющие из себя некоторую функцию, которая прописывается в event.listen() и завершается. Выходит что комп по сути свободен, а прога осталась в фоне. А в идеале она ещё закрепляется за другим монитором и клавиатурой освобождая основной монитор и клавиатуру. Таким образом мы можем на первом (основном) мониторе дальше писать проги, или ещё что то запускать и параллельно с этим на втором мониторе у нас будет работать прога на эвентах. Вот пример прог на эвентах, которые теоретически при небольших изменениях в коде способны запускаться параллельно с работой основного компа: Программа для управления редстоун сигналом Redcontrol Программа для прослушки чатбокса Мультиплеерная/одиночная игра Змейка Игра Квантовый куб И те проги, что я ещё не написал, но уже хочу прорекламировать написать на эвентах В чём суть? Эти программы прописываются в эвентах и тупо занимают время компа бесконечным циклом с задержкой Часть кода из проги для прослушки чата: function start() term.clear() event.listen("chat_command",cmd) event.listen("chat_message",msg) while exit do os.sleep(3) -- просто прожигаем время в пустую, вместо того чтобы работать параллельно с компом. end event.ignore("chat_command",cmd) event.ignore("chat_message",msg) end start() Как мы видим мы просто загрузили эвенты и ждём время когда игрок захочет их отрубить (причём отрубает он их с помощью тех же эвентов). То есть теоретически если не задавать цикл - можно параллельно запускать кучи прог, надо лишь распределить под каждую из них свой монитор и параллельный запуск обеспечен. Что об этом думаете пишите в комментах.
  9. С днём космонавтики, игроки! История проекта "Open Space": Как то решил я сделать клон одной игрушке на андроид которая мне понравилась (про самолёты). В итоге во время написания физики получилось совершенно иное, в чём я увидел больший интерес и решил сменить вектор развития. В итоге получилась в какой то степени обучающая програмка космической физики и теории относительности. Что есть в игре: Инерция движения тел Инерция вращения тел Относительность :-) Реалистичная реактивная тяга, с учётом массы ракеты, массы топлива и так далее. Отображение основной относительной траектории полёта (отключаемая функция) Отображение восьми дополнительных относительных траекторий + космический корабль как точка отсчёта в этой системе (отключаемая функция) Расход топлива Заправка топлива Замедление, ускорение и стабилизация времени + режим паузы Неограниченный мир Возможность отключения всех траекторий и осознания что жизнь - тлен Индикаторы скоростей (в разных системах отсчёта) Управление: W - Ускорение A - Поворот налево D - Поворот направо F - Заполнить полный бак Z - замедлить игру X - ускорить игру C - обычная скорость игры R - пауза 1 - отрисовка основной траектории движения 2-9 - отрисовка дополнительных траекторий движения (относительно космической станции) Колесо мыши - зум Ссылка на игру: https://yadi.sk/d/D3qXeVhsqwHcW Скрины: О дальнейшей разработке: Точно не ясно во что перерастёт проект. Заморозится ли он. Перерастёт в игру или песочницу. Пока что это не ясно. Есть шанс что из этого вообще выйдет космическая гонка в которой придётся проходить дрифтинг-трассу в условиях космоса Что вы хотите пишите в комментариях. Возможно я добавлю то что будет предложено. Планируется добавить: Гравитацию и планеты Меню выбора объекта и расположение в игре по желанию игрока Система отображения траекторий с учётом вращения точки отсчёта (космической станции) Перед игрой прочитайте хотя бы управления к игре. Иначе многое потеряете и будите спрашивать "как заправить ракету". Я тут заметил что часть игроков не читая ничего скачивают продукт и потом ничего не понимают что к чему. Чем можно заняться в игре: Просто тестировать инерцию вращения и движения ракеты Нарезать круги - "дрифтить" Наглядно наблюдать относительные системы отсчёта (клавиши от 1 до 9 создают и отключают) От автора: Наличие сопротивления среды могло бы убрать такой эффект как относительные системы отсчёта. В какой то степени и по этой причине этого не было осуществлено замедление. Да и в принципе в космосе это не нужно. Геймплей: P.S. Новая версия игры в видеоролике не доступна к скачиванию, как и более поздние версии игры. Пока что не вижу смысла их выкладывать, ведь игра в разработке, а фанатов у игры нуль.
  10. Добрый день, земляне! Я сколько не пробовал вникнуть в теорию относительности, вечно натыкался на непонимание "сверхъестественных" процессов которые она пропагандирует. Предлагаю обсудить эту тему в данной теме. Она создана специально в разделе "беседка" и сообщения по теме теории относительности по идее не кто не должен здесь удалять. Предлагаю вот такой мысленный эксперимент: Предположим что в космосе существует гипотетический объект, который равноускоренно движется в пространстве и через равные промежутки времени отбрасывает некие мелкие объекты которые движутся по инерции. Таким образом этот тестовый механизм постоянно ускоряется и ему не что не мешает ускорятся. В то же время относительно друг друга ближние маленькие объекты (назовём их космической разметкой) держат какую то постоянную разницу в скоростях. В чём суть этого эксперимента: По так называемой "космической разметке" мы можем предположить, что складывая их скорости мы сможем взять 2 объекта, которые бы относительно друг друга летели со скоростью света и даже больше. Но, если ОТО права то мы взять такие объекты не сможем. И относительно наблюдателя дальние куски разметки будут с виду иметь меньшую разность в скорости относительно друг друга чем, если бы мы были рядом с ними. Означает ли это что там время идёт медленнее? Потому что это будет противоречием. И дальние сзади и дальние спереди куски будут иметь меньшую разницу в скоростях как будто там время идёт медленнее, хотя спереди они должны лететь быстрее. И второй эксперимент: Есть планета, с которой вылетела ракета с околосветовой скоростью. Вопрос: где время будет лететь быстрее, на планете или на ракете? Ведь относительно друг друга они движутся с одинаковой скоростью.
  11. Так как тут у нас много Lua любов, создаем темку для полезных программок на/для Lua не имеющих отношения к игре или моду OC. Первая программка: Luakit — легковесный браузер для UNIX-систем, использующий движок WebKit. Написан с использованием библиотеки GTK+. Для конфигурирования браузера используются Lua-скрипты, что делает его легко расширяемым и настраиваемым под себя. Будучи настроенным по умолчанию, luakit очень напоминает другие микро-браузеры — jumanji, uzbl, surf(en). Имеет Vim-подобный интерфейс. © Wiki
  12. #CC.RU https://www.codewars.com Нашёл ещё один прикольный сайт. Тут можно решать задачки как на HackerRank, но сделано прикольнее. При регистрации можно указать название "клана" и тогда, все кто зарегался в том же клане станут союзниками. =) Там тоже туча языков (включая Луа) и прикольная система рангов (а-ля кунг-фу). Короче, предлагаю всем желающим затусить там командой и понагибать местных. Указывайте при регистрации наш клан: #CC.RU (решёточка - часть названия). P.S. Вот как выглядит наш клан на текущий момент: P.P.S. А по Луа там походу только одна задачка. Придётся добавить своих.
  13. Доброго времени суток, игроки. Я тут решил написать небольшой сборник советов для начинающих программистов. Возможно кому нибудь понадобится. 1 проблема: не использование булева В чём суть проблемы: игроки используют 1 и 0 как включено и выключено. Вместо true и false, как это надо делать. В чём причина проблемы: булева занимают минимальное из всех типов данных место. Булева поддерживают такую операцию как x = not x, которая так быстро прижилась в моём коде для создания переключателей. В добавок и сам код выглядит красивее, не нужно ставить комменты в коде что означает 1 и 0. 2 проблема: комментировать всё подряд (если это не обучающий код) Способ решения: со временем приходит осознание того что ты делаешь и как. Если код написан так как надо, то тут и комменты не нужны. Любой прогер взглянет и поймёт что в переменных x и y хранятся координаты. Комменты следует ставить там где они действительно нужны 3 проблема: использование чего то вроде этого if x==true then ... end. В чём ошибка? Да в том что сравнение тут совершенно не нужно. Достаточно написать if x then ... end чтобы условие выполнялось, когда x чему либо равен, кроме false и nil. 4 проблема: длинный комменты, там где они могут замениться более простым пояснением что к чему. Способ решения: нарисовать псевдографикой поясняющий рисунок между символами --[[ и ]]. Внутри них всё воспринимается как коммент. Вот пример: Итак что мы видим в примере? Это игра Cube. Здесь мы видим такую строку как door.pos={false,false,false,false} (в проге она означает положение дверей, закрыты они или открыты). Но без комментов не понять под каким номером какая комната. Можно было бы написать 4 коммента и расписать что 1 - верхняя комната и так далее что не так удобно. Но при помощи псевдографики можно очень понятный рисунок нарисовать, который сразу все вопросы закроет. 5 проблема: использование глобальных переменных. Это очень важный пункт. В большинстве случаев в проге используются локальные переменные (в том числе и локальные функции). Это позволит экономить память, так как когда задаются локальные переменные в функции, по завершении этой функции они все удаляться из памяти. Освободив как саму переменную, которую мы сможем использовать с таким же именем, так и место в памяти. В общем, экономия и порядок будет в коде тех кто использует локальные переменные. Способы выявления ошибка: Как правило строку в которой произошла ошибка и путь к ней пишется на экране, где бы вы lua не использовали. Но если случилась непонятная ситуация - ставьте print(здесь нужная переменная). Так мы сможем проверить, соответствует ли переменная тому что мы хотим получить. Если нет - решаем причину несоответствия. А так же мы можем написать следующую конструкцию print(type(x)), где мы проверим тип переменной x ( в вашем случае другой переменной). Для чего нужно? А вот например случается беда когда числовая переменная с какой то кстати становится строкой. (как произошло в моей проге Open Clicker). В итоге цифра как бы есть, но не производятся всяческие вычисления. Так как тип переменной - string. В данной ситуации на помощь приходят функции tostring() и tonumber() которые пытаются перевести переменную в стоку и число. Например tonumber("1".."02"). В данном случае две string строки сложатся в одну строку и переведутся в тип число. Как предотвратить ошибки: Учиться программировать. Использовать хороший текстовый редактор с подсветкой синтаксиса (очень помогает при выявлении лишнего или недостающего end). У меня вот стоит Notepad++, поддерживает вкладки что тоже удобно. Да и нумерация строк полезна. Не в коем случае не программируйте в стандартном блокноте или ещё хуже в OpenOS. Это возможно, но крайне не удобно.
  14. В общем я тут во время тестирования написал программку, которая позволяет программировать робота через таблички. Как вам такая идея? И самое главное, какие у вас есть предложения, по тому как расширить вместительность табличек (более 15 символов не вмещается, а это уже мешает роботу передвигаться) А таблички из библиокрафта не хотят работать с роботом. Скрины работы:
  15. Добрый день, любители редстоун схем! Сегодня, вашему вниманию представляется полноценный редстоун контроллер redcontrol (оригинальное название ) Но всё не так скучно как может показаться В программе есть: Возможность подавать обычный редстоун сигнал мощностью 15 Подавать цветной сигнал (16 цветов) мощностью 255 Принимать редстоун и цветной редстоун сигналы и видить их характеристики (цвет и значение) Управлять всеми шестью сторонами редстоун блоков (компов) Управлять всеми блоками редстоуна которые подключены в сеть В программе нет: Возможности задавать свою мощность генерации сигнала, кроме максимального (мне показалось это лишним) Управление: Красная кнопка справа сверху - выход Жёлтые указатели там же в углу - переход на между блоками Цветные кнопки - включение/отключение генерации выбранного сигнала Индикаторы: Буква G - генерация сигнала Цифры - мощность полученного сигнала Дробь в углу - текущий блок / число блоков в системе Скрины: Ссылка на код: http://pastebin.com/A8HHPHPB Рекомендации: Можете использовать как блоки, так и редстоун карты 2 ур. Но не в коем случае не ставьте карту 1 ур. Не ломайте редстоун блок на котором стоит прога - словите ошибку. Словили ошибку - лучше перезагрузите комп (для очистки event.listen) А с вами был qwertyMAN, удачной игры! Обновлено до v1.1 Добавлено: -Работа полностью на event (по идее теперь лагать не должно не у кого) -Исправлен вылет при отключении компонентов. Теперь можно со включенной прогой подключать/отключать компоненты
  16. Итак, сегодня ночью я извлёк свою лопату, и воскресил давно забытую тему - битвы роботов! Если кто-то помнит прошлую тему - она загнулась из-за неопределёности, сложности и отсутствия некоторой усидчивости её участников. В этот раз всё будет по другому. Я упростил правила и выкинул всё лишнее. И нарисовал няшный логотип. :3 Суть В битве участвуют команды роботов, по N роботов на участника. Количество не важно - сколько наберём участников, столько команд и будет. Участники эвента (игроки) пишут софт для своих роботов. Разрешается использовать как одинаковую программу для всех роботов команды, так и отдельную для каждого. Битва будет происходить на заранее подготовленной арене. Карта будет известна заранее. Координацией игры занимается центральный Сервер. В день Ч роботы строятся на арене, на стартовых позициях. По сигналу Сервера игра начинается и роботам разрешается двигаться. Правила победы и доступные действия зависят от Этапа. Этап 1: Песочница Ориентировочное время проведения самой битвы - зимние праздники. У нас есть месяц на подготовку арены и написания софта. Участники первого раунда: @Totoro, @NightFury, @Quant, @Seryoga, @Fingercomp, @FluttyProger, @astral17, @ALeXeR, @electronic_steve, @LuaGamer, @Nikitat. Оставляйте заявки мне в личку или внизу, в этой теме. Правила Правила первого раунда просты. Все участники играют против всех. Весь раунд будет разбит на матчи, по четыре участника. Каждый участник будет вести команду из 4 роботов. На поле, в случайных местах в полу будут появляться сундуки с монетками. Цель роботов - собирать эти монетки быстрее роботов противника и сбрасывать в воронки на "спавне" своей команды. Кто к концу раунда набирает большее количество монеток - тот победил. Робот может получить дисквалификацию за: Фальстарт. Если начнёт двигаться до сигнала Сервера. Ломание блоков. Если он сломает блок арены/сундук/чужого робота или ещё что-то. В последующих раундах ломание может быть разрешено, но в Песочнице - другая цель. Забагованность и лаги. Если программа случайно или намеренно создаёт жуткие тормоза или просто направлена на вредительские цели =). Тут будет решать админ. Ориентировочное время раунда, от старта до подсчета результатов - 5 минут. Каждые 10 секунд, Сервер будет рассылать сообщение для синхронизации времени. После финального сообщения, раунд считается завершённым и тут же происходит подсчёт монеток в сундуках команд. Монеты, оставшиеся у роботов на момент финиша, учтены не будут. Технические детали По части модов и версий ориентируемся на MC 1.7.10 + OC 1.6 + CX 1.6.1 + OpenPeripheral AIO-7. Генерация монеток на поле будет происходить с помощью командного блока. При генерации, блок пола будет заменён на сундук с монеткой. По истечении времени сундук исчезнет и заменится обратно блоком пола. Чтобы роботы узнали о положении монетки, после генерации центральный сервер будет слать сообщение с координатами монетки по беспроводной сети. Все роботы будут иметь одинаковую конфигурацию и чистую OpenOS 1.6 на борту. Однако разрешается писать разные программы для разных роботов. Арена доступна для скачивания в виде карты: https://dl.dropboxusercontent.com/s/epcz034fsumhsr7/ut-world.zip Подготовка Нам необходимо подготовить к началу эвента несколько мелочей. [ГОТОВО] [2016-12-06] Подготовить арену. Надо построить поле подходящее по размеру для двух-четырёх команд по четыре робота. (Само пространство арены, где будут двигаться роботы сильно загромождать не надо. У нас сейчас упор не на поиск пути.) Оградить его сверху стеклом, чтобы не дать роботам случайно удрать. Расположить информационный монитор, компьютер центрального Сервера. Обустроить места для зрителей. [ГОТОВО] [2016-12-16] Написать софт для Сервера. Сервер должен уметь объявлять начало матча по сети, генерить монеты, рассылать сообщения с их координатами и подсчитывать по завершению матча количество монет в сундуках команд. [НЕ РЕАЛИЗОВАНО] [2016-12-28] Написать проги для голопроекторов и инфо-панелей. Там не всё так сложно: просто рисовать красивенько инфу о матче. [ГОТОВО] Собрать заявки участников. Я полюбому участвую. Обновления [2016-12-01] Ссылка. Арена. Инфа о всех софтверных компонентах. Планы. Архитектура. Гитхаб. Люди и коммуникации. [2016-12-02] Ссылка.В продолжение к предыдущему апдейту. [2016-12-08] Ссылка. Ссылка на карту арены. Изменён состав модов. @astral17 получил доступ к GitHub-репозиториям. Ориентировочная дата завершения написания сервера. Канбан. Планшетов не будет. Гитхаб. [2016-12-14] Ссылка. Написан сервер. Установка сервера. Софт и планы. [2017-01-02] Ссылка. Конфигурация роботов. Процесс настройки перед стартом. Уточнение правил. Сообщения сервера. Изменение даты; время, место. Софт. [2017-01-20] Ссылка.Дата, время, место, распорядок проведения раунда. [2017-01-21]. Ссылка.Итоги и планы. Ну что, посражаемся?
  17. В далеком 93-м, когда программировал на ассемблере под КР580ВМ80А, была программа "Отладчик", которая показывала значение всех регистров, можно было делать точки останова программе.... Возможно ли такое для LUA? Какие есть инструменты, методы, чтобы выявить ошибки кода?
  18. Totoro

    MoonScript

    Итак, устройтесь поудобнее у ваших голубых экранов. Сегодня я научу вас програмировать во Имя Луны! Мы привыкли писать программы для OpenComputers на Луа. И при этом не задумываемся о том, что язык Луа в OpenComputers - это по сути "язык низкого уровня". На нем мы пишем все - начиная от прошивок BIOS и операционных систем, и заканчивая чатиками для OpenGlasses. Однако, когда объем кода не имеет решающей роли, и есть время для медитации, программист может дать душе отдохнуть, используя красивые конструкции высокоуровневых языков. И таким языком сегодня станет MoonScript. # Что это такое? MoonScript - это язык с интересным и лаконичным синтаксисом. Он позволяет использовать привычные конструкции ООП (объектно-ориентированное программирование) и ФП (функциональное программирование) в сеттинге Луа. Сам автор называет его "CoffeeScript for Lua". Код на MoonScript хранится в файликах с расширением *.moon и транслируется в обычный код Lua. Который может затем быть выполнен на компьютерах или роботах OpenComputers. Плюсы: * краткий и красивый код (субъективно) * изучение нового, интересного (объективно) Минусы: * Транслированный код хуже читаем, и немного объемнее, чем аналогичный код, написанный изначально на Луа # Установка Приведу пример установки для Debian + Lua5.3. Если у вас другая OS - смотрите соответствующие инструкции по ссылкам. 1) Lua (https://www.lua.org/start.html) $ sudo apt-get install lua5.3 2) Пакетный менеджер LuaRocks (https://luarocks.org/#quick-start) Для его установки возможно потребуется пакет liblua5.3-dev. Установим его командой: $ sudo apt-get install liblua5.3-dev Далее следуем инструкциям с официального сайта: $ wget http://luarocks.org/releases/luarocks-2.3.0.tar.gz $ tar zxpf luarocks-2.3.0.tar.gz $ cd luarocks-2.3.0 $ ./configure; sudo make bootstrap 3) Ставим пакеты MoonScript (http://moonscript.org/#installation) $ sudo luarocks install moonscript Теперь в системе появятся программы moon и moonc. Ура! К слову, при их запуске может вылетать ошибка типа /usr/local/share/lua/5.3/alt_getopt.lua:24: attempt to call a nil value (global 'module') Это происходит потому, что moonscript давненько уже не обновлялся, и использует устаревшее ключевое слово module. Фиксится при помощи правки файликов alt_getopt.lua и moon. В файле alt_getopt.lua необходимо закомментировать 24 строку (module ("alt_getopt")) и дописать в самый конец строку return {get_opts = get_opts, get_ordered_opts = get_ordered_opts} В файле moon исправляем вторую строку на local alt_getopt = require("alt_getopt") Все это в нашем случае можно сделать командами: $ sudo gedit /usr/local/share/lua/5.3/alt_getopt.lua $ sudo gedit /usr/local/lib/luarocks/rocks/moonscript/0.4.0-1/bin/moon Все! MoonScript установлен, пропатчен и готов к работе. # Подсветка синтаксиса Очень рекомендую писать код в редакторе заточенном под код. Чертовски удобно, поверьте. Для MoonScript существуют пакеты подсветки синтаксиса для разных редакторов. 1) Sublime Text / Text Mate - https://github.com/leafo/moonscript-tmbundle 2) vim - https://github.com/leafo/moonscript-vim 3) Atom - https://atom.io/packages/language-moonscript 4) Textadept - https://github.com/leafo/moonscript-textadept # А теперь - магия! Для примера, я переписал код библиотечки Braille Bicycle с использованием MoonScript. Теперь она использует ООП подход (привет, @Krutoy ). http://pastebin.com/NQc7JCH3 Этот файлик я потом "откомпилировал" в Lua простой командой: $ moonc braille.moon И получил на выходе рабочую библиотеку braille.lua. Далее, заливаем ее в OC и пишем простой тестовый код: local gpu = require('component').gpu local braille = require('braille') local matrix = braille.Matrix(8, 8) matrix:line(1, 1, 8, 1) matrix:set(1, 2); matrix:line(4, 2, 5, 2); matrix:set(8, 2) matrix:set(1, 3); matrix:line(4, 3, 5, 3); matrix:set(8, 3) matrix:line(1, 4, 3, 4); matrix:line(6, 4, 8, 4) matrix:line(1, 5, 2, 5); matrix:line(7, 5, 8, 5) matrix:line(1, 6, 2, 6); matrix:line(7, 6, 8, 6) matrix:line(1, 7, 2, 7); matrix:line(4, 7, 5, 7); matrix:line(7, 7, 8, 7) matrix:line(1, 8, 8, 8) gpu.setForeground(0xC61331) matrix:render(gpu, 14, 12) matrix:render(gpu, 46, 12) gpu.setForeground(0xFFFFFF) matrix:render(gpu, 30, 12) matrix:render(gpu, 62, 12) И вуаля! Работает. # Игровая трансляция Все это хорошо, но иногда может быть полезна возможность использовать *.moon исходники прямо из OC, без предварительной компиляции. Уже поздно, поэтому расскажу об этом как-нибудь в другой раз. Скажу лишь, что помимо всего прочего, у MoonScript есть такая любопытная тулза, как онлайн "компилятор". Его можно найти вот здесь: http://moonscript.org/compiler/ # UPD Товарищи @Krutoy и @evgkul выпустили транслятор MoonScript на чистом Луа, что позволяет запускать и "компилировать" программы MoonScript прямо из OpenOS. Заценить и потестить можно по этой ссылке: https://github.com/evgkul/moonscript-opencomputers Пишите багрепорты (сюда или на GitHub), и отправляйте свои пуллреквесты, чтобы улучшить программу. # UPD 3 Добавил MoonScript в репозиторий. Теперь можно установить его и потестить всего одной командой: hpm install moon
  19. У нас тут новый мини-конкурс. Ну вы наверное знаете. (Если не знаете - забегите к Фингеру в блог, почитайте, и присоединяйтесь к веселью. ) Смысл такой, в двух словах: есть картинка, надо её распарсить и нарисовать ascii-символами в консоль. Можно юзать абсолютно любой язык программирования. При этом надо постараться сделать свой код как можно короче. Ну, в общем читайте точные правила у Фингера. В эту тему можно постить свои решения. Только оформляйте исходники в теги "code". Обсуждаем в чате или в IRC, чтобы не захламлять тему. На задачку даётся неделя времени. Но она лёгкая, так что я посидел вечером и написал, для почину, свой вариант. Язык: Scala 2.11.8 (Java >= 7) Вес (по минимуму): 620 байт Полный код (в читабельном виде): import java.nio.file.{Files, Paths} import java.nio.{ByteBuffer, ByteOrder} object BumpGold extends App { def word(array: Array[Byte], offset: Int) = ByteBuffer.wrap(array, offset, 4).order(ByteOrder.LITTLE_ENDIAN).getInt val array = Files.readAllBytes(Paths.get(args(0))) val offset = word(array, 10) val width = word(array, 18) println( (for(i <- offset until array.length by width*4) yield array.slice(i, i+width*4).map(_ & 0xFF).grouped(4) .foldLeft("")((a, b) => a + ((b(0), b(1), b(2), b(3)) match { case (_, _, _, a) if a <= 0 => " " case (r, g, b, _) if r < 51 && g < 51 && b < 51 => "█" case (r, g, b, _) if r < 102 && g < 102 && b < 102 => "▓" case (r, g, b, _) if r < 154 && g < 154 && b < 154 => "▒" case (r, g, b, _) if r < 205 && g < 205 && b < 205 => "░" case _ => "·" })) ).reverse.mkString("\n") ) } Прогон с тестовой картинкой (16 на 16): Ещё одна картинка: http://i.imgur.com/Hp0EBs7.png Минифицированный код: http://pastebin.com/27fntVdz Кто рискнёт побить мой рекорд?
  20. Всем добрый день. Сегодня пришла такая идея, реализовать в майнкрафте мини-игру по ловле покемонов, без риска быть сбитым на улице машиной играя в pokemon go на смартфоне, ну или избитым бабками в храме гопниками на улице. В чём суть: У нас есть планшет и очки OpenGlasses. На планшете пишется где в радиусе 100 блоков спрятан воображаемый друг. На очках из OpenGlasses это всё отображается как цветной кубоид в мире, ну или если кто в 3D спец, может какую нибудь модельку приделать Пикачухи (одну на всех). Синхронизируется всё по модему, который находится на спавне и генерирует всех покемонов в мире, а точнее их координаты. Ловятся они при помощи команды в чате "#pokemon ya vibirayu tebya grab", которую успешно отлавливает чатбокс и записывает в планшет уникальный одноразовый id. (конечно можно его сообщить другому игроку (передать покемона), но от этого мало пользы)) Далее с этого же планшета можно обменять (продать) покемона на UU. (в это время id покемона сообщается на базу, где UU переводятся игроку и id покемона удаляется из базы данных, дабы не кто не смог с планшета жульничать и продавать много раз) Что думаете по поводу этой идее пишите в комменты. Если кто то хочет приняться за разработку, я буду только рад. P.S. Да, я знаю что есть мод Пиксельмон. Но его никто не будет ставить на сервере, и там нет призов в виде UU.
  21. На днях я рассказывал об интересном языке для OpenComputers (и не только). MoonScript Но одно дело - прочитать об языке где-то. А совсем другое - попробовать язык самому. Именно этим я и предлагаю заняться. Для разогрева, начнем с чего-нибудь несложного. Например "Угадай число". Думаю все знают эту игру. Компьютер загадывает число, мы пытаемся угадать. На каждую нашу попытку, компьютер злорадно сообщает - "больше!", "меньше!" или "у вас закончились попытки!" и "вы проиграли!". Немного модифицируем исходную идею, и перенесем ее на 2d поле. Просто, чтобы не было скучно. ТЗ Что нам потребуется? 1) Отрисовать сетку Тут мы просто возьмем текущий размер дисплея, и разметим его на клеточки. 2) Загадать число 3) Слушать команды пользователя Юзер будет тыкать на клеточки. Нам надо будет слушать эвент touch. 4) Обновлять игровое поле в ответ Собственно после тыка, будем открывать клетку. Если это не та клетка - рисовать на ней стрелочку. Если та - рисовать победный баннер. Если закончились ходы - рисовать что-нибудь обидное. За дело Первым делом надо подключить все, что мы будем использовать. В Lua обычно мы при помощи команды require пишем все в локальные переменные. В MoonScript все переменные по дефолту локальны. Поэтому использовать ключевое слово local нет необходимости. Для подключения же, используется ключевое слово import: import getResolution setForeground setBackground set fill from require('component').gpuimport pull from require 'event'import ceil, random from mathimport rep from string Мы вытащили из нужных библиотек нужные функции. Ничего лишнего. Теперь объявим переменные, которые будут использоваться в коде. - Размеры экранаwidth, height = getResolution()width /= 2 -- потому что по горизонтали наши клетки займут 2 символаheight -= 1 -- потому что внизу будет статус-- Цветаwhite = 0xFFFFFFblack = 0x000000gray = 0x222222green = 0x00BB33yellow = 0xFFC04Cred = 0xFF0000pink = 0xFF0074violet = 0xD600FFblue = 0x4E5AFFcyan = 0x4ED7FFteal = 0x00CC99-- Заготовка для сетки - один ряд клетокgrid_line = rep("▒▒ ", ceil(width / 2))-- Наша цельtarget = { x: 0, y: 0 }-- Количество попытокmaxAttemts = ceil(width * height / 150) -- 150 - магический коэффициент сложности, больше - сложнее, меньше - легчеattempts = maxAttemts Тут тоже присутствует несколько новых фич MoonScript. Во-первых - это сдвоенные операции. Конструкции a /= b или a -= b означают тоже самое, что a = a / b и a = a - b. Во-вторых это новый синтаксис создания таблиц. Названия полей и их значения отделены двоеточиями. (Такое обозначение будет знакомо тем, кто владеет JavaScript). Для реализации геймплея и отрисовки всякой всячины, потребуется определить несколько функций. Тут мы столкнемся еще с несколькими новшествами, по сравнению с Луа. Первое, в MoonScript нету ключевого слова end. Блоки кода обозначаются отступом разной величины. Так что вам придется тщательно следить за тем, на каком уровне вы пишете команды. (Это чертовски полезно, и вырабатывает красивый стиль написания кода =), а не эти кошмарные простыни, где нельзя разобрать начал и хвостов.) Второе, функции объявляются конструкцией вида (a, b, c) -> .... Тут слева - набор аргументов, потом стрелочка - разделитель и блок кода, который собственно является телом функции. -- Очищаем экранclear = () -> setForeground white setBackground black fill 1, 1, width * 2, height + 1, ' '-- Рисуем сеткуgrid = -> setForeground gray setBackground black for y = 1, height set (if y % 2 == 0 then 1 else 3), y, grid_line Пустой набор аргументов можно опустить, как в функции grid. Кроме того, как несложно заметить, MoonScript позволяет вызывать функции, не используя скобочки. Продолжим. -- Открываем одну клеткуsign = (x, y) -> if x == target.x and y == target.y then black, white, "[]" elseif x == target.x and y < target.y then white, green, "▼▼" -- по неведомой мне причине, стрелки вниз в новом шрифте ОС 1.6 нету =) elseif x == target.x and y > target.y then white, violet, "↑↑" elseif x < target.x and y < target.y then white, teal, "↘↘" elseif x < target.x and y == target.y then white, cyan, "→→" elseif x < target.x and y > target.y then white, blue, "↗↗" elseif x > target.x and y < target.y then white, yellow, "↙↙" elseif x > target.x and y == target.y then white, red, "←←" elseif x > target.x and y > target.y then white, pink, "↖↖"cell = (x, y) -> fore, back, text = sign x, y setForeground fore setBackground back set x * 2 - 1, y, text Здесь функция sign сконструирована так, чтобы отдавать три переменных разом. Следует заметить, что в MoonScript можно не пользоваться оператором return. Функция автоматически вернет значение последнего оператора в теле. Кроме функций, значения умеют возвращать и условия. Поэтому в данном случае, функция возвращает значение условия, а условие возвращает три значения из той ветки, которая выполнится. Функция cell просто берет эти значения и отрисовывает в нужном месте клетку. Далее. -- Рисуем статусstatus = (state) -> setForeground white setBackground black fill 1, height + 1, width * 2, height + 1, ' ' set 2, height + 1, "[Угадай, где клад!]" switch state when 'win' setForeground green set 24, height + 1, "Вы победили!" when 'lose' setForeground red set 24, height + 1, "Вы проиграли!" else set 24, height + 1, "Попыток осталось: #{attempts}" set width * 2 - 10, height + 1, "[R] [Q]" Здесь тоже используются две новые конструкции. Первая - это switch. Наверняка многие уже знакомы с ним. По сути, это просто удобный вариант длинных условий, со множеством elseif. Свитч получает значение, а потом сравнивает с ним все ветки when. Какая совпадет - та и выполнится. Вторая - это интерполяция строк. В строку в двойных кавычках можно встраивать значения перменных (или даже кусочки кода), используя диез и фигурные скобки, как в функции выше. Последние приготовления: -- Генерируем цельsetTarget = -> target = { x: random(1, width), y: random(1, height) }-- Инициализируем игруnewGame = -> attempts = maxAttemts setTarget! clear! grid! status! Функция newGame использует специальный синтаксис для вызова функции, которой не нужны аргументы. Вместо того, чтобы писать setTarget(), MoonScript советует использовать восклицательный знак. setTarget!. Это довольно весело смотрится в коде. =) Ну чтож, все готово. Давайте соберем все написанное, и запилим немного игровой логики! -- Поехали!newGame!while true -- Ждем события event, _, x, y = pull! -- Обрабатываем его switch event when 'touch' -- Если был клик -- Открываем клетку, если остались попытки if attempts > 0 x = ceil(x / 2) cell x, y attempts -= 1 -- Обновляем инфу if x == target.x and y == target.y attempts = 0 status('win') elseif attempts == 0 status('lose') else status! when 'key_down' switch x when 113 -- Q: выход из игры break when 114 -- R: перезапуск newGame!clear! Вуаля! Оно работает. И даже можно поиграть. И даже победить =) Круто, правда? Не надо делать такое выражение лица, я знаю что на самом деле, вы со мной согласны. =) А вы, да-да, вы! - на задних рядах, хватит кидаться тапками! Полный код игрушки доступен тут: http://pastebin.com/M0sxk1QH Enjoy!
  22. Добрый день, игроки. У меня появилась идея на счёт улучшения чатбоксов. Я предлагаю сделать им слот улучшения куда можно будет включить следующие улучшения: Улучшение "Сканирование" Улучшение "Невидимость" Улучшение "Позвони мне" Улучшение "Беспредел" О улучшениях: Улучшение "Сканирование" помимо всего что выводит в событиях позволит узнавать дистанцию до игрока. То есть события будут возвращать {"имя события", "адрес чатбокса", "имя игрока", "сообщение", "дистанция до игрока"} Это позволит сделать примитивный не очень точный сканер координат игроков (когда они пишут в чат (в лс не считается)) Таким образом я надеюсь что флудеры будут меньше флудить, и больше играть. Ибо любишь поговорить - люби и наказание получить от неравнодушных игроков. Это не каким образом не читерно. Дистанция будет вычисляться по формуле Пифагора для трёхмерной системы координат. То есть значение будет выдаваться просто 500 метров например. А дальше сам думай в каком направлении, на какой высоте, пиши прогу для скана и так далее. Флудер не хочет чтобы знали его местоположение - будет меньше в чат писать. Всё достаточно интересно и полезно. Это вам не читерный SGSC: scan который можно было когда хочешь, сколько хочешь раз использовать. Да и к тому же, в реальности у нас нет чата, мы для связи используем телефон. Было бы более реалистично если бы это улучшение было. Улучшение "Невидимость" позволит чатбоксу с улучшение "Сканирование" не обнаружить откуда исходит сигнал. То есть не даёт отследить местоположение твоего чатбокса. Улучшение "Позвони мне" позволит отправлять сообщения определённому игроку (как в админском чатблоке) Улучшение "Беспредел" будет очень дорого стоить в крафте, тратить много энергии и позволит с кулдауном около минуты отправлять сообщения в неограниченном радиусе. Свои предложения и критику оставляйте в комментариях.
  23. Предлагаю конкурс по созданию лучшей программки по рекламе магазинчиков на сервере. Например: компьютер на спавне игрок должен прийти, заполнить поле (возможно тип выдачи его куда-то) и оставить платное объявление (только одно на одного игрока, макс. два) оплата за монеты или пару ЮЮ-шек объявление хранится в базе какое-то время, потом старые удаляются по дате есть менюшка " начать работу", "помощь". Далее подменю => добавить объявление, редактировать мои обявления, смотреть объявления, выход и пр. пример рекламки: Ник: Petya Варп: Petya_shop Описание: большой выбор товаров ИК, АЕ, ОС, есть набалдаши, иридий, титан. Комп нельзя ребутнуть, при нажатии кнопки "Начать работу" комп переходит под управление игрока, чтобы там ссади никто не тыкал в кнопки и не мешал и прочее. Чтение объявлений можно реализовать как в компе, так и в чате, так и на очки например. Хоть бегущая строка на спавне на мониторе, хоть таблицы, как угодно. Это на ваше усмотрение. Можно вообще удалено сделать добавление рекламы в базу с очков, а на спавне на билборде они принтятся постоянно и там их кто-то читает. Или в очки они летят или в чат раз в 10-15 минут. Естественно, чем больше срок действия объявления, тем оно дороже, или же делать все объявления время жизни 7 дней и их удалять. Игрок вновь должен прийти и его подать. И в чат с админчатбокса принт рекламы периодический естественно дороже, чем на билборд на спавне или очки. Можно реализовать поиск, категории, игроку дать возможность установить галочки (или аргументами, если реализация подачи объявления только с очков), куда оно будет принтится (чат, очки или билборд, или то и то вместе) Естественно цена дороже итоговая. И так далее и тому подобное. Полет фантазии ограничен только возможностями программиста Главное, чтобы оно работало и было более менее удобно рекламировать варп на свой магаз круглосуточно. Примечание: магазины должны быть оформлены красиво, огорожены, освещены, ПвП выкл. и т.д. перед подачей рекламы. Срок действия конкурса не ограничен. Лучшая по функционалу и удобству программка будет размещена на сервере.
  24. Все добрый день. Эта тема создана чтобы обсудить турели. Пишите в комментарии свои идеи использования турелей. У меня такая идея: Берём entitydetector из opensecurity (возможно несколько штук), подключаем к компу для того чтобы их сообщить и получать более большую карту с координатами игроков и мобов. В прошлой версии я использовал сканер из OpenPeripheral, который выдавал относительные координаты, но несколько таких сканеров согласовать намного сложнее чем один и это минус (а так же там радиус поменьше) Далее с базой данных мобов и игроков мы проводим фильтрацию, заносим в таблицу тех кого можно убить. А далее идут интересные куски кода. Вместо того чтобы как в первой версии закрепиться за одной целью, турель будет поворачиваться к той цели к которой ей ближе повернуться что повысит её эффективность. Второй же кусок кода будет смотреть, есть ли на пути выстрела мирные мобы/игроки. Если есть - стрелять не будет. Ибо таким образом можно встать сзади афкашника-хозяина привата и убить его. Эта часть кода не позволит убить тех кого не нужно убивать, заставляя турель соблюдать 3 закона робототехники Айзека Азимова. Другие крутые части кода можете понакидать в комментарии, было бы интересно посмотреть что вы придумаете. А так в принципе и всё что хотел сказать. 1 комп - управляющий несколькими турелями, у каждой турели свой сектор (комната за которой он не целиться) и один или несколько детекторов для обнаружения игроков. Хоть такая система и будет лагодромить, но увы красота требует жертв. Придётся не выкладывать на форум в случае успеха написанную программу, чтобы игроки не залагодромили сервер.
  25. Добрый день народ. Вот Нео и исправил баг чатбоксов из нашего любимого мода OT, а значит самое время написать программу прослушки чата. Сама программа представляет из себя станцию прослушки чата, где можно как отлавливать все сообщения подряд, так и отлавливать через фильтр игроков. Команды управления вводить через чат: #exit - выход из программы #clear - очистка экрана #add <ник игрока 1> <ник игрока 2> <ник игрока 3> ... - добавление в фильтр прослушки игроков #del <ник игрока 1> <ник игрока 2> <ник игрока 3> ... - удаление нужных игроков из списка прослушки #del all - удаление всех игроков из списка прослушки (перейти на прослушку всех игроков без фильтра) #list - показать всех игроков которые находятся в списке фильтра Скрины: Программа: http://pastebin.com/vd4jZDmv А с вами был qwertyMAN, все пожелание по улучшению программы оставляйте в комментариях, удачи!
×