Odległość od spawn pointu
mimo114
01.03.2013
Witam.
Chciałbym się dowiedzieć jak pobrać odległość od spawn'u. Dokładnie chodzi mi o to że na moim Diablo+DM ludzie stawiają totemy na respie, Chcę zapobiec temu blokadą używania itemu niedaleko spawnu ale niestety nie wiem jak pobrać miejsce spawnu graczy,
Z góry dziękuje
Chciałbym się dowiedzieć jak pobrać odległość od spawn'u. Dokładnie chodzi mi o to że na moim Diablo+DM ludzie stawiają totemy na respie, Chcę zapobiec temu blokadą używania itemu niedaleko spawnu ale niestety nie wiem jak pobrać miejsce spawnu graczy,
Z góry dziękuje
radim
02.03.2013
Funkcja find_sphere_class ( http://amxx.pl/dokum...nd_sphere_class )
Przykładowy warunek:
@Edit
Tak wiem, że spawin pointsy a buyzone to dwie, zupełnie różne rzeczy, ale podczas normalnej gry, tam gdzie się respimy jest zawsze buyzone więc stąd mój warunek. Nie uwzględniłem, że to jest tryb DeathMatch, na którym prawdopodobnie BuyZone jest wyłączony. Mimo to sam używam warunku, który podałem, na codmodzie przy itemach takich jak działko, miny itp. i sprawdza się doskonale ; ))
Użytkownik radim edytował ten post 03.03.2013 11:28
Przykładowy warunek:
new entlist[3]; if(find_sphere_class(id, "func_buyzone", 100.0, entlist, 2)) { client_print(id, print_chat "Jestes zbyt blisko respa."); return; }
@Edit
Tak wiem, że spawin pointsy a buyzone to dwie, zupełnie różne rzeczy, ale podczas normalnej gry, tam gdzie się respimy jest zawsze buyzone więc stąd mój warunek. Nie uwzględniłem, że to jest tryb DeathMatch, na którym prawdopodobnie BuyZone jest wyłączony. Mimo to sam używam warunku, który podałem, na codmodzie przy itemach takich jak działko, miny itp. i sprawdza się doskonale ; ))
Użytkownik radim edytował ten post 03.03.2013 11:28
mimo114
02.03.2013
Ok wielkie dzięki.Ale nie wiem czy na pewno na Death matchu na tych spawnach jest buyzone ale powinno być.
Jak się nazwać
02.03.2013
Classname dla respów to:
"info_player_start" - tero
"info_player_deathmatch" - ct
(co do tego które jest które nie jestem pewien )
"info_player_start" - tero
"info_player_deathmatch" - ct
(co do tego które jest które nie jestem pewien )
Fili:P
02.03.2013
Chyba na odwrót do tego co piszeszClassname dla respów to:
"info_player_start" - tero
"info_player_deathmatch" - ct
(co do tego które jest które nie jestem pewien )
Gość_21977_* 02.03.2013
BuyZone a spawn pointsy, to dwie, zupełnie różne rzeczy.
Jak napisał Jak się nazwać, byty spawnpointsów nazywają się
Zamiast szukać w sferze kładzionego itemu, proponuję jednorazowo odszukać po prostu byty o tej nazwie za pomocą EngFunc_FindEntityByString.
Można to rozdzielić na 2 tablice, osobne dla TT i CT, jednak z treści tematu wnioskuję, że nie ma takiej potrzeby.
Pobranie odległości do najbliższego spawnu wykonamy poprzez przeszukanie wszystkich pobranych wcześniej pozycji i porównania odległości do nich.
Na koniec wystarczy sprawdzić, czy getNearestSpawn(POZYCJA_ITEMU)>=WYMAGANE_MINIMUM
Użytkownik Benio101 edytował ten post 02.03.2013 22:56
-dbl.
Jak napisał Jak się nazwać, byty spawnpointsów nazywają się
new const spawnEnts[2][]={"info_player_start", "info_player_deathmatch"}
Zamiast szukać w sferze kładzionego itemu, proponuję jednorazowo odszukać po prostu byty o tej nazwie za pomocą EngFunc_FindEntityByString.
new Array:spawns, ent;Teraz, tablica spawns powinna zawierać wszystkie punkty spawnów (w formie zmiennoprzecinkowej).
spawns=ArrayCreate(3, 1);
for(new i=0; i<2; ++i){
while((ent=engfunc(EngFunc_FindEntityByString, ent, "classname", spawnEnts[i]))){
pev(ent, pev_origin, origin);
ArrayPushArray(spawns, origin);
}
}
Można to rozdzielić na 2 tablice, osobne dla TT i CT, jednak z treści tematu wnioskuję, że nie ma takiej potrzeby.
Pobranie odległości do najbliższego spawnu wykonamy poprzez przeszukanie wszystkich pobranych wcześniej pozycji i porównania odległości do nich.
stock getNearestSpawn(Float:origin[3]){
new size=ArraySize(spawns), Float:spawn[3];
new Float:minDist=99999.9;
for(new i=0; i<size; ++i){
ArrayGetArray(spawns, i, spawn);
minDist=min(minDist, vector_distance(origin, spawn));
}
return minDist;
}
Na koniec wystarczy sprawdzić, czy getNearestSpawn(POZYCJA_ITEMU)>=WYMAGANE_MINIMUM
Użytkownik Benio101 edytował ten post 02.03.2013 22:56
-dbl.