←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Problemik z Ham_TakeDamage

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 03.06.2013

Problemik mam następujący, stworzyłem sobie ładny radius damage, który w założeniu ma zadawać dość spore obrażenia... No powiedzmy, że śmierć gracza stojącego w pobliżu jest nieunikniona. Więc i zgony zdarzają się często. Zadaję damage tak:

ExecuteHamB(Ham_TakeDamage, tid, id, id, float(damage), DMG_BLAST);

 

Problem jest następujący: death message nie wyświetla się wcale... Jaki byt zamiast jednego id powinienem podać, aby ten message się wyświetlił? I jakie "ciekawe" byty mogę tam podać, aby otrzymać jakąś ciekawą ikonkę broni?

Odpowiedz

Gość_21977_* 05.06.2013

Trzeci parametr funkcji ExecuteHamB winien przyjąć identyfikator bytu zadającego obrażenia.
W zależności od jego klasy, zostanie nadany odpowiedni komunikat w DeathMsg.
 
Klasa bytu musi być rozpoznawalna przez silnik gry, inaczej DeathMsg się nie wykona.
Klasą może być dowolna broń, np. weapon_m4a1, weapon_c4 czy weapon_smokegrenade,
jak i klasy świata silnika HLDS, jak np. worldspawn, player, item_kevlar, czy info_target.
 
Ikona będzie czytana z plików u graczy, więc ze strony serwera raczej nic nie zdziałasz.
przedrostek weapon_ jest pomijany przy message, a to właśnie jego będziesz zapewne chciał użyć, by uzyskać wybraną ikonkę broni.
Ostatecznie, wyświetlana jest graczowi ikona o nazwie z przedrostkiem d_, pełną listę znajdziesz tutaj: doktor.haze.free.fr/counter-strike/sprites_screens/index.php
Jeśli jednak takowej ikony nie znajdzie, wyświetlana jest czaszka (d_skull).
 
Tutaj zauważę, że podanie weapon_skull wyświetliłoby czaszkę, gdyby nie fakt, że weapon_skull nie jest rozpoznawalną bronią i byt nie zostanie nawet zabity.
weapon_hegrenade zabije gracza, jednak d_hegrenade nie istnieje w pliku gracza, więc zostanie wyświetlona czaszka.
Tutaj wyjątkiem jest klasa grenade (bez weapon_), która ostatecznie wyświetli d_grenade, czyli ikonkę granatu.
 
Istnieje także offset dla flashbanga (weapon_flashbang), jednakże jest on źle przycięty i wraz z ikoną flashbanga, widać fragment HE.
Poprzez wywołanie eventu DeathMsg można wyświetlić ikonę pociągu, z racji, że jego ikona zaczyna się na d_, tj. d_tracktrain,
jednak byt "tracktrain" ani "weapon_tracktrain" nie są rozpoznawalne, więc za pomocą ww. metody nie osiągniemy tejże ikony.
 
Przykład:

new weapon=create_entity("weapon_m4a1"); // tworzymy byt o klasie broni M4A1
if(pev_valid(weapon)){
	ExecuteHamB(Ham_TakeDamage, tid, weapon, id, float(damage), DMG_BLAST); // zabijamy przy pomocy nowo utworzonego bytu broni M4A1
	// weapon_m4a1 jest rozpoznawalnym bytem, więc sprite d_m4a1 zostanie wyświetlony w miejscu broni, która zabiła gracza id
}
remove_entity(weapon); // usuwamy niepotrzebny już byt

 
@edit: testsuite:

Spoiler
Plugin tworzy byt o klasie wpisanej na sayu i zadaje z niego 200 obrażeń przeciwnej drużynie.

Testować najlepiej z jednym botem w przeciwnej drużynie.

Przykładowo:

  • wpisanie na sayu weapon_m3 zabije bota z ikoną M3
  • wpisanie na sayu weapon_fake nie zabije bota ani nie wyświetli komunikatu (klasa weapon_fake nie jest rozpoznawalna)
  • wpisanie na sayu item_kevlar zabije bota z ikoną czaszki (offset sprite`u d_kevlar nie jest zdefiniowany)
  • wpisanie na sayu grenade zabije bota z ikoną granatu (wyjątkowo, nie podajemy tutaj przedrostka weapon_)

Użytkownik Benio101 edytował ten post 05.06.2013 12:57
edit
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 05.06.2013

Problemik mam następujący, stworzyłem sobie ładny radius damage, który w założeniu ma zadawać dość spore obrażenia... No powiedzmy, że śmierć gracza stojącego w pobliżu jest nieunikniona. Więc i zgony zdarzają się często. Zadaję damage tak:
 

ExecuteHamB(Ham_TakeDamage, tid, id, id, float(damage), DMG_BLAST);
 
Problem jest następujący: death message nie wyświetla się wcale... Jaki byt zamiast jednego id powinienem podać, aby ten message się wyświetlił? I jakie "ciekawe" byty mogę tam podać, aby otrzymać jakąś ciekawą ikonkę broni?

Trochę dziwna sprawa, bo powinno się wyświetlić info, że gracz został zabity, a ikonką powinna być broń, jaką akurat dany gracz ma wybraną, przynajmniej tak właśnie było (i chyba jest) u mnie na serwerze. Reszta została napisana wyżej.
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 05.06.2013

Dokładnie takie samo mam wrażenie po przeczytaniu postu benia... Czy problem może się brać z faktu, że tak naprawdę gracz "obrywa" kilka razy w ciągu 1 sekundy? (ściślej 5 razy co 0.1 sekundy)

 

Za chwilę sprawdzę z bytem granatu kod.


GwynBleidD (05.06.2013 17:18):
Myślę, że za brak DeathMsg odpowiada DMG_BLAST...
GwynBleidD (05.06.2013 17:47):
Za brak DeathMsg odpowiadał DMG_BLAST, który jest typowy dla wybuchu bomby (która jak wiadomo nie generuje DeathMsg). Zmiana na DMG_GENERIC dała efekt w postaci ładnego info o śmierci, mam jednak problem jak teraz dodać fraga/deada do rankingu...
sebul (06.06.2013 00:57):
Jeśli jako 3 parametr dasz id gracza, to frag powinien dodać się do rankingu, co innego jeśli dasz tam jakiś inny byt, wtedy chyba nie da się nic zrobić, żeby frag był dodany do tego rankingu.
Odpowiedz