Skocz do zawartości

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

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Teleport do innego gracza


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
7 odpowiedzi w tym temacie

#1 csMaster

    Wszechwiedzący

  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 21.06.2020 18:08

Mamy dwóch graczy. Jeden stoi sobie w jakimś miejscu mapy. W jaki sposób teleportować do niego drugiego, dajmy na to na odległość 400 lub więcej jednostek, tak aby obaj gracze się widzieli i żeby nie było między nimi przeszkód które uniemożliwiają zadawanie obrażeń z broni ?


  • +
  • -
  • 0

#2 faken

    Profesjonalista

  • Użytkownik

Reputacja: 35
Życzliwy

  • Postów:192
  • Lokalizacja:Warszawa
Offline

Napisano 21.06.2020 21:33

trzeba pobrać pev_origin gracza do ktorego chcesz sie teleportować i ustawic taki sam temu drugiemu oczywiscie, zmieniajac zmienna zeby w sobie sie nie zbugowali.


  • +
  • -
  • 1

#3 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 22.06.2020 02:33

Nie jest to odpowiedź na moje pytanie. Nie chcę żeby gracze byli dosłownie obok siebie, tylko oddzieleni o minimum 400 jednostek.
  • +
  • -
  • 0

#4 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 22.06.2020 13:21

Mój pomysł:

pobierasz pozycje oraz kąt, w który patrzy gracz 1

Dla tego kąta puszczasz trace line do jakiejś pozycji o 400 jednostek dalej. Równanko odległości w 3D (albo 2D, w zalezności od potrzeb) nie powinno być problemem.

Sprawdzasz czy trace line trafiło w coś, przeszkode czy inne coś.

Jak czysto to masz pozycje do teleportu gracza 2

Jak coś było po drodze to do kąta dodajemy jakas wartosc (czyli obracamy sie) i powtarzamy procedure

 

Nie wiem na ile to jest optymalne, raczej mało. Jeszcze przyszło mi do głowy wykorzystać coś EngFunc_TraceHull


  • +
  • -
  • 1

#5 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 22.06.2020 14:10

No właśnie to jest chyba mało optymalne, szczególnie jeśli gracz będzie w jakimś pomieszczeniu które nawet nie ma 400 jednostek.

Ale wymyśliłem coś innego. Jeśli gracz zada obrażenia bronią jakiemuś innemu graczowi i będą oni się widzieć to wtedy serwer pobierze ich pozycje i zapisze do tablicy dynamicznej a następnie zapisze w pliku z daną mapą. A następnie wykorzystując te współrzędne teleportuje obu graczy w losowe zapisane pary miejsc. Tylko nie wiem czy to rzeczywiście jest bardziej wydajny proces niż traceline. Tutaj muszę jeszcze dodatkowo sprawdzać czy te pozycje graczy nie są podobne do tych, które zostały już zapisane. Czyli tak pętlą przelecieć całą tablice i sprawdzać różnice odległości. I to wszystko wykonywałoby się za każdym razem jak gracz w kogoś strzeli. Także nie wiem czy to by bardziej od traceline serwera nie obciążało. Mógłbym ewentualnie dodać warunek if(!random(2)) to nie będzie przy każdym strzale, chyba że nie byłoby to konieczne.


  • +
  • -
  • 0

#6 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 22.06.2020 14:52

Jeśli zdecydujesz się na przechowywanie koordynatów to możesz użyć Trie. Najpierw zaokrąglić je do całkowitych liczb a potem działać. Kluczem może być string postaci np. "xpos-ypos-zpos". Sprawdzenie czy coś już jest w Trie jest w czasie O(1) czyli jednostkowe, nie trzeba przeglądać całej tablicy. Dynamic array bedzie potrzebna i tak do zapisywania nowych punktów. Przy dodawaniu pkt dodajesz i do Trie i do Array, a na końcu pluginu lecisz po Array i dopisujesz dane do pliku.

Przy uruchamianiu pluginu tworzysz Trie i wczytujesz kolejne klucze/wartości i pakujesz do Trie. Array czysty.

 

Zaletą tego jest to, że po jakimś czasie, będziesz mieć całkiem sporą bazę i można by zaprzestać dalszego zbierania ;)

 

 

 

EDIT: 

Mój sposób też jest dobry, bo możesz to na localhoście odpalić i napisać coś co przeczesze Ci prawie całą mapę teleportując boty etc.


Użytkownik TibacK edytował ten post 22.06.2020 15:05

  • +
  • -
  • 1

#7 wonsz żeczny

    Wszechwidzący

  • Użytkownik

Reputacja: 82
Zaawansowany

  • Postów:254
  • Imię:Wonsz
  • Lokalizacja:Żeka
Offline

Napisano 22.06.2020 22:53

Ja lepiej zapytam.

Do czego chcesz to wykorzystać?

 

Być może lepszym rozwiązaniem by było zrobić "fake" respy w miejscach i odległościach jakie będziesz chciał :)

 

Co do punktu z "przeszkodą" między graczami można użyć:

https://amxx.pl/doku...-is-ent-visible

Tylko nie wiem jak się to zachowa gdy między nimi będzie przezroczysta ściana.


  • +
  • -
  • 0

#8 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 23.06.2020 10:40

Ja lepiej zapytam.

Do czego chcesz to wykorzystać?

 

Być może lepszym rozwiązaniem by było zrobić "fake" respy w miejscach i odległościach jakie będziesz chciał :)

 

Co do punktu z "przeszkodą" między graczami można użyć:

https://amxx.pl/doku...-is-ent-visible

Tylko nie wiem jak się to zachowa gdy między nimi będzie przezroczysta ściana.

 

Ale moje rozwiązanie (tzn z tym zadawaniem obrażeń) też tworzy takie jakby fake respy, ale automatycznie. Po co mam sam je tworzyć na każdej mapie. To jest tak jakby najprostsze ale najbardziej czasochłonne rozwiązanie. A takie automatyczne zapisywanie pozycji w moim przypadku zdecydowanie wystarczy.


  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych