Hello! Im currently making a game cald Battle Heights, So basically Im trying to make it so that when the player wins, they get 25 Tix BUUUUT It doesn’t and 1 win and also the wins doesn’t show on the leaderboard for neither players, nothing comes inside of the output and also my modeled leaderboards didn’t show at all the players ( globally ) points on their at all, I dont know how to fix these.
MainScript ( Game Handler )
-- Define Variables
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local MapsFolder = ServerStorage:WaitForChild("Maps")
local Status = ReplicatedStorage:WaitForChild("Status")
local GameLength = 180
local tixreward = 25
local winsreward = 1
local Gamemodes = {"Free For All", "Team Deathmatch", "Capture The Flag", "Infection", "Rocket Battle", "KOTH", "Swords Only"}
-- Game Loop
while true do
Status.Value = "Waiting for enough players..."
repeat wait() until game.Players.NumPlayers >= 2
Status.Value = "Intermission..."
wait(10)
local plrs = {}
for i, player in pairs (game.Players:GetPlayers()) do
if player then
table.insert(plrs,player) -- Add each player into plrs table
end
end
wait(2)
local AvalibleMaps = MapsFolder:GetChildren()
local ChosenMap = AvalibleMaps[math.random(1,#AvalibleMaps)]
Status.Value = ChosenMap.Name.."Chosen"
local ClonedMap = ChosenMap:Clone()
ClonedMap.Parent = workspace
-- Telaports players to the map
local SpawnPoints = ClonedMap:FindFirstChild("SpawnPoints")
if not SpawnPoints then
print(" { ERROR 101 } SpawnPoints not found!")
end
local AvalibleSpawnPoints = SpawnPoints:GetChildren()
for i, player in pairs(plrs) do
if player then
character= player.character
if character then
-- Telaport them
character:FindFirstChild("HumanoidRootPart").CFrame = AvalibleSpawnPoints[1].CFrame
table.remove(AvalibleSpawnPoints,1)
-- Give them a sword
local Sword = ServerStorage.Sword:Clone()
Sword.Parent = player.Backpack
-- Give them a Slingshot
local Slingshot = ServerStorage.Slingshot:Clone()
Sword.Parent = player.Backpack
-- Give them a RocketLauncher
local RocketLauncher = ServerStorage.RocketLauncher:Clone()
Sword.Parent = player.Backpack
local GameTag = Instance.new("BoolValue")
GameTag.Name = "GameTag"
GameTag.Parent = player.Character
else
-- Their is no character
if not player then
table.remove(plrs, i)
end
end
end
end
Status.Value = "Get Ready To Play!"
wait(2)
for i = GameLength,0,-1 do
for x, player in pairs(plrs) do
if player then
character = player.Character
if not character then
-- Left the game
else
if character:FindFirstChild("GameTag") then
-- They are still alive
print(player.Name.." is still in the game!")
else
-- They are dead
table.remove(plrs,x)
print(player.Name.."Has been removed!")
end
end
else
table.remove(plrs,x)
print(player.Name.."Has been killed!")
end
end
Status.Value = "There are "..i.."seconds remaning, and "..#plrs.."remaning."
if #plrs == 1 then
-- Last person standing!
Status.Value = "The winner is "..plrs[1].Name
plrs[1].leaderstats.Tix.Value = plrs[1].leaderstats.Tix.Value + tixreward
plrs[1].leaderstats.Tix.Value = plrs[1].leaderstats.Tix.Value + winsreward
break
elseif #plrs == 0 then
Status.Value = "Nobody won :("
break
elseif i == 0 then
Status.Value = "Times Up!"
break
end
wait(1)
end
print("End of game")
for i, player in pairs(game.Players:GetPlayers()) do
character = player.Character
if not character then
--Ignore them
else
if character:FindFirstChild("GameTag") then
character.GameTag:Destroy()
end
if player.Backpack:FindFirstChild("Sword") then
player.Backpack.Sword:Destroy()
end
if character:FindFirstChild("Sword") then
character.Sword:Destroy()
end
end
end
ClonedMap:Destroy()
Status.Value = "The Game has ended!"
end
StatsScript
game.Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local Tix = Instance.new("IntValue")
Tix.Name = "Tix"
Tix.Value = 0
Tix.Parent = leaderstats
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local Wins = Instance.new("IntValue")
Wins.Name = "Wins"
Wins.Value = 0
Wins.Parent = leaderstats
end)
globalLeaderboard ( Tix Script )
local ods = game:GetService("DataStoreService"):GetOrderedDataStore("Tix")
local Players = game:GetService("Players")
local primaryColor = Color3.new(1,1,1)
local secondaryColor = Color3.new(0.815686, 0.815686, 0.815686)
local function cleanBoard()
for _,surfaceGui in pairs(script.Parent:getChildren()) do
if surfaceGui.Name == "SurfaceGui" then
for _,frame in pairs(surfaceGui.ScrollingFrame:GetChildren()) do
if frame:IsA("Frame") then
frame:Destroy()
end
end
end
end
end
function updateBoard(data)
for i,v in pairs(data) do
for _,surfaceGui in pairs(script.Parent:GetChildren()) do
if surfaceGui.Name == "SurfaceGui" then
local pos = i
local userId = v.key
local score = v.value
local frame = script.Frame:Clone()
frame.Parent = surfaceGui.ScrollingFrame
pcall(function ()
frame.name.Text = Players:GetNameFromUserIdAsync(userId)
end)
pcall(function ()
frame.playerImage.Image = Players:GetUserThumbnailAsync(userId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420)
end)
frame.value.Text = score
frame.rank.Text = "# " .. pos
if i % 2 == 0 then
frame.BackgroundColor3 = primaryColor
else
frame.BackgroundColor3 = secondaryColor
end
if i == 1 then
frame.BackgroundColor3 = Color3.new(255/255, 255/255, 179/255)
frame.name.TextStrokeColor3 = Color3.new(255/255, 226/255, 0)
frame.value.TextStrokeColor3 = Color3.new(255/255, 226/255, 0)
frame.rank.TextStrokeColor3 = Color3.new(255/255, 226/255, 0)
frame.name.TextStrokeTransparency = 0
frame.value.TextStrokeTransparency = 0
frame.rank.TextStrokeTransparency = 0
end
end
end
end
end
while true do
local success, message = pcall(function()
local pages = ods:GetSortedAsync(false,100)
-- get data for first board
local data = pages:GetCurrentPage()
cleanBoard()
updateBoard(data)
end)
if not success then
print(message)
end
wait(60)
end
globalLeaderboard ( Wins Script )
local ods = game:GetService("DataStoreService"):GetOrderedDataStore("Wins")
local Players = game:GetService("Players")
local primaryColor = Color3.new(1,1,1)
local secondaryColor = Color3.new(0.815686, 0.815686, 0.815686)
local function cleanBoard()
for _,surfaceGui in pairs(script.Parent:getChildren()) do
if surfaceGui.Name == "SurfaceGui" then
for _,frame in pairs(surfaceGui.ScrollingFrame:GetChildren()) do
if frame:IsA("Frame") then
frame:Destroy()
end
end
end
end
end
function updateBoard(data)
for i,v in pairs(data) do
for _,surfaceGui in pairs(script.Parent:GetChildren()) do
if surfaceGui.Name == "SurfaceGui" then
local pos = i
local userId = v.key
local score = v.value
local frame = script.Frame:Clone()
frame.Parent = surfaceGui.ScrollingFrame
pcall(function ()
frame.name.Text = Players:GetNameFromUserIdAsync(userId)
end)
pcall(function ()
frame.playerImage.Image = Players:GetUserThumbnailAsync(userId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420)
end)
frame.value.Text = score
frame.rank.Text = "# " .. pos
if i % 2 == 0 then
frame.BackgroundColor3 = primaryColor
else
frame.BackgroundColor3 = secondaryColor
end
if i == 1 then
frame.BackgroundColor3 = Color3.new(255/255, 255/255, 179/255)
frame.name.TextStrokeColor3 = Color3.new(255/255, 226/255, 0)
frame.value.TextStrokeColor3 = Color3.new(255/255, 226/255, 0)
frame.rank.TextStrokeColor3 = Color3.new(255/255, 226/255, 0)
frame.name.TextStrokeTransparency = 0
frame.value.TextStrokeTransparency = 0
frame.rank.TextStrokeTransparency = 0
end
end
end
end
end
while true do
local success, message = pcall(function()
local pages = ods:GetSortedAsync(false,100)
-- get data for first board
local data = pages:GetCurrentPage()
cleanBoard()
updateBoard(data)
end)
if not success then
print(message)
end
wait(60)
end