Pobieranie maksymalnych wymiarów map/y
Najlepsza odpowiedź psilocybe 06.12.2014 22:36
Wyciągnij sobie z tego *.sma co potrzebujesz, a raczej usuń czego nie potrzebujesz.
Po co pisać coś co zostało już napisane i prawdopodobnie nie da się tego lepiej zrobić.
Przejdź do postu
NoLiFeR
04.12.2014
Czy istnieje funkcja/da się pobrać maksymalne wymiary mapy takiej jak np de_dust2 ?
Jeżeli mapa ma sztywnie ustaloną wielkość, i na każdej mapie jest taka sama, proszę o podanie wymiarów, aczkolwiek nie znalazłem na ten temat informacji
grankee
04.12.2014
każda mapa ma teoretycznie wymiar -9999 do 9999 w trzech kierunkach(albo -5000 do 5000, ale raczej 9999), ale tylko mniejszy jej fragment to mapa, którą widzisz. Mapa na której znajduje się gracz to zamknięty fragment złożony ze szczelnie zamkniętej bryły mapy (ent o id 0) oraz entów i tu jej rozmiar jest zawsze znacznie mniejszy od możliwego. Czytałem gdzieś, że skompilowanie mapy teoretycznie o największych rozmiarach jest niewykonalne dla silnika.
Jakie dokładnie wymiary Ci potrzebne i do czego? Może być inny sposób pozyskania tych danych, ale musisz ładnie wytłumaczyć jakie niecne pomysły chodzą Ci po głowie.
NoLiFeR
04.12.2014
Moje niecne pomysły dot. spawnowania randomowo bytów na mapie z org1 = random_num(wymiarmn,wymiarpl)
Potrzebuje pobierania do tego tych koordynatów, tak, bytu oteksturowanego "SKY"
Aby byty spawnowane były wew pomieszczenia "sky", mam już funkcje dzięki Twojemu "0" (dziękuje ) usuwającą byt gdy spadnie na "sky" ale nie wiem jak sprawdzić czy byt ten jest poza, czy w środku "sky" (Tak wiem powtarzam się )
Czyżby origin z _Pev ?
grankee
05.12.2014
mozesz z jakiegos bytu standardowego np info_player_start (miejsce spawnu) puscic traceline w gore to uzyskasz "spód" nieba.
Ja bym pewnie zrobił to tak:
menu do tworzenia "przestrzeni", ograniczone beampointami (tak jak tworzy sie strefy raszu)
zapis do pliku
spawny bytów w okreslonych przestrzeniach
To jest skuteczne rozwiązanie, ale nie dynamiczne, musisz ręcznie robic strefy dla kazdej mapy. Brak zrobionych stref=brak bytów.
psilocybe
05.12.2014
Przykładowa funkcja z pluginu który spawnuje w losowo wybranych miejscach enty (prezenty)
CheckPoints( Float:origin[ 3 ] ) { new Float:data[ 3 ], tr, point; data[ 0 ] = origin[ 0 ]; data[ 1 ] = origin[ 1 ]; data[ 2 ] = 99999.9; engfunc( EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr ); get_tr2( tr, TR_vecEndPos, data ); point = engfunc( EngFunc_PointContents, data ); if ( point == CONTENTS_SKY && get_distance_f( origin, data ) < 250.0 ) return false; data[ 2 ] = -99999.9; engfunc( EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr ); get_tr2( tr, TR_vecEndPos, data ); point = engfunc( EngFunc_PointContents, data ); if ( point < CONTENTS_SOLID ) return false; return true; }
W tym pluginie są jeszcze funkcje typu "SetFloor", "CheckDistance", "CheckVisibility" i kilka innych. Plugin mam z hiszpańskimi komentami ale idzie się połapać.
NoLiFeR
05.12.2014
//Działa w takim sensie, iż oznacza dany org jako zdatny lub też nie do użytku. ?
Aby nie otwierać nowego tematu, dało by się pobrać xmax i xmin z _pev z bytu "0" i ich uzyć ?
Użytkownik NoLiFeR edytował ten post 05.12.2014 13:30
grankee
06.12.2014
Pobranie pev z bytu 0 w najlepszym przypadku zwroci 0/-1 lub jakąś głupią wartość, w najgorszym dojdzie do crasha serwera.
NoLiFeR
06.12.2014
Czyli najlepszym rozwiązaniem jest traceline i odległość od jakiegoś punktu np respa tt ?
Najlepsza odpowiedź
psilocybe
06.12.2014
Wyciągnij sobie z tego *.sma co potrzebujesz, a raczej usuń czego nie potrzebujesz.
Po co pisać coś co zostało już napisane i prawdopodobnie nie da się tego lepiej zrobić.