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
CoD Nowy

Blokowanie stawiania min w przejściach - działa w 100%

cod nowy

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

#1 d0naciak

    Godlike

  • Power User

Reputacja: 1 029
Hero

  • Postów:2 414
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Kotlarka
Offline

Napisano 11.10.2015 09:09

Witam, pokażę wam tutaj jak skutecznie zablokować stawianie min w przejściach. Jest to lepszy sposób niż ten przedstawiony tu: http://amxx.pl/topic...omieszczeniach/

ponieważ działa kiedy obok nas jest ściana cienka typu płot, wentylacja itp., tam już to nie działało, więc do dzieła!

Otwieramy *.sma naszej klasy z minami i na początku pluginu dodajemy

#include <fakemeta>

potem szukamy

public cod_class_skill_used(id)

pod całym

public cod_class_skill_used(id)
{ 
if (!ilosc_min_gracza[id])
{
client_print(id, print_center, "Wykorzystales juz wszystkie miny!");
return PLUGIN_CONTINUE;
}
dodajemy
if(!czyDuzoMiejsca(id, 135.0))
{
client_print(id, print_center, "Stawianie min w malych pomieszczeniach jest zabronione!");
return PLUGIN_CONTINUE;
}
całość powinna wyglądać tak:
public cod_class_skill_used(id)
{ 
if (!ilosc_min_gracza[id])
{
client_print(id, print_center, "Wykorzystales juz wszystkie miny!");
return PLUGIN_CONTINUE;
}

if(!czyDuzoMiejsca(id, 135.0))
{
client_print(id, print_center, "Stawianie min w malych pomieszczeniach jest zabronione!");
return PLUGIN_CONTINUE;
}
na koniec pluginu dodajemy
stock czyDuzoMiejsca(id, Float:odleglosc)
{
new Float:vfPunkt[3]; pev(id, pev_origin, vfPunkt);
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(is_wall_between_points(vfStart, vfEnd, id))
return 0;
 
//2
vfStart[0] -= odleglosc;
vfEnd[0] += odleglosc;
vfStart[1] += odleglosc;
vfEnd[1] -= odleglosc;
 
if(is_wall_between_points(vfStart, vfEnd, id))
return 0;
 
return 1;
}
 
stock is_wall_between_points(Float:start[3], Float:end[3], ignore_ent)
{
engfunc(EngFunc_TraceLine, start, end, IGNORE_GLASS, ignore_ent, 0)
 
new Float:fraction
get_tr2(0, TR_flFraction, fraction)
 
if(fraction != 1.0)
return 1;
return 0;
}

I gotowe! Klasa ma teraz zablokowane dodawanie min w ciasnych pomieszczeniach.

Dzięki i pozdrawiam ;)


  • +
  • -
  • 1

#2 Misiaczek ;c

    /dev/null

  • Moderator

Reputacja: 1 678
Godlike

  • Postów:2 496
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Halemba
Offline

Napisano 11.10.2015 21:31

Dodałem to jako include, jezeli ktos ma sporo klas to ułatwi prace, a pozatym zawsze mozna to w samym silniku dodać ;), macie include w załączniku :)

 

Załączony plik  duzomiejsca.inc   1,46 KB  112 Ilość pobrań

 
Info jak używać includa z załącznika, pokażę na klasie Saper z standardowej paczki cod'a.

 

Szukamy

#include <codmod>

dopisujemy pod tym, to

#include <duzomiejsca>

następnie szukamy

public cod_class_skill_used(id)

w owym publiku odnajdujemy ten kod

	if (!ilosc_min_gracza[id])
	{
		client_print(id, print_center, "Wykorzystales juz wszystkie miny!");
		return PLUGIN_CONTINUE;
	}

po czym dopisujemy pod nim to

	if( !czyDuzoMiejsca( id, 135.0 ) ) {
		client_print( id, print_center, "Stawianie min w malych pomieszczeniach jest zabronione!" );
		return PLUGIN_CONTINUE;
	}

Zapisujemy i kompilujemy klase ponownie w celu uzyskania pliku *.amxx który następnie podmieniamy z tym co mamy na serwerze.

 

Tutaj cały kod zmodyfikowanej klasy Saper w celach podglądowych

Załączony plik  codclass_saper.sma   3,39 KB  114 Ilość pobrań
  codclass_saper.amxx

 

 

Aby dodac blokade w samym silniku cod'a musimy również edytować SMA, lecz nie będzie potrzeby edycji klas :)

 

Otwieramy SMA naszego silnika. ( ja oprę modyfikację o silnik z TEGO POSTU )

Szukamy

#include <fakemeta>

zamieniamy na <- Masło maślane -> ( dlaczego zamieniamy? ponieważ w include duzomiejsca i tak jest wymagany moduł fakemet'y przez co sam include go ładuje :P<- Masło maślane ->

#include <duzomiejsca>

następnie szukamy

public UzyjPerku(id)

w publicu nastepnie szukamy tego kawałka kodu

	if(!is_user_alive(id))
		return PLUGIN_HANDLED;

dopisujemy pod owym kodem to

	if( !czyDuzoMiejsca( id, 135.0 ) ) {
		client_print( id, print_center, "Zbyt malo miejsca aby uzyc perku!" );
		return PLUGIN_CONTINUE;
	}

Po edycji, cały public powinien mniej więcej tak wyglądać!

public UzyjPerku(id)
{
	if(!is_user_alive(id))
		return PLUGIN_HANDLED;
	
	if( !czyDuzoMiejsca( id, 135.0 ) ) {
		client_print( id, print_center, "Zbyt malo miejsca aby uzyc perku!" );
		return PLUGIN_CONTINUE;
	}
		
	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;
}

Zapisujemy i kompilujemy klase ponownie w celu uzyskania pliku *.amxx który następnie podmieniamy z tym co mamy na serwerze.

 

SMA silnika po edycji w celach podglądowych

Załączony plik  QTM_CodMod.sma   39,99 KB  94 Ilość pobrań
  QTM_CodMod.amxx


  • +
  • -
  • 2

#3 d0naciak

    Godlike

  • Autor tematu
  • Power User

Reputacja: 1 029
Hero

  • Postów:2 414
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Kotlarka
Offline

Napisano 12.10.2015 17:50

Odpuściłem sobie dodawanie do silnika gdyż nie każda klasa kładzie miny/dynamity itp., taka modyfikacja w silniku zablokuje np. strzelanie rakiet, teleport, pioruny, i wiele wiele innych w małych pomieszczeniach 


  • +
  • -
  • 0

#4 Misiaczek ;c

    /dev/null

  • Moderator

Reputacja: 1 678
Godlike

  • Postów:2 496
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Halemba
Offline

Napisano 12.10.2015 17:59

Odpuściłem sobie dodawanie do silnika gdyż nie każda klasa kładzie miny/dynamity itp., taka modyfikacja w silniku zablokuje np. strzelanie rakiet, teleport, pioruny, i wiele wiele innych w małych pomieszczeniach 

to też można sobie zrobić że dla min, dynamitów i tego co zakazane ma blokowac a dla reszty nie ;)


  • +
  • -
  • 0

#5 d0naciak

    Godlike

  • Autor tematu
  • Power User

Reputacja: 1 029
Hero

  • Postów:2 414
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Kotlarka
Offline

Napisano 12.10.2015 19:03

Nie każdy to umie i nie każdemu się chce :D


  • +
  • -
  • 1





Również z jednym lub większą ilością słów kluczowych: cod nowy

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

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