Skocz do zawartości

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.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[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_BULLET
jest 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


  • Zamknięty Temat jest zamknięty
4 odpowiedzi w tym temacie

#1 szelbi

    Hero

  • Power User

Reputacja: 373
Wszechpomocny

  • Postów:1 032
  • Steam:steam
  • Imię:Norbert
  • Lokalizacja:Częstochowa
Offline

Napisano 20.05.2014 16:09

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.


  • +
  • -
  • 0

#2 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

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ć


  • +
  • -
  • 0
Chcesz napisać do mnie na PW to:
Spoiler

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 Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#3 szelbi

    Hero

  • Autor tematu
  • Power User

Reputacja: 373
Wszechpomocny

  • Postów:1 032
  • Steam:steam
  • Imię:Norbert
  • Lokalizacja:Częstochowa
Offline

Napisano 20.05.2014 17:03

Nie można zadawać obrażeń ani zabić gracza w inną część ciała niż głowa.


  • +
  • -
  • 0

#4 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

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


  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

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 Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#5 Gość_21977_*

  • Gość

Reputacja: 0

Offline

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_BULLET
jest 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