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.
|
[ROZWIĄZANE] Blokada na say dla wszystkich prócz admina (komenda)
#1
Napisano 27.07.2012 19:39
Mógłby ktoś napisać plugin, który po wpisaniu /muteall na czacie przez admina blokowałoby wszystkim say? (say_team ma działać)
I żeby komenda mogła być użyta tylko i wyłącznie przez osoby z flagą A (immunitet)
#3
Napisano 27.07.2012 20:36
polecam amx_gag
Wyjdź, albo się nie udzielaj. Nie chce gagować i się bawić w czas itd. tylko raz napisac /muteall i zmutować cały serwer na say, zapomniałem jeszcze dopisać - oczywiście proszę też o to, żeby można było to odwrócić komendą /unmute all.
Użytkownik aerocell edytował ten post 27.07.2012 20:36
#5
Napisano 27.07.2012 21:26
Użytkownik aerocell edytował ten post 27.07.2012 21:26
#7
Napisano 27.07.2012 21:55
Ale dzięki, ze pomagasz, ale jeszcze sprobuj zmienic
//edit
Juz wiem, jak to dziala, juz doczytalem ale wtedy jeszcze ustaw tak, zeby admin z flaga A mogl pisac nawet gdy czat jest zablokowany
Użytkownik aerocell edytował ten post 27.07.2012 22:00
#9
Napisano 28.07.2012 11:10
#include <amxmodx> #include <amxmisc> #define PLUGIN "New Plugin" #define AUTHOR "DarkGL" #define VERSION "1.0" #define ADMIN_FLAG ADMIN_IMMUNITY new bool: isBlocked = false; public plugin_init(){ register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd( "say /muteall" , "muteOn" ); register_clcmd( "say_team /muteall" , "muteOn" ); register_clcmd( "say /unmuteall" , "muteOff" ); register_clcmd( "say_team /unmuteall" , "muteOff" ); register_clcmd( "say" , "sayChat" ); } public muteOn( id , level , cid ){ if( hasFlag( id ) ){ isBlocked = true; } } public muteOff( id , level , cid ){ if( hasFlag( id ) ){ isBlocked = false; } } public sayChat( id ){ if( hasFlag( id ) ){ return PLUGIN_CONTINUE; } else if( isBlocked ){ return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } bool: hasFlag( id ){ return bool: ( get_user_flags( id ) & ADMIN_FLAG ) }
#10
Napisano 28.07.2012 13:06
public muteOn( id , level , cid ){
if( hasFlag( id ) ){
isBlocked = true;
}
client_print(id, print_chat, "Czat zostal zablokowany");
}
public muteOff( id , level , cid ){
if( hasFlag( id ) ){
isBlocked = false;
}
client_print(id, print_chat, "Czat zostal odblokowany");
}
A jak ktoś próbuje napisać w trakcie, gdy czat jest juz zablokowany?
Użytkownik aerocell edytował ten post 28.07.2012 13:09
#11
Napisano 28.07.2012 13:13
#12
Napisano 28.07.2012 13:24
public sayChat( id ){
if( hasFlag( id ) ){
return PLUGIN_CONTINUE;
}
else if( isBlocked ){
client_print(id, print_chat, "Obecnie czat jest zablokowany, moze pisac tylko admin.");
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
Użytkownik aerocell edytował ten post 28.07.2012 13:24
#13
Napisano 28.07.2012 15:26
#include <amxmodx> #include <amxmisc> #define PLUGIN "New Plugin" #define AUTHOR "DarkGL" #define VERSION "1.0" #define ADMIN_FLAG ADMIN_IMMUNITY new bool: isBlocked = false; public plugin_init(){ register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd( "say /muteall" , "muteOn" ); register_clcmd( "say_team /muteall" , "muteOn" ); register_clcmd( "say /unmuteall" , "muteOff" ); register_clcmd( "say_team /unmuteall" , "muteOff" ); register_clcmd( "say" , "sayChat" ); } public muteOn( id ){ if( hasFlag( id ) ){ isBlocked = true; } } public muteOff( id ){ if( hasFlag( id ) ){ isBlocked = false; } } public sayChat( id ){ if( !isBlocked || hasFlag( id ) ){ return PLUGIN_CONTINUE; } return PLUGIN_HANDLED; } bool: hasFlag( id ){ return bool: ( get_user_flags( id ) & ADMIN_FLAG ) }
#14
Napisano 28.07.2012 16:03
public sayChat( id ){
if( !isBlocked || hasFlag( id ) ){
return PLUGIN_CONTINUE;
}
return PLUGIN_HANDLED;
}
A gdzie dopisać client_print, żeby jak ktoś napisze w czacie, kiedy jest zablokowany czat to napisze TYLKO TEJ OSOBIE na czacie info, że "Czat jest zablokowany"? I ogólnie co tutaj dodałeś? Żeby jak napisze admin, to żeby to info się nie pojawiało? Żeby wykluczało admina z tego tak?
//edit
Tak będzie ok?
public sayChat( id ){
if( !isBlocked || hasFlag( id ) ){
return PLUGIN_CONTINUE;
}
client_print(pid, print_chat, "tutaj wiadomosc");
return PLUGIN_HANDLED;
}
Użytkownik aerocell edytował ten post 28.07.2012 16:10
#15
Napisano 29.07.2012 12:26
Tak będzie ok?
public sayChat( id ){
if( !isBlocked || hasFlag( id ) ){
return PLUGIN_CONTINUE;
}
client_print(pid, print_chat, "tutaj wiadomosc");
return PLUGIN_HANDLED;
}
#16
Napisano 29.07.2012 12:43
wtedy będzie ok
#17
Napisano 29.07.2012 13:22
#18 Gość_21977_*
Napisano 29.07.2012 16:26
Przypomnijmy kod do poprawy:
public sayChat( id ){Jeśli jednak już zostało użyte id jako identyfikator gracza
if( !isBlocked || hasFlag( id ) ){
return PLUGIN_CONTINUE;
}
client_print(pid, print_chat, "tutaj wiadomosc");
return PLUGIN_HANDLED;
}
public sayChat( id ){to należy konsekwentnie używać id do końca.
Plugin jako zmienną id przechowuje id gracza, który wykonał tę komendę i id ∈ [1 ; 32] ∩ ℕ
Jeśli nagle zamiast id, użyjesz pid, to plugin nie będzie wiedział na kim wykonać komendę, gdyż nie zna wartości pid i nie wykona jej na graczu o numerze id, lecz najprawdopodobniej na wszystkich, gdyż niezadeklarowany pid weźmie jako wartość 0 (nie weim, jak jest w pawnie, może pobrałby śmieci z pamięci)
W każdym razie, id przechowuje numer gracza, a pid nie, więc należy konsekwentnie używać id do końca.
Oczywiście nie ma problemu, jeśli użyjesz zmiennej pid, ale to wtedy także konsekwentnie, używaj jej wszędzie.
Kod powinien wyglądać tak:
public sayChat( id ){Pierwsza jego linijka pobiera numer gracza, który ją wywołał i zapisuje do zmiennej id.
if( !isBlocked || hasFlag( id ) ){
return PLUGIN_CONTINUE;
}
client_print(id, print_chat, "tutaj wiadomosc");
return PLUGIN_HANDLED;
}
Stąd należy użyć właśnie
client_print(id, print_chat, "tutaj wiadomosc");aby wysłać wiadomość do tego samego gracza.
#19
Napisano 29.07.2012 17:01
pid czy id to są po prostu nazwy zmiennych, używanych, żeby zidentyfikować gracza.
Przypomnijmy kod do poprawy:public sayChat( id ){Jeśli jednak już zostało użyte id jako identyfikator gracza
if( !isBlocked || hasFlag( id ) ){
return PLUGIN_CONTINUE;
}
client_print(pid, print_chat, "tutaj wiadomosc");
return PLUGIN_HANDLED;
}public sayChat( id ){to należy konsekwentnie używać id do końca.
Plugin jako zmienną id przechowuje id gracza, który wykonał tę komendę i id ∈ [1 ; 32] ∩ ℕ
Jeśli nagle zamiast id, użyjesz pid, to plugin nie będzie wiedział na kim wykonać komendę, gdyż nie zna wartości pid i nie wykona jej na graczu o numerze id, lecz najprawdopodobniej na wszystkich, gdyż niezadeklarowany pid weźmie jako wartość 0 (nie weim, jak jest w pawnie, może pobrałby śmieci z pamięci)
W każdym razie, id przechowuje numer gracza, a pid nie, więc należy konsekwentnie używać id do końca.
Oczywiście nie ma problemu, jeśli użyjesz zmiennej pid, ale to wtedy także konsekwentnie, używaj jej wszędzie.
Kod powinien wyglądać tak:public sayChat( id ){Pierwsza jego linijka pobiera numer gracza, który ją wywołał i zapisuje do zmiennej id.
if( !isBlocked || hasFlag( id ) ){
return PLUGIN_CONTINUE;
}
client_print(id, print_chat, "tutaj wiadomosc");
return PLUGIN_HANDLED;
}
Stąd należy użyć właśnieclient_print(id, print_chat, "tutaj wiadomosc");aby wysłać wiadomość do tego samego gracza.
Czyli pid, cid, id to jest to samo, tylko że inaczej nazwane tak? Jeśli tak to prosżę o zamknięcie tematu, bo pomoc udzielona.
#20 Gość_21977_*
Napisano 29.07.2012 17:02
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych