Mysle ze chcesz miec drzwi takie przesuwane skryptowo tak?
Obiekty mozna poruszyc za pomoca funkcji
Dam ci maly przyklad:
Najpierw potrzebujesz zmappowac takie drzwi co mysle ze juz zrobiles
Wiec na pewno posiadasz
albo jesli korzystasz ze streamera od Incognito to
Wiec teraz musisz zapisywac id tego obiektu do zmiennej, zmienna ta moze a najlepiej musi byc na gorze skryptu pod wszelkimi definicjami i includami
Na przyklad:
Wiec zeby zapisywac ID obiektu do tej zmiennej musisz zrobic to tak:
CreateObject po stworzeniu obiektu wydaje ID obiektu w return, a te ID mozemy wlasnie za pomoca (= rownasie) zapisywac do jakiejs zmiennej, na przyklad do "Drzwi1".
Okej, wiec mamy teraz ID obiektu zapisywane w tej zmiennej, teraz mozemy w kazdym skryptcie do niego sie zwracac.
Teraz by te drzwi sie poruszaly jesli jest sie w poblizu musimy stworzyc Timer ktory sprawdza czy jakis gracz jest w poblizu
Wiec wchodzisz do OnGameModeInit i stworz Timer:
Na dole skryptu musimy teraz stworzyc public tego timera, robi sie to tak:
Dobrze, mamy teraz Timer i public ktory sie wlacza co 500 milisekund(pol sekundy)
Wiec widzimy ze Timer ten nie posiada zadnych parametrow na temat graczy itd. wiec w najlepszy sposob by sprawdzac kazdego gracza to
stworzenie petli, petle robi sie tak:
i to damy nad returnem w "CheckDoor"
Okej, ta petla teraz przechodzi wszelkie numery od 0 az do wartosci w MAX_PLAYERS.
wiec by sprawdzac czy jakis gracz jest w poblizu tych drzwi musimy zrobi sprawdzanie IF z funkcja sprawdzajaca czy gracz jest w poblizu punktu,
a robi sie to tak:
Okej, pierwszy parametr to ID gracza, w tym przypadku bedzie to kazdy gracz na serwerze, potem mamy radius, radius to odleglosc od drzwi,
czyli jesli dasz 3, to gracz musi byc 3 jednostek(Wyobraz sobie to jak metry) w poblizu drzwi by IsPlayerInRangeOfPoint wydal wartosc "true"
Potem mamy X, Y , Z, w tym miejscu daj pozycje X, Y ,Z z CreateObject zamknietych drzwi.
Okej teraz jesli gracz bedzie w poblizu bramy to IsPlayerInRangeOfPoint wyda "true" a jesli nie to "false"
Teraz mamy jeden problem, petla ta sprawdza kazdego gracza czy jest w poblizu, wiec jesli Ty bedziesz w poblizu a twoj kolega nie, to IsPlayerInRangeOfPoint wyda "true" i "false".
co sprawia ze drzwi beda migotac albo otwierac sie i zamykac odrazu.
Wiec zeby to omijac potrzebujemy jedna zmienna ktora bedzie trzymala wartosc "true" albo "false" jesli jakis gracz bedzie.
Wiec nad petla dajemy prosta zmienna bool'owa na przyklad:
Okej, teraz w IF'ie IsPlayerInRangeOfPoint pomiedzy klamer musimy dac wlasnie nasza zmienna "InRange" jako true.
Cos takiego:
chodzi o to ze po przejscu kazdego gracza ma ustawic "InRange" na "true" wtedy czy chociaz jeden jest w poblizu.
Wiec wyglada to teraz mniej wiecej tak:
Oczywiscie mozesz sobie to skrocic by miec to tak:
Okej, teraz POD petla damy sprawdzanie czy InRange jest na "true" albo na "false".
Robimy to w ten sposob:
albo mozesz i tez w taki sposob:
teraz damy pod tym IFem negacje w postaci else
cos jak:
mozesz takze zrobic to tak:
albo
ale pozostanmy przy else.
Okej czyli kod ma wygladac mniej wiecej tak:
Nastepnie w IF(InRange) aby drzwi sie otwieraly dajemy:
albo jesli korzystasz ze streamera od Incognito to
Wyjasnie ci to. Pierwszy parametr to ID obiektu ktorego chcemy poruszyc, w naszym przypadku jest to "Drzwi1" iz wlasnie tam zapisywalismy ID obiektu ktorego stworzylismy.
Potem X, Y ,Z, w tych koordynatach dajemy pozycje do ktorego nasze drzwi maja sie poruszyc.
Wiec w takim wypadku nalezy stworzyc 2 obiekty, drzwi w pozycji zamknietej, i drzwi w pozycji otwartej. Po zrobieniu tego pobierasz koordynaty X, Y, Z pozycji otwartej i dajesz je wlasnie tam.
Nastepnie mamy Predkosc, predkosc poruszania sie tego obiektu, im wieksza liczba tym szybciej drzwi sie poruszaja, Predkosc jest liczba Floatowa wiec mozesz uzywac kropki typu 1.0, 3.0 itd. Na u siebie w skryptach do poruszajacych sie drzwi korzystam z 3.0, mysle ze jest to optymalne, ale mozesz sobie samemu ustalac predkosc.
Okej, po kompilacji, drzwi po zblizeniu sie, drzwi sie otwieraja,
teraz zajmiemy sie z zamykaniem drzwi.
w tym przypadku robisz tak samo jak z otwierajacymi sie drzwiami ALE, w X, Y, Z daj koordynaty drzwi zamknietej, wiec mozesz smialo pobrac koordynaty z CreateObject.
I ten "MoveObject" dajemy do else. Wiec calosc ma wygladac mniej wiecej tak:
mozesz sobie totakze skrocic:
Jesli teraz wejdziesz na serwer i zblizysz sie do drzwi to sie otwieraja i zamykaja zaleznie od zblizajacyh sie graczy
Jeszcze ci wyjasnie jak to dziala.
Timer ktory co 500 milisekund odpala publica "CheckDoor", tworzy bool "InRange" standardowo w pozycji "false", wiec jesli nie bedzie jakiegos gracza
w poblizu drzwi pozostanie to na "false" odpalajac negacje w if(InRange) czyli "else", jesli jakikolwiek gracz bedzie w poblizu to bool "InRange" ustawia sie na "true" po czym po
przejsciu calej petli nadal pozostanie to na "true", wiec if(InRange) jest na "true" co sprawia ze drzwi sie otwieraja.
Tutaj ci dam gotowy kod, ale otworz to w ostatecznosci jesli masz bledy czy cokolwiek sie dzieje.
Odkryta wiadomość / Unhidden message(aby ją zobaczyć nie musisz nic robić)
U?ytkownik/U?ytkowniczka awfesa mia?/a racj?, wystarczy te drzwi postawi? i same si? otwieraj? gdy posta? w nie wejdzie. Wszyscy macie po piwku. Thx, mo?na lock
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach