Jump to content

Recommended Posts

Posted

Teleportcustom command

Easily supplemented

 

Who is interested in

Checked 99,9

 

 

 

dist\game\data\scripts\handlers\voicedcommandhandlers\TeleportCustom.java
=======================================================================
package handlers.voicedcommandhandlers;

import java.util.HashMap;
import java.util.Map;

import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.network.clientpackets.Say2;
import com.l2jserver.gameserver.network.serverpackets.CreatureSay;

public class TeleportCustom implements IVoicedCommandHandler
{	
	private static final String[] VOICED_COMMANDS =
	{
		"giran",
		"aden",
		"oren",
		"dion",
		"goddard",
                "floran",
                "gludin",
                "gludio",
                "rune",
                "heine",
                "dwarvenvillage",
                "darkelvenvillage",
                "elvenvillage",
                "orcvillage",
                "talkingisland",
                "schuttgart",
                "huntersvillage"
	};
	
	private static final long delay = 5000; // Milisegundos
	private static Map<Integer, Long> _reuse = new HashMap<>();
	
	@Override
	public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target)
	{
		if (_reuse.containsKey(activeChar.getObjectId()))
		{
			if (_reuse.get(activeChar.getObjectId()) > System.currentTimeMillis())
			{
				activeChar.sendMessage("Lo sentimos, no puedes usar este comando. Puedes usarlo dentro de " + ((_reuse.get(activeChar.getObjectId()) - System.currentTimeMillis()) / 1000) + " segs");
				return false;
			}
		}
		
		/** I do not have
		if (activeChar.isInJail())
		{
			activeChar.sendMessage("Lo sentimos, no puedes usar este comando, usted esta en la carcel");
			return false;
		}
		else
		**/

		if (activeChar.isDead())
		{
			activeChar.sendMessage("You can't teleport while you are dead.");
			return false;
		}
		else
		if (activeChar.isInOlympiadMode())
		{
			activeChar.sendMessage("Lo sentimos, no puedes usar este comando, usted esta en la Olimpiada ahora");
			return false;
		}
		else
		if (activeChar.isInDuel())
		{
			activeChar.sendMessage("Lo sentimos, no puedes usar este comando, usted esta en un duelo");
			return false;
		}
		else
		if (activeChar.isInCombat())
		{
			activeChar.sendMessage("lo sentimos, no puedes usar este comando, usted esta en modo combate!.");
			return false;
		}
		else
		if (activeChar.getPvpFlag() > 0)
		{
			CreatureSay i = new CreatureSay(activeChar.getObjectId(), Say2.PARTY, "admin", "No Puedes Huir cuando estes flaggeado.Termina Lo Que Empesaste...");
			activeChar.sendPacket(i);
			return false;
		}
		else
		if (activeChar.inObserverMode())
		{
			activeChar.sendMessage("Lo sentimos, no puedes usar este comando, usted esta en la observacion.");
			return false;
		}
		else
		if (activeChar.getInventory().getInventoryItemCount(57, 0) < 50000)
		{
			activeChar.sendMessage("No tienes adena suficiente");
			return false;
		}
		
		if(command.startsWith("giran"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(82337, 148602, -3467);
			activeChar.sendMessage("Usted ha sido transportado a Giran");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}
		else
		if(command.startsWith("dion"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(18492, 145386, -3118);
			activeChar.sendMessage("Usted ha sido transportado a Dion");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}  
		else
		if(command.startsWith("oren"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(82769, 53573, -1498);
			activeChar.sendMessage("Usted ha sido transportado a Oren");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}  
		else
		if(command.startsWith("gludio"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(-12864, 122716, -3117);
			activeChar.sendMessage("Usted ha sido transportado a Gludio");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}  
		else
		if(command.startsWith("gludin"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(-80928, 150055, -3044);
			activeChar.sendMessage("Usted ha sido transportado a Gludin");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}  
		else
		if(command.startsWith("aden"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(147361, 26953, -2205);
			activeChar.sendMessage("Usted ha sido transportado a Aden");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}  
		else
		if(command.startsWith("schuttgart"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(87359, -143224, -1293);
			activeChar.sendMessage("Usted ha sido transportado a Schuttgart");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}
		else
		if(command.startsWith("orcvillage"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(-44429, -113596, -220);
			activeChar.sendMessage("Usted ha sido transportado a Orcvillage");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}
		else
		if(command.startsWith("darkelvenvillage"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(11620, 16780, -4662);
			activeChar.sendMessage("Usted ha sido transportado a Darkelvenvillage");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}
		else
		if(command.startsWith("elvenvillage"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(47050, 50767, -2996);
			activeChar.sendMessage("Usted ha sido transportado a Elvenvillage");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}
		else
		if(command.startsWith("dwarvenvillage"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(115526, -178660, -945);
			activeChar.sendMessage("Usted ha sido transportado a Dwarvenvillage");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}
		else
		if(command.startsWith("heine"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(111396, 219254, -3546);
			activeChar.sendMessage("Usted ha sido transportado a Heine");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}
		else
		if(command.startsWith("huntersvillage"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(116440, 76320, -2730);
			activeChar.sendMessage("Usted ha sido transportado a Huntersvillage");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}
		else
		if(command.startsWith("floran"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(17144, 170156, -3502);
			activeChar.sendMessage("Usted ha sido transportado a Floran");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}
		else
		if(command.startsWith("goddard"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(147720, -55560, -2735);
			activeChar.sendMessage("Usted ha sido transportado a Goddard");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}
		else
		if(command.startsWith("rune"))
		{
			activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);
                        activeChar.teleToLocation(43848, -48033, -797);
			activeChar.sendMessage("Usted ha sido transportado a Rune");
			_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);
		}

		return true;
	}

	@Override
	public String[] getVoicedCommandList()
	{
		return VOICED_COMMANDS;
	}
}


dist\game\data\scripts\handlers\MasterHandler.java
===============================================================

import handlers.voicedcommandhandlers.ChatAdmin;
+import handlers.voicedcommandhandlers.TeleportCustom;
import handlers.voicedcommandhandlers.Debug;

// Voiced Command Handlers
+++++++++++++++++++++++
(Config.L2JMOD_ALLOW_CHANGE_PASSWORD ? ChangePassword.class : null),
TeleportCustom.class,
 

 

 

Posted (edited)

- ConcurrentException when multiple people will use it in same time, use ConcurrentHashMap.

- containsKey + x2 .get can be replaced by a single .get on the first check.

- All command.startsWith are exactly the same except the Location and sent message. You can create an Enum/Map/container to store everything and shortcut the 16 commands to 1.

- All "else" when there is a return false (all integrity checks basically) are useless. That's the point to return false, command execution is broken at this state therefore other operations aren't processed.

Edited by Tryskell
Posted

- ConcurrentException when multiple people will use it in same time, use ConcurrentHashMap.

- containsKey + x2 .get can be replaced by a single .get on the first check.

- All command.startsWith are exactly the same except the Location and sent message. You can create an Enum/Map/container to store everything and shortcut the 16 commands to 1.

- All "else" when there is a return false (all integrity checks basically) are useless. That's the point to return false, command execution is broken at this state therefore other operations aren't processed.

 

Thanks... will reconsider its decision...

Posted

Много лишней писанины. Оптимизируйте код.

Вы правы можно и в массивы запихнуть... и сделать без контрольную точку... А надо ли это всё для не профессионала? 

Posted


if(command.startsWith("giran"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(82337, 148602, -3467);

activeChar.sendMessage("Usted ha sido transportado a Giran");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("dion"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(18492, 145386, -3118);

activeChar.sendMessage("Usted ha sido transportado a Dion");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("oren"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(82769, 53573, -1498);

activeChar.sendMessage("Usted ha sido transportado a Oren");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("gludio"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(-12864, 122716, -3117);

activeChar.sendMessage("Usted ha sido transportado a Gludio");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("gludin"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(-80928, 150055, -3044);

activeChar.sendMessage("Usted ha sido transportado a Gludin");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("aden"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(147361, 26953, -2205);

activeChar.sendMessage("Usted ha sido transportado a Aden");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("schuttgart"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(87359, -143224, -1293);

activeChar.sendMessage("Usted ha sido transportado a Schuttgart");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("orcvillage"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(-44429, -113596, -220);

activeChar.sendMessage("Usted ha sido transportado a Orcvillage");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("darkelvenvillage"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(11620, 16780, -4662);

activeChar.sendMessage("Usted ha sido transportado a Darkelvenvillage");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("elvenvillage"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(47050, 50767, -2996);

activeChar.sendMessage("Usted ha sido transportado a Elvenvillage");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("dwarvenvillage"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(115526, -178660, -945);

activeChar.sendMessage("Usted ha sido transportado a Dwarvenvillage");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("heine"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(111396, 219254, -3546);

activeChar.sendMessage("Usted ha sido transportado a Heine");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("huntersvillage"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(116440, 76320, -2730);

activeChar.sendMessage("Usted ha sido transportado a Huntersvillage");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("floran"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(17144, 170156, -3502);

activeChar.sendMessage("Usted ha sido transportado a Floran");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("goddard"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(147720, -55560, -2735);

activeChar.sendMessage("Usted ha sido transportado a Goddard");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}

else

if(command.startsWith("rune"))

{

activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(43848, -48033, -797);

activeChar.sendMessage("Usted ha sido transportado a Rune");

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

}


public enum Towns {

giran(new Location(82337, 148602, -3467)),

aden(new Location(147361, 26953, -2205)),

......

oren(new Location(82769, 53573, -1498));

 

private Location location;

 

Towns(Location loc) {

this.location = loc;

}

 

public Location getLocation()

{

return location;

 

}

}

 


activeChar.destroyItemByItemId("consume", 57, 50000, activeChar, true);

activeChar.teleToLocation(Towns.valueOf(command).getLocation(), 30);

activeChar.sendMessage("Usted ha sido transportado a " + command);

_reuse.put(activeChar.getObjectId(), System.currentTimeMillis() + delay);

 

Posted

Вы правы можно и в массивы запихнуть... и сделать без контрольную точку... А надо ли это всё для не профессионала? 

 

Это уже от вас зависит, кто вы. Очередной рукажоп или подающий надежды девелопер.

Posted (edited)

Это уже от вас зависит, кто вы. Очередной рукажоп или подающий надежды девелопер.

This isn't an error... And the course not in that party... Means will be the summary as it isn't correct to do... Who isn't mistaken? Especially have already pointed a finger on a mistake, Tryskell thanks... And in fact I will agree with you... Without having made a mistake you won't understand as to correct it... It is also a syllogism...

 

My mistake... Consists in testing alone... It is not the complaint)))))

Edited by tomalko

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • https://l2avokado.com/ Hello everyone,   After some time of development, we've decided to open L2Avokado to the public in its current development stage. We're looking for players who enjoy Interlude and would like to help shape the project before its official release.   This isn't a "launch" announcement. Instead, we're inviting the community to log in, explore the server, test the systems we've built, and provide honest feedback. Whether it's bug reports, balance suggestions, progression ideas, or quality-of-life improvements, we'd love to hear them.   Our goal has always been to create an Interlude server that feels familiar while offering a fresh progression experience. We've intentionally avoided custom weapons, armor, and client modifications. Instead, we've focused on redesigning progression through reworked hunting grounds, quests, crafting, and gameplay systems while remaining compatible with a clean Interlude client.   At this stage, the core progression path has been implemented, including the main hunting grounds, quests, custom systems, and events. However, as the project is still under active development, there will inevitably be bugs, balance issues, and areas that require further polishing.   This is exactly why we'd like your help.   We're looking for players who are willing to: Test gameplay and progression. Report bugs and exploits. Suggest balance improvements. Share ideas for new features or quality-of-life changes. Help us build a server that the community genuinely enjoys playing.   The Client and System downloads are already available on our website, so you can jump straight into the game. We're also working on a dedicated launcher that will simplify installation and future updates.   If you're interested in helping develop a unique Interlude project and want your feedback to genuinely influence the direction of the server, we'd love to have you with us.   We look forward to seeing you in-game and hearing your thoughts on Discord. https://l2avokado.com/
    • IAM one of customers of this project. Have anti cheat, have user panel everything is working. Blocking adrenaline trashy plans without any problems.  So just GL for all lin2 project. I get support every time I need it. 
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..