Advertisement
CODINGGIAN

Untitled

Jun 10th, 2025
907
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.04 KB | None | 0 0
  1. local buttons = script.Parent.Buttons
  2. local shopping = script.Parent.Shopping
  3.  
  4. -- Tabla vacía donde se guardan temporalmente las partes que aún no han sido compradas
  5. local storage = {}
  6.  
  7. -- DSS = Data Store Service = Servicio de Almacenamiento de Datos
  8. local DSS = game:GetService("DataStoreService")
  9. local Bank = DSS:GetDataStore("Money")
  10. --
  11. local basic = script.Parent.Basic
  12. local manager = script.Manager
  13. local door = basic.Door
  14. --
  15.  
  16. local function hideButton(button)
  17.     button.CanTouch = false
  18.     button.Transparency = 1
  19.     -- que se esconda el texto del botón
  20.     button.Billboard.Enabled = false
  21. end
  22.  
  23. local function showButton(button)
  24.     button.CanTouch = true
  25.     button.Transparency = 0
  26.     -- que se muestre el texto del botón
  27.     button.Billboard.Enabled = true
  28. end
  29.  
  30. local function newButton(button)
  31.     local purchase
  32.     local name = button.Name
  33.  
  34.     if shopping:FindFirstChild(name) then
  35.         purchase = shopping[name]
  36.         storage[name] = purchase:Clone()
  37.         purchase:Destroy()
  38.     else
  39.         warn("Missing a purchase : " .. name)
  40.     end
  41.  
  42.     if not (name == "1") then
  43.         hideButton(button)
  44.     end
  45.  
  46.     button.Touched:Connect(function(hit)
  47.         local player = game.Players:FindFirstChild(hit.Parent.Name)
  48.  
  49.         -- si existe el jugador Y si es dueño del Tycoon Y si tiene sufiente dinero para comprar el botón (puerta)
  50.         if player and manager.Value == player and game.ServerStorage[player.Name].Money.Value >= button.Price.Value then
  51.  
  52.             -- restamos la cantidad de dinero actual que tiene el jugador cuando compra un botón
  53.             game.ServerStorage[player.Name].Money.Value -= button.Price.Value
  54.  
  55.             local purchase = storage[name]
  56.  
  57.             if purchase then
  58.                 purchase.Parent = shopping
  59.             end
  60.  
  61.             for i, element in pairs(button:GetChildren()) do
  62.                 if element.Name == "Next" then
  63.                     local buttonToShow=buttons:FindFirstChild(element.Value)
  64.  
  65.                     if buttonToShow then
  66.                         showButton(buttonToShow)
  67.                     else
  68.                         warn("Missing button: " .. element.Value)
  69.                     end
  70.                 end
  71.             end
  72.  
  73.             button:Destroy()
  74.  
  75.         end
  76.     end)
  77. end
  78.  
  79. for i, button in pairs(buttons:GetChildren()) do
  80.     newButton(button)
  81. end
  82.  
  83. -- game.Players.PlayerAdded:Connect(function(player)
  84. local function newTycoon(player)
  85.     -- "Dame los datos que tiene este jugador específico guardado, sino asignale 0"
  86.     local money = Bank:GetAsync(player.UserId) or  0
  87.  
  88.     -- Carpeta en el servidor para guardar de forma segura la información de este jugador
  89.     local billboardOnServer = Instance.new("Folder", game.ServerStorage)
  90.  
  91.     -- Le ponemos a la carpeta el mismo nombre que el jugador
  92.     billboardOnServer.Name = player.Name
  93.  
  94.     -- Inicializamos el valor del dinero en el servidor con la cantidad que el jugador tenía guardada (o con 0)
  95.     local moneyOnServer = Instance.new("NumberValue", billboardOnServer)
  96.     moneyOnServer.Name = "Money"
  97.     moneyOnServer.Value = money
  98.  
  99.     -- Creamos una carpeta accesible para el jugador en su propia estructura de datos
  100.     local billboardLocally = Instance.new("Folder", player)
  101.     billboardLocally.Name = "leaderstats"
  102.  
  103.     -- Inicializamos el valor del dinero en el cliente con la misma cantidad que en el servidor
  104.     local moneyLocally = Instance.new("NumberValue", billboardLocally)
  105.     moneyLocally.Name = "Money"
  106.     moneyLocally.Value = money
  107.  
  108.  
  109.     -- for i, button in pairs(buttons:GetChildren()) do
  110.     --  newButton(button)
  111.     -- end
  112.  
  113.     -- Jugador que acaba de unirse al juego
  114.     -- player:LoadCharacter()
  115.  
  116.     -- Cada vez que se actualiza la cantidad de dinero se muestra en la pantalla del jugador
  117.     moneyOnServer.Changed:Connect(function(number)
  118.         moneyLocally.Value = number
  119.     end)
  120.  
  121.     -- Cuando el objeto toca al Collector...
  122.     script.Parent.Basic.Collector.Touched:Connect(function(object)
  123.         if object and object:FindFirstChild("Money") then
  124.             script.Vault.Value += object.Money.Value
  125.             object:Destroy()
  126.         end
  127.     end)
  128.  
  129.     -- Si se toca el objeto Bank (boton)
  130.     script.Parent.Basic.Bank.Touched:Connect(function(object)
  131.         if object.Parent == player.Character then
  132.             moneyOnServer.Value += script.Vault.Value
  133.             script.Vault.Value = 0
  134.         end
  135.     end)
  136.  
  137.  
  138.     -- Hace que la cantidad de dinero que se muestra al jugador en la interfaz (leaderboard),
  139.     -- se mantenga sincronizada con la cantidad de dinero real y segura guardada en el servidor
  140.     while true do
  141.         Bank:SetAsync(player.UserId, moneyOnServer.Value)
  142.         print("Money saved!") -- le avisa al programador que el sist de dinero está funcionando
  143.         wait(10)
  144.     end
  145. end
  146. --)
  147.  
  148. -- Sistema de verificación para que:
  149. -- sea una persona que esté tocando el valor
  150. -- que revise si está ocupado el Tycoon
  151. -- activar todo
  152.  
  153. door.Touched:Connect(function(part)
  154.     if part.Parent:FindFirstChild("Humanoid") and manager.Value == nil then
  155.         local player = game.Players:GetPlayerFromCharacter(part.Parent)
  156.         local occupied = false
  157.         for i, element in pairs(game.Workspace:GetDescendants()) do
  158.             if element.Name == "System" then
  159.                 if element.Manager.Value == player then
  160.                     occupied = true
  161.                     print("Has")
  162.                 end
  163.             end
  164.         end
  165.         if not occupied then
  166.             manager.Value = game.Players:GetPlayerFromCharacter(part.Parent)
  167.             newTycoon(player)
  168.         end
  169.     end
  170. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement