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?
Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Plugin na nazwe?
#1
Napisano 19.10.2014 16:50
#2
Napisano 19.10.2014 17:08
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()
"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.
#3
Napisano 19.10.2014 17:10
Możesz to jakoś inaczej zaprezentować, bo z pierwszego razu nie zrozumiałem.
#4
Napisano 19.10.2014 17:12
Chcesz sprawdzić czy nazwa serwera jest taka sama jak zadeklarowana przez Ciebie w pluginie, dobrze zrozumiałem?
"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.
#5
Napisano 19.10.2014 17:13
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
#6
Napisano 19.10.2014 17:13
#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 ?
#7
Napisano 19.10.2014 17:16
O super, znalazłeś coś lepszego, że jest blokada na IP i nazwe. W jaki sposób dodać to do kodu?
#8
Napisano 19.10.2014 17:20
To gdzieś na górze kodu
new const nazwa_serwera[] = ""; // Nazwa serwera new const ip_serwera[] = ""; // IPTą 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."); }
#9
Napisano 19.10.2014 17:22
Dzięki wielkie za pomoc. Temat można zamknąć.
#10
Napisano 19.10.2014 17:23
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."); } }
"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.
#11
Napisano 19.10.2014 17:25
Ł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/
#12
Napisano 19.10.2014 17:35
Już całkiem się pogubiłem. Który jest najbardziej skuteczny?
#13
Napisano 19.10.2014 17:38
#14
Napisano 19.10.2014 18:57
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 ) 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ć.
#15
Napisano 19.10.2014 23:46
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)
#16
Napisano 20.10.2014 05:54
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.
#17
Napisano 20.10.2014 07:59
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.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.
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
#18
Napisano 20.10.2014 13:28
Czyli dobrze to rozkminiłem? Zaneguje 2 warunki i po sprawie?
Ale wystarczy tez edytowac ip lub nazwe zapisana w pluginie
#19
Napisano 21.10.2014 06:19
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
#20
Napisano 21.10.2014 06:40
(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ą.
I gdzie tu jest błąd? Negacja (A && A) jest równa (!A || !A), ewentualnie !(A && A) - najprawdziwsza prawda.sebul- Prawa logiki, negacja (A && A) jest równa (!A || !A), ewentualnie !(A && A). - bynajmniej nie.
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: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.
Negacja (A && C) jest równa (!A || !C), ewentualnie !(A && C).
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych