Jump to content
  • 0

Chat Command For Races


mattiamartucci

Question

I want to make a special command on my server :)
Example: an elven player writes ".e Hello Everyone!". For all other elves the message appears, for other races there is another message like "-is talking in elven language-".
Obviously members of other races can speak only languages that are of their race.

I just need the script for only one race, but not the humans
Can you help me?

Link to comment
Share on other sites

Recommended Posts

  • 0
package net.sf.l2j.gameserver.handler.voicedcommandhandlers;

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

import net.sf.l2j.gameserver.handler.IVoicedCommandHandler;
import net.sf.l2j.gameserver.model.L2World;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.base.ClassRace;
import net.sf.l2j.gameserver.network.clientpackets.Say2;
import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;


public class RaceCommand implements IVoicedCommandHandler {

	private static final Map<String,ClassRace> raceCom= new HashMap<>();
	
	@Override
	public boolean useVoicedCommand(String command, L2PcInstance activeChar,
			String params) {
		
		ClassRace charRace = activeChar.getRace();
		String commandTo = null;
		for(String comm : raceCom.keySet())
			if(charRace == raceCom.get(comm))
				commandTo = comm;	
		
		if(params==null) return false;
				
		if(pureEquals(command,commandTo))
		{
			for(L2PcInstance p : L2World.getInstance().getPlayers())
			{
				if(p.getRace() == charRace)
					p.sendPacket(new CreatureSay(activeChar.getObjectId(),Say2.ALLIANCE,activeChar.getName(),params));
			}
		}
		
		return true;
	}
	
	private static boolean pureEquals(String command,String wat)
	{
		return new StringTokenizer(command).nextToken().equals(wat)? true :false;
	}

	@Override
	public final String[] getVoicedCommandList() {
		raceCom.put("d", ClassRace.DWARF);
		raceCom.put("de", ClassRace.DARK_ELF);
		raceCom.put("e", ClassRace.ELF);
		raceCom.put("h", ClassRace.HUMAN);
		raceCom.put("o", ClassRace.ORC);
		return  raceCom.keySet().toArray(new String[raceCom.size()]);
	} 

}

Dont forget to register the command

Link to comment
Share on other sites

  • 0

Using .e or .d or whatever is stupid , not only for you but for players also. Make something like .race Message (so all the races type the same command) .

public static void toRacePlayers(L2PcInstance p, String msg)
	{
		for (L2PcInstance player : L2World.getInstance().getPlayers())
		{
			if (player==p)
				continue;
			if(player.getRace().equals(p.getRace()))
				player.sendMessage(msg);//or sendpacket creaturesay whatever
		}
	}

Same method in all cases , non repeatable code ,  better performance , better for players.

 

I would do something like this, and even better for roleplay aspect I would simply edit the regular chathandler for this. Regarding the missing "else" part (because this code doesn't show anything to the target if he doesn't know your langage) it could be funny to create a dictionnary of words for each race and get it transcribed as you are typing. Elven would have a lot of aeth, ael, lith, iel ; orcs would have a lot of gr, hok, hak, bhar ; etc etc. The sentence could be either randomized using this dictionnary, or based on actual word length.

 

L2J did it in the past with a "leet" version.

 

For NPCs you could also create such a thing, returning a static HTM if race is different than yours : "Even with your best efforts, you can't get any of the gibberish. By %insult%, why those %race% are so complicated to understand? You give up fast." And you replace %insult% by a divinity (Maphr, Pa'agrio, Shilen, etc) and %race% by npc.getTemplate().getRace().

Link to comment
Share on other sites

  • 0

I would do something like this, and even better for roleplay aspect I would simply edit the regular chathandler for this. Regarding the missing "else" part (because this code doesn't show anything to the target if he doesn't know your langage) it could be funny to create a dictionnary of words for each race and get it transcribed as you are typing. Elven would have a lot of aeth, ael, lith, iel ; orcs would have a lot of gr, hok, hak, bhar ; etc etc. The sentence could be either randomized using this dictionnary, or based on actual word length.

 

L2J did it in the past with a "leet" version.

 

For NPCs you could also create such a thing, returning a static HTM if race is different than yours : "Even with your best efforts, you can't get any of the gibberish. By %insult%, why those %race% are so complicated to understand? You give up fast." And you replace %insult% by a divinity (Maphr, Pa'agrio, Shilen, etc) and %race% by npc.getTemplate().getRace().

 

KAMENOS OS TO KOKALO

L2 NERD xD

Edited by Lioy
Link to comment
Share on other sites

  • 0
package net.sf.l2j.gameserver.handler.voicedcommandhandlers;

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

import net.sf.l2j.gameserver.handler.IVoicedCommandHandler;
import net.sf.l2j.gameserver.model.L2World;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.base.ClassRace;
import net.sf.l2j.gameserver.network.clientpackets.Say2;
import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;


public class RaceCommand implements IVoicedCommandHandler {

	private static final Map<String,ClassRace> raceCom= new HashMap<>();
	
	@Override
	public boolean useVoicedCommand(String command, L2PcInstance activeChar,
			String params) {
		
		ClassRace charRace = activeChar.getRace();
		String commandTo = null;
		for(String comm : raceCom.keySet())
			if(charRace == raceCom.get(comm))
				commandTo = comm;	
		
		if(params==null) return false;
				
		if(pureEquals(command,commandTo))
		{
			for(L2PcInstance p : L2World.getInstance().getPlayers())
			{
				if(p.getRace() == charRace)
					p.sendPacket(new CreatureSay(activeChar.getObjectId(),Say2.ALLIANCE,activeChar.getName(),params));
			}
		}
		
		return true;
	}
	
	private static boolean pureEquals(String command,String wat)
	{
		return new StringTokenizer(command).nextToken().equals(wat)? true :false;
	}

	@Override
	public final String[] getVoicedCommandList() {
		raceCom.put("d", ClassRace.DWARF);
		raceCom.put("de", ClassRace.DARK_ELF);
		raceCom.put("e", ClassRace.ELF);
		raceCom.put("h", ClassRace.HUMAN);
		raceCom.put("o", ClassRace.ORC);
		return  raceCom.keySet().toArray(new String[raceCom.size()]);
	} 

}

Dont forget to register the command

yl06x.jpg

 

2gsmi2o.png

import handlers.voicedcommandhandlers.RaceCommand; (MasterHandler.java)

Link to comment
Share on other sites

  • 0

To record the command just add the file to the right MasterHandler.java ??

 

Well I don't know how your project is organised because I use most times Interlude client projects. But I quess it's easy to addapt it . 

Link to comment
Share on other sites

  • 0

Well I don't know how your project is organised because I use most times Interlude client projects. But I quess it's easy to addapt it . 

Ok work man, i love u !  One last thing, how do I print a standard message in chat all?

Link to comment
Share on other sites

  • 0

In practice, once launched, the commando must come out of a standard message that everyone can read

 

Why to 'spamm' your community like that?

Edited by Lioy
Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now



×
×
  • Create New...