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

FL_DUCKING nie wychwytuje tego co chce


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
3 odpowiedzi w tym temacie

#1 Mixtaz

    Zaawansowany

  • Użytkownik

Reputacja: 21
Życzliwy

  • Postów:76
  • Steam:steam
  • Imię:Jędrzej
  • Lokalizacja:%s
Offline

Napisano 19.10.2023 15:01

Próbuje zmodyfikować odrzut gdy gracz w pozycji kucaka zostaje ostrzelany z dowolnej broni. Wprowadziłem kod, który działa ale wykonuje się tylko w momencie gdy gracz wywoła komende będąc na kucaka, inaczej nie przynosi skutku. Poniżej wklejam kod z trzech relewantnych części kodu:

 

 

Hook łapiący oddawanie strzału

public bacon_traceattack_player(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagetype)
{
	if(!g_gamestarted) 
		return HAM_SUPERCEDE
	
	if(!get_pcvar_num(cvar_knockback) || !(damagetype & DMG_BULLET))
		return HAM_IGNORED
	
	if(!is_user_connected(attacker) || !g_zombie[victim])
		return HAM_IGNORED

	if(g_kbReduction[victim] == 1.0)
		return HAM_IGNORED
	
	static kbpower
	kbpower = g_weapon_knockback[get_user_weapon(attacker)]
	
	if(kbpower != -1) 
	{
		static flags
		flags = pev(victim, pev_flags)
		
		if(get_pcvar_num(cvar_knockback_duck) && (isDucking(victim) && (flags & FL_ONGROUND)))
			return HAM_IGNORED
		
		static Float:origins[2][3]
		pev(victim, pev_origin, origins[0])
		pev(attacker, pev_origin, origins[1])
		
		if(get_distance_f(origins[0], origins[1]) <= get_pcvar_float(cvar_knockback_dist))
		{
			static Float:velocity[3]
			pev(victim, pev_velocity, velocity)
			
			static Float:tempvec
			tempvec = velocity[2]
			
			xs_vec_mul_scalar(direction, damage, direction)

			if(g_kbReduction[victim] == 0.0)
				xs_vec_mul_scalar(direction, g_knockbackpower[kbpower], direction)
			else
				xs_vec_mul_scalar(direction, g_kbReduction[victim]*g_knockbackpower[kbpower], direction)
			
			xs_vec_add(direction, velocity, velocity)
			velocity[2] = tempvec
			
			set_pev(victim, pev_velocity, velocity)
			
			return HAM_HANDLED
		}
	}

	return HAM_IGNORED
}

Funkcja mająca na celu redukcje odrzutu (knockbacku):

public set_user_kbimmunity(id, Float:fReduction, bool:bUserCrouched)
{
	if(bUserCrouched == true)
	{
		if(isDucking(id))
			g_kbReduction[id] = fReduction;
	} else
		g_kbReduction[id] = fReduction;
}

Makrodefinicja isDucking:

#define isDucking(%1) (pev(%1, pev_flags) & FL_DUCKING) 

deklaracja zmiennej: new Float:g_kbReduction[33];

 

Jedyny pomysł jaki przychodzi i do głowy to stworzenie enuma, dołączenie go do tablicy i sprawdzanie stanu na jego podstawie.. Ale jak to później wykorzystać jako natyw? Czy może z obecną strukturą zmiennej da się to zrobić?

 

 


  • +
  • -
  • 0

:nuke:  Mój serwer Zombie Biohazard/Deathmatch  :nuke:
:cwaniak:


#2 Robiin

    Godlike

  • Support Team

Reputacja: 1 107
Super Hero

  • Postów:2 052
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 19.10.2023 17:46

Za słowa pokroju "relewantny" powinieneś kumpel dostać klapsa od kolegi.

 

Z zombie plague 4.3:

// Get whether the victim is in a crouch state
static ducking
ducking = pev(victim, pev_flags) & (FL_DUCKING | FL_ONGROUND) == (FL_DUCKING | FL_ONGROUND)

// Zombie knockback when ducking disabled
if (ducking && get_pcvar_float(cvar_knockbackducking) == 0.0)
	return HAM_IGNORED;

W evencie:

RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack")
public fw_TraceAttack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damage_type)

A na przykład leap zombie (w tym samym silniku) jest sprawdzany w prethinku przez pobranie przycisków (IN_DUCK)


Użytkownik Robiin edytował ten post 19.10.2023 17:49

  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#3 Mixtaz

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 21
Życzliwy

  • Postów:76
  • Steam:steam
  • Imię:Jędrzej
  • Lokalizacja:%s
Offline

Napisano 20.10.2023 12:19

Niestety @Robiin ale Twój post okazał sie być mało relewantny do mojego problemu :gwizd:

To co ja chce zrobić to za pomocą tej tablicy przechowującej id gracza (tu: g_kbReduction[id]) przekazać go w natywie do innego pluginu. Konkretniej to chcę, aby ta umiejka była dostępna jako jeden z przedmiotów w sklepie. Czyli z biohazard.amxx -> sklep.amxx basically.
 

Mój kod wyżej działa, ale rejestruje stan gracza czy jest w kucku czy nie, w momencie zakupu. A nie podczas trwania całej umiejętności.. Jedyny pomysł na jaki wpadłem to zrobienie enuma STATE = { STAND, DUCK }, modyfikacja wspomnianej tablicy do: g_kbReduction[33][STATE] i jazda z tym. Ale nie wiem czy to jedyne rozwiązanie.

Mimo to, masz plusa za chęć i próbe pomocy kolego. :)


  • +
  • -
  • 0

:nuke:  Mój serwer Zombie Biohazard/Deathmatch  :nuke:
:cwaniak:


#4 PANDA_2zl

    Guru

  • Power User

Reputacja: 178
Profesjonalista

  • Postów:726
  • Imię:Michał
  • Lokalizacja:Kraków
Offline

Napisano 20.10.2023 12:40

Możesz użyć też rzeczy z reapi

Event
/*
* Description:      -
* Params:           (const this)
*/
RG_CBasePlayer_Duck
Natywy
/*
* Description:      -
* Member type:      qboolean
* Get params:       get_pmove(member);
* Set params:       set_pmove(const PlayerMove:var, value);
*/
pm_bInDuck

/*
* Description:      -
* Member type:      int
* Get params:       get_entvar(index, EntVars:var);
* Set params:       set_entvar(index, EntVars:var, value);
*/
var_bInDuck
Albo też bawić z tymi rzeczami z cssdk_const reapi
#define FL_DUCKING                      (1<<14) // Player flag -- Player is fully crouched
#define PFLAG_DUCKING                   (1<<3) // In the process of ducking, but totally squatted yet

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych