Jump to content

Question

Posted

Hello, i made a code and basically capture tokens from bypass using StringTokenizer tk = new StringTokenizer(command, " ");

and the bypass is like

%objectId%_something $var1 $var2 $var3 

 

the problem is that i use 3 boxes to fill (3 variables) and if a player inside box he use space to write 2 words it capture the 2nd word as another token so it end up like

4 token instead of 3.

 

How can i avoid this? Like if a player writes in box "Something Something" this will be captured as 1 token instead of 2 tokens ?

 

Thanks a lot.

Recommended Posts

  • 0
Posted

 

Use check like this:

if (st.countTokens() != 3)
{
	activeChar.sendMessage("You stupid idoit! I'm a lord from the Dark Side.");
	return;
}

the problem is not counting the tokens.

 

The other boxes are placed for strings too? or you have boxes for int value?

  • 0
Posted


if (st.countTokens() != 4)

{

activeChar.sendMessage("You stupid idoit! I'm a lord from the Dark Side.");

return;

}

else

{

st.nextToken(); // command name

String string1 = st.nextToken();

String string2 = st.nextToken();

String string3 = st.nextToken();

 

if (string1.equals(string2) || string2.equals(string3) || string3.equals(string1))

{

activeChar.sendMessage("Double entries was detected.");

return;

}

 

// Valid code for feature.

}

  • 0
Posted

Take an example...

 

bmqu9zO.jpg

 

code

 

 

if (currentCommand.startsWith("test"))
{
	String mergeString = null;
	int countTokens = st.countTokens();
	int wanted = 4;

	if (countTokens > wanted)
	{
		int fin = countTokens-wanted;
		for (int i=0; i<fin; i++)
		{
			if (i == 0)
				mergeString = st.nextToken() + " " + st.nextToken();
			else
				mergeString += " " + st.nextToken() ;
		}
	}

	
	Broadcast.announceToOnlinePlayers("Merge = " + mergeString);
	while(st.hasMoreTokens())
	{
		Broadcast.announceToOnlinePlayers("next token = " + st.nextToken());
	}
} 

 

 

 

bypasses:

<edit var="name1" width=110 height=15><br>
<edit var="name2" width=110 height=15><br>
<edit var="name3" width=110 height=15><br>
<edit var="name4" width=110 height=15><br>

<a action="bypass -h npc_%objectId%_test $name1 $name2 $name3 $name4">test</a><br><br>

p.s 

Ofc its not the code you looking for but for sure you can edit this one and make your code works

  • 0
Posted

Take an example...

 

bmqu9zO.jpg

 

code

 

 

if (currentCommand.startsWith("test"))
{
	String mergeString = null;
	int countTokens = st.countTokens();
	int wanted = 4;

	if (countTokens > wanted)
	{
		int fin = countTokens-wanted;
		for (int i=0; i<fin; i++)
		{
			if (i == 0)
				mergeString = st.nextToken() + " " + st.nextToken();
			else
				mergeString += " " + st.nextToken() ;
		}
	}

	
	Broadcast.announceToOnlinePlayers("Merge = " + mergeString);
	while(st.hasMoreTokens())
	{
		Broadcast.announceToOnlinePlayers("next token = " + st.nextToken());
	}
} 

 

 

 

bypasses:

<edit var="name1" width=110 height=15><br>
<edit var="name2" width=110 height=15><br>
<edit var="name3" width=110 height=15><br>
<edit var="name4" width=110 height=15><br>

<a action="bypass -h npc_%objectId%_test $name1 $name2 $name3 $name4">test</a><br><br>

p.s 

Ofc its not the code you looking for but for sure you can edit this one and make your code works

But what if he just complete 1 box and let the other 3 null.. this wouldnt work right?

  • 0
Posted

But what if he just complete 1 box and let the other 3 null.. this wouldnt work right?

probly it will fuck it up :P

i did it just for example in the first box cause i cant know what exactly he wants... 

p.s i think it can be done easier but nvm :p

  • 0
Posted

probly it will fuck it up :P

i did it just for example in the first box cause i cant know what exactly he wants... 

p.s i think it can be done easier but nvm :P

 

The code you posted is not really valid since it cannot check empty boxes so doesnt help them at all

  • 0
Posted

The code you posted is not really valid since it cannot check empty boxes so doesnt help them at all

did u read my previous post ? 

 

  1. Ofc its not the code you looking for but for sure you can edit this one and make your code works
  2. i did it just for example in the first box cause i cant know what exactly he wants
  • 0
Posted

 

did u read my previous post ? 

 

  1. Ofc its not the code you looking for but for sure you can edit this one and make your code works
  2. i did it just for example in the first box cause i cant know what exactly he wants

 

I look :D????????????? rofl i quit life

  • 0
Posted (edited)

just dequeue the tokens on a loop and if they don't match the expected number return invalid

Edited by .Elfocrash
  • 0
Posted

There is a lot easier solution:

<a action="bypass -h npc_%objectId%_test $name1 ¡ $name2 ¡ $name3">

¡ - this is INVERTED EXCLAMATION MARK with C2A1 UTF-8 code. It cannot be wrote by player in game unless he is using programs like adrenaline. There are a lot more characters like this, you can check some UTF-8 table to find some pretty one.

 

Code:

StringTokenizer tk = new StringTokenizer(command, "¡");

You should use .trim() for every token parsed from StringTokenizer so they will not contain spaces.

  • 0
Posted (edited)

There is a lot easier solution:

<a action="bypass -h npc_%objectId%_test $name1 ¡ $name2 ¡ $name3">

¡ - this is INVERTED EXCLAMATION MARK with C2A1 UTF-8 code. It cannot be wrote by player in game unless he is using programs like adrenaline. There are a lot more characters like this, you can check some UTF-8 table to find some pretty one.

 

Code:

StringTokenizer tk = new StringTokenizer(command, "¡");

You should use .trim() for every token parsed from StringTokenizer so they will not contain spaces.

Can you give an example or tell us how this one will help this problem?

 

This guy didnt want to cancel the proccess when one more token found , contrary he want the unexpected tokens as one string with spaces inside.

i believe trim is useless, correct me if im wrong

Edited by melron
  • 0
Posted

There is a lot easier solution:

<a action="bypass -h npc_%objectId%_test $name1 ¡ $name2 ¡ $name3">

¡ - this is INVERTED EXCLAMATION MARK with C2A1 UTF-8 code. It cannot be wrote by player in game unless he is using programs like adrenaline. There are a lot more characters like this, you can check some UTF-8 table to find some pretty one.

 

Code:

StringTokenizer tk = new StringTokenizer(command, "¡");

You should use .trim() for every token parsed from StringTokenizer so they will not contain spaces.

Did you try it? It's not working + eclipse can't compile this character.

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