←  Poradniki, Łatki oraz Pluginy

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Blokada stawiania min itp w malych pomiesz...

  • +
  • -
MAthiasssMAt - zdjęcie MAthiasssMAt 22.01.2012

Zainspirowany http://amxx.pl/topic...miny-przejscia/ Tym tematem, przerobiłem go na nowego cod moda.
Ta modyfikacja blokuje całkowicie użycie komend/klawiszy:

[Edytowane w silniku] C / useperk / radio3
[Edytowane dla każdej klasy osobno] E / +use





Edycja w silniku:

1.Otwieramy nasz silnik (QTM_CodMod.sma)

2. Szukamy

register_clcmd("useperk", "UzyjPerku");
register_clcmd("radio3", "UzyjPerku");


i zamieniamy na

register_clcmd("useperk", "cmdSprawdz");
register_clcmd("radio3", "cmdSprawdz");

3. Szukamy

public UzyjPerku(id)
{
if(!is_user_alive(id))
  return PLUGIN_HANDLED;

new forward_handle = CreateOneForward(pluginy_perkow[perk_gracza[id]], "cod_perk_used", FP_CELL);
ExecuteForward(forward_handle, id, id);
DestroyForward(forward_handle);
return PLUGIN_HANDLED;
}

usuwamy i w to miejsce wklejamy to:

public cmdSprawdz(id){
		new Float:vfOrigin[3];
new name [32];
	get_user_name(id, name, 31);
		pev(id, pev_origin, vfOrigin);
	  
		if(czyDuzoMiejsca(vfOrigin, 135.0))
			   UzyjPerku(id);
		else
				client_print(id, print_chat, "Nie uzywamy tego w malych pomieszczeniach!");
}
czyDuzoMiejsca(const Float:vfPunkt[3], Float:odleglosc){
		new Float:vfStart[3], Float:vfEnd[3];
	  
		vfStart[0] = vfEnd[0] = vfPunkt[0];
		vfStart[1] = vfEnd[1] = vfPunkt[1];
		vfStart[2] = vfEnd[2] = vfPunkt[2];
	  
		//1
		vfStart[0] += odleglosc;
		vfEnd[0] -= odleglosc;
		if(engfunc( EngFunc_PointContents, vfStart ) != CONTENTS_EMPTY
		&& engfunc( EngFunc_PointContents, vfEnd ) != CONTENTS_EMPTY)
				return 0;
	  
		//2
		vfStart[0] -= odleglosc;
		vfEnd[0] += odleglosc;
		vfStart[1] += odleglosc;
		vfEnd[1] -= odleglosc;
	  
		if(engfunc( EngFunc_PointContents, vfStart ) != CONTENTS_EMPTY
		&& engfunc( EngFunc_PointContents, vfEnd ) != CONTENTS_EMPTY)
				return 0;
		return 1;
}
public UzyjPerku(id)
{
if(!is_user_alive(id))
  return PLUGIN_HANDLED;

new forward_handle = CreateOneForward(pluginy_perkow[perk_gracza[id]], "cod_perk_used", FP_CELL);
ExecuteForward(forward_handle, id, id);
DestroyForward(forward_handle);
return PLUGIN_HANDLED;
}



Edycja dla każdej klasy osobno

1. Otwieramy sma naszej klasy (dla przykładu saper)

2. Za #include <hamsandwich> dopisujemy:
#include <amxmisc>
#include <fakemeta>

3. Zamieniamy (tylko nazwe) public cod_class_skill_used(id) na :
public stawianie(id)

4. Przed naszym aktualnym public ( public stawianie(id) ) dodajemy:

public cod_class_skill_used(id)
{
		new Float:vfOrigin[3];
new name [32];
	get_user_name(id, name, 31);
		pev(id, pev_origin, vfOrigin);
	  
		if(czyDuzoMiejsca(vfOrigin, 135.0))
               stawianie(id);
		else
				client_print(id, print_chat, "Nie uzywamy tego w malych pomieszczeniach!");
}
czyDuzoMiejsca(const Float:vfPunkt[3], Float:odleglosc){
		new Float:vfStart[3], Float:vfEnd[3];
	  
		vfStart[0] = vfEnd[0] = vfPunkt[0];
		vfStart[1] = vfEnd[1] = vfPunkt[1];
		vfStart[2] = vfEnd[2] = vfPunkt[2];
	  
		//1
		vfStart[0] += odleglosc;
		vfEnd[0] -= odleglosc;
		if(engfunc( EngFunc_PointContents, vfStart ) != CONTENTS_EMPTY
		&& engfunc( EngFunc_PointContents, vfEnd ) != CONTENTS_EMPTY)
				return 0;
	  
		//2
		vfStart[0] -= odleglosc;
		vfEnd[0] += odleglosc;
		vfStart[1] += odleglosc;
		vfEnd[1] -= odleglosc;
	  
		if(engfunc( EngFunc_PointContents, vfStart ) != CONTENTS_EMPTY
		&& engfunc( EngFunc_PointContents, vfEnd ) != CONTENTS_EMPTY)
				return 0;
		return 1;
}

Gotowego sapera daje w załączniku



Zabraniam kopiowania poradnika na inne strony bez mojej wiedzy

Załączone pliki


Użytkownik MAthiasssMAt edytował ten post 29.01.2012 11:18
Odpowiedz

SoPelQ - zdjęcie SoPelQ 26.01.2012

Czy nie będzie błędów po 1 podmiance jeżeli na codzie mam 2 perki?
Odpowiedz

  • +
  • -
M&M's - zdjęcie M&M's 26.01.2012

To nie dziala do końca dobrze czyli można postawić miny jak jest skrzynia obok skrzyni
Odpowiedz

  • +
  • -
MAthiasssMAt - zdjęcie MAthiasssMAt 27.01.2012

Co do skrzyń to w rogach idzie, a konfigurować szczegółowo zasięg badanego terenu możemy dzięki:

if(czyDuzoMiejsca(vfOrigin, 135.0))

Ja osobiście mam ustawione na 150 i od tego czasu nie było żadnego bana za miny 1x1

------------------------------------------------------------------

DLA 2 PERKóW - Edycja w silniku:

1.Otwieramy nasz silnik (QTM_CodMod.sma)

2. Szukamy

register_clcmd("useperk", "UzyjPerku");
register_clcmd("radio3", "UzyjPerku");


i zamieniamy na

register_clcmd("useperk", "cmdSprawdz");
register_clcmd("radio3", "cmdSprawdz");

3. Szukamy

		register_clcmd("useperk2", "UzyjPerku2");
		register_clcmd("radio2", "UzyjPerku2");

i zamineiamy na:

		register_clcmd("useperk2", "cmdSprawdz2");
		register_clcmd("radio2", "cmdSprawdz2");

4. Szukamy


public UzyjPerku(id)
		return UzyjPerki(id, 0);

usuwamy i w to miejsce wklejamy to:

public cmdSprawdz(id){
		new Float:vfOrigin[3];
new name [32];
	get_user_name(id, name, 31);
		pev(id, pev_origin, vfOrigin);
	  
		if(czyDuzoMiejsca(vfOrigin, 135.0))
               UzyjPerku(id);
		else
				client_print(id, print_chat, "Nie uzywamy tego w malych pomieszczeniach!");
}
czyDuzoMiejsca(const Float:vfPunkt[3], Float:odleglosc){
		new Float:vfStart[3], Float:vfEnd[3];
	  
		vfStart[0] = vfEnd[0] = vfPunkt[0];
		vfStart[1] = vfEnd[1] = vfPunkt[1];
		vfStart[2] = vfEnd[2] = vfPunkt[2];
	  
		//1
		vfStart[0] += odleglosc;
		vfEnd[0] -= odleglosc;
		if(engfunc( EngFunc_PointContents, vfStart ) != CONTENTS_EMPTY
		&& engfunc( EngFunc_PointContents, vfEnd ) != CONTENTS_EMPTY)
				return 0;
	  
		//2
		vfStart[0] -= odleglosc;
		vfEnd[0] += odleglosc;
		vfStart[1] += odleglosc;
		vfEnd[1] -= odleglosc;
	  
		if(engfunc( EngFunc_PointContents, vfStart ) != CONTENTS_EMPTY
		&& engfunc( EngFunc_PointContents, vfEnd ) != CONTENTS_EMPTY)
				return 0;
		return 1;
}
public UzyjPerku(id)
		return UzyjPerki(id, 0);


5. Szukamy


