Jump to content

[Share] Traps!


Recommended Posts

Hello there, this is my latest share which with some editing by yourself can do many things. A player pays a fee set by you, and he places and a trap with a selected message. If someone steps on the trap, this message displays at the announcements. That means you can write something humiliating. Also by using %player in your message, the victim's name is being displayed in the message. If you have some basic knowledge you can make it do more stuff. For example, if user steps on the trap and he is not in combat, the player will be teleported to a location that the owner has set, or be paralyzed for some seconds.

 

Coded and tested on l2jpes. (interlude)

 

### Eclipse Workspace Patch 1.0
#P gameserver
Index: java/com/l2jpes/gameserver/handler/voicedcommandhandlers/TrapCmd.java
===================================================================
--- java/com/l2jpes/gameserver/handler/voicedcommandhandlers/TrapCmd.java	(revision 0)
+++ java/com/l2jpes/gameserver/handler/voicedcommandhandlers/TrapCmd.java	(working copy)
@@ -0,0 +1,69 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jpes.gameserver.handler.voicedcommandhandlers;
+
+import com.l2jpes.Config;
+import com.l2jpes.gameserver.custom.TrapEvent;
+import com.l2jpes.gameserver.handler.IVoicedCommandHandler;
+import com.l2jpes.gameserver.model.actor.instance.L2PlayerInstance;
+
+/**
+ * @author Pauler
+ */
+public class TrapCmd implements IVoicedCommandHandler
+{
+
+	private String[] commands = {
+		"settrap"
+	};
+	
+	@Override
+	public boolean useVoicedCommand(String command, L2PlayerInstance activeChar, String[] commandParams)
+	{
+		if (!TrapEvent.checkIfUserHasTooManytraps(activeChar)) {
+			if (activeChar.getInventory().getInventoryItemCount(Config.TRAP_COST_ID, 0) >= Config.TRAP_COST_QUANTITY) {
+				if (!activeChar.isInCombat()) {
+					if (commandParams != null && commandParams.length != 0) {
+						activeChar.getInventory().destroyItemByItemId("Buying Traps.", Config.TRAP_COST_ID, Config.TRAP_COST_QUANTITY, activeChar, activeChar);
+						
+						activeChar.sendMessage("You placed a trap.");
+						
+						String message = "";
+						
+						for (String string: commandParams) {
+							message = message + " " + string;
+						}
+						
+						TrapEvent.placetrap(activeChar, message);
+					}else
+						activeChar.sendMessage("You have to write a message after the command");
+				}else
+					activeChar.sendMessage("You cannot be in combat while you are placing a trap.");
+			}else
+				activeChar.sendMessage("You don't have enough items.");
+		}else
+			activeChar.sendMessage("You have already placed too many traps.");
+		
+		return false;
+	}
+
+
+	@Override
+	public String[] getVoicedCommandList()
+	{
+		return commands;
+	}
+	
+}
Index: java/com/l2jpes/Config.java
===================================================================
--- java/com/l2jpes/Config.java	(revision 5)
+++ java/com/l2jpes/Config.java	(working copy)
@@ -223,6 +223,12 @@
	public static int ALT_FISH_CHAMPIONSHIP_REWARD_4;
	public static int ALT_FISH_CHAMPIONSHIP_REWARD_5;

+	/** Traps */
+	public static int TRAP_COST_ID;
+	public static int TRAP_COST_QUANTITY;
+	public static int TRAP_RADIUS;
+	public static int MAX_TRAPS_PER_USER;
+	
	// --------------------------------------------------
	// HexID
	// --------------------------------------------------
@@ -875,6 +881,11 @@
			ALT_FISH_CHAMPIONSHIP_REWARD_4 = events.getProperty("AltFishChampionshipReward4", 200000);
			ALT_FISH_CHAMPIONSHIP_REWARD_5 = events.getProperty("AltFishChampionshipReward5", 100000);

