Problemik z Ham_TakeDamage
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?
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:
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
sebul
05.06.2013
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.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?
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.