Skocz do zawartości

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.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Admin Print


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
14 odpowiedzi w tym temacie

#1 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 25.03.2009 16:11

Wyświetla podaną wiadomość adminom.
Treść wiadomości można sformatować jak w zwykłym client_print.
Zwraca infomację , ilu na adminów natrafiono lub -1 w przypadku błędu wejścia (typu print_)

print_type to print_center, print_console lub print_chat
stock admin_print(print_type, const szMsg[], {Float,Sql,Result,_}:...){
	if(print_type!=print_center 
	&& print_type!=print_console
	&& print_type!=print_chat
	&& print_type!=print_notify)
		return -1;
	static szFinalMsg[196];
	vformat(szFinalMsg, 195, szMsg, 3);
	new Players[32];
	new playerCount, id;
	get_players(Players, playerCount);
	new was=0;
	for ( new i=0; i<playerCount; i++){
		id = Players[i];
		if(is_user_admin(id)){
			client_print(id, print_type, "%s", szFinalMsg);
			was++;
		}
	}
	return was;
}

Przykłady użycia:
admin_print(print_chat, "Adminow na serwie: %d", ile);
admin_print(print_center, "Zabiles nozem!");
admin_print(print_console, "Nie mozesz teraz uzyc komendy");

  • +
  • -
  • 0

#2 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 25.03.2009 19:35

Hmmm, ogólnie pomysł dobry, ale zwraca false zarówno jak jest źle określony typ jak i wtedy, gdy nie ma admina, może okazać się złe, ale pomijając ten fakt to samo sprawdzanie typu nie ma tu najmniejszego sensu bytu, ponieważ funkcją docelową jest tu client_print, do której jak wiadomo nigdy nie sprawdzamy typu, także jaki podasz taki będzie, a jeśli już się upierasz przy istnieniu tego, to co będzie jak będę chciał użyć print_notify?

Kolejna sprawa :
stock admin_print(print_type, const szMsg[], {Float,Sql,Result,_}:...)
{
	static szFinalMsg[196];
	vformat(szFinalMsg, 195, szMsg, 3); 
	new Pl[32],playerCount,was;
	get_players(Pl, playerCount);
	for ( new i; i<playerCount; i++)
	{
		if(is_user_admin(Pl[i])){
			client_print(Pl[i], print_type, szFinalMsg);
			was++;
		}
	}
	return was;
}

Chyba prościej, i też powinno działać.
  • +
  • -
  • 0

#3 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 25.03.2009 21:07

Sprawdzenie eliminuje ewentualne nadużycie, gdy spróbujemy podać jako print_type wartość inną niż któraś z tych trzech, np
admin_print(12345, "Test");
nie spowoduje błędu kompilacji, a działać raczej nie będzie.

Jak komuś potrzeba print_notify to niech sobie dopisze ;P
  • +
  • -
  • 0

#4 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 26.03.2009 13:49

stock admin_print(print_type, const szMsg[], {Float,Sql,Result,_}:...)
{
if(print_type!=print_center&& print_type!=print_console&& print_type!=print_chat&&print_type!=print_notify)
        return -1; 
    static szFinalMsg[196];
    vformat(szFinalMsg, 195, szMsg, 3);
    new Pl[32],playerCount,was;
    get_players(Pl, playerCount);
    for ( new i; i<playerCount; i++)
    {
        if(is_user_admin(Pl[i])){
            client_print(Pl[i], print_type, szFinalMsg);
            was++;
        }
    }
    return was;
}

Tak więc proponowałbym taką wersję wyjściową, zwraca -1 w razie złego typu lub ilość adminów, do których wypisano wiadomość.
  • +
  • -
  • 0

#5 darkman

    Wszechwiedzący

  • Przyjaciel

Reputacja: 87
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 26.03.2009 16:00

tak btw. to po co to?
{Float,Sql,Result,_}:...)
a i jak na mój zryty beret to powinno być
if(print_type!=print_center || print_type!=print_console || print_type!=print_chat || print_type!=print_notify)

  • +
  • -
  • 0