+			TRAP_COST_ID = events.getProperty("TrapCostId", 57);
+			TRAP_COST_QUANTITY = events.getProperty("TrapCostQuantity", 1000);
+			TRAP_RADIUS = events.getProperty("TrapRadius", 20);
+			MAX_TRAPS_PER_USER = events.getProperty("MaxTrapsPerUser", 5);
+			
			// FloodProtector
			ExProperties security = load(FLOOD_PROTECTOR_FILE);
			loadFloodProtectorConfig(security, FLOOD_PROTECTOR_ROLL_DICE, "RollDice", "42");
Index: java/com/l2jpes/gameserver/custom/Trap.java
===================================================================
--- java/com/l2jpes/gameserver/custom/Trap.java	(revision 0)
+++ java/com/l2jpes/gameserver/custom/Trap.java	(working copy)
@@ -0,0 +1,55 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jpes.gameserver.custom;
+
+import com.l2jpes.gameserver.model.actor.instance.L2PlayerInstance;
+
+/**
+ * @author Pauler
+ */
+public class Trap
+{
+	private L2PlayerInstance _owner;
+	private int _x, _y, _z;
+	private String _message;
+	
+	public Trap(L2PlayerInstance owner, String message) {
+		_owner = owner;
+		_x = owner.getX();
+		_y = owner.getY();
+		_z = owner.getZ();
+		_message = message;
+	}
+	
+	public L2PlayerInstance getOwner() {
+		return _owner;
+	}
+	
+	public int getX() {
+		return _x;
+	}
+	
+	public int getY() {
+		return _y;
+	}
+	
+	public int getZ() {
+		return _z;
+	}
+	
+	public String getMessage() {
+		return _message;
+	}
+}
Index: java/com/l2jpes/gameserver/handler/VoicedCommandHandler.java
===================================================================
--- java/com/l2jpes/gameserver/handler/VoicedCommandHandler.java	(revision 13)
+++ java/com/l2jpes/gameserver/handler/VoicedCommandHandler.java	(working copy)
@@ -20,6 +20,7 @@

import com.l2jpes.Config;
import com.l2jpes.gameserver.handler.voicedcommandhandlers.L2JPesCmd;
+import com.l2jpes.gameserver.handler.voicedcommandhandlers.TrapCmd;

public class VoicedCommandHandler
{
@@ -35,7 +36,7 @@
     {
         _datatable = new TIntObjectHashMap<>();
         registerVoicedCommandHandler(new L2JPesCmd());
-        
+        registerVoicedCommandHandler(new TrapCmd());
     }

     private void registerVoicedCommandHandler(IVoicedCommandHandler handler)
Index: config/events.properties
===================================================================
--- config/events.properties	(revision 5)
+++ config/events.properties	(working copy)
@@ -245,4 +245,21 @@
AltFishChampionshipReward2 = 500000
AltFishChampionshipReward3 = 300000
AltFishChampionshipReward4 = 200000
-AltFishChampionshipReward5 = 100000
\ No newline at end of file
+AltFishChampionshipReward5 = 100000
+
+#=============================================================
+#                     Traps By Pauler
+#=============================================================
+
+#The id of the item you need to give
+#to set a trap.
+TrapCostId = 57
+
+#The quantity of this item.
+TrapCostQuantity = 1000
+
+#The max distance between you and the trap to activate it.
+TrapRadius = 20
+
+#Max traps that a user can place.
+MaxTrapsPerUser = 5
Index: java/com/l2jpes/gameserver/GameServer.java
===================================================================
--- java/com/l2jpes/gameserver/GameServer.java	(revision 13)
+++ java/com/l2jpes/gameserver/GameServer.java	(working copy)
@@ -20,6 +20,7 @@
import com.l2jpes.gameserver.cache.CrestCache;
import com.l2jpes.gameserver.cache.HtmCache;
import com.l2jpes.gameserver.communitybbs.Manager.ForumsBBSManager;
+import com.l2jpes.gameserver.custom.TrapEvent;
import com.l2jpes.gameserver.datatables.AccessLevels;
import com.l2jpes.gameserver.datatables.AdminCommandAccessRights;
import com.l2jpes.gameserver.datatables.ArmorSetsTable;
@@ -181,6 +182,10 @@
		GmListTable.getInstance();
		RaidBossPointsManager.getInstance();

+		Util.printSection("Custom");
+		TrapEvent.getInstance();
+		_log.info("Trap Event has started.");
+		
		Util.printSection("Community server");
		if (Config.ENABLE_COMMUNITY_BOARD) // Forums has to be loaded before clan data
			ForumsBBSManager.getInstance().initRoot();
Index: java/com/l2jpes/gameserver/custom/TrapEvent.java
===================================================================
--- java/com/l2jpes/gameserver/custom/TrapEvent.java	(revision 0)
+++ java/com/l2jpes/gameserver/custom/TrapEvent.java	(working copy)
@@ -0,0 +1,80 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jpes.gameserver.custom;
+
+import com.l2jpes.Config;
+import com.l2jpes.gameserver.Announcements;
+import com.l2jpes.gameserver.ThreadPoolManager;
+import com.l2jpes.gameserver.model.L2World;
+import com.l2jpes.gameserver.model.actor.instance.L2PlayerInstance;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * @author Pauler
+ */
+public class TrapEvent
+{
+	public static List<Trap> placedtraps;
+	
+	public static void getInstance() {
+		placedtraps = new CopyOnWriteArrayList<>();
+		
+		ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable() {
+			
+			@Override
+			public void run() {			
+				for (Trap trap:placedtraps) {
+					for (L2PlayerInstance player: L2World.getInstance().getAllPlayers().values()) {
+						if (player.isInsideRadius(trap.getX(), trap.getY(), Config.TRAP_RADIUS, false) && player != trap.getOwner()) {
+							player.sendMessage("You stepped on a trap.");
+							
+							String message = trap.getMessage();
+							message = message.replaceAll("%player", player.getName());
+							
+							Announcements.announceToAll(message);
+							
+							removetrap(trap);
+						}
+					}
+				}	
+			}
+			
+		}, 10000, 1000);
+	}
+	
+	public static boolean checkIfUserHasTooManytraps(L2PlayerInstance player) {
+		int placedtrapsByUser = 0;
+		
+		for (Trap trap:placedtraps) {
+			if (trap.getOwner() == player)
+				placedtrapsByUser++;
+		}
+		
+		if (placedtrapsByUser < Config.MAX_TRAPS_PER_USER)
+			return false;
+		
+		return true;
+	}
+	
+	public static void placetrap(L2PlayerInstance player, String message) {
+		placedtraps.add(new Trap(player, message));
+	}
+	
+	public static void removetrap(Trap trap) {
+		placedtraps.remove(trap);
+	}
+}

 

If I stop being so lazy, I will upload a video.

Link to comment
Share on other sites

I was sure from the first time that you use threadpool to trigger the trap before even reading, if you want to get rid of it use validateposition or something. Nevermind its a nice share

Link to comment
Share on other sites

Hello there, this is my latest share which with some editing by yourself can do many things. A player pays a fee set by you, and he places and a trap with a selected message. If someone steps on the trap, this message displays at the announcements. That means you can write something humiliating. Also by using %player in your message, the victim's name is being displayed in the message. If you have some basic knowledge you can make it do more stuff. For example, if user steps on the trap and he is not in combat, the player will be teleported to a location that the owner has set, or be paralyzed for some seconds.

 

Coded and tested on l2jpes. (interlude)

 

