Doob
-
Публикации
1 089 -
Зарегистрирован
-
Посещение
-
Победитель дней
141
Сообщения, опубликованные пользователем Doob
-
-
Тоже вариант, но не для всех ресурсов. Например, ломазы могут скупить быстро, а бревна будут висеть, если игроков мало, то будет большая инерция из-за того, что всем лень мониторить цены.
-
1
-
-
Начальную цену можно выставить любую, в процессе работы, она всё равно будет калиброваться.
По просьбе трудящихся убрал падение цены до 0. Даже если продают, чем покупают бесконечно больше, цена будет = 1.
Тут оператор должен сам решать, какие товары будет добавлять в базу данных. В дефолтной сейчас ванильные предметы, которые нельзя получить из имеющихся, без потерь (кроме коблы и грязи).
-
В ценooбразoвании неразумнo oтдавать власть игрoкам, т. к. в майне челoвек бессмертен, а сo всякими админшoпами ресурсы бескoнечны. Активную тoргoвлю ведут тoлькo нoвoприбывшие, а те, ктo наигрался - набили сундуки ресурсами и ушли. Следoвательнo, неoбхoдимo скупать излишек, давая вoзмoжнoсть oбменять любoй ресурс, на любoй другoй, пo справедливoй цене.
Централизoванная скупка-прoдажа вывoрачивает недoстатки баланса в майне (тoчнее, егo oтсутствия), т. к. ресурсы=время, ресурсы не имеют веса, а с мoдами, oбъем стремится к нулю, oтсутствует энтрoпия, тo кoличествo ресурсoв вoзрастает пo экспoненте (с мoдами ускoряющими развитие, в ванили этo прoстая арифметическая прoгрессия). На бoльшинстве серверoв эта прoблема решается регулярными вайпами или oрганизoванным рoлеплеем.
Представляю вам прoграмму умнoгo бартера, кoтoрая пoзвoляет oбменивать джинсы/бусы на зoлoтo/алмазы, пo справедливым ценам.
Принцип рабoты
Тoргoвый терминал пoкупает и прoдает предметы, устанавливая цены, oснoвываясь на закoне спрoса и предлoжения.
Вычисление цены сoстoит из трех фoрмул:
- O/(I-O[+1])/I*M - пoлучение реальнoй стoимoсти предмета. (I - купленo, O - прoданo, M - мнoжитель) I-O этo разница между купленными и прoданными предметами, т. е. текущее кoличествo. Чтoбы пoлучить нoрмальнoе oтнoшение при I=O, всегда прибавляем 1. Далее, пoлучаем oтнoшение всех прoданных предметoв к текущему кoличеству - O/(I-O+1). Затем, делим результат на кoличествo купленных предметoв, чтoбы пoлучить oбратную прoпoрцию и умнoжаем на некoтoрoе числo, кoтoрoе пoзвoлит представить кoэффициент спрoса/предлoжения в виде натуральнoгo числа.
- ((R-C)/R)*C+C - если реальная стoимoсть бoльше текущей. (R - реальная стoимoсть, C - текущая) Пoлучаем разнoсть между реальнoй и текущей, делим на реальную, для пoлучения натуральнoй oснoвы. Далее, умнoжаем на текущую, и увеличиваем текущую стoимoсть на пoлученнoе значение.
- (C-R)/3+R - если реальная ниже текущей. Пoлучаем oбратную разницу, делим на кoэффициент падения цены (мoжет быть случайным значением oт 1 дo inf или oтнoшением C/R, лучше втoрoе, нo пoлучается слишкoм маленькая инерция) и дoбавляем этo делo к реальнoй стoимoсти.
Пример сферическoгo в вакууме рoста цены:

Пример падения:

Уcтрoйствo
Тoргoвый терминал сoстoит из кoмпьютера, рoбoта и прoизвoльнoй сети хранения предметoв AE2.
Рoбoт, пo кoманде терминала, загружает и выгружает предметы, кoтoрые нахoдятся в буфере.
К буферу пoдключен терминал через адаптер с кoнтрoллерoм инвентаря, кoтoрый пoзвoляет пoдсчитывать пoкупаемые у пoльзoвателя предметы.
Терминал управляет перемещением предметoв между буферoм и МЕ сетью, через адаптер у МЕ-интерфейса. (На MC 1.7.10 нужен аддoн OpenPeripheral, дoбавляющий неoбхoдимые драйвера)




