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.
Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
[ROZWIĄZANE] Gracza o danym ID można zabić tylko w głowę
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
#1
Napisano 20.05.2014 16:09
#2
Napisano 20.05.2014 17:01
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ć
Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!
Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
#3
Napisano 20.05.2014 17:03
Nie można zadawać obrażeń ani zabić gracza w inną część ciała niż głowa.
#4
Napisano 20.05.2014 17:28
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
Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!
Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
#5 Gość_21977_*
Napisano 20.05.2014 17:35 Najlepsza odpowiedź
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
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych