Teleportem w tym artykule nazwiemy dwa klocki. Jeżeli dotkniemy jednego, przenosi nas do drugiego i odwrotnie. Jest to bardzo prosta konstrukcja, jednak jeżeli komuś zależy, to może wzbogacić swój teleport np. o wybór miejsca w menu lub coś innego. My jednak zajmiemy się podstawą tego sprzętu.
Model[]
Model jest banalnie prosty. Tworzymy dwa klocki. Jeden nazywamy t0, a drugi t1. Łączymy je w model i to tyle. Jeżeli chcesz możesz jakoś wzbogacić te modele, ale to już nie mój interes.
Skrypt[]
Skrypt także nie należy do wielce zaawansowanych. Po prostu stwórzmy skrypt w naszym modelu i zacznijmy kodzić.
Na początku stwórzmy zmienną typu logicznego i nadajmy jej wartość prawdziwą. Zmienna ta będzie mówiła czy teleport będzie mógł działać, czy nie po odczekaniu pewnego czasu od ostatniego użycia(później dowiesz się więcej):
w=true
Na początku stórzmy funkcję, którą ja nazwę tport() i dajmy jej dwa argumenty - brick1 i brick2:
function tport(brick1, brick2) end
Teraz musimy sprawdzić, czy dotyka naszego klocka brick1 jakiś inny klocek. W tym celu użyjemy event'u który wywoła funkcję, gdy wejdzie z jakimś obiektem w kolizję i zwróci do funkcji obiekt dotkniętego klocka - Touched. Umieśćmy ją wewnątrz funkcji:
brick1.Touched:connect(function(part) end)
Teraz musimy sprawdzić, czy klocek należy do postaci, czy w jest prawdziwe i czy rodzić klocka jest Modelem, ponieważ funkcja której użyjemy działa wyłącznie na Modelach:
if part.Parent:FindFirstChild("Humanoid") ~= nil and w and part.Parent.ClassName == "Model" then end
Już wiemy, kiedy trzeba teleportować, ale w jaki sposób teleport ma działać? Po prostu przeniesiemy model postaci do pozycji drugiego klocka za pomocą funkcji MoveTo():
part.Parent:MoveTo(brick2.Position);
Aby nasza postać nie wpadła w pętlę nadajmy fałszywą wartość zmiennej w i po dwóch sekundach ją przywróćmy. Aby było widać, że teleport jest nieaktywny, nadamy mu półprzezroczystość:
w=false; brick1.Transparency = 0.4; brick2.Transparency = 0.4; wait(2); w=true; brick1.Transparency = 0; brick2.Transparency = 0;
Teraz uzyskajmy dostęp do naszych dwóch klocków w modelu(po za funkcją):
T0 = script.Parent:FindFirstChild("t0"); T1 = script.Parent:FindFirstChild("t1");
I wykonajmy funkcję dwukrotnie z odwrotnymi argumentami:
tport(T0, T1); tport(T1, T0);
Cały skrypt[]
w=true; T0 = script.Parent:FindFirstChild("t0"); T1 = script.Parent:FindFirstChild("t1"); function tport(brick1, brick2) brick1.Touched:connect(function(part) if part.Parent:FindFirstChild("Humanoid") ~= nil and w and part.Parent.ClassName == "Model" then part.Parent:MoveTo(brick2.Position); w=false; brick1.Transparency = 0.4; brick2.Transparency = 0.4; wait(2); w=true; brick1.Transparency = 0; brick2.Transparency = 0; end end) end tport(T0, T1); tport(T1, T0);