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 ?
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.
|
Teleport do innego gracza
#1
Napisano 21.06.2020 18:08
#2
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.
#3
Napisano 22.06.2020 02:33
#4
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
#5
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.
#6
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
#7
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.
#8
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.
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych