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