Oko

Započeo Kaka, Septembar 30, 2018, 16:59:51 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 4 gostiju pregledaju ovu temu.

Problem(error/warning): Kako da namestim da kada igrača spama u četu tj ponovi isto 4-5 puta da ga server mutira ?
Dio skripte: [ pawn ]Å ta treba ?[ /pawn ]
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): [ code ]/[ /code ]
Slika/video ingame problema(obavezno ako je ingame problem): /

Misliš ako recimo koristi C/P za istu rečenicu?Npr:
Balkan Samp
Balkan Samp
Balkan Samp
Balkan Samp
Balkan Samp


I kada bi to ukucao da ga mutira? Gle.Nije problem takvo nešto napraviti ali mislim da nema smisla.Jer da bi ti napravio takvo nešto morao bi imati jednu varijablu u koju bi morao spremati sve što igrač napiše u chatu i onda kada sljedeći put nešto napiše provjeriti da li se to poklapa sa prethodnim zapamćenim stringom i onda još jednu varijablu u koju bi brojao koliko je puta to napisao( I onda naravno mora resetirati varijablu ako se ne poklapa sa onim što je prethodni put napisao)

Nije teško napraviti-Ali jako loše riješenje.

Puno bolje riješenje bi bilo napraviti da chat može koristiti svakih 2-3 sekunde pa si riješio dio problema.(A to možeš sa jednom varijablom u koju ćeš spremati trenutno vrijeme+2,3 sekunde i onda samo napraviti provjeru u OnPlayerText.)


nešto na ovaj fazon??

[pawn]#define broj_upozorenja 5
enum last_inputenum {
    lastinput[ 128 ],
    warnings,
    mutetime
}
new inputdata[ MAX_PLAYERS ][ last_inputenum ];

inputcheck( playerid, inputtext[] ) {
    if( !strcmp( inputdata[ playerid ][ lastinput ], inputtext, true ) ) inputdata[ playerid ][ warnings ]++;
    else inputdata[ playerid ][ warnings ] = 0;
    if( inputdata[ playerid ][ warnings ] >= broj_upozorenja ) {
        // ovdje ide mutiranje...
        strdel( inputdata[ playerid ][ lastinput ], 0, 128 );
        inputdata[ playerid ][ warnings ] = 0;
    }
    strdel( inputdata[ playerid ][ lastinput ], 0, 128 );
    strcat( inputdata[ playerid ][ lastinput ], inputtext );
    return inputdata[ playerid ][ warnings ];
}[/pawn]

pisao sam preko browsera, ne garantujem ti da ce raditi, mada pogledaj na kojem principu bi radilo to tvoje mutiranje. inputcheck funkciju ubaci unutar callbackova tipa OnDialogResponse i OnPlayerCommandPerformed..
Poslednja Izmena: Septembar 30, 2018, 21:46:32 POSLE PODNE od Bašovski


bilo je lijepo dok je trajalo.


Citat: Bašovski poslato Septembar 30, 2018, 21:44:23 POSLE PODNE
nešto na ovaj fazon??

[pawn]#define broj_upozorenja 5
enum last_inputenum {
    lastinput[ 128 ],
    warnings,
    mutetime
}
new inputdata[ MAX_PLAYERS ][ last_inputenum ];

inputcheck( playerid, inputtext[] ) {
    if( !strcmp( inputdata[ playerid ][ lastinput ], inputtext, true ) ) inputdata[ playerid ][ warnings ]++;
    else inputdata[ playerid ][ warnings ] = 0;
    if( inputdata[ playerid ][ warnings ] >= broj_upozorenja ) {
        // ovdje ide mutiranje...
        strdel( inputdata[ playerid ][ lastinput ], 0, 128 );
        inputdata[ playerid ][ warnings ] = 0;
    }
    strdel( inputdata[ playerid ][ lastinput ], 0, 128 );
    strcat( inputdata[ playerid ][ lastinput ], inputtext );
    return inputdata[ playerid ][ warnings ];
}[/pawn]

pisao sam preko browsera, ne garantujem ti da ce raditi, mada pogledaj na kojem principu bi radilo to tvoje mutiranje. inputcheck funkciju ubaci unutar callbackova tipa OnDialogResponse i OnPlayerCommandPerformed..

To se lako da zaobici ex.
Say: Ja sam dobar
Say: Ja sam doobar
Say: Ja sam dobar
(broj upozorenja = 0)

Kao sto je Paul naveo gore, mnogo bolje rjesenje mu je da napravi provjeru da igrac ne moze pisati brzo u chatu (npr. da moze pisati svakih 2-3 sekunde).
Bukvalno sa ovim sto si uradio: 1. vise ces preopteretit server 2. nece biti efektivno


new nextChatTime[MAX_PLAYERS] = { 0, ... };

// OnPlayerText
if (nextChatTime[playerid] < gettime()) {
// Error message
return 0;
}
nextChatTime[playerid] = gettime() + 3;


Sto se tice ovoga sto ti je Basovski pokusao uraditi, tu bi ti trebalo malo vise truda, smisliti dobar algoritam i pokriti sve "rupe".
Tipa:
1. Dupla slova
2. Spaceovi
3. Simboli kojima izoblice neku rijec (rijec > r.i#j,,e.c)

Vrijedi li to na single threaded sampu? Ne :)

Citat: .ксундер poslato Oktobar 01, 2018, 00:53:46 PRE PODNE
To se lako da zaobici ex.
Say: Ja sam dobar
Say: Ja sam doobar
Say: Ja sam dobar
(broj upozorenja = 0)

Kao sto je Paul naveo gore, mnogo bolje rjesenje mu je da napravi provjeru da igrac ne moze pisati brzo u chatu (npr. da moze pisati svakih 2-3 sekunde).
Bukvalno sa ovim sto si uradio: 1. vise ces preopteretit server 2. nece biti efektivno


new nextChatTime[MAX_PLAYERS] = { 0, ... };

// OnPlayerText
if (nextChatTime[playerid] < gettime()) {
// Error message
return 0;
}
nextChatTime[playerid] = gettime() + 3;


Sto se tice ovoga sto ti je Basovski pokusao uraditi, tu bi ti trebalo malo vise truda, smisliti dobar algoritam i pokriti sve "rupe".
Tipa:
1. Dupla slova
2. Spaceovi
3. Simboli kojima izoblice neku rijec (rijec > r.i#j,,e.c)

Vrijedi li to na single threaded sampu? Ne :)