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 ![]()


Dodatki SourceMod









codclass_saper.amxx






