←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Jak zablokować dany klawisz?

  • +
  • -
IntelCom - zdjęcie IntelCom 19.01.2015

Witam,

 

W jaki sposób mogę zablokować w pluginie użycie danego klawiszu np. B (kupowanie broni)?

Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 19.01.2015

klawisza nia zablokujesz.

 

Bind tak.

 

Jednak najlepiej żeby zablokować kupno broni jest usuwanie spawna (bytu) od kupowania lub ukrywanie tego u gracza (ukrycie ikonki i możliwośći).

 

 

 

ogólnie bind sie blokuje tak:

register_clcmd("bind_costam", "Zablokuj")

...

public Zablokuj(id) return PLUGIN_HANDLED;

Jednak dla niektórych bindów (np pewnie E), ta metoda zawiedzie, więc należy użyć innych metod.

 

Jeżeli chcesz osiągnąć zablokowanie kupna broni, też należy użyć innej metody

register_message(107, "msg_StatusIcon");

...

public msg_StatusIcon(msgid, dest, id)
{
	new szIcon[8];
	get_msg_arg_string(2, szIcon, 7);
	
	if(equal(szIcon, "buyzone") && get_msg_arg_int(1))
	{
		set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1<<0));
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}
Odpowiedz

  • +
  • -
IntelCom - zdjęcie IntelCom 19.01.2015

A dlaczego tablica 8 elementowa ?

new szIcon[8]
Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 19.01.2015

	new szIcon[8];
	get_msg_arg_string(2, szIcon, 7);

Bo pobieramy tekst, a wiemy, że nasz tekst i tak maksymalnie może mieć 7 znaków (ten tekst to "buyzone"), a dodatkowe 8 miejsce na zakończenie stringu (to jest wiadomosć dla silnika, gdzie jest koniec stringu)

Odpowiedz

  • +
  • -
IntelCom - zdjęcie IntelCom 19.01.2015

A tutaj dlaczego 107?

register_message(107, "msg_StatusIcon");

A tu 235?

set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1<<0));
Odpowiedz

  • +
  • -
psilocybe - zdjęcie psilocybe 19.01.2015

Ty nie chcesz zablokować klawisza, tylko usunąć na czas rozgrzewki buyzone.

 

Najprostszy kod jaki widziałem:

#include <amxmodx>
#include <hamsandwich>

public plugin_precache()
    RegisterHam(Ham_Spawn,"func_buyzone","buyZoneSpawn")
   
public plugin_init()
    register_plugin("Remove Buyzone", "1.0", "Can't remember")
   
public buyZoneSpawn(id)
    return HAM_SUPERCEDE;

Byt buyzone sam się zrespawnuje w nowej rundzie, więc usuwaj go tylko podczas rundy rozgrzewkowej.

Odpowiedz