Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local buttons = script.Parent.Buttons
- local shopping = script.Parent.Shopping
- -- Tabla vacía donde se guardan temporalmente las partes que aún no han sido compradas
- local storage = {}
- -- DSS = Data Store Service = Servicio de Almacenamiento de Datos
- local DSS = game:GetService("DataStoreService")
- local Bank = DSS:GetDataStore("Money")
- --
- local basic = script.Parent.Basic
- local manager = script.Manager
- local door = basic.Door
- --
- local function hideButton(button)
- button.CanTouch = false
- button.Transparency = 1
- -- que se esconda el texto del botón
- button.Billboard.Enabled = false
- end
- local function showButton(button)
- button.CanTouch = true
- button.Transparency = 0
- -- que se muestre el texto del botón
- button.Billboard.Enabled = true
- end
- local function newButton(button)
- local purchase
- local name = button.Name
- if shopping:FindFirstChild(name) then
- purchase = shopping[name]
- storage[name] = purchase:Clone()
- purchase:Destroy()
- else
- warn("Missing a purchase : " .. name)
- end
- if not (name == "1") then
- hideButton(button)
- end
- button.Touched:Connect(function(hit)
- local player = game.Players:FindFirstChild(hit.Parent.Name)
- -- si existe el jugador Y si es dueño del Tycoon Y si tiene sufiente dinero para comprar el botón (puerta)
- if player and manager.Value == player and game.ServerStorage[player.Name].Money.Value >= button.Price.Value then
- -- restamos la cantidad de dinero actual que tiene el jugador cuando compra un botón
- game.ServerStorage[player.Name].Money.Value -= button.Price.Value
- local purchase = storage[name]
- if purchase then
- purchase.Parent = shopping
- end
- for i, element in pairs(button:GetChildren()) do
- if element.Name == "Next" then
- local buttonToShow=buttons:FindFirstChild(element.Value)
- if buttonToShow then
- showButton(buttonToShow)
- else
- warn("Missing button: " .. element.Value)
- end
- end
- end
- button:Destroy()
- end
- end)
- end
- for i, button in pairs(buttons:GetChildren()) do
- newButton(button)
- end
- -- game.Players.PlayerAdded:Connect(function(player)
- local function newTycoon(player)
- -- "Dame los datos que tiene este jugador específico guardado, sino asignale 0"
- local money = Bank:GetAsync(player.UserId) or 0
- -- Carpeta en el servidor para guardar de forma segura la información de este jugador
- local billboardOnServer = Instance.new("Folder", game.ServerStorage)
- -- Le ponemos a la carpeta el mismo nombre que el jugador
- billboardOnServer.Name = player.Name
- -- Inicializamos el valor del dinero en el servidor con la cantidad que el jugador tenía guardada (o con 0)
- local moneyOnServer = Instance.new("NumberValue", billboardOnServer)
- moneyOnServer.Name = "Money"
- moneyOnServer.Value = money
- -- Creamos una carpeta accesible para el jugador en su propia estructura de datos
- local billboardLocally = Instance.new("Folder", player)
- billboardLocally.Name = "leaderstats"
- -- Inicializamos el valor del dinero en el cliente con la misma cantidad que en el servidor
- local moneyLocally = Instance.new("NumberValue", billboardLocally)
- moneyLocally.Name = "Money"
- moneyLocally.Value = money
- -- for i, button in pairs(buttons:GetChildren()) do
- -- newButton(button)
- -- end
- -- Jugador que acaba de unirse al juego
- -- player:LoadCharacter()
- -- Cada vez que se actualiza la cantidad de dinero se muestra en la pantalla del jugador
- moneyOnServer.Changed:Connect(function(number)
- moneyLocally.Value = number
- end)
- -- Cuando el objeto toca al Collector...
- script.Parent.Basic.Collector.Touched:Connect(function(object)
- if object and object:FindFirstChild("Money") then
- script.Vault.Value += object.Money.Value
- object:Destroy()
- end
- end)
- -- Si se toca el objeto Bank (boton)
- script.Parent.Basic.Bank.Touched:Connect(function(object)
- if object.Parent == player.Character then
- moneyOnServer.Value += script.Vault.Value
- script.Vault.Value = 0
- end
- end)
- -- Hace que la cantidad de dinero que se muestra al jugador en la interfaz (leaderboard),
- -- se mantenga sincronizada con la cantidad de dinero real y segura guardada en el servidor
- while true do
- Bank:SetAsync(player.UserId, moneyOnServer.Value)
- print("Money saved!") -- le avisa al programador que el sist de dinero está funcionando
- wait(10)
- end
- end
- --)
- -- Sistema de verificación para que:
- -- sea una persona que esté tocando el valor
- -- que revise si está ocupado el Tycoon
- -- activar todo
- door.Touched:Connect(function(part)
- if part.Parent:FindFirstChild("Humanoid") and manager.Value == nil then
- local player = game.Players:GetPlayerFromCharacter(part.Parent)
- local occupied = false
- for i, element in pairs(game.Workspace:GetDescendants()) do
- if element.Name == "System" then
- if element.Manager.Value == player then
- occupied = true
- print("Has")
- end
- end
- end
- if not occupied then
- manager.Value = game.Players:GetPlayerFromCharacter(part.Parent)
- newTycoon(player)
- end
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement