Jump to content

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

Posted Image Posted Image

Guest Message by DevFuse
 

Photo

Odległość od spawn pointu


  • You cannot start a new topic
  • Please log in to reply
5 replies to this topic

#1 mimo114

    Pomocny

  • Użytkownik

Reputacja: 4
Nowy

  • Postów:72
  • Imię:Mateusz
  • Lokalizacja:Lubliniec
Offline

Posted 01.03.2013 21:07

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
  • +
  • -
  • 0

#2 radim

    Godlike

  • Moderator

Reputacja: 939
Master

  • Postów:2,725
  • Steam:steam
  • Imię:Arkadiusz
  • Lokalizacja:Janów Lub.
Offline

Posted 02.03.2013 07:33

Funkcja find_sphere_class ( http://amxx.pl/dokum...nd_sphere_class )
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 ; ))

Edited by radim, 03.03.2013 11:28.

  • +
  • -
  • 0

Chcąc napisać do mnie prywatną wiadomość, wpierw zapoznaj się ze stroną "O mnie" w moim profilu użytkownika [ radim ] !


#3 mimo114

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 4
Nowy

  • Postów:72
  • Imię:Mateusz
  • Lokalizacja:Lubliniec
Offline

Posted 02.03.2013 18:23

Ok wielkie dzięki.Ale nie wiem czy na pewno na Death matchu na tych spawnach jest buyzone ale powinno być.
  • +
  • -
  • 0

#4 Jak się nazwać

    Wszechmogący

  • Power User

Reputacja: 169
Profesjonalista

  • Postów:617
  • Imię:a
  • Lokalizacja:a
Offline

Posted 02.03.2013 20:26

Classname dla respów to:
"info_player_start" - tero
"info_player_deathmatch" - ct

(co do tego które jest które nie jestem pewien :D )
  • +
  • -
  • 0
Pisze na zamówienie statystyki pod nvault. GG: 15600964

#5 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1,679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Posted 02.03.2013 20:27

Classname dla respów to:
"info_player_start" - tero
"info_player_deathmatch" - ct

(co do tego które jest które nie jestem pewien :D )

Chyba na odwrót do tego co piszesz :D
  • +
  • -
  • 0

#6 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Posted 02.03.2013 22:52

BuyZone a spawn pointsy, to dwie, zupełnie różne rzeczy.

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;
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);
}
}
Teraz, tablica spawns powinna zawierać wszystkie punkty spawnów (w formie zmiennoprzecinkowej).
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

Edited by Benio101, 02.03.2013 22:56.
-dbl.





1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users