←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Blokada noża

  • +
  • -
Andrzejek - zdjęcie Andrzejek 10.05.2013

Witam czy dobrze zablokowałem? Bo wywala mi błąd: ED_Alloc: no free edicts
Bo chodziło żeby nóż zniknął, żeby gracz nie miał widocznej kosy

register_forward(FM_CmdStart, "CmdStart");
public CmdStart(id, uc_handle, seed)
{    
    if(is_user_alive(id) && is_user_connected(id))
    {
        if(get_user_team(id) == 1)
        {                                  
            engclient_cmd(id, "weapon_knife");                            
            
            if(get_user_weapon(id) == CSW_KNIFE)
            {
                strip_user_weapons(id);
                return FMRES_IGNORED;
            }
            else if(get_user_weapon(id) != CSW_KNIFE)
            {
                strip_user_weapons(id);
                return FMRES_IGNORED;
            }
        }
        return FMRES_IGNORED;
    }
    return FMRES_HANDLED;
}
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 10.05.2013

Absolutnie źle. Wywalasz graczowi wszystkie bronie zamiast "blokować" nóż. Jaki sens mają te ify właściwie? skoro i tak wykonuje się ten sam kod?

Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 10.05.2013

Ja jeszcze dodam, że forward "FM_CmdStart" to raczej zły pomysł na coś takiego, chyba że to już zawiera się w tym "Absolutnie źle." ;]
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 10.05.2013

Sebul a powiedz jak byś ty zastosował? Jak byś zablokował ? Oraz np. dla ct też dać że mogą uzyć tylko awp?

Odpowiedz

  • +
  • -
K!113r - zdjęcie K!113r 10.05.2013

Przy zmianie broni na inną niż awp przełącz mu broń na awp, a najlepiej też wywal mu tą broń inną (lub go rozbierz i daj mu awp :D).

Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 10.05.2013

No ok, to mniej wieciej wiem o co chodzi, tylko mi chodzi o to co miał na myśli sebul, jak by on to wykonał tą blokadę nie używając FM_CmdStart

 

Odpowiedz

  • +
  • -
radim - zdjęcie radim 10.05.2013

Np. za pomocą client_prethink ? Są pluginy z blokadą HE, po prostu wyciągnij kod, warunek na nóż i tyle roboty ; ))


Użytkownik radim edytował ten post 10.05.2013 17:07
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 11.05.2013

zablokuj deploy noza albo poprostu primary i seccondary attack niech sobie wyciaga noz i tak go nie uzyje eweentualnie fm_util i fm_strip_*
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 11.05.2013

G[o]Q, jakiś przykład? Lub plugin, który tego używa :P

Odpowiedz

  • +
  • -
K!113r - zdjęcie K!113r 11.05.2013

Paintball blokuje primary attack i coś widziałem gdzieś z secondary, wystarczy poszukać.
Odpowiedz

Gość_21977_* 13.05.2013

"Lepiej zapobiegać, niż leczyć".

 

Jeśli chcesz zablokować nóż, to możesz użyć bezpośrednio hamowego Ham_AddPlayerItem.

#include <amxmodx>
#include <hamsandwich>
 
public plugin_init() {
	register_plugin("Knife block", "1.0", "benio101");
 
	RegisterHam(Ham_AddPlayerItem, "player", "player_get_item");  
}
 
public player_get_item(id, item){
	if(ExecuteHam(Ham_Item_ItemSlot, item)==3){
		SetHamReturnInteger(0);
		
		return HAM_SUPERCEDE;
	}
	
	return HAM_IGNORED;
}

W ten sposób gracz, pomimo posiadania noża, nie będzie mógł go wyjąć.

Nie, nie jest to jego wyrzucanie, ani beznadziejna zmiana broni na poprzednią, etc.

Event jest blokowany, przez co nie wywoływane są żadne inne zbędne operacje.

 

Ostatecznie, nóź nie zostanie wyciągnięty nawet, jeśli nie pozostanie żadna inna broń.

Dalej, możesz dodać wyjątek, identyfikator gracza masz gotowy (id), wystarczy to odpowiednio filtrować.

Odpowiedz