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

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
Answer this question...

×   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

    • Good afternoon everyone, we’ll get a couple of strong players in the CP, more details can be found here https://mw2.community/topic/211276-awr-team/  
    • so i bought this crap of the server few years back and i just found it laying around on my pc and i thought i should share it, if i remember correctly this crap has a lot of bugs that people abuse 🙂   https://drive.google.com/file/d/13QWg8pi4BPbGbTmlygZ078LjL6Fb0J2a/view?usp=sharing source   https://drive.google.com/file/d/13QWg8pi4BPbGbTmlygZ078LjL6Fb0J2a/view?usp=sharing system    
    • Error: Unable to access jarfile libs\Geodata_Converter_v01.jar
    • Since last massive leak as explained as 07/09 (notably all development branches), I don't accept anymore financial newcomers that easily. People will have to contribute 100 cookies worth of contributions (bug reports/fixes) as a first step to be accepted as Donator. Free user can join after sharing over 200 cookies out of contributions, compared to 100 cookies before. You can say thanks to RusAcis, and notably his worthless leader, UnleashedForce. The size of users will continue to shrink if more leaks occur, until true helpers only will be left. New prices are as following : Joining price: 200€ + 100 cookies, or 200 cookies This fee has to be paid if you are joining aCis project. Next month, and all other months, you will have to donate only basic monthly donation. Monthly price: 10€ / 10 cookies This fee has to be paid every month. I won't accept any new join fee before the 100 cookies contribution. Your money will be instantly sent back. Also, in the same shape of idea, actual supporters/donators have to be active to stay in sources. It doesn't have to be a particular amount, you just have to share from time to time *anything*. I don't accept anymore silent ppl. Only useful people will be kept.
    • @Kenrix Hello. my friend bought from you the panel and he told me that he haven't recieved yet his product whats going on?.
  • Topics

×
×
  • Create New...