←  Gotowe funkcje

AMXX.pl: Support AMX Mod X i SourceMod

»

Pasek ładowania

  • +
  • -
darkman - zdjęcie darkman 30.12.2008

Funkcja ta umieszcza pasek, taki jak przy podkładaniu/rozbrajaniu bomby.

stock set_bartime(id, czas, startprogress=0)
{
        message_begin((id)?MSG_ONE:MSG_ALL, get_user_msgid("BarTime2"), _, id)
        write_short(czas);
        write_short(startprogress);
        message_end();   

} 

Użycie:
set_bartime(id, czas, startprogress)

Parametry:
id - index gracza na którym funkcja ma być wykonana;
czas - okres czasu w jakim ma się ten pasek wypełnić;
startprogress - kiedy pasek zaczyna się pokazywać, jaka jego część ma być wypełniona(wartość w procentach(%)) od 0-100 (0 zaczyna od pustego);

W przypadku kiedy chcemy pokazać pasek wszystkim graczom, należy zmienić typ wiadomości na MSG_ALL, i w miejsce indexu wpisać 0.
Użytkownik DarkGL edytował ten post 20.03.2011 13:01
Odpowiedz

  • +
  • -
wizu - zdjęcie wizu 31.12.2008

Jak już tak, to można to rozwinąć:
public set_bartime(id, czas)
{
	if (id == 0)
	{
		message_begin(MSG_ALL, get_user_msgid("BarTime"), _, 0)
		write_short(czas)
		message_end()	
	} else
	{
		message_begin(MSG_ONE, get_user_msgid("BarTime"), _, id)
		write_short(czas)
		message_end()
	}
}
Jeśli chcemy wyświetlić wszystkim, to zamiast id wpisujemy 0. Np:
set_bartime(0, 15)
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 31.12.2008

wizu, to jak coś możemy trochę zwinąć :P
public set_bartime(id, czas)
{
	if (!id)
		message_begin(MSG_ALL, get_user_msgid("BarTime"), _, 0)
	else
		message_begin(MSG_ONE, get_user_msgid("BarTime"), _, id)
	write_short(czas)
	message_end()
}
Odpowiedz

  • +
  • -
wizu - zdjęcie wizu 31.12.2008

No tak :P Ale obawiałem się, że jakby if nie zadziałał, a plugin zobaczy message_end, to scrashuje serwer.
Odpowiedz

  • +
  • -
Miczu - zdjęcie Miczu 31.12.2008

Pavulon, zamienil bys all/one ze soba i bys mogl zrezygnowac z negacji :P

PS. Ja bym dodal, ze pasek mozna showac w czacie odliczania przez wyslanie komendy z czasem = 0
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 31.12.2008

To może:
set_bartime(id,czas,start=0){
	new bool:nd=start>0;
	new msgType=(id)?MSG_ONE:MSG_ALL;
	new bar=(nd)?get_user_msgid("BarTime2"):get_user_msgid("BarTime");
	message_begin(msgType, bar, _, id);
	write_short(czas);
	if(nd)
		write_short(start);
	message_end();
} 
+kilka poprawek natury wizualnej
Odpowiedz

  • +
  • -
wizu - zdjęcie wizu 31.12.2008

Teraz wytłumacz linijka po linijce :P
A szczególnie te te dwie pierwsze w funkcji.
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 31.12.2008

new bool:nd=start>0;  //jeśli start jest większe od 0 to nd ma wartość TRUE

new msgType=(id==0)?MSG_ALL:MSG_ONE;  //jeśli id jest równe 0 to msgType przyjmuje wartość MSG_ALL w przeciwnym razie MSG_ONE

new bar=(nd)?get_user_msgid("BarTime2"):get_user_msgid("BarTime"); //jeśli nd ma wartość  TRUE to bar przyjmuję wartość get_user_msgid("BarTime2") w przeciwnym razie get_user_msgid("BarTime")

if(nd)write_short(start); //jeśli nd ma wartość TRUE to write_short(start)
pasi ? :D
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 31.12.2008