### Eclipse Workspace Patch 1.0
#P gameserver
Index: java/com/l2jpes/gameserver/handler/voicedcommandhandlers/TrapCmd.java
===================================================================
--- java/com/l2jpes/gameserver/handler/voicedcommandhandlers/TrapCmd.java	(revision 0)
+++ java/com/l2jpes/gameserver/handler/voicedcommandhandlers/TrapCmd.java	(working copy)
@@ -0,0 +1,69 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jpes.gameserver.handler.voicedcommandhandlers;
+
+import com.l2jpes.Config;
+import com.l2jpes.gameserver.custom.TrapEvent;
+import com.l2jpes.gameserver.handler.IVoicedCommandHandler;
+import com.l2jpes.gameserver.model.actor.instance.L2PlayerInstance;
+
+/**
+ * @author Pauler
+ */
+public class TrapCmd implements IVoicedCommandHandler
+{
+
+	private String[] commands = {
+		"settrap"
+	};
+	
+	@Override
+	public boolean useVoicedCommand(String command, L2PlayerInstance activeChar, String[] commandParams)
+	{
+		if (!TrapEvent.checkIfUserHasTooManytraps(activeChar)) {
+			if (activeChar.getInventory().getInventoryItemCount(Config.TRAP_COST_ID, 0) >= Config.TRAP_COST_QUANTITY) {
+				if (!activeChar.isInCombat()) {
+					if (commandParams != null && commandParams.length != 0) {
+						activeChar.getInventory().destroyItemByItemId("Buying Traps.", Config.TRAP_COST_ID, Config.TRAP_COST_QUANTITY, activeChar, activeChar);
+						
+						activeChar.sendMessage("You placed a trap.");
+						
+						String message = "";
+						
+						for (String string: commandParams) {
+							message = message + " " + string;
+						}
+						
+						TrapEvent.placetrap(activeChar, message);
+					}else
+						activeChar.sendMessage("You have to write a message after the command");
+				}else
+					activeChar.sendMessage("You cannot be in combat while you are placing a trap.");
+			}else
+				activeChar.sendMessage("You don't have enough items.");
+		}else
+			activeChar.sendMessage("You have already placed too many traps.");
+		
+		return false;
+	}
+
+
+	@Override
+	public String[] getVoicedCommandList()
+	{
+		return commands;
+	}
+	
+}
Index: java/com/l2jpes/Config.java
===================================================================
--- java/com/l2jpes/Config.java	(revision 5)
+++ java/com/l2jpes/Config.java	(working copy)
@@ -223,6 +223,12 @@
	public static int ALT_FISH_CHAMPIONSHIP_REWARD_4;
	public static int ALT_FISH_CHAMPIONSHIP_REWARD_5;

+	/** Traps */
+	public static int TRAP_COST_ID;
+	public static int TRAP_COST_QUANTITY;
+	public static int TRAP_RADIUS;
+	public static int MAX_TRAPS_PER_USER;
+	
	// --------------------------------------------------
	// HexID
	// --------------------------------------------------
@@ -875,6 +881,11 @@
			ALT_FISH_CHAMPIONSHIP_REWARD_4 = events.getProperty("AltFishChampionshipReward4", 200000);
			ALT_FISH_CHAMPIONSHIP_REWARD_5 = events.getProperty("AltFishChampionshipReward5", 100000);

+			TRAP_COST_ID = events.getProperty("TrapCostId", 57);
+			TRAP_COST_QUANTITY = events.getProperty("TrapCostQuantity", 1000);
+			TRAP_RADIUS = events.getProperty("TrapRadius", 20);
+			MAX_TRAPS_PER_USER = events.getProperty("MaxTrapsPerUser", 5);
+			
			// FloodProtector
			ExProperties security = load(FLOOD_PROTECTOR_FILE);
			loadFloodProtectorConfig(security, FLOOD_PROTECTOR_ROLL_DICE, "RollDice", "42");
Index: java/com/l2jpes/gameserver/custom/Trap.java
===================================================================
--- java/com/l2jpes/gameserver/custom/Trap.java	(revision 0)
+++ java/com/l2jpes/gameserver/custom/Trap.java	(working copy)
@@ -0,0 +1,55 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jpes.gameserver.custom;
+
+import com.l2jpes.gameserver.model.actor.instance.L2PlayerInstance;
+
+/**
+ * @author Pauler
+ */
+public class Trap
+{
+	private L2PlayerInstance _owner;
+	private int _x, _y, _z;
+	private String _message;
+	
+	public Trap(L2PlayerInstance owner, String message) {
+		_owner = owner;
+		_x = owner.getX();
+		_y = owner.getY();
+		_z = owner.getZ();
+		_message = message;
+	}
+	
+	public L2PlayerInstance getOwner() {
+		return _owner;
+	}
+	
+	public int getX() {
+		return _x;
+	}
+	
+	public int getY() {
+		return _y;
+	}
+	
+	public int getZ() {
+		return _z;
+	}
+	
+	public String getMessage() {
+		return _message;
+	}
+}
Index: java/com/l2jpes/gameserver/handler/VoicedCommandHandler.java
===================================================================
--- java/com/l2jpes/gameserver/handler/VoicedCommandHandler.java	(revision 13)
+++ java/com/l2jpes/gameserver/handler/VoicedCommandHandler.java	(working copy)
@@ -20,6 +20,7 @@

