Doob 2 750 Опубликовано: 4 февраля, 2018 В цен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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
whiskas 144 Опубликовано: 4 февраля, 2018 (изменено) а зачем робот в такой программе? а посмотрел видео. Что б поднимать( Изменено 4 февраля, 2018 пользователем whiskas Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 4 февраля, 2018 @@Doob, а как происходит начальное ценообразование на товары, которые еще вообще ни разу не продавались и не покупались? От каких стартовых цен и их соотношения начинает эта вся система плясать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob Автор темы 2 750 Опубликовано: 5 февраля, 2018 (изменено) Начальную цену можно выставить любую, в процессе работы, она всё равно будет калиброваться. По просьбе трудящихся убрал падение цены до 0. Даже если продают, чем покупают бесконечно больше, цена будет = 1. Тут оператор должен сам решать, какие товары будет добавлять в базу данных. В дефолтной сейчас ванильные предметы, которые нельзя получить из имеющихся, без потерь (кроме коблы и грязи). Изменено 5 февраля, 2018 пользователем Doob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 5 февраля, 2018 (изменено) Начальную цену можно выставить любую, в процессе работы, она всё равно будет калиброваться. По просьбе трудящихся убрал падение цены до 0. Даже если продают, чем покупают бесконечно больше, цена будет = 1. Тут оператор должен сам решать, какие товары будет добавлять в базу данных. В дефолтной сейчас ванильные предметы, которые нельзя получить из имеющихся, без потерь (кроме коблы и грязи). Имхо нужно сделать ограничение на продажу игроками. Как только цена падает до единицы - скупка прекращается. Изменено 5 февраля, 2018 пользователем NEO Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob Автор темы 2 750 Опубликовано: 6 февраля, 2018 Тоже вариант, но не для всех ресурсов. Например, ломазы могут скупить быстро, а бревна будут висеть, если игроков мало, то будет большая инерция из-за того, что всем лень мониторить цены. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st 88 Опубликовано: 6 апреля, 2018 Можно сделать биржу с неавтоматической установкой цен, но и не с фиксированной. Предлагаю сделать так: игрок-покупатель делает ордер на покупку. Если нету предметов с такой ценой в продаже, можно установить время, за которое какой-нибудь игрок-продавец даст ордер на сумму, равную или ниже стоимости в ордере, то предмет в n-количестве покупки блокируется и становится доступен только тому, кто его купил. Игрок-покупатель приходит в пункт торговли и забирает. Да, сложно, однако такой рынок будет зависеть от мысли не нескольких игроков-богачей, а от обстоятельств на сервере. При этом если опять же игроки будут скупать все, цена так же будет взлетать, однако уже по воле игроков и без алгоритмов. Ну и поставить бота, который будет просто вешать ордера на покупку, используя среднюю цену на рынке*произвольный коэффициент больше 0.5, дабы игроки могли получать внутриигровую валюту без других богачей. Вот и решена проблема с ценами и алгоритмами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ivan52945 75 Опубликовано: 7 апреля, 2018 (изменено) А нельзя ли просто рынок запилить, установив цены на игровые вещи которые нельзя скрафтитьили это рип Изменено 7 апреля, 2018 пользователем ivan52945 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya 415 Опубликовано: 16 ноября, 2019 @Doob Есть, к слову, тоже пару рипов. 1 - это робот. Постоянно, просто постоянно игроки лезли в чужие кабинки, когда были не свободные кабинки, а с дверью. А с роботом вообще ни о какой безопасности речи быть не может =\ 2 - сериализация openos'овская. Рип же, не эффективно. А как делать, если случайно утопил жёсткий диск в лаве? Да и жд получается дёргается очень часто. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob Автор темы 2 750 Опубликовано: 16 ноября, 2019 От робота я отказался, теперь только транспозеры. Храню теперь все в csv, чтобы можно было строить красивые графики в plotly. Жесткие диски должны стоять в RAID, купать их незачем. Вся прога - полный рип, зависимость от тяжеловесной библиотеки, которая больше не работает и обновлять ее никто не будет. Зависимость от мода, который тоже на ладан дышит. Сейчас в пятый раз перерабатываю концепцию с нуля. Никаких зависимостей, моментальный старт прямо с EEPROM, автообновление, работа на ванильных контейнерах, без лишних модов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 16 ноября, 2019 37 минут назад, BrightYC сказал: 1 - это робот. Постоянно, просто постоянно игроки лезли в чужие кабинки, когда были не свободные кабинки, а с дверью. А с роботом вообще ни о какой безопасности речи быть не может =\ А в чём небезопасность роботов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya 415 Опубликовано: 16 ноября, 2019 1 минуту назад, Doob сказал: Сейчас в пятый раз перерабатываю концепцию с нуля. Никаких зависимостей, моментальный старт прямо с EEPROM, автообновление, работы на ванильных контейнерах, без лишних модов. Сильно. В каком смысле автообновление? Как хочешь добавить поддержку oreDict? Работа на ванильных контейнерах - это как? Будешь делать огромные поля из сундуков? Работа на транспозерах - нечестно, ибо на 1.7.10 работать с инвентарём игрока через транспозер не представляется возможным=\ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya 415 Опубликовано: 16 ноября, 2019 1 минуту назад, eu_tomat сказал: А в чём небезопасность роботов? Заходит другой игрок пока другой получает товары, ну вот и небезопасность. Либо просить админов отключить телепорты/эндержемчуги, но там где я играю - есть куча предметов, которые помогут проникнуть в кабинку. PIM/транспозер - надёжнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob Автор темы 2 750 Опубликовано: 16 ноября, 2019 17 минут назад, BrightYC сказал: В каком смысле автообновление? Как хочешь добавить поддержку oreDict? Работа на ванильных контейнерах - это как? Будешь делать огромные поля из сундуков? В смысле, не когда пользователь захочет, а когда обновится в репозитории. C oreDict все просто, надо только добавить дополнительную структуру данных для фильтрации. Ужас будет, когда моды перейдут в ванильное пространство имен. Поля из сундуков, да. Но и возможность подключить Refined Storage или Applied Energistics систему. Я просто отделил управление ресурсами от обменного терминала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya 415 Опубликовано: 16 ноября, 2019 2 минуты назад, Doob сказал: В смысле, не когда пользователь захочет, а когда обновится в репозитории. А, так у меня тоже не ручное скачивание же. Небольшой патч в лаунчере и скачивается свежая версия и запускается. Всё же не понятно, что за доп. структура для фильтирации Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 16 ноября, 2019 51 минуту назад, BrightYC сказал: Заходит другой игрок пока другой получает товары, ну вот и небезопасность. Либо просить админов отключить телепорты/эндержемчуги, но там где я играю - есть куча предметов, которые помогут проникнуть в кабинку. PIM/транспозер - надёжнее. Вполне безопасно, если проверять наличие посторонних игроков в кабинке. А наилучший способ передачи предметов зачастую определяется не теорией, а конкретным игровым сервером: где-то транспозер не работает с интерфейсом игрока, где-то админы запретили PIM. Что тогда остаётся использовать кроме робота? Правда, возможности гарантированно обнаружить постороннего игрока тоже может не быть. Существует ли что-то кроме сенсора из OpenPeripheral, способное обнаружить неподвижных игроков? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya 415 Опубликовано: 16 ноября, 2019 1 минуту назад, eu_tomat сказал: Правда, возможности гарантированно обнаружить постороннего игрока тоже может не быть. Существует ли что-то кроме сенсора из OpenPeripheral, способное обнаружить неподвижных игроков? Computronics радар обнаруживает игроков/предметы. 1 минуту назад, eu_tomat сказал: Вполне безопасно, если проверять наличие посторонних игроков в кабинке. А наилучший способ передачи предметов зачастую определяется не теорией, а конкретным игровым сервером: где-то транспозер не работает с интерфейсом игрока, где-то админы запретили PIM. Что тогда остаётся использовать кроме робота? Моё мнение - не играть там. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 16 ноября, 2019 2 минуты назад, BrightYC сказал: Computronics радар обнаруживает игроков/предметы. Насколько я помню, этот радар не показывает координаты игроков. Соответственно, мы не знаем, находится ли другой игрок в нашей кабинке или же соседней. Можно, конечно, поставить радар на достаточном удалении от стен кабинки, но тогда компактность страдает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya 415 Опубликовано: 16 ноября, 2019 18 минут назад, eu_tomat сказал: Насколько я помню, этот радар не показывает координаты игроков. Соответственно, мы не знаем, находится ли другой игрок в нашей кабинке или же соседней. Можно, конечно, поставить радар на достаточном удалении от стен кабинки, но тогда компактность страдает. Можно указать, на каком расстоянии сканирует радар. К тому же, возвращает он абсолютные координаты, т.е на первичной настройке можно указать координаты кабинки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya 415 Опубликовано: 16 ноября, 2019 Я тут посмотрел, и моя программа в целом может запускаться без OpenOS. Нужно только формат вещей адекватно продумать, а так - переделать не сложно, я думаю. И конфиг можно адекватно настроить. @Doob Можно конкретики? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах