Blokowanie stawiania min w przejściach - d...
d0naciak
11.10.2015
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; }
if(!czyDuzoMiejsca(id, 135.0)) { client_print(id, print_center, "Stawianie min w malych pomieszczeniach jest zabronione!"); return PLUGIN_CONTINUE; }
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; }
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
Misiaczek ;c
11.10.2015
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
duzomiejsca.inc 1,46 KB 114 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
codclass_saper.sma 3,39 KB 115 Ilość pobrań
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 ) <- 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
QTM_CodMod.sma 39,99 KB 95 Ilość pobrań
d0naciak
12.10.2015
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
Misiaczek ;c
12.10.2015
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