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

Próba zablokowania akcji we własnym pluginie.


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

#1 EferenTM

    Zaawansowany

  • Użytkownik

Reputacja: 47
Pomocny

  • Postów:117
  • Imię:Michał
  • Lokalizacja:Olkusz
Offline

Napisano 23.12.2013 13:21

Witajcie, to znowu ja i kolejny problem,

jeden problem pomógł mi rozwiązać FD_GODPL, lecz jest jeszcze drugi problem nad którym się męczę i nie potrafię nic wykminić.

 

Problem jest następujący:

Po uderzeniu paralizatorem gracza TT - zamraża go i tworzy na nim poświatę niebieską przez 10 sek. (gitara tak ma być) lecz w trakcie trwania tych 10 sekund nie wiem jak zablokować graczowi "sparaliżowanemu" wszystkie akcje, typu uderzenie, obrót kamery, podskoki, kucanie. Jak go po prostu unieruchomić na te 10 sekund.

 

Oto kod:

#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
 
new g_iMaxPlayers;
 
#define IsPlayer(%1) (1 <= %1 <= g_iMaxPlayers)
 
new g_iCzas[33];
new Paraliz;
 
#define SetParaliz(%1)  (Paraliz |= (1<<(%1-1)))
#define CheckParaliz(%1) (Paraliz & (1<<(%1-1)))
#define RemoveParaliz(%1) (Paraliz &= ~(1<<(%1-1)))
 
public plugin_init()
{
	register_plugin("Paralizator", "1.0.0", "Eferen");
	RegisterHam(Ham_TakeDamage, "player", "fwTakeDamage");
	RegisterHam(Ham_Item_Deploy, "weapon_knife", "Item_Deploy", 1);
	RegisterHam(Ham_Killed, "player", "Death", 1);
	register_event("CurWeapon", "CurWeapon_event", "be", "1=1");
	
	g_iMaxPlayers = get_maxplayers();
}
 
public CurWeapon_event(id)
{
	if(CheckParaliz(id))
	 	set_user_maxspeed(id, 0.1);
}
 
public Death(id, killer, shouldgib)
{
	if(task_exists(id))
	{
		RemoveParaliz(id);
	 	remove_task(id);
	}
}
 
public plugin_precache()
{
	precache_model("models/v_paralizator.mdl");
	precache_model("models/v_paralizator2.mdl");
}
 
public Item_Deploy(wpn)
{
	static iOwner;
	iOwner = pev(wpn, pev_owner);
	
	if(!IsPlayer(iOwner))
		return HAM_IGNORED;
	
	if(get_user_team(iOwner) == 2)
	{
		set_pev(iOwner, pev_viewmodel2, "models/v_paralizator.mdl");
		set_pev(iOwner, pev_weaponmodel2, "models/v_paralizator2.mdl");
	}
	return HAM_IGNORED
}
 
public client_disconnect(id)
	RemoveParaliz(id);
 
public fwTakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(is_user_alive(idattacker) && get_user_team(idattacker) == 2)
	{
		new wid = get_user_weapon(idattacker);	// Id broni
		if(wid == CSW_KNIFE && !CheckParaliz(this) && is_user_alive(this) && get_user_team(this) == 1)
		{
			set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 7.0);
			show_hudmessage(idattacker, "Sparalizowales gracza^nMasz 10 sekund na przeszukanie go!");	
			g_iCzas[this] = 10;
			set_task(1.0, "zamroz", this, _, _, "a", 10);
			set_user_maxspeed(this, 0.1);
			set_user_rendering(this, kRenderFxGlowShell, 0, 0, 255, kRenderGlow, 60)
			SetParaliz(this);
			return HAM_SUPERCEDE
		}
	}
	return HAM_IGNORED;
}
 
public zamroz(this)
{
	set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 7.0);
	show_hudmessage(this, "Zostales sparalizowany^nPozostalo Ci jeszcze: %d sekund", g_iCzas[this]);
	--g_iCzas[this]
	if(g_iCzas[this] <= 0)
	{
		remove_task(this);
		set_user_maxspeed(this, 0.0);
		set_user_rendering(this, kRenderFxNone, 0, 0, 0, kRenderNormal);
		RemoveParaliz(this);
	}
}

Z góry dziękuję, za pomocną odpowiedź daje +


  • +
  • -
  • 0

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Pomogłem? Daj +, Ciebie to nic nie kosztuje, a mnie motywuje!

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

CS-FragMania.pl - Twoja sieć serwerów, zapraszam!

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

#2 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

Napisano 25.12.2013 20:58

public Freeze( id )
{
    if( is_user_alive(id) )
    {
        new iFlags = pev(id, pev_flags)
        if( ~iFlags & FL_FROZEN )
        {
            set_pev(id, pev_flags, iFlags | FL_FROZEN)
        }
    }
}

public UnFreeze( id )
{
    if( is_user_alive(id) )
    {
        new iFlags = pev(id, pev_flags)
        if( iFlags & FL_FROZEN )
        {
            set_pev(id, pev_flags, iFlags & ~FL_FROZEN)
        }
    }
}

Po zamrożeniu robisz taska na 10s by wykonała się funkcja unfreeze. A przy zamrożeniu używasz funkcji freeze


Użytkownik Wielkie Jol edytował ten post 25.12.2013 20:58

  • +
  • -
  • 1

"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.


#3 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 29.12.2013 14:41

z tego co pamiętam obrót kamery można zablokować tworząc byt w miejscu oczu (pev_origin+pev_view_ofs) i przyczepiając tam kamerę attach_view


GwynBleidD (29.12.2013 16:35):
Postać będzie się dalej obracała, model będzie "tańczył" na monitorach innych ludzi.
R3X (29.12.2013 16:53):
tak, ale to już nie kwestia kamery tylko modelu :)
GwynBleidD (29.12.2013 19:47):
Po ponownym podczepieniu kamery na oczy będziemy mieli kamerę zwróconą w innym kierunku... Niejako obejście problemu, ale czy jest sens aż tak się w to babrać?

  • +
  • -
  • 0

#4 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 29.12.2013 20:27

Polecam zerknąć do tych dwóch wątków:

1. http://forums.allied...ead.php?t=79963

2. https://forums.allie...p/t-124843.html


  • +
  • -
  • 0

#5 Cypis'

    Master

  • Przyjaciel

Reputacja: 1 161
Super Hero

  • Postów:965
  • GG:
  • Steam:steam
  • Lokalizacja:polska
Offline

Napisano 29.12.2013 22:47

Żeby "zablokować" obrót kamery można spróbować wymusić jakoś graczowi przycisk ALT - komenda +strafe
  • +
  • -
  • 0




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

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