←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Plugin na nazwe?

  • +
  • -
DarkvTen - zdjęcie DarkvTen 19.10.2014

Witam. Przeszukałem całe forum lecz nie znalazłem tego czego szukam. Otóż potrzebował bym pluginy który ma podobne działanie jak blokada na IP z tym, że musi być teraz nazwa podana, czyli jeżeli serwer nie ma nazwy np: amxx.pl to nie działa?

Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 19.10.2014

Pobierz wartość cvara "hostname" co odpowiada za nazwę serwera, porównaj ją z tą w pluginie, jeżeli jest różna, to zakończ działanie pluginu. Z tym, że takie sprawdzanie musisz robić co jakiś czas, bo można przecież zmienić ją po pierwszym sprawdzeniu w plugin_init()

Odpowiedz

  • +
  • -
DarkvTen - zdjęcie DarkvTen 19.10.2014

Możesz to jakoś inaczej zaprezentować, bo z pierwszego razu nie zrozumiałem.

Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 19.10.2014

Chcesz sprawdzić czy nazwa serwera jest taka sama jak zadeklarowana przez Ciebie w pluginie, dobrze zrozumiałem?

Odpowiedz

  • +
  • -
DarkvTen - zdjęcie DarkvTen 19.10.2014

To ma działać na takiej zasadzie jak blokada na IP z tym że ma odczytywać nazwe serwera. Przykładowo plugin będzie działał na nazwie amxx.pl jeżeli będzie inna to nie zadziała

Odpowiedz

  • +
  • -
Petpat - zdjęcie Petpat 19.10.2014

#include <amxmodx>

new const nazwa_serwera[] = ""; // Nazwa serwera
new const ip_serwera[] = ""; // IP

public plugin_init() {
		register_plugin("nazwa", "1.0", "nazwa_autora");

		new g_IP[33];
		new SerwerName[64];
		get_user_ip(0, g_IP, charsmax(g_IP));
		get_cvar_string("hostname", SerwerName, 63);

		if(equali(g_IP, ip_serwera) && equal(SerwerName, nazwa_serwera)){
			server_print("Dane prawidlowe");
		}else{
			server_print("Dane nieprawidlowe");
			set_fail_state("Plugin nie dziala na tym serwerze.");
		}
}
O to Ci chodziło może ?
Odpowiedz

  • +
  • -
DarkvTen - zdjęcie DarkvTen 19.10.2014

O super, znalazłeś coś lepszego, że jest blokada na IP i nazwe. W jaki sposób dodać to do kodu?

Odpowiedz

  • +
  • -
Petpat - zdjęcie Petpat 19.10.2014

Po prostu, wystarczy wkleić zawartość

To gdzieś na górze kodu
new const nazwa_serwera[] = ""; // Nazwa serwera
new const ip_serwera[] = ""; // IP
Tą w plugin_init()
		new g_IP[33];
		new SerwerName[64];
		get_user_ip(0, g_IP, charsmax(g_IP));
		get_cvar_string("hostname", SerwerName, 63);

		if(equali(g_IP, ip_serwera) && equal(SerwerName, nazwa_serwera)){
			server_print("Dane prawidlowe");
		}else{
			server_print("Dane nieprawidlowe");
			set_fail_state("Plugin nie dziala na tym serwerze.");
		}
Odpowiedz

  • +
  • -
DarkvTen - zdjęcie DarkvTen 19.10.2014

Dzięki wielkie za pomoc. Temat można zamknąć.

Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 19.10.2014

Proponuję takie rozwiązanie, gdyż tak jak powiedziałem, po rozpoczęciu się gry nazwę serwera można z łatwością zmienić, a tym sposobem będzie nazwa sprawdzana co jakiś czas.

 

#define CZAS 15.0
#include <amxmodx>
 
 
new const nazwa_serwera[] = ""; // Nazwa serwera
new const ip_serwera[] = ""; // IP
 
public plugin_init() {
register_plugin("nazwa", "1.0", "nazwa_autora");
set_task(CZAS, "Sprawdz", _, _, _, "b", _);
 
new g_IP[33];
 
if(equali(g_IP, ip_serwera)){
server_print("Dane IP prawidlowe");
}else{
server_print("Dane IP nieprawidlowe");
set_fail_state("Plugin nie dziala na tym serwerze.");
}
}
 
public Sprawdz(){
new SerwerName[64];
get_cvar_string("hostname", SerwerName, 63);
if(equal(SerwerName, nazwa_serwera)){
server_print("Nazwa serwera prawidlowa");
}else{
server_print("Nazwa serwera nieprawidlowa");
set_fail_state("Plugin nie dziala na tym serwerze.");
}
}
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 19.10.2014

Łatwo takie coś obejść. Dekompilacja ;)

 

Wystarczy zanegować.

