Lua: Wieso wird das Label nicht geändert?

1 Antwort

Hallo!

Stelle sicher, dass die Struktur deiner GUI korrekt ist und alle Elemente vorhanden sind.

Wenn das Spiel startet und der Spieler hinzugefügt wird, könnte es sein, dass die GUI-Elemente noch nicht vollständig geladen sind, wenn dein Skript darauf zugreift. Deshalb könntest du "WaitForChild" verwenden, um sicherzustellen, dass die Elemente vorhanden sind, bevor du darauf zugreifst.

Im aktuellen Skript wird die Geschwindigkeit erhöht, aber das TextLabel zeigt möglicherweise den gespeicherten Wert nicht korrekt an.

local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local speedDataStore = DataStoreService:GetDataStore("PlayerSpeedData12")
local tree = workspace:FindFirstChild("Tree2")
if tree then
  local prompt = tree.Part.Attachment.ProximityPrompt
  if prompt then
    prompt.Triggered:Connect(function(player)
      if player and player:IsA("Player") then
        local userId = player.UserId
        local success, hasInteracted = pcall(function()
          return speedDataStore:GetAsync("HasInteracted_" .. userId)
        end)
        if success and hasInteracted then
          warn("Player has already interacted with the tree")
          return
        end
        local character = player.Character or player.CharacterAdded:Wait()
        local humanoid = character:FindFirstChildOfClass("Humanoid")
        if humanoid then
          -- Erhöhe die Geschwindigkeit
          if humanoid.WalkSpeed then
            humanoid.WalkSpeed = (humanoid.WalkSpeed or 16) + 0.5
          end
          -- Aktualisiere das TextLabel
          local playerGui = player:WaitForChild("PlayerGui")
          local screenGui = playerGui:WaitForChild("ScreenGui")
          local textLabel = screenGui:WaitForChild("SpeedFrame"):WaitForChild("SpeedCounter"):WaitForChild("Speed")
          local successText, savedText = pcall(function()
            return speedDataStore:GetAsync("SpeedText_" .. userId)
          end)
          if successText and savedText then
            textLabel.Text = tostring(tonumber(savedText) + 0.5)
          else
            textLabel.Text = "1.00"
          end
          -- Speichere den aktualisierten Text
          pcall(function()
            speedDataStore:SetAsync("SpeedText_" .. userId, textLabel.Text)
          end)
          pcall(function()
            speedDataStore:SetAsync("HasInteracted_" .. userId, true)
            speedDataStore:SetAsync("WalkSpeed_" .. userId, humanoid.WalkSpeed)
          end)
        else
          warn("Humanoid nicht gefunden")
        end
      else
        warn("Ungültiger Spieler")
      end
    end)
  else
    warn("ProximityPrompt nicht gefunden")
  end
else
  warn("Tree2 nicht gefunden")
end
Players.PlayerAdded:Connect(function(player)
  local userId = player.UserId
  local success, savedSpeed = pcall(function()
    return speedDataStore:GetAsync("WalkSpeed_" .. userId)
  end)
  local successText, savedText = pcall(function()
    return speedDataStore:GetAsync("SpeedText_" .. userId)
  end)
  player.CharacterAdded:Connect(function(character)
    local humanoid = character:WaitForChild("Humanoid")
    if savedSpeed and humanoid then
      humanoid.WalkSpeed = savedSpeed
    end
    local playerGui = player:WaitForChild("PlayerGui")
    local screenGui = playerGui:WaitForChild("ScreenGui")
    local textLabel = screenGui:WaitForChild("SpeedFrame"):WaitForChild("SpeedCounter"):WaitForChild("Speed")
    if successText and savedText then
      textLabel.Text = savedText
    else
      textLabel.Text = "0"
    end
  end)
end)
Woher ich das weiß:Recherche

snowman202 
Beitragsersteller
 31.05.2024, 12:19

Funktioniert! Vielen dank!

1