- Баллы
- 103
Нужно чтобы на определенном заприваченом участке отключался флай,гейммод,неуязвимость если они включены.Как можно сделать с помощью флагов World Guard ? Командные блоки не рекомендовать
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Флаг: /rg flag [name] game-mode deny|allow 👍Нужно чтобы на определенном заприваченом участке отключался флай,гейммод,неуязвимость если они включены.Как можно сделать с помощью флагов World Guard ? Командные блоки не рекомендовать
По моему это флаг на бессмертие, только /rg flag [rg] invincible allowinvincible
Да. Как на deny он себя ведет не тестировал, потому не уверен.По моему это флаг на бессмертие, только /rg flag [rg] invincible allow
Юзать мове ивент в wg = убивание tps. Вариант говно.С ReActions - легко. Фиксируешь переменной любые изменения с игроком и, если переменная равна ненужному значению - устанавливаешь его в нужное с помощью RG_ENTER, попутно выключая креатив, god и что угодно соответствующими командами.
Смотря при каком онлайне, на маленьких серверах не заметно.Юзать мове ивент в wg = убивание tps. Вариант говно.
Будет заметно на безвайповых серверах и очень даже. Ибо там прогоняется регион лист при движение игроков.Смотря при каком онлайне, на маленьких серверах не заметно.
Юзать мове ивент в wg = убивание tps. Вариант говно.
Будет заметно на безвайповых серверах и очень даже. Ибо там прогоняется регион лист при движение игроков.
Спринти в чате лузвер мове ивент и сам все поймешь.
flud(PlayerMoveEvent e) {
e.getPlayer.sendMessage("flud");
}
@EventHandler(priority=EventPriority.NORMAL)
public void onraged (PlayerMoveEvent event){
Player player = event.getPlayer();
int moveCount = player.hasMetadata("playermove") ? player.getMetadata("playermove").get(0).asInt() : 0;
int blockCount = player.hasMetadata("playerblock") ? player.getMetadata("playerblock").get(0).asInt() : 0;
moveCount++;
player.setMetadata("playermove", new FixedMetadataValue (getPlugin(),moveCount));
if (event.getFrom().getBlockX()==event.getTo().getBlockX()&&
event.getFrom().getBlockY()==event.getTo().getBlockY()&&
event.getFrom().getBlockZ()==event.getTo().getBlockZ()) return;
blockCount++;
player.setMetadata("playerblock", new FixedMetadataValue (getPlugin(),blockCount));
Bukkit.broadcastMessage(ChatColor.DARK_PURPLE+"blocks: "+blockCount+" moves: "+moveCount);
}

Лойс. А вот сам вг когда переберает свой километровый список регионов тпс отваливается просто.Ну конечно же можно быть категоричным и делать при этом так:
А можно немного подумать и понять, что каждое вызываемое PlayerMoveEvent, в подобной ситуации, не нужно.
Смена региона происходит тогда когда игрок переступает с блока на блок. Т.е. сравниваешь коориданты getBlockX(), getBlockY, getBlockZ у координат полученных в getTo() и getFrom() если они не изменились - у игрока ничего не произошло, игрок в тех же регионах, мучать события не нужно.
Попробуй выполнить такой код:
Код:@EventHandler(priority=EventPriority.NORMAL) public void onraged (PlayerMoveEvent event){ Player player = event.getPlayer(); int moveCount = player.hasMetadata("playermove") ? player.getMetadata("playermove").get(0).asInt() : 0; int blockCount = player.hasMetadata("playerblock") ? player.getMetadata("playerblock").get(0).asInt() : 0; moveCount++; player.setMetadata("playermove", new FixedMetadataValue (getPlugin(),moveCount)); if (event.getFrom().getBlockX()==event.getTo().getBlockX()&& event.getFrom().getBlockY()==event.getTo().getBlockY()&& event.getFrom().getBlockZ()==event.getTo().getBlockZ()) return; blockCount++; player.setMetadata("playerblock", new FixedMetadataValue (getPlugin(),blockCount)); Bukkit.broadcastMessage(ChatColor.DARK_PURPLE+"blocks: "+blockCount+" moves: "+moveCount); }
Даже по частоте выводимых сообщений - увидишь, что не всё так страшно как ты пугаешь.
Вот что получилось у меня:
Посмотреть вложение 34539
Смотри - больше 70% событий не были учтены и обработаны.
Кстати, как думаешь проверят сам WG куда игрок выходит? Он использует... PlayerMoveEvent. И кстати, тоже учитывает переход из блока в блок.
Теперь если говорить о переборе всех регионов. Это не так долго. Нужно только просчитать разок. Если есть свободное время - добавь в PlayerMoveEvent этот "перебор" - получение регионов в одной точке и замерь время выполнения. Только считай в наносекундах, миллисекунды тут не подойдут.
Кстати, в ReAcitons не происходит перебора всех регионов, а только тех, которые задействованы в активаторах. Т.е. если на сервере 1000 регионов, а в ReActions используется 20, то проверка происходит по 20 регионам. Думаю это дает дополнительный эффект (который в общем-то не нужен).
Проблемы с PlayerMoveEvent как правило проистекают из того что в этом событии делается (да и в любом другом, просто в PlayerMoveEvent - это особенно заметно).
К примеру, если происходит то, что нужно автору - то это фигня и никак себя не проявит.
А вот если тебе нужно в каждом PlayerMoveEvent производить какие-то действия, которые требуют время на свое выполнение, то тут можно положить сервер однозначно.