SA-MP Forums Archive
strfind won't work - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: strfind won't work (/showthread.php?tid=457855)



strfind won't work - Extasy4 - 13.08.2013

Hi!

I have this:

Код:
			if(strfind(inputtext, "0", true) || strfind(inputtext, "1", true) || strfind(inputtext, "2", true) || strfind(inputtext, "3", true) || strfind(inputtext, "4", true) || strfind(inputtext, "5", true) || strfind(inputtext, "6", true) || strfind(inputtext, "7", true) || strfind(inputtext, "8", true) || strfind(inputtext, "9", true) ||
   			strfind(inputtext, "й", true) || strfind(inputtext, "у", true) || strfind(inputtext, "ц", true) || strfind(inputtext, "ő", true) || strfind(inputtext, "н", true) || strfind(inputtext, "ъ", true) || strfind(inputtext, "ь", true) || strfind(inputtext, "ű", true) || strfind(inputtext, "б", true) ||
   			strfind(inputtext, "hitler", true) || strfind(inputtext, "rambo", true) || strfind(inputtext, "buzi", true) || strfind(inputtext, "kocsog", true) || strfind(inputtext, "geci", true) || strfind(inputtext, "fasz", true) || strfind(inputtext, "fos", true) || strfind(inputtext, "shit", true) || strfind(inputtext, "fuck", true))
		 	{
				SendClientMessage(playerid, COLOR_TOMATO, "Error: The text cannot contain special characters!");
		 	}
		 	else
			{
	 		        SendClientMessage(playerid, COLOR_WHITE, "You're cool");
	 		}
But whenever I type anything in the field the error message pops up. Even if I write only an 'a' letter..

Can anyone help please?


Re: strfind won't work - Misiur - 13.08.2013

Strfind returns -1 on failure, not 0, so when you do if(strfind(a, "b", true)) it will return true even for -1. You need to use (strfind(a, "b", true) != -1)


Re: strfind won't work - Extasy4 - 13.08.2013

Should I write this only at the very end? So after the last strfind?


Re: strfind won't work - Misiur - 13.08.2013

I'd suggest something like:
pawn Код:
#define N_CENSORED 2 //number of censored words
#define N_CENSORED_LEN 32 //length of max string
static const Censored[N_CENSORED_LEN][(N_CENSORED_LEN + 1) char] = {
    !"Hitler",
    !"Pancakes"
};

stock ContainsCensored(const input[]) {
    for(new i = 0; i != N_CENSORED; ++i) {
        if(strfind(input, Censored[i], true) != -1)  return 1;
    }
    return 0;
}

//...
if(ContainsCensored(inputtext)) {
    SendClientMessage(playerid, COLOR_TOMATO, "Error: The text cannot contain swearwords/some characters!");
}



Re: strfind won't work - Extasy4 - 13.08.2013

That's nice, I'll try it


Re: strfind won't work - Extasy4 - 13.08.2013

But why did u write '!' in front of the forbidden words?


Re: strfind won't work - Misiur - 15.08.2013

! is for packed strings, so their size is 4 times smaller in memory. Strfind can work with packed strings, however not every function can (you have to use strunpack then). You should store big arrays of strings in packed form, and then strunpack them on fly


Re: strfind won't work - Extasy4 - 15.08.2013

Wow, thank you so much! It's finally working now. I have one last question: What if I use '!strfind'? what value should I write at the end?


Re: strfind won't work - Extasy4 - 17.08.2013

bump


Re: strfind won't work - cessil - 17.08.2013

if you use !strfind then you're checking if strfind returns 0
if you want to check if a string doesn't contain a string you should check for it returning -1
https://sampwiki.blast.hk/wiki/Strfind