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