Fingercomp
Гуру-
Публикации
1 629 -
Зарегистрирован
-
Посещение
-
Победитель дней
283
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя Fingercomp
-
Нельзя, да; используйте сериализацию для этого. Zn позиционируется как не самая умная сетка, и вещи вроде ack, нескольких частей сообщений, длинных сообщений нужно реализовывать в специальном протоколе. Это так и задумано, таков принцип.
- 46 ответов
-
- OpenComputers
- ретранслятор
- (и ещё 3 )
-
А когда робот сменил тип с блока на сущность/entity? :P Будь покоен: робот никоим образом тебе не помешает.
-
Удалите сообщения #17...#73.
-
ивент Unreal Tournament: Resurrection -- Этап #2
Fingercomp ответил в тему Fingercomp в Ивенты и конкурсы
Обновление от 17 марта 2017 года. 28 дней до старта. Работа кипит и бурлит. Пришло, наконец, время написать очередное обновление. 1. Сервер Основные фичи сервера наконец-то запилены. Я портировал интерфейс с OpenPeripheral на OpenGlasses, написал генератор арены, написал графический админ-интерфейс и, конечно же, изменил код так, чтобы соответствовать правилам. Сервер доступен по ссылке: GitHub. Внимание: сервер находится в бета-тесте. Если заметите баг, просьба отписаться здесь. Оружия пока нет: лазеры и бомбы будут доступны позже, с релизом лончера. 2. Комплектация робота 3. Арена Как и обещал, арену я выкладываю после написания сервера. Когда зайдёте в мир, используйте комбинацию F3+N, чтобы переключаться из режима креатива в режим наблюдателя (можно пролетать сквозь блоки). Спуститесь вниз, в организаторскую комнату. На сервере пропишите команду upd для обновления софта. Для запуска софта пишите ut2-serv. Далее используйте интерфейс для старта игры. Файл конфигурации: /etc/ut-serv.cfg. Можно изменить настройки для тестирования программ. В соседнем сборщике уже выложены все компоненты робота. Достаточно кликнуть по кнопке, чтобы собрать его. Ссылка на карту: тык. Конечно же, карта на сервере будет отличаться от данной сейчас (причём значительно), но координаты самого поля боя определённо останутся на месте. 4. Сборка Кастомный лончер для этой сборки пока что в процессе (подвезём через неделю-две, как @Totoro допишет мод), поэтому сейчас устанавливать её нужно самостоятельно. Ссылка на сборку (конфиги и моды): тык. Скопируйте это в папку с игрой и используйте какой-либо лончер для запуска. Версия Minecraft: 1.10.2 Версия Forge: 12.18.3.2254 5. Сетевые сообщения сервера Есть команда, которую можно отправить по сети, — "getInfo". Просто отправляете на сервер это сообщение и получаете в ответ сообщение с инфой о матче: оставшееся время, общее время и таблица счёта ("{blue={name=\"Fingercomp\",alive=8},green={..},red={..},yellow={..}}"). Сервер отсылает сообщение "whoalive". В ответ на него роботу обязательно нужно ответить таким: "i'm alive", team, x, y, z, где team — цвет команды ("blue", "green", "red", "yellow"), x, y, z — координаты (можно получить из навигационного апгрейда). Дважды сообщение отравлять бессмысленно; время на ответ составляет две секунды. Помимо этого сервер отправляет и обычные события. При спауне бонуса отправляется сообщение "spawnedbonus", x, y, z. Сообщение "time", remaining, total (remaining — оставшееся время, total — общее время) отправляется по некоторому интервалу. Можно использовать его, чтобы синхронизировать локальный счётчик. Сообщения "gamestart" и "gamestop" отправляются, соответственно, при старте или завершении игры. Без учёта бомб и лазера, у участников теперь есть вся информация, чтобы начать писать свои программы. Если кто-то хочет присоединиться — подключайтесь! Будем рады каждому человеку. Нам также потребуется помощь людей для работы над второй, секретной частью ивента. Я буду отправлять ЛС людям, которые, как я считаю, хорошо разбираются в данной теме, а также просто писать в IRC. Наконец, вопросы по ивенту пишите здесь, в IRC или в ЛС организаторам (мне или @Totoro).- 123 ответа
-
- 2
-
-
- opencomputers
- robot
- (и ещё 2 )
-
Вопрос на засыпку: что ты собрался делать из этих голов?
-
Давайте и до кода доберёмся. Сначала по стилю: Ни одного отступа в коде. Даже намёка на это нет. Функции используют BumpyCase вместо camelCase. То же с таблицами. Нет пробелов после запятых. То есть func(arg1,arg2,arg3) вместо положенного func(arg1, arg2, arg3). Теперь по самому коду. local mess = nil В окружении библиотеки задаётся локальная переменная mess. В данном случае = nil не нужно. Конструкция вида local var создаст локальную переменную var, которая будет иметь значение nil. Где же она используется? Поиском (напомню, отступов нет) находим единственное место: local _, _, _, _, dis, message = require("event").pull(arg[1],"modem_message") if message ~= nil then mess = serialization.unserialize(message) return mess else return "no" end Ну это шедеврально, конечно. Вместо объявления переменной невесть где достаточно сразу создать и проинициализировать переменную здесь. То есть убрать строку 2 и заменить mess = serialization.unserialize(message) на local mess = serialization.unserialize(message). Кроме того, эта переменная нигде, кроме return, не используется. Поэтому промежуточная переменная не нужна, можно сразу возвращать значение. Уберём строку 26 и заменим строку 25 на return serialization.unserialize(message). Сразу замечаем повторяющиеся сегменты кода: local serialization = require("serialization") local serialization = require("serialization") Удалим эти строки и скопируем наверх, на строку 2. В большинстве случаев гораздо лучше все запросы библиотек выносить в начало кода. То же есть на строках 11, 21, 38; 7-10, 34-37. Всех их нужно вытащить наверх. К функции returnMess претензий, кроме описанных выше стилевых, нет. Двигаемся дальше: function SecurityControl.ReturnMess(...) arg = {...} local modem = component.modem local serialization = require("serialization") local _, _, _, _, dis, message = require("event").pull(arg[1],"modem_message") if message ~= nil then mess = serialization.unserialize(message) return mess else return "no" end end Эта функция использует vararg (в аргументах ...) — количество аргументов может быть любым. На строке 23 все переданные аргументы собираются в таблицу. Однако в коде используется только первый переданный аргумент. Следовательно, использовать синтаксис vararg не нужно. Поэтому заменяем vararg на вполне конкретный аргумент timeout: function securityControl.returnMess(timeout) local _, _, _, _, dis, message = require("event").pull(timeout, "modem_message") if message ~= nil then return serialization.unserialize(message) else return "no" end end Переменная dis нигде дальше не используется, а потому её можно смело убирать. Условие message ~= nil может быть справедливым тогда и только тогда, когда есть значение false. Но это значение использовать не нужно: serialization.unserialize принимает только строки. Поэтому упрощаем условие до if message then. Функция может вернуть "no" даже по первой ветке условия (получив сообщение [["no"]]), что было бы нежелательно. Для того чтобы отличать это значение от других, лучше возвращать false или nil. Здесь проще поступать вторым путём, просто убрав ветку else. Итоговый код функции: function securityControl.returnMess(timeout) local _, _, _, _, _, message = require("event").pull(timeout, "modem_message") if message then return serialization.unserialize(message) end end Мы упростили двенадцать нечитабельных строк исходной функции до шести. Посему переходим к следующей функции: function SecurityControl.SendPort(...) local serialization = require("serialization") if not component.isAvailable("modem") then io.stderr:write("Modem not found!\n") os.exit() end local modem = component.modem arg = {...} modem.broadcast(arg[1],serialization.serialize(arg[2])) end Здесь те же ошибки, что и рассмотренные выше, поэтому сразу исправляем код: function securityControl.sendMessage(port, message) modem.broadcast(port, serialization.serialize(message)) end Неожиданно, не так ли? Всё, что делает функция, — это сериализует сообщение и вызывает другую. Немного смысла в ней. В итоге, вся либа сводится к этой: local component = require("component") local serialization = require("serialization") local securityControl = {} if not component.isAvailable("modem") then io.stderr:write("Modem not found!\n") os.exit() end local modem = component.modem function securityControl.openPort() math.randomseed(os.time()) local port = math.random(1, 65565) if modem.open(port) then return port end end function securityControl.receiveMessage(timeout) local _, _, _, _, _, message = require("event").pull(timeout, "modem_message") if message then return serialization.unserialize(message) end end function securityControl.sendMessage(port, message) modem.broadcast(port, serialization.serialize(message)) end return securityControl Сорок четыре строки сущего ада превращаются в 33 строки чистенького кода. Но вопрос не в коде, который мы здесь покритиковали и даже переписали — он теперь гораздо лучше; вопрос в другом: зачем нам библиотека, которая просто вызывает функции модема, ничего действительно полезного не делая? Есть небольшие программки типа копалки туннеля 3×3, часиков, кодового замка простого и прочее. Их раз сто уже написали все, кому не лень, но смысл не в этом: они дают полезный опыт программирования. Но даже для новичка постить 40 строчек кода — это моветон. Несмотря на название раздела, сюда надо отсылать что-то покрупнее. Оставь свои первые опыты на своём жёстком диске и выложи сюда что-то действительно полезное. Или хотя бы не раздувай слона из мухи. У меня ещё большие претензии к оформлению первого топика: перечитывай хотя бы, что ты написал. Сейчас невозможно что-либо понять из текста.
- 16 ответов
-
- 5
-
-
- Server
- OpenComputers
-
(и ещё 1 )
Теги:
-
Что-о?
- 16 ответов
-
- Server
- OpenComputers
-
(и ещё 1 )
Теги:
-
ивент Unreal Tournament: Resurrection -- Этап #2
Fingercomp ответил в тему Fingercomp в Ивенты и конкурсы
Не обновление, просто прогресс текущий говорю. Карту мы потеряли. Хостит у нас Fiender, а он сменил жёсткий диск, который сыпался. В один из бэдов попала и карта арены. Поэтому на следующий день мы отстроили арену заново. Ничего критичного не потеряли, а карту забекапили сразу на несколько хостингов. Разбираемся пока с плагинами привата на 1.10.2. Какие-то багичи выползают с роботами, дюпают заприваченные блоки, ну и всякое такое в том же духе. Просим пока @Totoro починить это: то ли в FoxGuard патч запилить, то ли в OpenComputers, то ли вообще свой плагин привата сделать. Непонятненько. Посмотрим. Конечно же, пилим софт для ивента. Уже портирован интерфейс для очков, смог его запустить без крашей (достижение). Предстоит отдебажить спаун лута (жесть), прицепить админ-интерфейс (жесть жесть) и сделать генерацию арены (жесть жесть жесть). Должно быть весело. Думаю, что в срок укладываемся. Три дня осталось тут, должно хватить. На итоговом сервере я планирую зафигачить пару очень крутых штук. Так что планируйте как-нибудь зайти к нам через месяц. Для участников: завтра будет опубликована техническая инфа (комплектация робота, координаты арены, сигналы сервера и команды). Арена будет доступна после написания сервера, как и говорил.- 123 ответа
-
- opencomputers
- robot
- (и ещё 2 )
-
Есть какие-то конкретные возражения против одной из первых ссылок выдачи Google по "Lua json library"? Интересно узнать, чем не подходит.
-
ивент Unreal Tournament: Resurrection -- Этап #2
Fingercomp ответил в тему Fingercomp в Ивенты и конкурсы
С такой логикой (имею в виду @qwertyMAN) мы бы так и остались на версии 1.4.7 (потом нет многих крутых модов, например, redpower). Поэтому аргумент ошибочный.- 123 ответа
-
- opencomputers
- robot
- (и ещё 2 )
-
ивент Unreal Tournament: Resurrection -- Этап #2
Fingercomp ответил в тему Fingercomp в Ивенты и конкурсы
Chisels&Bits поставлен случайно был при копировании, а чизель нужен для блоков. Что тебе в них не нравится, мне непонятно, потому что от них ничего плохого нет. По поводу ещё одного сервера беспокоиться пока не надо — организаторы сами позаботятся об этом.- 123 ответа
-
- opencomputers
- robot
- (и ещё 2 )
-
ивент Unreal Tournament: Resurrection -- Этап #2
Fingercomp ответил в тему Fingercomp в Ивенты и конкурсы
Обновление от 8 марта 2017 года Как обычно, никто работу над ивентом не останавливал, поэтому сегодня есть забавная и интересная информация, которую можно сюда написать. 1. Арена Она готова. Как минимум, в том виде, который мы отдадим игрокам — но только после написания сервера. 2. Итоговая сборка После обсуждения решено сделать невероятное: перейти с 1.7.10 на 1.10.2. Кубача, всё верно. Отсюда вылазят следующие асуммонстрики: Хоститься ивент, как и сейчас, будет на отдельном сервере. Алексу меньше мороки с непонятной затеей, а мне больше удобства в организации. Лончер у нас будет, по всей видимости, кастомный какой-нибудь. Потому что с текущим вообще ничего не ясно: как он работает, можно ли туда прикрутить что-то кроме 1.7.10, ну и так далее. OpenPeripheral застрял на 1.7.10, к сожалению, из-за чего нужно будет переписать интерфейс и добавить больше взаимодействия с блоками внутри игры. Зачем? Всё дело в прекрасных командах, с помощью которых всё в гугол раз облегчается. Моды: Chisel MC1.10.2-0.0.8.12 Chisels&Bits 12.12. Computronics 1.10.2-1.6.2 Conventional 1.10.2-0.0.15 IndustrialCraft2 2.6.170-ex110 JEI 1.10.2-3.14.5.406 OpenComputers MC1.10.2-1.6.2.7 OpenGlasses 1.3 WAILA 1.7.0-B3_1.9.4 3. Казусы Казус нумер один. Робот умеет стрелять лазером только на север. Если морда на восток, запад или север, то луч полетит на север. Если морда робота направлена на юг, то луч полетит на восток... и попутно срубит робота. Ну и фиксов под него здесь нет тоже. Так что вычёркиваем из списка, заменим, надеюсь, чем-нибудь другим. Казус нумер два. WorldGuard для губки нет, поэтому используем FoxGuard. А у него очень странная система приватов. При которой робот, если киркой сломает блок, получит его, но в мире блок останется. Дюп, в общем. К тому же, нельзя сделать фокус на именно роботов. Они в приват вписываются вместе с владельцем. В принципе, проблемы это не составит большой: ивенты пкм и лкм стопаются сразу же у игроков. Ничего сломать они не смогут, даже как в WG есть. В целом, всё основное есть и работает. 4. Сервер Начинаем писать сервер. Можно скопипастить основу из прошлого ивента и подкорректировать, что нужно. https://github.com/cc-ru/ut2-server P. S. Обновил ещё первый пост в этой теме. Там изменены правила и техдетали.- 123 ответа
-
- 2
-
-
- opencomputers
- robot
- (и ещё 2 )
-
Ну это уже какой-то нереальный чит. Лапотрон — и всего за 2+2/9 дня голосования. Его вообще, по моему мнению, в админ-магазе быть не должно, потому что это не запрещённый предмет. Ну и он не "нереально дорог". Не нужно нубу в коробке из земли просто замахиваться на топовые вещи. Админ-магаз с лапотроном только дней 20 развития удалит. Сингулярность, жёлтое сердечко — всё это не надо. Вот зелёное сердечко очень даже можно в админ-магаз. За 1200 UU примерно (≈ 14 дней голосования). Чанклодырный апгрейд можно — 2200 UU (≈ 25 дней голосования). Столько же и иммибисовскому. Кристаллы врат по 1000 UU (≈ 12 дней голосования). Пропеллеры слишком дёшевы. Нужны ли они вообще? Они же из коблы и палок крафтятся. Вот из углеволокна не крафтится. Его можно добавить — но за приличную цену: это же бесконечный генератор более сотни EU/t. Приблизительно 600 (≈ 7 дней голосования) в самый раз. Главное при составлении — учитывать, что в день можно получать до 90 UU. А не просто рандомные циферки ставить.
-
Что тебя так тянет некропостить? Вот же эмулятор - уже более года у меня в блоге инструкция по установке висит. Обе версии луа, модемы, OpenOS 1.6 и прочее.
-
Ну, как сказать. Thunderbird — это, всё-таки, почтовый клиент, а не клиент IRC. Программка довольно тяжёлая для такого небольшого чатика. А если и использовать, то обязательно надо поставить моноширинный шрифт какой-нибудь.
-
Сегодня нашему каналу в IRC исполняется один годик, поэтому пришло время рассказать, что это, зачем это и как к нему подключиться. Начнём с понятий. IRC — это протокол обмена мгновенными сообщениями через интернет. Сделанный в далёком 1988 году, и по сей день он всё ещё юзается из-за удобности, простого масштабирования, простоты и доступности буквально отовсюду, где есть подключение к интернету — вплоть до холодильников. В общении участвуют клиент и сервер. Клиенты подключаются к серверу и общаются. Для разделения тем существуют каналы — на каждом отдельные сообщения, темы, люди и так далее. Так что на одном сервере могут быть сотни каналов, никак друг с другом не связанных. Главное, что нужно понять: IRC — это не чат в браузере, как здесь на форуме. Здесь отдельные серверы, отдельный протокол, и поэтому просто так через браузер не подключиться, набрав адрес сервера. Для подключения к IRC нужно воспользоваться специальной программой — клиентом. Здесь я покажу несколько клиентов и расскажу, как их настроить. Веб-клиент Iris IRC Для ситуаций, когда надо по-быстрому зайти на канал, но клиента нет под рукой или лень настраивать. Для полноценного сидения использовать проблематично, так как требуется грузить жирный браузер, и стабильность подключения так себе. Кроме того, веб-клиенты — поделки очень плохого качества, неконфигурируемые, отсутствуют банальнейшие фичи, например форматирование, или сделаны криво. Тем не менее. Возьмём, например, Iris IRC. Ссылка на него (нацеленный на серверы Esper) находится вверху, в панели навигации (). Штука очень минималистичная. Сверху вводите свой ник, пишете название канала для подключения (по умолчанию стоит наш), если нужно, ставите галочку и вводите пароль и юзернейм (об этом позже). Однако ставить её необязательно. После этого тыкаете на кнопку. Через несколько секунд появится вот такой интерфейс: Что здесь видим? Во-первых, кнопка меню . Советую сразу перейти в Menu ‣ Options и поставить галочку напротив "Automatically colour nicknames", чтобы визуально различать людей на канале — по цвету. Во-вторых, переключалка каналов . Можно тыкать Alt и цифру от 1 до 9, чтобы быстро переключаться между каналами. Строка топика — небольшого сообщения с темой обсуждения или просто полезными ссылками. Ниже находится окно чата, в котором будут отображаться ваши сообщения и сообщения других людей, а так же другие оповещения (например, о заходе человека на канал). Правее — список ников, подключённых к каналу. Знак "@" перед ником означает операторские привилегии — т.е. админ канала, "+" же ничего не даёт (у нас он является неким знаком отличия для людей, которые часто находятся на канале и чего-то мыслят в программировании, но на других каналах может быть не так). И, наконец, поле внизу для набора сообщений и команд. Чтобы отключиться от сервера, просто закройте вкладку. Чтобы зайти на другой канал, пропишите /j #имя-канала. Например, /j #cc.ru-server1. HexChat Десктопный клиент IRC, конфигурируемый, довольно удобный и пригодный для повседневного общения. Однако он уже требует несколько более сложной настройки. Скачав и установив HexChat, после запуска мы увидим вот такое окошко: Для начала введите 3 варианта ника (они будут пробоваться использовать поочерёдно в случае, если предыдущий ник занят на сервере). Обычно просто ставят "_" в конец. В поле "User name" введите юзернейм — это общий для всех ник (при этом проверка на занятость юзернейма не производится). В списке ниже найдите "EsperNet". Нажмите на кнопку , а затем поставьте галку , чтобы быстрее находить эту сеть. После этого можно нажать на кнопку . Произойдёт подключение к серверу. Используйте команду /j #имя-канала, чтобы зайти на нужные каналы. Например, /j #cc.ru. Появится вот такой интерфейс: Сверху находится меню. Ниже переключалка каналов. Крестик позволяет закрыть вкладку (и выйти с канала). Ещё ниже строка заголовка, режимы каналов. Справа список ников на канале, слева — сам чат, ниже — поле ввода сообщений и команд. Можно кликнуть правой кнопкой мыши по вкладке канала и отметить "Autojoin", чтобы автоматически заходить на канал после подключения к серверу. На данный момент HexChat — рекомендуемый нами клиент для Windows и Mac. KVIrc Объективно: вроде всё по стандарту, использовать можно. Субъективно: куча ненужных кнопок, прокладок, интерфейсов, всё запутано и намешано, выглядит ужасно. Поэтому настоятельно рекомендую не использовать этот клиент. В любом случае, рассказать о нём стоит. После установки и запуска будет предложено выполнить около пяти простых шагов по настройке клиента. Следуйте инструкциям (тем более, что там есть русский язык). Появится вот такое окошко: Нажмите на иконку , введите в поле под списком "EsperNet". Затем нажмите на , в то же поле введите "irc.esper.net". Нажмите "Connect Now" и затем "OK". Появится вот такое диалоговое окно: Введите в верхнее текстовое поле имя канала (например, "#cc.ru") и нажмите "Join", а потом "Close". Наконец, можно использовать главное окно: Сверху меню, ниже ещё всякие кнопки для действий типа подключения к новому серверу. Ниже топик, режимы канала, потом список ников, сам чат и поле ввода. Ниже статусная строка. WeeChat Очень продвинутый, невероятно удобный клиент для Linux. Запускается и работает в терминале, использует ncurses, поэтому даже иксы не требуются. Для Linux однозначно рекомендую, настроив weechat, как нужно, больше другие клиенты использовать не захочется. После установки и запуска появляется вот такой непримечательный вид: Пишем /set irc.server_default.nicks ник,ник_,ник__, чтобы выставить ник. Затем /server add esper irc.esper.net/6697 -ssl. После этого можно прописать /connect esper для подключения к серверу. И дальше уже /join #имя-канала. Общаться можно уже и так, а за дополнительными фишками обращаться нужно к мануалу. Для телефонов тоже есть свои клиенты, но тут я ничего посоветовать не могу. Это были клиенты. Но просто поставив их, особо толка не будет. Поэтому сейчас будет несколько штук IRC, общие для всех клиентов. Помимо каналов на сервере можно напрямую общаться с каким-либо человеком. Для этого нужно прописать /msg <ник> <сообщение> (например, /msg fingercomp привет). В большинстве клиентов можно открыть вкладку (или буфер) для общения с человеком, как для каналов, с помощью команды /query <ник> (например, /query fingercomp). Есть ещё команда /me. Если использовать её, то вместо <ник> сообщение будет показано что-то вроде * ник сообщение. Так можно отправить сообщения от третьего лица (вроде "fingercomp написал гайд"). Команда /notice — это та же отправка сообщения. Она немного отличается видом в клиентах, но всё равно видна всем на канале или собеседнику, в зависимости от того, кому направить сообщение. Смысл команды — предотвратить вызов ботом команд других ботов. Чтобы уйти с канала, можно использовать /part <сообщение выхода>. Сообщение будет показано другим людям в оповещении, например так: Можно вообще от всего сервера отключиться с сообщением, как выше. Используйте команду /quit <сообщение выхода>. Авторизация на EsperNet. Зачем нужна авторизация? Прежде всего, чтобы автоматически получать какие-либо права. Например, на канале #cc.ru-server1 (туда транслируется чат с сервера) мы используем это, чтобы автоматически выдавать право отправлять сообщения на сервер. Чтобы зарегистрироваться, нужно зайти с нужного ника и прописать /msg nickserv register <пароль> <email>, например /msg nickserv register zxcvbnM1 fingercomp@example.com. На ящик придёт сообщение от Esper, в котором будет команда для подтверждения регистрации. Её нужно скопировать и выполнить (то есть написать в строку ввода). Чтобы затем залогиниться, используйте команду /msg nickserv identify <пароль>. А теперь последуют вещи, которые есть только на нашем канале #cc.ru. У нас есть правила, которые желательно соблюдать. Ссылочка на них в топике: https://git.io/vwLXq Основной бот на канале — brote. У него есть множество команд: от погоды до опросников. Список команд можно получить с помощью команды .help. Брот также обрабатывает команды в ЛС. В топике после даты я помещаю всякие интересные события, ссылки и прочее. Так что иногда лучше смотреть на топик. Ведётся статистика всего канала — анализируются логи с середины ноября, хотя канал существовал примерно полгода до этого. Вот ссылка: https://stats.fomalhaut.me/. Можно поизучать — достаточно интересная штука. Темы обсуждений могут быть абсолютно разными — от размеров очередей в больницах до новых фич в языке Rust. Но в любом случае я постараюсь ответить на все вопросы по программированию на Lua, отправленные на канал. Даже в середине обсуждения — тогда, может, не сразу, но обязательно отвечу. Кроме того, у нас есть канал #cc.ru-server1. Сюда бот пишет сообщения с чата сервера, сообщения о смерти игроков, а также пишет текущий онлайн в топик. Поэтому для модерирования очень удобная штука. Чтобы иметь возможность отправлять сообщения из канала на сервер, нужно иметь войс — знак "+", который выдаётся персонально зарегистрированным людям. Я использую несколько критериев для оценки, например активность и адекватность игрока. За любое нарушение правил сервера через IRC следует вечная блокировка возможности отправить сообщения. Но и без войса можно просто сидеть и читать чат. В целом, это всё, что я хотел сюда написать. Ждём на наших каналах — подключайтесь, у нас есть печеньки.
-
ивент Unreal Tournament: Resurrection -- Этап #2
Fingercomp ответил в тему Fingercomp в Ивенты и конкурсы
Кто будет писать роботов для сидения на базе? Никто, правильно. Потому что если кто-то и будет, то его роботов быстро расстреляют на кварки. У бомб будет не только задержка, но и шанс не взорваться. Тут всё предусмотрено. И писать тысячи строк кода для всяких альянсов, лишь бы угодить Кверти, никто не будет, я полагаю. Оно, конечно, эпично, но слишком сложно. И так правила непростые.- 123 ответа
-
- opencomputers
- robot
- (и ещё 2 )
-
ивент Unreal Tournament: Resurrection -- Этап #2
Fingercomp ответил в тему Fingercomp в Ивенты и конкурсы
Поехали. Обновление от 26 февраля 2017 года — ?? дней до старта 1. Правила Итоговые правила таковы. 4 команды по 8 роботов встают по краям арены — на своих базах. Игроки их настраивают и уходят к зрителям. По сигналу сервера снимается барьер, и роботы вылезают со своих баз. У них по умолчанию есть одна бомба по таймеру и один лазер. Чтобы пополнить запас, время от времени на арене будут появляться сундуки с припасами. Сервер вещает их координаты по сети, чтобы роботы могли их обнаружить. Припасы могут быть в виде угля для подзарядки мозгов, бомб двух видов — по таймеру и по сигналу — и дополнительных лазеров, если разрядится первый. Но основная цель роботов — это не лут собирать. Они должны ликвидировать всех роботов из других команд, оставшись при этом в живых. Ликвидировать они могут следующими способами: Поставить бомбу по таймеру у чужака, поджечь и удрать. Чужак взорвётся, если не отскочит. Поставить бомбу по сигналу и подать сигнал (не важно, какая команда и кто именно подаст его, взорвутся все сразу). Подойти к роботу на расстояние до 3-4 блоков и выстрелить лазером. Если робот прячется за ящиком — тем же лазером сломать ящик. Условия победы: Досрочная победа будет в том случае, если останется в живых только одна команда до истечения времени. Если таймер прозвенит раньше, чем 3 из 4 команд умрут, то победителями будут команды с наибольшим кол-вом юнитов. Запрещено: Ломать сундуки и блоки арены. При этом уничтожать чужих роботов и ломать ящики разрешено. Лагодромить. Это мы и так заметим, думаю. Но лучше оптимизировать своих роботов, потому что ресурсы будут ограничены. Срываться с мест до сигнала сервера. Иными словами, фальстарт. Роботы обязаны отвечать на некоторые сообщения сервера. Это, например, сообщение "кто жив?". Полный список будет опубликован после написания сервера. 2. Софт В этот раз в план всякие панели включать не будем. Нам нужен только сервер — можно взять за основу предыдущий, тем более, что интерфейс не изменится. Разве что можно указать номер этапа. 3. Арена С сегодняшнего дня можно начинать строить арену. Нужен для этого хост, но, думаю, где-нибудь отдельный мирок наноем. 4. Планы Арену строить буду максимум до 8 марта, думаю, но чем раньше — тем лучше. Вряд ли там есть что-то сложное, чтобы настолько затягивать, но пусть будет пока так. Параллельно с ареной нужно писать сервер — на это срок до 16 марта. Затем нужно выложить арену и сервер. Ну и тогда же останется ровно 30 дней до старта. За это время можно вполне написать своего робота. 5. Люди @Totoro — организатор. Как обычно, выступает в роли арбитра, урегулировывая споры, и мудреца, подкидывая новые идеи. @Fingercomp — организатор, кодер, строитель. Это я, если что. @astral17 — участник. @electronic_steve — участник. @FluttyProger — участник. 6. Обновления Будут публиковаться в прежнем режиме — по мере поступления новой информации. Смотрите первый пост топика — он регулярно обновляется — и обязательно читайте обновления, которые в этот пост не вошли.- 123 ответа
-
- opencomputers
- robot
- (и ещё 2 )
-
Вышла новая версия OpenComputers, в основном с самыми разными фиксами. Что изменилось: Моды теперь могут добавлять свои кастомные дискеты, которые можно получить перекрафтом их с ключом. (Vexatos) Две функции дебаг-карты: для отправки сообщения на другую дебаг-карту и отправки текста в буфер обмена какого-либо игрока. Опасная штука. (Vexatos) Когда роботы/дроны выкидывают что-либо в мир, они теперь посылают ивент. (Sangar) Добавлен новый предмет — MFU. Позволяет подключить к адаптеру любой блок, находящийся на удалении нескольких блоков. Это позволяет небольшие билды сделать красивее, а сложные схемы — удобнее. (Vexatos) Обновлён перевод на немецкий. (Vexatos) Обновлены LuaJ и JNLua — заявляется, что теперь всё лучше с UTF-8. (gamax92, Sangar) Обновление OpenOS. Как обычно, много изменений, но здесь опять уменьшение потребление памяти и увеличение производительности. (payonel) Дискета oppm теперь использует современные способы установки в OpenOS. А ещё программу обновили. (Vexatos) Обновление Plan9k. (magik6k) В планшетах не работал слот для карт, если было вставлено улучшение. (Vexatos) Очень труднонаходимый баг с экранами, которые после перезагрузки чанка (причём особенного) зависали, был ликвидирован. (Sangar) Больше не получится много раз потыкать ключом по дрону, чтобы получить большее их количество. (Vexatos) Устранены проблемы с вайлой (очень странная логика у неё) (Sangar) [MC 1.8.9+] При выкидывании предметов роботами или дронами некоторые уничтожались. (Vexatos) [MC 1.8.9+] Краш при использовании функции getName на нанонашинах. (Vexatos) [MC 1.9.4+] Компоненты могли не деинициализироваться, когда чанк с ними выгружался. Это приводило, например, к смене UUID компонентов. (Sangar) [MC 1.9.4+] Починили рендер клавиатуры. (Vexatos) [MC 1.9.4+] Команды ломали /help. (Vexatos) [MC 1.9.4+] В наномашинах не было эффектов зелий. (Vexatos) [MC 1.10.2+] Улучшена интеграция с JEI. (Vexatos) Релиз на GitHub.
-
ивент Unreal Tournament: Resurrection -- Этап #2
Fingercomp ответил в тему Fingercomp в Ивенты и конкурсы
Будем считать, что с правилами определились (см. OP, там написано вкратце), так? Если да, то завтра будет первое обновление с итогом обсуждения. И можно будет начать строить арену, а затем писать сервер.- 123 ответа
-
- 1
-
-
- opencomputers
- robot
- (и ещё 2 )
-
ивент Unreal Tournament: Resurrection -- Этап #2
Fingercomp ответил в тему Fingercomp в Ивенты и конкурсы
Пункт раз. Каждые эн секунд посылается синхронизационное сообщение. Можно было к нему подстроиться для автоматического включения. Пункт два. Это соревнование программистов, а не тактиков. Программ, а не задач. Пункт три. Все программы можно протестить перед стартом (в прошлый раз два дня давалось, здесь будет неделя тестов), чтобы избежать таких проблем. Пункт четыре. Интерес программистский в распределении задач без участия человека. Это куда зрелищнее и сложнее, чем просто сказать "ты собраешь шмот, а ты убиваешь чужих". Предлагаешь вместо сурового боя роботов, где они порешают всё, ввести кукольный театр?- 123 ответа
-
- 3
-
-
- opencomputers
- robot
- (и ещё 2 )
-
ивент Unreal Tournament: Resurrection -- Этап #2
Fingercomp ответил в тему Fingercomp в Ивенты и конкурсы
Смысл в ручном управлении? Это же бои роботов, а не игроков, как я уже сказал. Именно роботов. Поэтому и биться они должны сами, без внешнего контроля. Единственное - возвращаться на базу при сигнале "стоп", а стартовать при сигнале "старт", но не более. Это куда больше азарта добавляет участникам: им надо предусмотреть как можно больше фатальных ситуаций. К тому же, кто будет контролировать, какие сигналы может послать "тренер"? Кто ему в таком случае запретит вообще самому по клеточкам тащить робота, куда надо? Весь смысл pathfinding теряется при ручном управлении. Поэтому я решительно настроен против вмешательства игроков. Боты должны быть автономны. То, что некоторым на арене скучно, - не проблемы ивента. Фан не только от забавных фигурок роботов, которые стараются друг друга зафигачить, а и от чата, от казусов, которые 100% будут, потому что это я. Да и вообще, этот ивент, как и любой другой, должен быть зрелищным, и хотя бы из-за этого стоит посмотреть на него. Тем более, что в этом этапе вырисовывается гораздо более интересная игра. Оставлю призывалку @Totoro, чтобы он ответил, стоит ли (и если да, то как) лишать ботов автономности. Есть какие-либо другие идеи по поводу правил, принципа, вопросов и арены? Если будем считать, что с этим определились, можно закрывать пункт "Определиться с правилами" и двигаться дальше.- 123 ответа
-
- opencomputers
- robot
- (и ещё 2 )
-
ивент Unreal Tournament: Resurrection -- Этап #2
Fingercomp ответил в тему Fingercomp в Ивенты и конкурсы
Потому что это бои именно роботов, а не игроков. Поэтому никакого управления игроками. В следующем этапе, может, и будет, конечно, но не тут.- 123 ответа
-
- opencomputers
- robot
- (и ещё 2 )