public UzyjPerku2(id)
		return UzyjPerki(id, 1);

usuwamy i w to miejsce wklejamy to:

public cmdSprawdz2(id){
		new Float:vfOrigin[3];
new name [32];
	get_user_name(id, name, 31);
		pev(id, pev_origin, vfOrigin);
	  
		if(czyDuzoMiejsca(vfOrigin, 135.0))
			   UzyjPerku2(id);
		else
				client_print(id, print_chat, "Nie uzywamy tego w malych pomieszczeniach!");
}
czyDuzoMiejsca(const Float:vfPunkt[3], Float:odleglosc){
		new Float:vfStart[3], Float:vfEnd[3];
	  
		vfStart[0] = vfEnd[0] = vfPunkt[0];
		vfStart[1] = vfEnd[1] = vfPunkt[1];
		vfStart[2] = vfEnd[2] = vfPunkt[2];
	  
		//1
		vfStart[0] += odleglosc;
		vfEnd[0] -= odleglosc;
		if(engfunc( EngFunc_PointContents, vfStart ) != CONTENTS_EMPTY
		&& engfunc( EngFunc_PointContents, vfEnd ) != CONTENTS_EMPTY)
				return 0;
	  
		//2
		vfStart[0] -= odleglosc;
		vfEnd[0] += odleglosc;
		vfStart[1] += odleglosc;
		vfEnd[1] -= odleglosc;
	  
		if(engfunc( EngFunc_PointContents, vfStart ) != CONTENTS_EMPTY
		&& engfunc( EngFunc_PointContents, vfEnd ) != CONTENTS_EMPTY)
				return 0;
		return 1;
}
public UzyjPerku2(id)
		return UzyjPerki(id, 1);

Użytkownik MAthiasssMAt edytował ten post 29.01.2012 11:25
Odpowiedz

  • +
  • -
HaDeS From HELL - zdjęcie HaDeS From HELL 27.01.2012

Jak mam rozumieć to blokuję tylko miny, czy też rakietki i inne umiejętności perków typu apteczka itp ?
Odpowiedz

  • +
  • -
d0naciak - zdjęcie d0naciak 27.01.2012

jak dodasz w główne *.sma codmoda to wszystkich perków nie bedzie mozna uzyc w malych pomieszczeniach, jezeli w *.sma perku, to tylko dana klasa/perk nie mozna stawiac min w cisnych pomieszczeniach
Odpowiedz

  • +
  • -
MAthiasssMAt - zdjęcie MAthiasssMAt 27.01.2012

Dokładnie jak napisał Up.
Jednak lepiej dać w silnik cały, bo czasami na serwerach cod mod jest zakaz puszczania rakiet w przejściach (nie wiem poco).
Ale do perku można dać podobnie jak do klasy :)
Odpowiedz

  • +
  • -
d0naciak - zdjęcie d0naciak 28.01.2012

wg mnie juz lepiej dwa razy do klasy jak wszystkie perki blokowac

@Po co to ?

register_clcmd("blabla321", "stawianie");


Jezeli wystarczy

client_cmd(id, "blabla321");



zamienic na

stawianie(id);
Odpowiedz

  • +
  • -
MAthiasssMAt - zdjęcie MAthiasssMAt 29.01.2012

W sumie masz racje. I nie będzie bynajmniej spamu w konsoli.
Zaraz edytuje :)
Odpowiedz

Kronzu - zdjęcie Kronzu 22.07.2012

Może mi ktoś poprawić .sma bo mi nie chodzą. Zrobiłem tak jak kazałeś i mam błędy czemu?

Załączone pliki

Odpowiedz

  • +
  • -
d0naciak - zdjęcie d0naciak 22.07.2012

kod jest pogmatfany
Uzyj funkcji identier w amxx studio
Odpowiedz

  • +
  • -
V!p3r - zdjęcie V!p3r 05.10.2012

Sorry za refresha, ale ten temat mnie zaciekawił.
Więc mam taką prośbę. Czy dałoby radę przerobić to na blokadę tylko min w przejściach?
Wszystko inne może być, ale żeby tylko miny były zablokowane.
Odpowiedz

SoPelQ - zdjęcie SoPelQ 06.10.2012

Możesz jedynie edytować to w danej klasie, perku. Jednak dla samych min (wszędzie) tego nie wykonasz.
Odpowiedz