←  Gotowe funkcje

AMXX.pl: Support AMX Mod X i SourceMod

»

Dynamiczny HUD

  • +
  • -
R3X - zdjęcie R3X 24.08.2010

Dynamiczny HUD
dHUD.inc
v.1.03

Temat w budowie, stworzenie dokumentacji potrwa pewnie dłużej niż pisanie kodu :P
Tymczasem angielski opis wszystkich funkcji można znaleźć w pliku .inc

Dołączona grafikaDemonstracja

Eksperymentalna biblioteka do tworzenia różnych efektów na wiadomościach HUD. Jej głównym (lecz nie jedynym) zadaniem jest zautomatyzowanie ruchu i zmian koloru wyświetlanych komunikatów.



Plugin udostępnia szereg funkcji do pracy z efektami. Podstawowe operacje odbywają się na pojedynczych klatkach animacji, jak we flashu. Tak też wyświetlana jest wiadomość - klatka po klatce - zastąpienie napisu jego kopią w innym miejscu czy kolorze stworzy wrażenie ruchu i przekształceń kolorystycznych.

Download

  • v1.03 (zalecane)
    Załączony plik  dHUD-1.03.rar   5,94 KB   647 Ilość pobrań
  • v1.02
    Załączony plik  dHUD-1.02.rar   5,97 KB   240 Ilość pobrań
  • v1.01
    Załączony plik  dHUD.rar   5,78 KB   230 Ilość pobrań
  • przykładowy kod
    Załączony plik  dHUD_test.sma   2,31 KB   546 Ilość pobrań


Instalacja
Plik dHUD.sma należy skompilować i zainstalować na serwerze. Plugin korzystający z efektów skompiluje się wyłącznie lokalnie z dostępem do dHUD.inc.


Interfejs

Wszystkie udostępniane funkcje mają prefiks DHUD_*.

Pierwsze co trzeba zrobić to stworzyć 'obiekt' dhud. DHUD_create() zwraca uchwyt, którego używa się z pozostałymi funkcjami. Można utworzyć kopię istniejącego obiektu przez podanie jego uchwytu DHUD_create(dhud) [działa to podobnie jak konstruktor kopiujący w językach obiektowych].


Animację możemy zaprojektować manualnie przypisując właściwości każdej klatce z osobna (dHUD_test -> dhud) lub użyć filtrów (dHUD_test -> dhud3).

  • klatka po klatce
Wystarczy kilka wywołań DHUD_setFrame, każde przypisze kolor i położenie napisu tworząc animację

DHUD_setFrame(dhud, frame, iColor[3], Float:x, Float:y, iLen = 1);
dhud - uchwyt
frame - numer klatki, zaczynają się od 0, w przypadku numeru większego niż liczba dostępnych akurat klatek animacja zostaje wypełniona pustymi klatkami aż do podanego rozmiaru
iColor[3] - kolor napisu
x, y, - położenie napisu
iLen - długość klatki; w miejsce dwóch identycznych klatek z iLen=1 można dać jedną z iLen=2




  • filtry

Filtry służą do przetwarzania kilku klatek zgodnie z danym algorytmem.

DHUD_applyFilter(dhud, const szFilter[], startFrame, endFrame, Float:dx=D_LONG, Float:dy=D_ZERO, any:...)
dhud - uchwyt
szFilter[] - nazwa filtra, lista dostępnych jest drukowana po użyciu komendy "dhud info" przez admina z flagą od konfiguracji (H)
startFrame, endFrame - przedział klatek
dx, dy - przyrost wartości x i y, przydatne w funkcjach, funkcja realizująca filtr otrzymuje współrzędne x i y, z których może wyliczyć nowe położenie (przykład z sinusem w dHUD_test), każda ramka dostaje wartości x<poprzedniej ramki> + dx i y<poprzedniej ramki> + dy
any:.. dodatkowe parametry filtrów, opisane także w "dhud info"



Dwoma podstawowymi filtrami dHUD są SetPosition i SetColor. Dzięki nim, możemy ustawić kolor i położenie w wielu klatkach jednocześnie.

SetPosition ustawia podaną pozycję wszystkim klatkom z zakresu startFrame-endFrame
SetColor ustawia podany kolor wszystkim klatkom z zakresu startFrame-endFrame

