←  Pluginy AMXX

AMXX.pl: Support AMX Mod X i SourceMod

»

AntyBot oparty na pytaniach.

  • +
  • -
NoLiFeR - zdjęcie NoLiFeR 13.08.2015

opis
Plugin powoduje wyrzucenie gracza, jeżeli ten nie odpowie na zadane pytanie. (nie kliknie "Tak")
Ułożenie odpowiedzi nie jest stałe przez co spamowanie za pomocą botów jest skutecznie blokowane...

Także nie odpowiedzenie na pytanie w ciągu 5 sekund (Patrz Cvary) powoduje wyrzucenie gracza z serwera z powodem "Nieprawidłowa odpowiedz / brak odpowiedzi".

 

instalacja

 

Standardowa.

 

konfiguracja

 

Pytań jest pięć, można je zmieniać edytując odpowiednie linijki w sma.

 

cvary

 

timetokick "5.0" - Czas po którym zostanie wyrzucony gracz który nie odpowie na zadane mu pytanie.

wlaczlogikickowania "1" - Jeżeli wlaczone, w logach zostanie zapisane ip oraz nick delikwenta.

 

download

1.1

Załączony plik  antybot.sma   2,59 KB   232 Ilość pobrań

 

1.0

Załączony plik  antybot.sma   3,49 KB   243 Ilość pobrań

 

 

Wszelkie bugi (których jednak być nie powinno ;) ) proszę zgłaszać w tym temacie.

 
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 18.08.2015

Przemyśl funkcję: public menuantybota(id), bo wygląda ona tragicznie. Czy nie może ona wyglądać na przykład tak jak poniżej?
public menuantybota(id){
	id -= TASK_SHOW;
	if(is_user_connected(id)){
		new buffer[400];
		
		formatex(buffer, charsmax(buffer), g_pytania[random(5)]);
		
		new x = random(7);
		if(last == x){
			x = random(7);
		}
		
		last = x;
		
		format(buffer, charsmax(buffer), "%s^n^n^t\r(\d%d\r) \yT\ra\yk", buffer, (x + 1));
		menuencoding[id] = x;
		
		format(buffer, charsmax(buffer), "%s^n^n\dPamietaj aby czytac co klikasz :)", buffer);
		show_menu(id, KLAWISZE, buffer, -1, "InfaHandler");
		set_task(get_pcvar_float(Czas), "outtimedmenu", id + TASK_MENU); // Pobierz raz wartość cvara w plugin_cfg, tak samo z pozostałymi cvarami.
	}
}
Odpowiedz

  • +
  • -
Asiap - zdjęcie Asiap 18.08.2015

random() czesto zwraca ta sama wartosc lepiej uzyc random_num()

Odpowiedz

  • +
  • -
Linux' - zdjęcie Linux' 18.08.2015

Sa duzo bardziej skuteczne sposoby weryfikacji gracza czy jest botem. Dla mnie zbedne.

Odpowiedz

  • +
  • -
NoLiFeR - zdjęcie NoLiFeR 18.08.2015

Przemyśl funkcję: public menuantybota(id), bo wygląda ona tragicznie. Czy nie może ona wyglądać na przykład tak jak poniżej?

public menuantybota(id){
	id -= TASK_SHOW;
	if(is_user_connected(id)){
		new buffer[400];
		
		formatex(buffer, charsmax(buffer), g_pytania[random(5)]);
		
		new x = random(7);
		if(last == x){
			x = random(7);
		}
		
		last = x;
		
		format(buffer, charsmax(buffer), "%s^n^n^t\r(\d%d\r) \yT\ra\yk", buffer, (x + 1));
		menuencoding[id] = x;
		
		format(buffer, charsmax(buffer), "%s^n^n\dPamietaj aby czytac co klikasz :)", buffer);
		show_menu(id, KLAWISZE, buffer, -1, "InfaHandler");
		set_task(get_pcvar_float(Czas), "outtimedmenu", id + TASK_MENU); // Pobierz raz wartość cvara w plugin_cfg, tak samo z pozostałymi cvarami.
	}
}

Ehh.. Już to tłumaczyłem. Gdzie wtedy będą odpowiedzi "nie" ? :)

 

To zadziała na każdy nowy "gatunek" botów, przy których inne antyboty zawiodą :) A jeżeli ktoś zapragnie sobie obejść zabezpieczenie 1'nego cs'a (nwm czy to możliwe, ale raczej tak :) ) i napadnie na serwer w ten sposób ? :)


speedkill (18.08.2015 15:11):
A widzisz jakiś problem w dodaniu do tego kodu powyżej odpowiedzi nie?
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 18.08.2015

random() czesto zwraca ta sama wartosc lepiej uzyc random_num()

Skąd taka pewność, robiłaś testy? Czy jest to po prostu informacja napisana tak o?

random:
Spoiler


random_num:
Spoiler
Odpowiedz

  • +
  • -
NoLiFeR - zdjęcie NoLiFeR 18.08.2015

Nie, nie widze :) Poprawie kod, jak będe miał czasu ciutkę ;)

Odpowiedz

  • +
  • -
Misiaczek ;c - zdjęcie Misiaczek ;c 24.08.2015

Nie, nie widze :) Poprawie kod, jak będe miał czasu ciutkę ;)

	client_print(id, print_console, "|--------------------------------------|");
	client_print(id, print_console, "|-|Boty nie maja tutaj wstepu :)|-|");
	client_print(id, print_console, "|--------------------------------------|");

zamień na

new szTxT[ 256 ];
formatex( szTxT, charsmax( szTxT ), "|--------------------------------------|^n|-|Boty nie maja tutaj wstepu :)|-|^n|--------------------------------------|" );
console_print( id, szTxt );
	new name[33], ip[33];
	get_user_name(id, name, 32);
	get_user_ip(id, ip, 32);

zamień na

	new Dane[ 2 ][ 33 ]
	get_user_name( id, Dane[ 0 ], 32 );
	get_user_ip( id, Dane[ 1 ], 20, 1);
new last, Czas, logs;

zamień na

new last, pCvar[ 2 ];
	Czas = register_cvar("timetokick","5.0");
	logs = register_cvar("wlaczlogikickowania","1");

zamień na

	pCvar[ 0 ] = register_cvar("timetokick","5.0");
	pCvar[ 1 ] = register_cvar("wlaczlogikickowania","1");
	set_task(get_pcvar_float(Czas), "outtimedmenu", id+TASK_MENU);

zamień na:

	set_task(get_pcvar_float( pCvar[ 0 ] ), "outtimedmenu", id+TASK_MENU);
if(get_pcvar_num(logs)) 

zamień na

if( get_pcvar_num( pCvar[ 0 ] ) )
Odpowiedz

  • +
  • -
NoLiFeR - zdjęcie NoLiFeR 24.08.2015

V 1.1

Poprawki :

Zaimplementowane zostały poprawki z postu Misiaczek ;c.
Przy formatowaniu tablicy zastosowana została pętla (wieksza optymalnosc kodu końcowego oraz czytelność).

Załączony plik  antybot.sma   2,59 KB   208 Ilość pobrań


Użytkownik NoLiFeR edytował ten post 24.08.2015 13:40
Odpowiedz