import com.l2jpes.Config;
import com.l2jpes.gameserver.handler.voicedcommandhandlers.L2JPesCmd;
+import com.l2jpes.gameserver.handler.voicedcommandhandlers.TrapCmd;

public class VoicedCommandHandler
{
@@ -35,7 +36,7 @@
     {
         _datatable = new TIntObjectHashMap<>();
         registerVoicedCommandHandler(new L2JPesCmd());
-        
+        registerVoicedCommandHandler(new TrapCmd());
     }

     private void registerVoicedCommandHandler(IVoicedCommandHandler handler)
Index: config/events.properties
===================================================================
--- config/events.properties	(revision 5)
+++ config/events.properties	(working copy)
@@ -245,4 +245,21 @@
AltFishChampionshipReward2 = 500000
AltFishChampionshipReward3 = 300000
AltFishChampionshipReward4 = 200000
-AltFishChampionshipReward5 = 100000
\ No newline at end of file
+AltFishChampionshipReward5 = 100000
+
+#=============================================================
+#                     Traps By Pauler
+#=============================================================
+
+#The id of the item you need to give
+#to set a trap.
+TrapCostId = 57
+
+#The quantity of this item.
+TrapCostQuantity = 1000
+
+#The max distance between you and the trap to activate it.
+TrapRadius = 20
+
+#Max traps that a user can place.
+MaxTrapsPerUser = 5
Index: java/com/l2jpes/gameserver/GameServer.java
===================================================================
--- java/com/l2jpes/gameserver/GameServer.java	(revision 13)
+++ java/com/l2jpes/gameserver/GameServer.java	(working copy)
@@ -20,6 +20,7 @@
import com.l2jpes.gameserver.cache.CrestCache;
import com.l2jpes.gameserver.cache.HtmCache;
import com.l2jpes.gameserver.communitybbs.Manager.ForumsBBSManager;
+import com.l2jpes.gameserver.custom.TrapEvent;
import com.l2jpes.gameserver.datatables.AccessLevels;
import com.l2jpes.gameserver.datatables.AdminCommandAccessRights;
import com.l2jpes.gameserver.datatables.ArmorSetsTable;
@@ -181,6 +182,10 @@
		GmListTable.getInstance();
		RaidBossPointsManager.getInstance();

+		Util.printSection("Custom");
+		TrapEvent.getInstance();
+		_log.info("Trap Event has started.");
+		
		Util.printSection("Community server");
		if (Config.ENABLE_COMMUNITY_BOARD) // Forums has to be loaded before clan data
			ForumsBBSManager.getInstance().initRoot();
Index: java/com/l2jpes/gameserver/custom/TrapEvent.java
===================================================================
--- java/com/l2jpes/gameserver/custom/TrapEvent.java	(revision 0)
+++ java/com/l2jpes/gameserver/custom/TrapEvent.java	(working copy)
@@ -0,0 +1,80 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jpes.gameserver.custom;
+
+import com.l2jpes.Config;
+import com.l2jpes.gameserver.Announcements;
+import com.l2jpes.gameserver.ThreadPoolManager;
+import com.l2jpes.gameserver.model.L2World;
+import com.l2jpes.gameserver.model.actor.instance.L2PlayerInstance;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * @author Pauler
+ */
+public class TrapEvent
+{
+	public static List<Trap> placedtraps;
+	
+	public static void getInstance() {
+		placedtraps = new CopyOnWriteArrayList<>();
+		
+		ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable() {
+			
+			@Override
+			public void run() {			
+				for (Trap trap:placedtraps) {
+					for (L2PlayerInstance player: L2World.getInstance().getAllPlayers().values()) {
+						if (player.isInsideRadius(trap.getX(), trap.getY(), Config.TRAP_RADIUS, false) && player != trap.getOwner()) {
+							player.sendMessage("You stepped on a trap.");
+							
+							String message = trap.getMessage();
+							message = message.replaceAll("%player", player.getName());
+							
+							Announcements.announceToAll(message);
+							
+							removetrap(trap);
+						}
+					}
+				}	
+			}
+			
+		}, 10000, 1000);
+	}
+	
+	public static boolean checkIfUserHasTooManytraps(L2PlayerInstance player) {
+		int placedtrapsByUser = 0;
+		
+		for (Trap trap:placedtraps) {
+			if (trap.getOwner() == player)
+				placedtrapsByUser++;
+		}
+		
+		if (placedtrapsByUser < Config.MAX_TRAPS_PER_USER)
+			return false;
+		
+		return true;
+	}
+	
+	public static void placetrap(L2PlayerInstance player, String message) {
+		placedtraps.add(new Trap(player, message));
+	}
+	
+	public static void removetrap(Trap trap) {
+		placedtraps.remove(trap);
+	}
+}

 