Кoмпoненты
Для терминала пoтребуется: алмазный кoрпус с алмазным мoнитoрoм, интернет-карта, беспрoвoдная карта, алмазная графическая карта, Lua BIOS, жесткий диск с OpenOS, прoцессoр и максимум ОЗУ.
Периферия: редстoун-I/O (для включения и перезагрузки), 2 адаптера, кoнтрoллер инвентаря, кoнвертер энергии, клавиатура, зарядник для рoбoта, ME-интерфейс и ME-дискoвoд с дискетами.
Для рoбoта: зoлoтoй кoрпус, инвентарь, EEPROM, беспрoвoдная карта, прoцессoр и минимум OЗУ.
Устанoвка и настрoйка
wget https://raw.githubusercontent.com/DOOBW/automarket/master/terminal.lua wget https://raw.githubusercontent.com/DOOBW/automarket/master/style.gss wget https://raw.githubusercontent.com/DOOBW/automarket/master/start.lua wget https://raw.githubusercontent.com/DOOBW/automarket/master/market.db wget https://raw.githubusercontent.com/DOOBW/automarket/master/robot_bios.lua wget https://raw.githubusercontent.com/DOOBW/automarket/master/gml.lua /lib/gml.lua echo start >> .shrc
В файле robot_bios.lua задать переменнoй address первые 4 симвoла адреса сетевoй карты терминала. Прoшить этoт файл в EEPROM рoбoта.В файле terminal.lua, в таблице cfg задать стoрoны: ic_side - стoрoна, с кoтoрoй нахoдится буфер пo oтнoшению к адаптеру с кoнтрoллерoм инвентаря. mei_side - стoрoна, с кoтoрoй нахoдится буфер oтнoсительнo адаптера.
Перезагрузить терминал, включить рoбoта и мoжнo пoльзoваться.
База данных устроена так:
db = { users = { ['Ник_пользователя'] = { balance = счет, count = количество совершенных операций, lastlogin = время последней операции } }, items = { ['название_мода:название_предмета|метаданные'] = { label = Лейбл_предмета, i = куплено, o = продано, cost = текущая_стоимость } } }Пример работы (старая версия)
-
7
-
На максимальном разрешении (160x50) один кадр рендерится 5-8 компами как-раз за 1 тик. 20 фпс на полный кадр это хорошо.
Но если нужна цветная картинка 320x200, то объем данных увеличивается и обычный модем для этой цели не подходит.
Помимо ограничений скорости обработки файловой системы и интернет-сокетов, есть ограничение рендера майна - при низком тпс видны ощутимые подлагивания. Это дело надо обстоятельно затестить на нормальном железе, чтобы определить технический предел.
-
Все прекрасно биндится, в порядке живой очереди.
Я тестил это дело в одиночке. Скорость вывода увеличивается примерно пропорционально количеству видеокарт.
То есть: пришло сообщение, все видеокарты одновременно биндят монитор и спокойно выводят на него инфу.
Здравая идея с сервером, в модемах я разочаровался еще при компутеркрафте, когда делал многопользовательские игры.
Если взять либу MoviePy, то можно запилить сервер конвертирующий видео (с ютуба, например) в соответствующий формат для опенкомпов и рендерить с вполне реальной скоростью. Я за это дело брался, но бросил т. к. не придумал, как синхронизировать звуковую дорожку.
Самый главный плюс внешнего сервера это даже не скорость передачи, а возможность моментально определить ключевые кадры с дельтами и все это в опенкомповских 256 цветах вещать потоком. Оперкомпам не приходится напрягаться ни на что, кроме вывода кадров.
-
Одна локация? Мало питомцев, маленькие комнаты. Как-то скучно, да и лагает дико.
-
Люди, которых что-то отпугивает, это непотенциальные игроки, кому они нужны?
Мой клан несколько лет творил полный фарш на многих серверах DayZ Epoch (например, однажды хакнули сейф админов и увели технику из гаража, после того, как все раздарили, на сервере два дня шла безумная война).
Кто-то строился, кто-то стрелялся, иногда собирались толпой выполнять миссии/мочить игроков. Никто не обижался, даже одиночки, которых преследовали несколько кланов. Наверное, потому-что каждый начинал с обычного DayZ, где убить голого новичка в черно/электро - святое дело. Да и без читеров было-бы скучно. А вот игры со смесью казуальщины и пострелушек рождают соответственных игроков, которые ни рыба, ни мясо.
-
1
-
-
Отнять аптайм компутера при запуске проги и добавлять его каждый раз перед выводом. Собственно, по ссылке оно и есть.
-
1
-
-
-
В интернете.
-
1
-
-
Ало, это клон DayZ, который арма, геймплей перенесен полностью. Тому, кто не бегал на перегонки с пулями по Электро, не кемперил ВПП, не ползал по кустам с двумя патронами и переломом по лесу, после неожиданной встречи с другим игроком, геймплей объяснять бесполезно. В DayZ Epoch и его производных есть приваты, сейфы, виртуальные гаражи, но там, как говорится, анал-карнавал: админ это царь ибох, донатные бессмертные танки и самолеты, т. к. арма состоит из багов чуть более, чем полностью, то вводятся бредовые правила вроде "не взламывать сейфы", "не взрывать заприваченный забор", "не стрелять", "не чесаться" и т. д. И какой же это зомби-апокалипсис, если можно сказать "чик-чик, я в домике", тут у нас война за выживание, а не симулятор карапуза в песочке.
DayZ это весело, интересно и познавательно, хотя, у некоторых личностей пукан бомбит по любому поводу и это не лечится.
А вообще, лучший мод для армы - ACE, тут и нормальная физика, и дисциплина среди игроков, и хороший отдых от бомбящих ололошек.
-
1
-
-
Игроки хоть есть? Как по мне, Unturned намного увлекательней и красивей.
-
Вот где бы пригодились нейросети. Каждое слово можно завуалировать кучей разных способов, поэтому придется составить огромный соварь и постоянно читать логи, чтобы его обновить. Вроде есть сервисы по анализу контекста сообщений, на их основе можно выбирать подозрительные куски текста и руками добавлять в фильтр.
Если создавать нейросеть, способную определять мат в сообщении, хотя-бы для одного языка, то придется неплохо вложиться, хотя задача довольно простая.
-
1
-
-
Для любителей тыкать логические блоки, есть StarMade, можно почти полностью автоматизировать полеты. Космический корабль можно переделать в межпланетный лифт, который, например, будет сам обороняться от пиратов.
-
Вот, давно бы так, чтоб все как у людей.Теперь у надписи есть свойство
которое автоматически отцентрирует строку.
-
Делается это точно так же, как и без гуи, только с гуи.
В качестве гуи взял forms:
local component, uptime, internet = require('component'), require('computer').uptime -- получаем компоненты и аптайм local forms = require('forms') -- подключаем библиотеку local W, H = component.gpu.getResolution() -- получаем размер экрана if component.isAvailable('internet') then -- проверяем наличие интернета internet = component.internet else error('No internet card available.', 0) end if not internet.isHttpEnabled() then -- проверяем доступ по http error('HTTP is disabled.', 0) end local args, tz = {...}, 10800 -- получаем аргументы и задаем дефолтную тайм-зону if args[1] then -- если есть аргумент tz = tonumber(args[1])*3600 -- получаем разницу от UTC0 в секундах end local req, reason = internet.request('https://time100.ru/api.php') -- запрашиваем таймштамп if not req then error('Failed to issue request: '..reason, 0) end -- проверяем на ошибки local timestamp = '' while true do -- получаем таймштамп из потока local data, reason = req.read() if not data then req.close() if reason then error(reason, 0) end break end timestamp = timestamp..data end local b_time = timestamp-uptime()+tz -- получаем разницу от аптайма forms.ignoreAll() -- чистка листенеров local main = forms.addForm() -- создаем форму main.W = 20 -- ширина и main.H = 6 -- высота главного окна main.left = (W-main.W)/2 -- размещаем окно по центру экрана main.top = (H-main.H)/2 main.border = 2 local l_time = main:addLabel(2,2,'') -- добавляем к форме зародыш времени local l_date = main:addLabel(2,3,'') -- и даты local btn_exit = main:addButton((main.W-7)/2,5,'exit', forms.stop) -- добавляем кнопку выхода local timer = main:addTimer(1, function() -- создаем таймер local c_date = os.date('*t', b_time+uptime()) -- получаем время из текущего таймштампа l_time.caption = ('time: '..c_date.hour..':'..c_date.min..':'..c_date.sec) -- задаем текст с текущим временем l_date.caption = ('date: '..c_date.day..'/'..c_date.month..'/'..c_date.year) -- задаем текст с датой l_time.W = #l_time.caption -- получем длину текста времени l_date.W = #l_date.caption -- и даты l_time.left = (main.W-l_time.W)/2+1 -- размещаем по центру окна l_date.left = (main.W-l_date.W)/2+1 main:redraw() -- перерисовываем end) timer:run() -- запускаем таймер forms.run(main) -- запускаем окно-
3
-
-
Нечего тут тестировать, если нет мода отрубающего руки. Запускаем сервер, кидаем моды и играем, все.
нужно для начала написать 5 петабайт скриптов, которые там будут что-то собирать, крафтить, добывать и управлять роботами, при чем полностью без участия человека
Замысел как-раз в обратном - игроки сами пишут скрипты в процессе игры, кто лучше написал, тот и молодец.
-
Средствами OC и CX, без использования дебаги или комблока это невозможно. Радиус 50 килоблоков это pi(50k^2) - почти 8 миллиардов блоков, умножим это хотя-бы на высоту самых высоких гор, получим больше триллиона блоков. Следовательно, не имея файла мира или доступа к командам оператора, ничего сделать нельзя.
-
В первом посте есть пример обучения. Только тут нет выбора типа сети, нет адекватного управления дампами, представление данных совершенно костыльное.
Если есть идеи, как использовать нейросети в опенкомпах, можно написать либу, с поддержкой 4 самых популярных типов сетей. Благо, в основе они очень похожи, за исключением сверточных.
Обучать можно на нормальной платформе, дампы переносить в опенкомпы и использовать по назначению.
-
Не все так просто. Lua написан на си и написан чисто.
https://github.com/lua/lua/blob/master/lmathlib.c
https://github.com/lua/lua/blob/master/lbitlib.c
Тут не к чему придраться. Си тоже неплохо отполирован, хотя и остаётся языком костылей. Тут надо разобраться с виртуальным процессором, т. к. реальный процессор работает сверх-очевидно и оптимально написанные программы работают как и должны.
-
Неплохо, но где обратная операция? Она ведь во многих случаях вызывается чаще и жрет больше времени.
А теперь попробуем адаптировать подход, который часто применяется в ассемблере: разделим 64int на 3 части, y максимум будет 255, а x и z - 134217728, хеширование происходит за 6 операций (тут нет умножения, хотя с мат. сопроцессором это не играет роли).
local function hash(x, y, z) x, z = x+134217728, z+134217728 return y|(x<<8)|(z<<36) end
Если бы не требовалось при поиске пути каждый раз получать исходное число, скорость была бы не намного выше, чем при использовании многомерных массивов.Я проводил сравнение нескольких алгоритмов хеширования и для реализации на опенкомпах остановился на единственном оптимальном варианте - многомерный массив, т. к. если расход памяти сверхкритичен, проще подгружать чанки оптимально закодированной карты, чем тратить кучу времени на ползание по ней. Сравнительная таблица где-то потерялась, но хорошо помню, что поиск таким способом в 100^3 вершинах происходит где-то за 20 секунд (в опенкомпе это около четырех часов), алгоритм поиска A* с манхетеннской эвристикой.
Вот, кстати, тестовый код: https://pastebin.com/0uj6v3KX, убрать одни операции и добавить другие можно, но результат примерно тот же. И да, должен быть алгоритм нахождения расстояний в захешированных координатах, как-нибудь надо будет проверить.
-
Не стоит сильно экономить память в опенкомпах, т. к. ее очень много, а процессор крайне медленный.
Например, если для хеширования массивов использовать традиционный битовый сдвиг, то скорость работы с массивом падает в тысячи раз. Особенно критично, если применять это для хранения карт и поиска пути на традиционных алгоритмах.
Да, реализация битового сдвига хромает, но деление по модулю и взятие остатка заставляет биться головой об стену.
-
У меня лаги смертельные, играть невозможно. Рендер внешности персонажей лишний, это ведь не спектрум, можно было бы оптимизировать (а еще лучше показывать внешность только в диалогах), чтобы не перерисовывать по килопикселю за раз.
-
Это не интересно.
Почему же не интересно? Если сделать это в виде толковой мини игры, то будет такая фича сервера. Могу взяться написать. Графоний, правда в опинкомпах отсутсвует, но есть куча текстовых игр, в которые играют десятилетиями.
-
1
-

Cканер эффектов нанороботов
в Разное
Опубликовано:
oppm install nn
Правда не стабильно работает это дело на лагающем севере.