From eb4045912a3911a646ee5be4069d93dab78893ee Mon Sep 17 00:00:00 2001 From: HorridoJoho <HorridoJoho@l2jserver.com> Date: Thu, 3 Dec 2020 13:18:18 +0100 Subject: [PATCH] BufferService (forbid-configs) Remove hardcoded restrictions from CustomServiceScript. Add loading of forbid-configs in BufferService. A game update is required for this to work. See commit in game for more details. --- .../service/base/CustomServiceScript.java | 29 ++++--------- .../custom/service/buffer/BufferService.java | 42 +++++++++++++++++-- 2 files changed, 45 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/l2jserver/datapack/custom/service/base/CustomServiceScript.java b/src/main/java/com/l2jserver/datapack/custom/service/base/CustomServiceScript.java index 2c9d6d27ad..bdc0d38333 100644 --- a/src/main/java/com/l2jserver/datapack/custom/service/base/CustomServiceScript.java +++ b/src/main/java/com/l2jserver/datapack/custom/service/base/CustomServiceScript.java @@ -90,18 +90,17 @@ public abstract class CustomServiceScript extends AbstractNpcAI { return HTMLTemplateParser.fromCache(htmlPath, player, placeholders, IncludeFunc.INSTANCE, IfFunc.INSTANCE, ForeachFunc.INSTANCE, ExistsFunc.INSTANCE, IfChildrenFunc.INSTANCE, ChildrenCountFunc.INSTANCE); } - protected final boolean isInsideAnyZoneOf(L2Character character, ZoneId first, ZoneId... more) { - if (character.isInsideZone(first)) { - return true; + protected final boolean isInsideAnyZoneOf(L2Character character, ZoneId... zones) { + if (zones == null) { + return false; } - if (more != null) { - for (ZoneId zone : more) { - if (character.isInsideZone(zone)) { - return true; - } + for (ZoneId zone : zones) { + if (character.isInsideZone(zone)) { + return true; } } + return false; } @@ -150,20 +149,6 @@ public abstract class CustomServiceScript extends AbstractNpcAI { } public final void executeCommand(L2PcInstance player, L2Npc npc, String commandString) { - if (isInsideAnyZoneOf(player, ZoneId.PVP, ZoneId.SIEGE, ZoneId.WATER, ZoneId.JAIL, ZoneId.DANGER_AREA)) { - player.sendMessage("The service cannot be used here."); - return; - } else if ((player.getEventStatus() != null) || (player.getBlockCheckerArena() != -1) || player.isOnEvent() || player.isInOlympiadMode()) { - player.sendMessage("The service cannot be used in events."); - return; - } else if (player.isInDuel() || (player.getPvpFlag() == 1)) { - player.sendMessage("The service cannot be used in duel or pvp."); - return; - } else if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { - player.sendMessage("The service cannot be used while in combat."); - return; - } - if ((commandString == null) || commandString.isEmpty()) { commandString = "html main"; } diff --git a/src/main/java/com/l2jserver/datapack/custom/service/buffer/BufferService.java b/src/main/java/com/l2jserver/datapack/custom/service/buffer/BufferService.java index 14faec5607..d9fbafacaf 100644 --- a/src/main/java/com/l2jserver/datapack/custom/service/buffer/BufferService.java +++ b/src/main/java/com/l2jserver/datapack/custom/service/buffer/BufferService.java @@ -40,10 +40,16 @@ import com.l2jserver.gameserver.config.Configuration; import com.l2jserver.gameserver.handler.BypassHandler; import com.l2jserver.gameserver.handler.ItemHandler; import com.l2jserver.gameserver.handler.VoicedCommandHandler; +import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.L2Playable; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; +import com.l2jserver.gameserver.model.entity.TvTEvent; import com.l2jserver.gameserver.model.skills.BuffInfo; +import com.l2jserver.gameserver.model.zone.ZoneId; +import com.l2jserver.gameserver.network.SystemMessageId; +import com.l2jserver.gameserver.network.serverpackets.SystemMessage; +import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager; /** * Buffer Service. @@ -483,7 +489,7 @@ public final class BufferService extends CustomServiceScript { public boolean executeHtmlCommand(L2PcInstance player, L2Npc npc, CommandProcessor command) { AbstractBuffer buffer = BufferServiceRepository.getInstance().getConfig().determineBuffer(npc, player); if (buffer == null) { - player.sendMessage("No authorization!"); + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_NOT_FOUND).addString("Buffer")); return false; } @@ -509,9 +515,37 @@ public final class BufferService extends CustomServiceScript { @Override public boolean executeActionCommand(L2PcInstance player, L2Npc npc, CommandProcessor command) { - AbstractBuffer buffer = BufferServiceRepository.getInstance().getConfig().determineBuffer(npc, player); - if (buffer == null) { - player.sendMessage("No authorization!"); + SystemMessage abortSysMsg = null; + AbstractBuffer buffer = null; + + if (isInsideAnyZoneOf(player, Configuration.bufferService().getForbidInZones())) { + abortSysMsg = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED); + abortSysMsg.addString("Buffer"); + } else if (Configuration.bufferService().getForbidInEvents() && ((player.getEventStatus() != null) || (player.getBlockCheckerArena() != -1) || player.isOnEvent() || player.isInOlympiadMode() || TvTEvent.isPlayerParticipant(player.getObjectId()))) { + abortSysMsg = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED); + abortSysMsg.addString("Buffer"); + } else if (Configuration.bufferService().getForbidInDuell() && player.isInDuel()) { + abortSysMsg = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED); + abortSysMsg.addString("Buffer"); + } else if (Configuration.bufferService().getForbidInFight() && AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { + abortSysMsg = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED); + abortSysMsg.addString("Buffer"); + } else if (Configuration.bufferService().getForbidInPvp() && (player.getPvpFlag() == 1)) { + abortSysMsg = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED); + abortSysMsg.addString("Buffer"); + } else if (Configuration.bufferService().getForbidForChaoticPlayers() && player.getKarma() > 0) { + abortSysMsg = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED); + abortSysMsg.addString("Buffer"); + } else { + buffer = BufferServiceRepository.getInstance().getConfig().determineBuffer(npc, player); + if (buffer == null) { + abortSysMsg = SystemMessage.getSystemMessage(SystemMessageId.S1_NOT_FOUND); + abortSysMsg.addString("Buffer"); + } + } + + if (abortSysMsg != null) { + player.sendPacket(abortSysMsg); return false; } -- GitLab