Funkcja obsługuje też parametr startowy - gdy chcemy by pasek zaczął się przesuwać od połowy w do końca w czasie 10s. używamy tak:
set_bartime(id,20,50)
id + czas przesunięcia całego paska+50 (%) ;oznacza, że zacznie od połowy == zajmie to połowę z 20s.
Można tej funkcji używać tak jak tych wyżej:
set_bartime(id,10)
Wypełniać się będzie cały pasek w czasie 10 sekund.

Opis funkcji
set_bartime(id,czas,start=0){
Nagłówek funkcji, argumenty id ,czas i start (liczba z zakresu 0,100), którego wartość domyślna=0.
new bool:nd=start>0;
zmienna typu bool zawiera wartość logiczną (0 lub 1). Przechowuje informację o tym, czy zaczynamy od 0 czy chcesz iluśtam procent. Potrzebujemy dowiedzieć się tego 2-krotnie więc lepiej niech komputer sprawdza to raz.

new msgType=(id)?MSG_ONE:MSG_ALL;
informacja o typie wiadomości jeśli id>0 typ będzie MSG_ONE, jeśli id==0 typ będzie MSG_ALL
new bar=(nd)?get_user_msgid("BarTime2"):get_user_msgid("BarTime");
Wybieramy jedną z wiadomości. BarTime wyłącznie od 0, BarTime2 od wartości początkowej

Reszta chyba wiadomo.
Odpowiedz

  • +
  • -
wizu - zdjęcie wizu 31.12.2008

Eeee tam taki kombinowanie :P Ale dzięki za wyjaśnienia.
Odpowiedz

  • +
  • -
Miczu - zdjęcie Miczu 31.12.2008

Nie bedzie przypadkiem latwiej uzywac zawsze bar2 i tylko domyslnie dac start na 0?

Jak nikt chyba nie zauwazy roznicy jak to bedzie bar czy bar2 z parametrem startowym 0, a cod bedzie ladniejszy dla oka...
Odpowiedz

  • +
  • -
darkman - zdjęcie darkman 31.12.2008

poprawione tak jak Miczu chciał.
Odpowiedz

  • +
  • -
Miczu - zdjęcie Miczu 31.12.2008

public set_bartime(id, czas, startprogress=0)

To da nam efekt domyslnego zera:

set_bartime(0,10)

set_bartime(0,10,50)

tak beda obie komendy poprawne ;-)
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 31.12.2008

Sam przed chwilą o tym pisałeś darkman :P
public set_bartime(id, czas, startprogress)
{
        message_begin((id)?MSG_ONE:MSG_ALL, get_user_msgid("BarTime2"), _, id)
        write_short(czas);
        write_short(startprogress);
        message_end();   

}
Odpowiedz

  • +
  • -
darkman - zdjęcie darkman 31.12.2008

Akurat kopiowałem kod wiza i nie chciało mi sie zmieniać tego ^^
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 21.04.2009

trochę odkop, ale chyba warto

Akurat chciałem wykorzystać tę funkcję i zdaje się, że argumenty publicznej funkcji nie mogą mieć wartości domyślnych - deklaracja funkcji powinna mieć postać
stock set_bartime(id, czas, startprogress=0)
Odpowiedz

  • +
  • -
Janko - zdjęcie Janko 13.04.2010

Która treść bd dobra do diablo moda do kuszy?
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 13.04.2010

ta która jest podana w pierwszym poście ....
Odpowiedz

  • +
  • -
Arthemjusz - zdjęcie Arthemjusz 23.12.2010

Chciałbym zrobić pasek który będzie pokazywał ładowanie się kuszy.
I pytanie jak dobrze uzupełnić tą funkcje 1 by dobrze działała ?
Bo mi wyskakuje błąd podczas kompilacji albo po prostu nie pokazuje tego paska.
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 15.04.2011

Sry za odkop, ale mam pytanie. Nie da się jakoś do takiego paska dodać wartość float?
Odpowiedz