giganciprogramowania

10. Roblox Studio - Tajniki budowniczego Robloxa – część II - TycoonScript

Mar 9th, 2022 (edited)
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local Buttons = script.Parent:WaitForChild("Buttons")
  2. local Essentials = script.Parent:WaitForChild("Essentials")
  3. local Purchases = script.Parent:WaitForChild("Purchases")
  4. local TycoonInfo = script.Parent:WaitForChild("TycoonInfo")
  5. local Owner = TycoonInfo:WaitForChild("Owner")
  6.  
  7. local Objects = {}
  8. local DButtons = {}
  9.  
  10. for i, v in pairs (Buttons:GetChildren()) do
  11.  
  12.     -- zmienna Object do której zostanie przypisany obiekt do zakupu,
  13.     -- jego nazwa została określona w Object danego przycisku (dany obiekt musi znajdować się w folderze Purchases).
  14.     local Object = Purchases:FindFirstChild(v.Object.Value)
  15.  
  16.     -- jeżeli obiekt został znaleziony
  17.     if Object then
  18.         -- zostaje on sklonowany do tablicy Objects
  19.         Objects[Object.Name] = Object:Clone()
  20.         -- następnie jest niszczony
  21.         Object:Destroy()
  22.     end
  23.  
  24.     -- jeżeli w przycisku zostanie znaleziony obiekt o nazwie Dependency
  25.     if v:FindFirstChild("Dependency") then
  26.         -- ustawienie przezroczystości części Button na 1 (spowoduje to, że przycisk zniknie)
  27.         v.Button.Transparency = 1
  28. -- ustawienie właściwości CanTouch części Button na false spowoduje, że ten przycisk nie będzie reagować na zdarzenie Touched czyli moment kiedy zostanie dotknięty przez inny obiekt w grze będzie ignorowany
  29.         v.Button.CanTouch = false
  30.         -- wyłączenie widoczności BillboardGui
  31.         v.Button.BillboardGui.Enabled = false
  32.         -- umieszczenie przycisku w tablicy (pod nazwą obiektu po którym ma się pojawić)
  33.         DButtons[v.Dependency.Value] = v
  34.     end
  35.  
  36.     -- dodanie zdarzenia do każdego przycisku
  37.     v.Button.Touched:Connect(function(Hit)
  38.         -- sprawdzenie czy obiekt, który dotknął przycisk jest właścicielem tego Tycoona
  39.         if ValidateHitByOwner(Hit) then
  40.             -- jeżeli ten przycisk ma przezroczystość równą 0
  41.             if v.Button.Transparency == 0 then
  42.                 -- do zmiennej object przypisz obiekt, który miał być zakupiony przez ten przycisk
  43.                 local object = Objects[v.Object.Value]
  44.                 -- przypisz object do folderu Purchases
  45.                 object.Parent = Purchases
  46.                 -- zniszcz przycisk
  47.                 v:Destroy()
  48.  
  49.    -- jeżeli przycisk zależny istnieje (co oznacza, że ma się pojawić gdy dany obiekt zostanie kupiony)
  50.                 if DButtons[object.Name] then  
  51.    -- ustawienie przezroczystości części Button na 0 (spowoduje to, że przycisk pojawi się)
  52.                     DButtons[object.Name].Button.Transparency = 0
  53.    -- ustawienie właściwości CanTouch części Button na true spowoduje, że zdarzenie Touched będzie go dotyczyć czyli moment kiedy zostanie dotknięty przez inny obiekt w grze będzie wykryty
  54.                     DButtons[object.Name].Button.CanTouch = true
  55.                     -- włączenie widoczności BillboardGui
  56.                     DButtons[object.Name].Button.BillboardGui.Enabled = true
  57.                 end
  58.             end
  59.         end
  60.     end)
  61. end
  62.  
  63. -- funkcja sprawdzająca właściciela Tycoona
  64. function ValidateHitByOwner(Hit)
  65.     -- sprawdź czy istnieje obiekt Hit i czy ma rodzica i czy znajduje się w nim Humanoid
  66.     if Hit and Hit.Parent and Hit.Parent:FindFirstChild("Humanoid") then
  67.         -- pobierz gracza z characteru
  68.         local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
  69.         -- jeżeli gracz został znaleziony i gracz jest właścicielem Tycoona
  70.         if Player and Player == Owner.Value then
  71.             -- zwróć true
  72.             return true
  73.         end
  74.     end
  75.  
  76.     -- jeżeli, któraś z powyższych instrukcji nie wykonała się, zwróć false
  77.     return false
  78. end
  79.  
Add Comment
Please, Sign In to add comment