if(!equali(g_IP, ip_serwera) && !equal(SerwerName, nazwa_serwera)){

Lub zmienić coś tutaj:

new const nazwa_serwera[] = ""; // Nazwa serwera
new const ip_serwera[] = ""; // IP

http://amxx.pl/topic...órego-daje-sma/

Odpowiedz

  • +
  • -
DarkvTen - zdjęcie DarkvTen 19.10.2014

Już całkiem się pogubiłem. Który jest najbardziej skuteczny?

Odpowiedz

  • +
  • -
Petpat - zdjęcie Petpat 19.10.2014

Rzecz jasna, Wielkie Jol, u mnie nie było sprawdzania czy nastąpiła zmiana nazwy.
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 19.10.2014

Ehhh. Nie potrzebnie się wtącałem.
Sęk w tym, że jeżeli wpiszesz ip serwera w plugin (np. new const) to ktos moze podmienic jedna cyferke (dekompilacja i zabawy z cyferkami :D) i dziala mu. Tak samo z nazwa.

Lepiej zrobic socketem. Polaczyc sie z jakims serwerem i uzyskac cos od niego. Poczytaj ten temat co dałem. GwynbleiD ma ogromną wiedzę, którą można wykorzystać.
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 19.10.2014

Tiback jeśli dajesz negację to 

&&

trzeba zastąpić

||

ponieważ ma to być jeśli któraś z tych dwóch jest inna niż, a nie jeśli obie są

 

 

hostname może także pobrać

get_user_name(0,serwer_name,31)
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 20.10.2014

grankee

Dlaczego? Jak zaneguje oba to plugin będzie działał na wszystkich serwerach oprócz tego co ma ip i nazwe, ktora jest w warunku.
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 20.10.2014

grankee

Dlaczego? Jak zaneguje oba to plugin będzie działał na wszystkich serwerach oprócz tego co ma ip i nazwe, ktora jest w warunku.

Prawa logiki, negacja (A && A) jest równa (!A || !A), ewentualnie !(A && A). Tutaj akurat chodzi tylko o to, że negacja tamtego warunku, to nie to co napisałeś. Ale dobrze myślisz, pisząc że warunek podany przez Ciebie, nie zostanie spełniony tylko wtedy, jeśli serwer będzie miał ip i nazwę pasującą do tych wpisanych w plugin.
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 20.10.2014

@sebul

Czyli dobrze to rozkminiłem? Zaneguje 2 warunki i po sprawie?

Ale wystarczy tez edytowac ip lub nazwe zapisana w pluginie :D
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 21.10.2014

if(!equali(g_IP, ip_serwera) && !equal(SerwerName, nazwa_serwera))

TibacK- Jeżeli serwer będzie miał inne ip, ale nazwę dam taką jak potrzeba to warunek nie zostanie spełniony mimo, że jeden z parametrów jest błędny, dlatego należy zamienić "i" (&&) na lub (||).

Warunek ten ma sprawdzać czy przynajmniej jedno z tych (ip lub nazwa) jest błędne natomiast Twoja wersja sprawdza czy oba są błędne, a jeśli chociaż jedno nie będzie błędne to drugie już może być a i tak zadziała.

 

sebul- Prawa logiki, negacja (A && A) jest równa (!A || !A), ewentualnie !(A && A). - bynajmniej nie.

Pomijając już fakt, że powinieneś użyć A oraz B czyli dwóch różnych zmiennych, to nie do końca się zgadza (załóżmy, że każdy założył czytając to tak jak ja-czyli, że są to różne zmienne):

new bool:A=true
new bool:B=true

if(A && B)
{//to będzie prawda}
if(!A || !B)
{//ale to już nie będzie prawda, chociaż napisałeś, że to jest równe (A && B)}
if(!(A&B))
{//to też nie będzie prawda}

no ale pisząc, że (A && A) jest ewentualnie równe  !(A && A)... powiedzmy wprowadzasz w lekki błąd :)

można jedynie powiedzieć, że dla tego przypadku zadziała w sposób porządany zarówno (A && B )->wtedy kontynuuj działanie pluginu lub (!A || !B ) ->wtedy zatrzymaj działanie pluginu, ale absolutnie to nie to samo.


Użytkownik grankee edytował ten post 21.10.2014 06:33
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 21.10.2014

No chodziło mi o
(A && B)
ale dalej przecież dobrze jest napisane, z prawa logiki wynika, że negację
(A && B)
zapisujemy albo tak
(!A || !B)
albo tak
!(A && B)
tak się uczyłem oraz zresztą tak jest i inaczej być nie może, bo prawa się nie zmieniają.
 

sebul- Prawa logiki, negacja (A && A) jest równa (!A || !A), ewentualnie !(A && A). - bynajmniej nie.

I gdzie tu jest błąd? Negacja (A && A) jest równa (!A || !A), ewentualnie !(A && A) - najprawdziwsza prawda.
 

no ale pisząc, że (A && A) jest ewentualnie równe !(A && A)... powiedzmy wprowadzasz w lekki błąd smile.png

można jedynie powiedzieć, że dla tego przypadku zadziała w sposób porządany zarówno (A && B )->wtedy kontynuuj działanie pluginu lub (!A || !B ) ->wtedy zatrzymaj działanie pluginu, ale absolutnie to nie to samo.

Akurat tak nigdzie nie napisałem, ale powtórzę jeszcze raz, tym razem już na dwóch zmiennych, tak jak powinno być i tak jak zresztą chciałem:
Negacja (A && C) jest równa (!A || !C), ewentualnie !(A && C).
sebul (21.10.2014 06:48):
Dałem A i C, bo przy B są emotki.
radim (21.10.2014 13:25):
http://pl.wikipedia....rawa_De_Morgana
Tak dla potwierdzenia ;)
Odpowiedz