←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Blokowanie ataku


Best Answer Asiap 27.06.2015 15:03

new Float:fTime = 60.0; //czas blokady strzelania
set_pdata_float(id, 83, fTime);
Go to the full post

  • +
  • -
Jcr's Photo Jcr 27.06.2015

Wie ktoś może, jak zrobić, że gdy gracz będzie miał: zmienna[id] = 1, to nie może strzelać?

np coś takiego

 

if(zmienna[id] == 1)

{

       //kod blokujacy strzelanie

}

 

Nie może być to blokada typu: zmiana broni na nóż, wyrzucenie broni, ustawienie 0 ammo.

 

Najlepiej by było jakby blokowało +attack i +attack2, cos w tym stylu

Quote

  • +
  • -
Best Answer Asiap's Photo Asiap 27.06.2015

new Float:fTime = 60.0; //czas blokady strzelania
set_pdata_float(id, 83, fTime);
Quote

  • +
  • -
Jcr's Photo Jcr 27.06.2015

new Float:fTime = 60.0; //czas blokady strzelania
set_pdata_float(id, 83, fTime);

 

A da się zrobić tak, żeby nie podawać czasu, tylko 1 komenda na włączenie 2ga na wyłączenie?

Quote

  • +
  • -
Linux''s Photo Linux' 27.06.2015

Zamiast strzalu lepiej zablokowac caly klawisz. Sprobuj w ten sposob:

register_forward(FM_CmdStart,"CmdStart");

public CmdStart(id, uc_handle, seed)
{
    if(!is_user_connected(id) || !is_user_alive(id))
        return PLUGIN_CONTINUE;

    if(ma_zmienna[id])
        set_uc(uc_handle, UC_Buttons, get_uc(uc_handle, UC_Buttons) & ~IN_ATTACK);

    return PLUGIN_CONTINUE;
}

Quote

  • +
  • -
Asiap's Photo Asiap 27.06.2015


A da się zrobić tak, żeby nie podawać czasu, tylko 1 komenda na włączenie 2ga na wyłączenie?

Wyłączanie:

set_pdata_float(id, 83, 0.0);
Quote

  • +
  • -
Asiap's Photo Asiap 27.06.2015


A da się zrobić tak, żeby nie podawać czasu, tylko 1 komenda na włączenie 2ga na wyłączenie?

Wyłączanie:

set_pdata_float(id, 83, 0.0);
Quote

  • +
  • -
Rivit's Photo Rivit 27.06.2015


register_forward(FM_CmdStart,"CmdStart");

public CmdStart(id, uc_handle, seed)
{
if(!is_user_connected(id) || !is_user_alive(id))
return PLUGIN_CONTINUE;

if(ma_zmienna[id])
set_uc(uc_handle, UC_Buttons, get_uc(uc_handle, UC_Buttons) & ~IN_ATTACK);

return PLUGIN_CONTINUE;
}

 

Nie żebym sie czepiał, ale nienawidzę jakis niedokładności/lekkich błędów:

- to forward z fakemety, używaj więc return FMRES_*

- sprawdz czy gracz jest zywy zamiast sprawdzac czy jest podlaczony i zywy (wsadź alive do warunku nr.2)

- czy po zmienieniu czegos nie powinnismy zwrocic FMRES_HANDLED?

#define FMRES_IGNORED	1	// Calls target function, returns normal value
#define FMRES_HANDLED	2	// Tells metamod you did something, still calls target function and returns normal value
#define FMRES_OVERRIDE	3	// Supposed to still call the target function but return your value instead
							// however this does not work properly with metamod; use supercede instead.
#define FMRES_SUPERCEDE	4	// Block the target call, and use your return value (if applicable)

Ja bym użył kodu Asiap, zamiast hookować forward, który się wykonuje bardzo często...


GwynBleidD (28.06.2015 11:23):
Jak już to FMRES_OVERRIDE
Quote

  • +
  • -
Jcr's Photo Jcr 27.06.2015

Można zamknąć, użyłem funckji :

set_pdata_float(id, 83, 5.0);
set_pdata_float(id, 83, 0.0);

Łatwiej, pewniej i szybciej :)

Quote