[ROZWIĄZANE] Gracza o danym ID można zabić...
Najlepsza odpowiedź Gość_21977_* 20.05.2014 17:35
RegisterHam(Ham_TraceAttack, "player", "Ham_TraceAttack_playerPre", 0);
public Ham_TraceAttack_playerPre( vid, // victim id // ofiara (moze nie byc graczem) id, // id // zabojca (jest graczem (klasa "player" przy RegisterHam) Float:damage, // obrazenia Float:dir[3], // wektor ataku tr, // trace result damagebits ){ if( is_user_alive(vid) // czy gracz żyje // && WARUNEK // vid == && damagebits & DMG_BULLET // czy obrażenia zadane pocikiem && get_tr2(tr, TR_iHitgroup) != HIT_HEAD // czy miejsce uderzenia to głowa ){ SetHamParamFloat(3, 0.0); // zmieniamy wartość obrażeń na 0 return HAM_HANDLED; // HANDLED! } return HAM_IGNORED; }
Edit.
damagebits & DMG_BULLETjest istotne z uwagi na możliwość zadania obrażeń "w głowę" przez upadek, kolizję, granat a nawet wybuchającą bombę (niestety, ale doświadczenie wymaga, by ten warunek dodać, dlatego szynka wydaje mi się tutaj lepszym rozwiązaniem). Przejdź do postu
szelbi
20.05.2014
Tak jak w temacie. Szukam funkcji, która umożliwi ustawienie, że gracza o danym ID można zabić tylko w głowę. Próbowałem już dwóch sposobów, ale żaden z nich nie działał. Z góry dzięki za pomoc.
BlackPerfum
20.05.2014
Zabić czy zadac obrażenia to jest duża różnica? Bo mozna kogoś ubić by miał 1 hp (uderzając nie w głowę) ale go nie zabijać
szelbi
20.05.2014
Nie można zadawać obrażeń ani zabić gracza w inną część ciała niż głowa.
BlackPerfum
20.05.2014
Czyli najzwyklejsze wyeliminowanie dmg. Nic prostszego.
public plugin_init() { /* . . .*/ register_forward(FM_TraceLine,"Tr"); } public Tr(Float:Start[3],Float:End[3],IM,id,tr) { if(!is_user_alive(id) || ~pev(id,pev_button) & IN_ATTACK) return FMRES_IGNORED; if(get_tr2(tr, TR_iHitgroup) != HIT_HEAD) return FMRES_SUPERCEDE return FMRES_IGNORED; }
Nigdy tym zbytnio się nie bawiłem bo nie miałem powodów ale raczej działa
Najlepsza odpowiedź Gość_21977_* 20.05.2014
RegisterHam(Ham_TraceAttack, "player", "Ham_TraceAttack_playerPre", 0);
public Ham_TraceAttack_playerPre( vid, // victim id // ofiara (moze nie byc graczem) id, // id // zabojca (jest graczem (klasa "player" przy RegisterHam) Float:damage, // obrazenia Float:dir[3], // wektor ataku tr, // trace result damagebits ){ if( is_user_alive(vid) // czy gracz żyje // && WARUNEK // vid == && damagebits & DMG_BULLET // czy obrażenia zadane pocikiem && get_tr2(tr, TR_iHitgroup) != HIT_HEAD // czy miejsce uderzenia to głowa ){ SetHamParamFloat(3, 0.0); // zmieniamy wartość obrażeń na 0 return HAM_HANDLED; // HANDLED! } return HAM_IGNORED; }
Edit.
damagebits & DMG_BULLETjest istotne z uwagi na możliwość zadania obrażeń "w głowę" przez upadek, kolizję, granat a nawet wybuchającą bombę (niestety, ale doświadczenie wymaga, by ten warunek dodać, dlatego szynka wydaje mi się tutaj lepszym rozwiązaniem).
Użytkownik 21977 edytował ten post 20.05.2014 17:39