Jump to content

Question

Posted

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?

Recommended Posts

  • 0
Posted
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

  • 0
Posted

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().

  • 0
Posted (edited)

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
  • 0
Posted
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)

  • 0
Posted

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 . 

  • 0
Posted

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?

  • 0
Posted

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

 

Glad to hear that , what exactly you mean?

  • 0
Posted (edited)

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

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.




×
×
  • Create New...