SA-MP Forums Archive
[FilterScript] Anti MG - Simple y efectivo - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+----- Forum: Lanzamientos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=59)
+----- Thread: [FilterScript] Anti MG - Simple y efectivo (/showthread.php?tid=553724)



Anti MG - Simple y efectivo - Smoke123 - 31.12.2014

Pues no hay mucho que explicar,si un usuario dice palabras como xd,lol,chelsea,barza,liverpool,,lel,looool,pg,mg en el chat normal,este no saldra y le devolvera un mensaje al user que esta haciendo mg.





Pastebin:http://pastebin.com/GdNcMg0c


Respuesta: Anti MG - Simple y efectivo - iSanchez - 31.12.2014

y si el usuario no sabe que es MG? ...


Re: Respuesta: Anti MG - Simple y efectivo - CrashCar - 31.12.2014

Quote:
Originally Posted by iSanchez
View Post
y si el usuario no sabe que es MG? ...
їY si el que lo creу tampoco?.

El sistema estб bien, algo parecido a lo que hizo GROVE4L (o como se escriba). aunque eso depende como se maneja la temбtica del servidor sobre el RP, osea MG, en este tiempo de samp ya casi 2015 se le define "usar informaciуn Out of character para beneficios In Character" que es diferente a lo que primitivamente se le decнa, "Confundir canales OOC y IC". pero que mбs da :333


Respuesta: Anti MG - Simple y efectivo - Zume - 31.12.2014

Estб muy bien!. Aprovecho a dejar otro cуdigo tambiйn, para que haya mбs diversidad.

pawn Code:
stock DetectarMetagaming(text[], sustitucion[14] = EOS)
{
    static const MetaGamings[][16] =
    {
        {"xD"},
        {"servidor"},
        {"metagaming"},
        {"server"},
        {"admin"},
        {"SA:MP"}
    };
    new
        i, count;

    while(i <= strlen(text))
    {
        for(new ex = 0; ex < sizeof(MetaGamings); ex++)
        {
            if(strfind(text,MetaGamings[ex],true,i) != -1 && strfind(text,MetaGamings[ex],true,i) == i)
            {
                if((((sustitucion[0])) || (((sustitucion[0]) != '\1') && ((sustitucion[1])))))
                {
                    strdel(text, i, i+strlen(MetaGamings[ex]));
                    for(new x = 0; x < strlen(MetaGamings[ex]); x++)
                    {
                        strins(text, sustitucion, i, strlen(MetaGamings[ex]));
                    }
                }
                count++;
            }
        }
        i++;
    }
    return ((count > 0) ? (count) : (-1));
}
pawn Code:
public OnPlayerText(playerid, text[])
{
    new id = -1, string[128];
    id = DetectarMetagaming(text/*, "*" */); // Es posible agregar caracteres que seran agregados en las palabras MG, por ello puse ? en return 0
    if(id != -1)
    {
        format(string, sizeof(string), "No hagas metagaming, tu mensaje tiene %d palabras OOC ..", id);
        SendClientMessage(playerid, -1, string);
        //return 0; // (?)
    }
    return 1;
}



Respuesta: Anti MG - Simple y efectivo - Smoke123 - 31.12.2014

La idea es que si el user no sabe lo que es MG (confundir ic con oc) le agregues en el mensaje, "Usa /ayuda si no sabes lo que es MG" es un sistema base,que bloquea palabras que suelen usarse en /b,pero los que no saben rolear lo dicen en el chat normal.Claro que hay otras formas de MG,desde grupos de ********,hasta skype y otros programas,tampoco me gusta mucho el roleplay asi que no se cual es el nuevo concepto de MG,solo el viejo

