Идея Доработка плагина RedstoneClockDetector

  • Автор темы Автор темы ARHIGOD
  • Дата начала Дата начала

ARHIGOD

Активный участник
Пользователь
Баллы
63
Имя в Minecraft
ARHIGOD
http://dev.bukkit.org/bukkit-plugins/redstone-clock-detector/
RedstoneClockDetector это плагин, позволяющий найти зацикленные рэдстоун схемы и тем самым предотвратить лаги на сервере.
/rcd <sec> сканирует <sec> секунд
далее оно выводит список, в порядке убывания, сколько раз активировался блок, и его координаты.
/rcd break <num> можно разрушить блок в списке под номером <num>
тк. бывает что надо уехать и ты просто не можешь всегда следить за сервером, я бы хотел попросить доработать данный плагин. чтоб он с задержкой 5мин, запускал себя /rcd 5 и если активность у номера k >100, то прописывать команду /rcd break k
Конечно, хотелось бы, чтоб все числа можно было изменять в конфиге.

К сожалению создатель этого плагина уже давно его не поддерживает, а аналогов ему я не нашел.Вроде это не должно занять время, ведь уже есть готовый плагин, его надо просто чуть доработать. Буду очень благодарен тому, кто это сделает.

Так же, если все норм получится, возможно некое поощрение от меня лично.
 
Я думаю мой кодер может взяться за написание плагина.
Назовите сумму оплаты за до/разработку этого плагина.
 
Спасибо за тему. Давно искал что то вроде такого 🙂
Потом для себя обновлю, если не заработает на 1.6.2.
 
Хоть кто нибудь, хоть как нибудь, сделайте для начала пожалуйста. Очень прошу.
 
если бы надо было просто прописать пару команд, то это одно дело, но ведь надо еще смотреть, сколько раз тот или иной рэдстоун сработал. Ведь в заголовке и написано, что надо доработать плагин, хотя вся доработка заключается в том, что с него надо считать всего один массив и его переменные сравнить с заданным числом и потом уже прописывать delete. А не тупо заданные действия, которые будут удалять не только схемы нагружающие сервер, но и обычные рычаги, кнопки и тп, которые за эти 5 сек кто-то пару раз использовал и они попали в топ списка под номером 1. Зачем мне было советовать читать какой-то конфиг плагина, которые тупо может что-то с заданным временем прописывать в консоль, я не пойму. Прежде чем писать, вникни в суть темы.
Проверил работу команды break. Ее даже не обязательно использовать ко всем номерам, а достаточно только к первому. Т.е. достаточно просто после /rcd 5 выудить значение из первой строчки: активность редстоуна, и если активность больше 100, прописать /rcd break 1
Я с языком java не знаком, но имхо это не должно быть очень трудно и занять много времени, надо просто в этом плагине откопать этот переменную или массив, отвечающий за активность. Да и еще от меня поощрение будет.
 
если бы надо было просто прописать пару команд, то это одно дело, но ведь надо еще смотреть, сколько раз тот или иной рэдстоун сработал. Ведь в заголовке и написано, что надо доработать плагин, хотя вся доработка заключается в том, что с него надо считать всего один массив и его переменные сравнить с заданным числом и потом уже прописывать delete. А не тупо заданные действия, которые будут удалять не только схемы нагружающие сервер, но и обычные рычаги, кнопки и тп, которые за эти 5 сек кто-то пару раз использовал и они попали в топ списка под номером 1. Зачем мне было советовать читать какой-то конфиг плагина, которые тупо может что-то с заданным временем прописывать в консоль, я не пойму. Прежде чем писать, вникни в суть темы.
Проверил работу команды break. Ее даже не обязательно использовать ко всем номерам, а достаточно только к первому. Т.е. достаточно просто после /rcd 5 выудить значение из первой строчки: активность редстоуна, и если активность больше 100, прописать /rcd break 1
Я с языком java не знаком, но имхо это не должно быть очень трудно и занять много времени, надо просто в этом плагине откопать этот переменную или массив, отвечающий за активность. Да и еще от меня поощрение будет.

Попробуй Varscript, или этот, который от fromgate (фромгейт, ссори из-за того что я забыл его название)
 
Варскрипт позволяет изменять различные сценарии игры, если честно, я не совсем понимаю, как он может "влезть" в другой плагин (либо он этого не может, либо я не полностью понимаю его функционал). А если вы мне предлагаете на варскрипте написать поиск зацикленных схем и их удаление, то это для меня вообще как-то по харду =)
 
Написал модуль на варскрипте: RedstoneLagDetector
@RedstoneLagDetector:setDelay - установить время сканирования в тиках (по умолчанию 200 тиков)
@RedstoneLagDetector:setLimit - установить лимит редстоуновых действий (30)
@RedstoneLagDetector:setHandler - установить обработчик лагающих блоков (выводит координаты в чат)
@RedstoneLagDetector:find - найти все лагающие блоки
@RedstoneLagDetector:detect - найти блоки и пройтись по ним обработчиком

Сначала кину топикстартеру для тестирования. Позже выложу для всех.
 
Написал модуль на варскрипте: RedstoneLagDetector
@RedstoneLagDetector:setDelay - установить время сканирования в тиках (по умолчанию 200 тиков)
@RedstoneLagDetector:setLimit - установить лимит редстоуновых действий (30)
@RedstoneLagDetector:setHandler - установить обработчик лагающих блоков (выводит координаты в чат)
@RedstoneLagDetector:find - найти все лагающие блоки
@RedstoneLagDetector:detect - найти блоки и пройтись по ним обработчиком