If I stop being so lazy, I will upload a video.

Good idea! Keep Sharing...! Thanks You :)

Link to comment
Share on other sites

I was sure from the first time that you use threadpool to trigger the trap before even reading, if you want to get rid of it use validateposition or something. Nevermind its a nice share

Good for ya genius.
Link to comment
Share on other sites

  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Posts

    • DISCORD : utchiha_market telegram : https://t.me/utchiha_market SELLIX STORE : https://utchihamkt.mysellix.io/ Join our server for more products : https://discord.gg/hood-services https://campsite.bio/utchihaamkt  
    • Server Rates: » Xp 500x. » Sp 500x. » Aden 500x. » Drop 1x. » PartyXp 2x. » PartySp 2x. » Starting character level -61. Enchant rates: » Safe enchant +4. » Blessed and simple scrolls max enchant (+16). » Crystal scrolls max enchant (+20). » Simple enchant scrolls chance – 65%. » Blessed enchant scrolls chance – 100%. » Crystal enchant scrolls chance – 50% Augmentations: » Mid life stone skill chance – 5%. » High life stone skill chance – 10%. » Top life stone skill chance – 20%. » Augments 1+1 Unique features: » Main town – Giran » Automatic-Manual Potions. » Working 2 castle sieges. (Giran-Aden) » SPS cancel lasts 10 seconds and than buffs come back. » Stackable scrolls, lifestones, book of giants. » Unique pvp zone » More then 11 active raid bosses. » Wedding system. » Unique farming areas. » Npc skill enchanter. » Full npc buffer with auto buff. » Max count of buffs – 55. » Max subclasses – 4. » Free and no quest class change. » Free and no quest sub class. » Raid boss drop nobless item. » No weight limit. » Unique protection anti-hwy armor for archers/daggers etc. » Ingame password change. » Top pvp/pk/online ranks NPC. » Unique monsters & NPC. » Interlude retail skills. » Server up-time [24/7] [99]%. » Perfect class balance (all class can kill all class depending on players skill and setup knowledge,gear,augmentations). » Announcements on double kills triple kills etc. » Announcements on Grand Boss death , with the name of the killer as well as clan name of the player. » Information Npc in game with all servers infromations. Custom server gear : 1). Titanium Armor Lv.1 2). Epic Armor Lv.2 3). Epic Weapons-Kamikaze-Black S grade (Same Stats) 4). Demonic-Angelic Wings-Baium Hair-Custom Accessories (SameStats) 5). Custom Fighter/Mage tattoo Lv1-Lv2-Lv3 6). Shirt (STR,CON,INT +1) 7). Custom Shields Server Commands: .tvtjoin .tvtleave – Join or leave tvt event. .ctfjoin .ctfleave – Join or leave ctf event. .dmjoin .dmleave – Join of leave dm event. .online – current online players count. .repair – repairs stuck character in world. .menu – opens online menu panel. .exit – PVP zone exit in case you are bullied. .changepassword - Opens online menu then u can change ur password in game. .farm - Enable/disable autofarm Event system: » TVT event » CTF event » DM event » Tournament Event » Party Zone » Unique event shop. Olympiad game: » Retail olympiad game. » Competition period [1] week. » Olympiad start time [18:00] end [00:00] GMT+2. » New Heroes every Sunday.
    • Tomorrow grand opening lests go 🙂 
    • New season of Warfire X150 has been postponed to September 28th.
  • Topics

×
×
  • Create New...