La verdad que no conosco el sistema de GROVE4L (como se diga xd) yo el codigo lo hize apartir de la wiki ( https://sampwiki.blast.hk/wiki/Strfind )


Respuesta: Anti MG - Simple y efectivo - iSanchez - 01.01.2015

Quote:
Originally Posted by Smoke123
View Post
La idea es que si el user no sabe lo que es MG (confundir ic con oc) le agregues en el mensaje, "Usa /ayuda si no sabes lo que es MG" es un sistema base,que bloquea palabras que suelen usarse en /b,pero los que no saben rolear lo dicen en el chat normal.Claro que hay otras formas de MG,desde grupos de ********,hasta skype y otros programas,tampoco me gusta mucho el roleplay asi que no se cual es el nuevo concepto de MG,solo el viejo

La verdad que no conosco el sistema de GROVE4L (como se diga xd) yo el codigo lo hize apartir de la wiki ( https://sampwiki.blast.hk/wiki/Strfind )
y no seria mejor que cuando haga MG automaticamente se diga por /b ? digo..


Respuesta: Anti MG - Simple y efectivo - DesingMyCry - 01.01.2015

Zume, personalmente no usarнa una funciуn tan lenta.



Solo en 1000 repeticiones (que para una funciуn deberнa ser nada, en una prueba de velocidad) ocupa mas de 4 segundos completos donde el servidor esta detenido.

La prueba la realice quitando todas las palabras relacionadas al tema (que no eran tantas tampoco) y solo dejй una, que es "Dios" para que solo busque dicha, por lo que la velocidad que demostrу es en el mejor de los casos, ya que si colocara todas las palabras que realmente deberнa detectar, la funciуn serнa exageradamente lenta. Mucho mas que ahora.

Como por ejemplo:




Respuesta: Anti MG - Simple y efectivo - DesingMyCry - 02.01.2015

A falta de objeciones, obligado a debatir conmigo mismo...

Creй un script que supera en velocidad, 30 veces a la funciуn de Zume, ademбs de tener mas opciones de uso.

http://prntscr.com/5nliuj

El script en cuestiуn, utiliza 2 funciones para su correcto funcionamiento.

pawn Code:
/*
    [interno]
        [nombre]
            _@_i@strreplace
        [/nombre]
        [propуsito]
            modificar una palabra o frase en cuestiуn, de una cadena de carбcteres
        [/propуsito]
        [parбmetros]
            [original:array]
                cadena que serб modificada, tambiйn es la variable destino
            [/original:array]
            [anterior:array]
                palabra o conjunto de las mismas, a ser buscada para ser modificada
            [/anterior:array]
            [nueva:array]
                nueva palabra que se sobreescribirб
            [/nueva:array]
            [ignorecase:bool]
                filtrar entre mayъsculas y minъsculas
            [/ignorecase:bool]
            [original:int]
                tamaсo del parбmetro [original:array]
            [/original:int]
        [/parбmetros]
        [retorno]
            [int]
                [>= 0]
                    nъmero de reemplazos que hizo la funciуn
                [/>= 0]
            [/int]
        [/retorno]
    [/interno]
*/

stock _@_i@strreplace(original[], anterior[], nueva[], bool:ignorecase = false, original@t = sizeof(original))
{
    new
        c,
        pos,
        anterior@t = strlen(anterior);
       
    while(~(pos = strfind(original, anterior, ignorecase, pos)))
    {
        strdel(original, pos, pos+anterior@t);
        strins(original, nueva, pos, original@t);

        pos++;
        c++;
    }

    return c;
}

/*
    [funciуn]
        [nombre]
            str_replace
        [/nombre]
        [propуsito]
            modificar una o mas palabras o frases en cuestiуn, de una cadena de carбcteres
        [/propуsito]
        [parбmetros]
            [original:array]
                cadena que serб modificada, tambiйn es la variable destino
            [/original:array]
            [nueva:array]
                nueva palabra que se sobreescribirб
            [/nueva:array]
            [ignorecase:bool]
                filtrar entre mayъsculas y minъsculas
            [/ignorecase:bool]
            [original:int]
                tamaсo del parбmetro [original:array]
            [/original:int]
            [...]
                cadenas que serбn buscadas para ser modificadas
            [/...]
        [/parбmetros]
        [retorno]
            [int]
                [>= 0]
                    nъmero de reemplazos que hizo la funciуn
                [/>= 0]
            [/int]
        [/retorno]
    [/funciуn]
*/

stock str_replace(original[], nueva[], bool:ignorecase, original@t = sizeof(original), {_}:...)
{
    new
        arg@num = numargs(),
        s;

    for(new i = 4; i < arg@num; i++)
    {
        static
            _@[144];
           
        new
            indice,
            caracter;

        principio:

        caracter = getarg(i, indice);

        _@[indice++] = caracter;

        if(caracter != 0) goto principio;

        s += _@_i@strreplace(original, _@, nueva, ignorecase, original@t);
    }
   
    return s;
}


Con un define ya quedarнa igual que tu funciуn:


pawn Code:
#define detectar(%0) str_replace(%0, "", true, sizeof(%0), "xD", "servidor", "metagaming", "server", "admin", "SA:MP")
Y voilа, 30 veces mas veloz.

pawn Code:
public OnGameModeInit()
{
    n>10;

    #define num 10
    #define num2 4
   
    new tiempo;
    new cadena[144] = "Variable -SA:MP- contenedora -admin- de palabras -admin- que deberбn -xD- ser -metagaming- eliminadas -servidor- como mнnimo...-server-";
   
    printf("COMIENZA PRUEBA DE VELOCIDAD > %d vueltas de %d repeticiones c/u -^", num2, num);
    n>2;
    printf("\tDetectarMetagaming(\"%s\");", cadena);
    for(new i_ = 0; i_ < num2; i_++)
    {
        tiempo = GetTickCount();

        for(new i__ = 0; i__ < num; i__++)
        {
            new _@ = DetectarMetagaming(cadena);
            #pragma unused _@
        }

        printf("\t\tVuelta %d demorу %d milisegundos", i_+1, GetTickCount()-tiempo);
    }
    printf("\tResultado:\t%s", cadena);
    n>3;

    cadena = "Variable -SA:MP- contenedora -admin- de palabras -admin- que deberбn -xD- ser -metagaming- eliminadas -servidor- como mнnimo...-server-";
   
    printf("\tstr_replace(\"%s\");", cadena);
   
    for(new i_ = 0; i_ < num2; i_++)
    {
        tiempo = GetTickCount();

        for(new i__ = 0; i__ < num; i__++)
        {
            new _@ = str_replace(cadena, "", true, sizeof(cadena), "xD", "servidor", "metagaming", "server", "admin", "SA:MP");
            #pragma unused _@
        }

        printf("\t\tVuelta %d demorу %d milisegundos", i_+1, GetTickCount()-tiempo);
    }
    printf("\tResultado:\t%s", cadena);

    n>6;
    return 1;
}



Respuesta: Anti MG - Simple y efectivo - iSanchez - 03.01.2015

Quote:
Originally Posted by DesingMyCry
View Post
A falta de objeciones, obligado a debatir conmigo mismo...

Creй un script que supera en velocidad, 30 veces a la funciуn de Zume, ademбs de tener mas opciones de uso.

http://prntscr.com/5nliuj

El script en cuestiуn, utiliza 2 funciones para su correcto funcionamiento.

pawn Code:
/*
    [interno]
        [nombre]
            _@_i@strreplace
        [/nombre]
        [propуsito]
            modificar una palabra o frase en cuestiуn, de una cadena de carбcteres
        [/propуsito]
        [parбmetros]
            [original:array]
                cadena que serб modificada, tambiйn es la variable destino
            [/original:array]
            [anterior:array]
                palabra o conjunto de las mismas, a ser buscada para ser modificada
            [/anterior:array]
            [nueva:array]
                nueva palabra que se sobreescribirб
            [/nueva:array]
            [ignorecase:bool]
                filtrar entre mayъsculas y minъsculas
            [/ignorecase:bool]
            [original:int]
                tamaсo del parбmetro [original:array]
            [/original:int]
        [/parбmetros]
        [retorno]
            [int]
                [>= 0]
                    nъmero de reemplazos que hizo la funciуn
                [/>= 0]
            [/int]
        [/retorno]
    [/interno]
*/

stock _@_i@strreplace(original[], anterior[], nueva[], bool:ignorecase = false, original@t = sizeof(original))
{
    new
        c,
        pos,
        anterior@t = strlen(anterior);
       
    while(~(pos = strfind(original, anterior, ignorecase, pos)))
    {
        strdel(original, pos, pos+anterior@t);
        strins(original, nueva, pos, original@t);

        pos++;
        c++;
    }

    return c;
}

/*
    [funciуn]
        [nombre]
            str_replace
        [/nombre]
        [propуsito]
            modificar una o mas palabras o frases en cuestiуn, de una cadena de carбcteres
        [/propуsito]
        [parбmetros]
            [original:array]
                cadena que serб modificada, tambiйn es la variable destino
            [/original:array]
            [nueva:array]
                nueva palabra que se sobreescribirб
            [/nueva:array]
            [ignorecase:bool]
                filtrar entre mayъsculas y minъsculas
            [/ignorecase:bool]
            [original:int]
                tamaсo del parбmetro [original:array]
            [/original:int]
            [...]
                cadenas que serбn buscadas para ser modificadas
            [/...]
        [/parбmetros]
        [retorno]
            [int]
                [>= 0]
                    nъmero de reemplazos que hizo la funciуn
                [/>= 0]
            [/int]
        [/retorno]
    [/funciуn]
*/

stock str_replace(original[], nueva[], bool:ignorecase, original@t = sizeof(original), {_}:...)
{
    new
        arg@num = numargs(),
        s;

    for(new i = 4; i < arg@num; i++)
    {
        static
            _@[144];
           
        new
            indice,
            caracter;

        principio:

        caracter = getarg(i, indice);

        _@[indice++] = caracter;

        if(caracter != 0) goto principio;

        s += _@_i@strreplace(original, _@, nueva, ignorecase, original@t);
    }
   
    return s;
}


Con un define ya quedarнa igual que tu funciуn:


pawn Code:
#define detectar(%0) str_replace(%0, "", true, sizeof(%0), "xD", "servidor", "metagaming", "server", "admin", "SA:MP")
Y voilа, 30 veces mas veloz.

pawn Code:
public OnGameModeInit()
{
    n>10;

    #define num 10
    #define num2 4
   
    new tiempo;
    new cadena[144] = "Variable -SA:MP- contenedora -admin- de palabras -admin- que deberбn -xD- ser -metagaming- eliminadas -servidor- como mнnimo...-server-";
   
    printf("COMIENZA PRUEBA DE VELOCIDAD > %d vueltas de %d repeticiones c/u -^", num2, num);
    n>2;
    printf("\tDetectarMetagaming(\"%s\");", cadena);
    for(new i_ = 0; i_ < num2; i_++)
    {
        tiempo = GetTickCount();

        for(new i__ = 0; i__ < num; i__++)
        {
            new _@ = DetectarMetagaming(cadena);
            #pragma unused _@
        }

        printf("\t\tVuelta %d demorу %d milisegundos", i_+1, GetTickCount()-tiempo);
    }
    printf("\tResultado:\t%s", cadena);
    n>3;

    cadena = "Variable -SA:MP- contenedora -admin- de palabras -admin- que deberбn -xD- ser -metagaming- eliminadas -servidor- como mнnimo...-server-";
   
    printf("\tstr_replace(\"%s\");", cadena);
   
    for(new i_ = 0; i_ < num2; i_++)
    {
        tiempo = GetTickCount();

        for(new i__ = 0; i__ < num; i__++)
        {
            new _@ = str_replace(cadena, "", true, sizeof(cadena), "xD", "servidor", "metagaming", "server", "admin", "SA:MP");
            #pragma unused _@
        }

        printf("\t\tVuelta %d demorу %d milisegundos", i_+1, GetTickCount()-tiempo);
    }
    printf("\tResultado:\t%s", cadena);

    n>6;
    return 1;
}
Para que sirven este tipo de cosas en el stock?

Code:
_@_i@
Code:
_@_i@
y que hace esto de aqui?

Code:
while(~(pos = strfind(original, anterior, ignorecase, pos)))



Respuesta: Anti MG - Simple y efectivo - DesingMyCry - 03.01.2015

Lo primero es para que no usen la funciуn en el GameMode, ya que es una funciуn interna.

Lo segundo es un operador bit, lo que hace es bбsicamente voltear cada uno de estos.