#6 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 26.03.2009 17:05

{Float,Sql,Result,_}:...)
to powoduje, że ilość argumentów funkcji jest >=2.
1 - typ printu
2 - podstawowa wiadomość
3... - wartości pobierane zależnie od wiadomości, dzięki temu można używać ciągów formatujących ( funkcja vformat)
admin_print(print_chat ,"Raz(%d) Dwa(%d) Trzy(%d)",1,2,3);
jeśli chcesz z || to;
if(!(print_type==print_center || print_type==print_console || print_type==print_chat || print_type==print_notify))

  • +
  • -
  • 0

#7 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 27.03.2009 09:19

if jest dobrze darkumanie, ten podany przez Ciebie zawsze by się wykonał.

Prosty przykład
new a = 1
if(a!=1||a!=2)
zawsze będzie prawdą, ponieważ zmienna zawsze będzie różna od 1 lub rózna od 2 niezależnie od tego jaką wartość przyjmie.


Skoro już mamy możliwie najlogiczniejszą wersję tej funkcji to może R3X podmień ją i będzie dobra sprawa taka funkcja.
  • +
  • -
  • 0

#8 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 27.03.2009 09:31

Nie widze do czego sie to odwoluje, ale mozna to tez zapisac jako:

1!=2

Zamiast lub || daj and &&
  • +
  • -
  • 0

#9 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 27.03.2009 12:10

Jak dla mnie bez różnicy czy będzie to funkcja bool`owska czy zwracająca ilość adminów, bo i tak większość wywołań będzie gubiło zwracaną wartość xP
  • +
  • -
  • 0

#10 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 27.03.2009 23:21

Jednak czasem może się to przydać i w/g mnie robiąc funkcję należy przewidywać czego ktoś może potrzebować.
  • +
  • -
  • 0

#11 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 27.03.2009 23:40

say $cos

interpretacja $ jako specjalna komenda

new num = admin_print(print_chat, "cos")
client_print("wyslano wiadomosc do %d adminow",num)
  • +
  • -
  • 0

#12 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 28.03.2009 01:45

jaśniej?
  • +
  • -
  • 0

#13 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 28.03.2009 12:00

coś jak
say_team @cos
jako przykład wykorzystania wiadomości o ilości adminów
  • +
  • -
  • 0

#14 Gość_deLL_*

  • Gość

Reputacja: 0

Offline

Napisano 24.08.2012 12:22

Coś się rozwaliło/ucieło. Można prosić o poprawę kodu #1 postu ?

#15 ric0

    Wszechwiedzący

  • Power User

Reputacja: 176
Profesjonalista

  • Postów:558
  • Imię:Łukasz
  • Lokalizacja:Ostrołęka
Offline

Napisano 24.08.2012 12:57

@UP

Wyświetla podaną wiadomość adminom.
Treść wiadomości można sformatować jak w zwykłym client_print.
Zwraca infomację , ilu na adminów natrafiono lub -1 w przypadku błędu wejścia (typu print_)

print_type to print_center, print_console lub print_chat

stock admin_print(print_type, const szMsg[], {Float,Sql,Result,_}:...){
	if(print_type!=print_center
	&& print_type!=print_console
	&& print_type!=print_chat
	&& print_type!=print_notify)
		return -1;
	static szFinalMsg[196];
	vformat(szFinalMsg, 195, szMsg, 3);
	new Players[32];
	new playerCount, id;
	get_players(Players, playerCount);
	new was=0;
	for ( new i=0; i 		id = Players[i];
		if(is_user_admin(id)){
			client_print(id, print_type, "%s", szFinalMsg);
			was++;
		}
	}
	return was;
}

Przykłady użycia:
admin_print(print_chat, "Adminow na serwie: %d", ile);
admin_print(print_center, "Zabiles nozem!");
admin_print(print_console, "Nie mozesz teraz uzyc komendy");


  • +
  • -
  • 0

To co piszę się nie liczy...

 





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych