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
 

AwIlL^^ - zdjęcie

AwIlL^^

Rejestracja: 26.03.2013
Aktualnie: Nieaktywny
Poza forum Ostatnio: 24.03.2023 07:12
*****

Moje posty

W temacie: [ROZWIĄZANE] Odbijanie obrażeń w atakującego.

02.10.2019 14:20

Zostawiłem tam ExecuteHamB, należy zmienić na ExecuteHam tak jak podał tiback bo inaczej serwer się zwiesi

W temacie: Pobranie ownera leżącej broni

30.09.2019 22:10

#include <hamsandwich>
#include <fakemeta>

stock get_weapon_owner(weapon_entity)
{
	const pdata_player = 41;

	return get_pdata_cbase(weapon_entity, pdata_player, 4);
}

stock get_weapon_ent_from_box(weaponbox, &slot)
{
	static const pdata_weapon_in_slot[6] = { 34 , 35 , ... };

	new weapon_entity;
	for (slot = 0; slot<6; slot++) {
		weapon_entity = get_pdata_cbase(weaponbox, pdata_weapon_in_slot[slot], 4);
		if (pev_valid(weapon_entity) == 2) {
			return weapon_entity;
		}
	}

	return 0;
}

na ziemi leżą tak zwane weaponboxy i dopiero w nich są bronie w swoich slotach
za pomocą funkcji get_weapon_ent_from_box pobierzesz pierwszą znalezioną broń z takiego boxa
za pomocą funkcji get_weapon_owner pobierzesz właściciela dowolnej broni jeżeli posiadasz jej entity

takie info dotyczące właściciela - właścicielem broni jest zawsze osoba, która ostatnio trzymała broń, a nie osoba, która trzymała broń jako pierwsza

W temacie: [ROZWIĄZANE] Odbijanie obrażeń w atakującego.

30.09.2019 11:40

No nie dokońca, bytem atakującym w tym przypadku jest jakiś randomowy ent z przedziału [1-30], bo get_user_weapon zwraca nam id broni, a nie id entity:

oczywiście, że kod, który zacytowałem jest niepoprawny.
ale jak chcesz aby silnik csa znalazł poprawnie broń, którą trzyma gracz to należy podać id gracza w miejsce bytu atakującego (to napisałem wyżej, ale chyba nie zrozumiałeś)

kod z poprawnym wyświetlaniem broni:

public odbicie_obrazen(ofiara, idinflictor, atakujacy, Float:obrazenia, damagebits)
{
	if (!is_user_connected(atakujacy)) {
		return HAM_IGNORED;
	}

	if (!random(5)) {
		ExecuteHamB(Ham_TakeDamage, atakujacy, ofiara, ofiara, obrazenia, (1<<1));

		return HAM_SUPERCEDE;
	}

	return HAM_IGNORED;
}

kod z "czachą" (w przypadku zabicia poprzez odbicie) nie tworząc nowego enta (w kodzie od tibacka to różne rezultaty by były, nie zawsze czacha):

public odbicie_obrazen(ofiara, idinflictor, atakujacy, Float:obrazenia, damagebits)
{
	if (!is_user_connected(atakujacy)) {
		return HAM_IGNORED;
	}

	if (!random(5)) {
		ExecuteHamB(Ham_TakeDamage, atakujacy, 0, ofiara, obrazenia, (1<<1));

		return HAM_SUPERCEDE;
	}

	return HAM_IGNORED;
}

a w takim przypadku będzie "czacha" i w konsoli napis, że gracz został zabity przez odbicie:

public odbicie_obrazen(ofiara, idinflictor, atakujacy, Float:obrazenia, damagebits)
{
	if (!is_user_connected(atakujacy)) {
		return HAM_IGNORED;
	}

	if (!random(5)) {
		new new_inflictor = create_entity("info_target");
		entity_set_string(new_inflictor ,EV_SZ_classname, "reflection");
		ExecuteHamB(Ham_TakeDamage, atakujacy, new_inflictor, ofiara, obrazenia, (1<<1));
		remove_entity(new_inflictor);

		return HAM_SUPERCEDE;
	}

	return HAM_IGNORED;
}

W temacie: [ROZWIĄZANE] Odbijanie obrażeń w atakującego.

30.09.2019 08:34

public odbicie_obrazen(ofiara, idinflictor, atakujacy, Float:obrazenia, damagebits)
{
        new iClip, iAmmo;
        new iWeapon = get_user_weapon(ofiara, iClip, iAmmo);
	
	if( random_num( 5, 100 ) <= 5 )
        {
                ExecuteHamB(Ham_TakeDamage, atakujacy, iWeapon, ofiara, obrazenia, (1<<1));
                return HAM_SUPERCEDE;
        }

	return HAM_HANDLED;	
}

Może tak? :)

 

jeżeli chcesz aby bytem atakującym była broń, którą trzyma atakujący to należy podać id atakującego, bo w takim przypadku on sam jest bytem atakującym :)

W temacie: Cvary nie działają

15.08.2019 12:58

Nie przypisałeś wskaźników do zmiennych, które są zwracane przez natyw "register_cvar"