Сначала кину топикстартеру для тестирования. Позже выложу для всех.

Вопросец по PNBT можно?)
 
Вопросец по PNBT можно?)

PowerNBT?
Можно конечно.
И лучше в личку, чтобы тему не засорять
Выкладываю свое решение.
Модуль: http://pastebin.com/5FqScZdK класть в папку с модулями (./plugins/VarScript/scripts/vs/modules/)
Настройки по умолчанию:
на проверку дается 200 тиков (10 секунд)
лимит нагрузки редстоуна за это время - 30 (все, что больше - детектируется)
Использование напрямую:
/> @RedstoneLagDetector:find:{BREAKBLOCK} - сломать все найденные блоки
/> @RedstoneLagDetector:find:{1 EXPLODE} - взорвать все найденные блоки
/> @RedstoneLagDetector:find:{4 SETBLOCKID} - заменить на кобблстоун

Создание задачи:
/task findRedLags create - создать задачу с именем findRedLags
/task findRedLags event add REPEAT 600 - событие каждые 600 тиков (30 секунд)
/task findRedLags action add VS @RedstoneLagDetector:find:{BREAKBLOCK} - добавляем действие. Можно выбрать любое из вышеперечисленных, или написать что-нибудь своё
/task findRedLags enable - включаем задачу
/task findRedLags - просто посмотреть задачу.

Если что, есть еще такие команды
/task findRedLags disable - выключить задачу
/task findRedLags remove- сделать бочку

Значения параметров для модуля можно изменить так:
/task findRedLags init add VS 60 @RedstoneLagDetector:setDelay
/task findRedLags init add VS 100 @RedstoneLagDetector:setLimit
И не забываем перезагрузить задачу (чтобы init сработал)
/task findRedLags reload
Вот и всё.
По просьбе @zaznay обновление скрипта под VarScript 1.2+
Код:
delay = 200
limit = 30

blocksMap = [:]
listen(BlockRedstoneEvent){
    def b = it.block
    if (b in blocksMap) blocksMap[b]++
    else blocksMap[b] = 1
}
interval(delay){
    def lags = blocksMap.findAll{k,v -> v>limit}.collect{it.key}
    lags.each {it.breakNaturally()}
    if (lags) println ("cleared $lags.size blocks")
    blocksMap.clear()
}
Создаем RedstoneLagDetector.groovy с этим кодом в директории autorun.

Думаю, суть понятна. Каждые ${delay} тиков он удаляет блоки, которые за последние ${delay} тиков сделали больше ${limit} событий с редстоуном.

Чтобы запустить его в первый раз вводим
/ws RedstoneLagDetector reload

Чтобы он запускался автоматически, вводим
/ws autorun add RedstoneLagDetector

Можно было создать репу на гитхабе, но для 15-строчного скрипта это глупо.
 
PowerNBT?
Можно конечно.
И лучше в личку, чтобы тему не засорять
Выкладываю свое решение.
Модуль: http://pastebin.com/5FqScZdK класть в папку с модулями (./plugins/VarScript/scripts/vs/modules/)
Настройки по умолчанию:
на проверку дается 200 тиков (10 секунд)
лимит нагрузки редстоуна за это время - 30 (все, что больше - детектируется)
Использование напрямую:
/> @RedstoneLagDetector:find:{BREAKBLOCK} - сломать все найденные блоки
/> @RedstoneLagDetector:find:{1 EXPLODE} - взорвать все найденные блоки
/> @RedstoneLagDetector:find:{4 SETBLOCKID} - заменить на кобблстоун

Создание задачи:
/task findRedLags create - создать задачу с именем findRedLags
/task findRedLags event add REPEAT 600 - событие каждые 600 тиков (30 секунд)
/task findRedLags action add VS @RedstoneLagDetector:find:{BREAKBLOCK} - добавляем действие. Можно выбрать любое из вышеперечисленных, или написать что-нибудь своё
/task findRedLags enable - включаем задачу
/task findRedLags - просто посмотреть задачу.

Если что, есть еще такие команды
/task findRedLags disable - выключить задачу
/task findRedLags remove- сделать бочку

Значения параметров для модуля можно изменить так:
/task findRedLags init add VS 60 @RedstoneLagDetector:setDelay
/task findRedLags init add VS 100 @RedstoneLagDetector:setLimit
И не забываем перезагрузить задачу (чтобы init сработал)
/task findRedLags reload
Вот и всё.
По просьбе @zaznay обновление скрипта под VarScript 1.2+
Код:
delay = 200
limit = 30

blocksMap = [:]
listen(BlockRedstoneEvent){
    def b = it.block
    if (b in blocksMap) blocksMap[b]++
    else blocksMap[b] = 1
}
interval(delay){
    def lags = blocksMap.findAll{k,v -> v>limit}.collect{it.key}
    lags.each {it.breakNaturally()}
    if (lags) println ("cleared $lags.size blocks")
    blocksMap.clear()
}
Создаем RedstoneLagDetector.groovy с этим кодом в директории autorun.

Думаю, суть понятна. Каждые ${delay} тиков он удаляет блоки, которые за последние ${delay} тиков сделали больше ${limit} событий с редстоуном.

Чтобы запустить его в первый раз вводим
/ws RedstoneLagDetector reload

Чтобы он запускался автоматически, вводим
/ws autorun add RedstoneLagDetector

Можно было создать репу на гитхабе, но для 15-строчного скрипта это глупо.
... 2013, или это баг...??? (Лайки? 😬)
 
Назад
Верх