Ten kod ustawi dhud długości 50 klatek w pozycji 0.5 0.5 w kolorze białym (255, 255, 255)
DHUD_setFrame(dhud, 50, {0,0,0}, 0.0, 0.0);
DHUD_applyFilter(dhud, "SetPosition", 0, 50, D_ZERO, D_ZERO, 0.5, 0.5);
DHUD_applyFilter(dhud, "SetColor", 0, 50, D_ZERO, D_ZERO, 255, 255, 255);



Jak już zbudujemy animację nadejdzie mement na wyświetlenie jej graczowi:
DHUD_display(id, dhud, Float:fInterval = 0.1, channel = 4, const szMessage[], any:...)
id - id gracza lub 0 - do wszystkich
dhud - uchwyt
fInterval - długość trwania klatki w sekundach; czas od pokazania pewnej ramki do następnej mnożony przez wartość iLen klatki
channel - kanał HUD, 1-4
szMessage[], ... - wiadomość; można użyć ciągów formatujących; %L + LANG_PLAYER z id = 0 niestety nie zadziała! może w przyszłym wydaniu


Forward
W momencie zakończenia animacji wykonywany jest forward
forward fwStopAnimation(id, dhud, bool:finished);

czyli w pluginie można dopisać publiczną funkcję, która zareaguje na to zdarzenie
public fwStopAnimation(id, dhud, bool:finished){}

parametr finished jest ustawiany na true, kiedy animacja zostanie zakończona zgodnie z planem i false jeśli zostanie zatrzymana/zastąpiona nową


Historia

1.03
- poprawione: rejestrowanie filtrów z parametrami w zewnętrznych pluginach

1.02
- poprawione: pierwsza ramka wyświetlana bez opóźnienia
- poprawione: forward wykonywany dokładnie w momencie końca animacji (a nie po puszczeniu ostatniej klatki)
- dodane: ustawienie iLen na 0 usuwa klatkę z animacji
- dodane: stock DHUD_removeFrames
- dodane: stock DHUD_removeAllFrames

1.01
- poprawa interfejsu
- dodane: czyszczenie nieużywanych tablic Array:
- dodane: forward onStopAnimation
- dodane: komenda "dhud info"

1.0
- pierwsza, nie publikowana szerzej wersja
Odpowiedz

  • +
  • -
Dudix - zdjęcie Dudix 24.08.2010

Najs :) Kawał dobrej, solidnej roboty ;) + dla Ciebie i jeszcze dzisiaj sprobuje wytestowac :)
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 25.08.2010

Moje pierwsze wrazenia juz znasz hehe

ale pomysl jak juz pisalem ciekawy :D
Odpowiedz

  • +
  • -
Dudix - zdjęcie Dudix 25.08.2010

Testowalismy i musze przyznac, ze nie wyobrazalem sobie, ze to bedzie mialo tak ogromne i ciekawe mozliwosci ;) Juz mam kilka pomyslow co dzięki temu zrobic ;)
Goraco polecam!
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 25.08.2010

:)

Nagrałem niskiej jakości film z testowego pluginu, który po konwersji na używany przez YT flv robi się całkiem paskudny :o Wrzucam .avi

Załączone pliki

Odpowiedz

hardbot - zdjęcie hardbot 25.08.2010

hahah Najs Najs Najs :) Dużo dobrej robótki.
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 25.08.2010

download celltrie prosze
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 25.08.2010

przeciez celltrie juz masz w s.../include :D

Załączone pliki

Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 25.08.2010

własnie w tym problem że nie miałem
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 29.08.2010

No to zapomniałem dopisać, że wymaga AMXX 1.8.x :P

Edit.
Aktualizacja kodu do v1.02 i obszerniejszy opis

Edit.
Aktualizacja kodu do v1.03, naprawiłem spory błąd przy rejestrowaniu filtrów w innych pluginach
Odpowiedz

  • +
  • -
BlackMatt - zdjęcie BlackMatt 28.03.2013

Można zmienić w jakiś sposób wielkość czcionki?
Odpowiedz

  • +
  • -
K!113r - zdjęcie K!113r 28.03.2013

Musisz sobie edytować pliki klienta, czyli samodzielnie. A jak z poziomu serwera zrobić to u wszystkich? Na szczęście się tego tutaj nie dowiesz.
Odpowiedz