So I have recently moved on from web development to try and learn roblox scripting since it is a lot easier (and less costly!) to publish my works. I also wanted to work with a game engine for once and C# in unity is much harder to learn than lua. I've watched all of AlvinBlox's beginner and advanced tuts on lua and have now moved on to this (https://www.youtube.com/watch?v=YODOWwLZaxE&list=PLsbxI7NIoTthI4KAXPMls60gwVkJbDEl1&index=3) video series to learn how to combine all of this lua knowledge and make a game out of it. Everything was going fine except for one thing which only started after this video.
The problem is that it should pop up in the TextLabel that player1 killed player2 everytime someone kills someone else but it doesn't. Another error I noticed was that the string "(mapname) was Chosen!" doesn't pop up in the TextLabel before "Game Starting..."
There are no errors and I have saved my scripts and also checked over them, analysing them against AlvinBlox's video and also other people that had different problems and posted their script. Here are the two scripts.
local ReplicatedStorage = game:GetService("ReplicatedStorage") local ServerStorage = game:GetService("ServerStorage") local MapsFolder = ServerStorage:WaitForChild("Maps") local Status = ReplicatedStorage:WaitForChild("Status") local GameLength = 50 local reward = 100 while true do -- intermission / waiting for players Status.Value = "Waiting for players..." repeat wait(1) until game.Players.NumPlayers >= 2 Status.Value = "Intermission" wait(10) -- add each player to a table local plrs = {} for i, player in pairs(game.Players:GetPlayers()) do if player then table.insert(plrs,player) end end wait(2) -- randomly choose map local AvailableMaps = MapsFolder:GetChildren() local ChosenMap = AvailableMaps[math.random(1,#AvailableMaps)] Status.Value = ChosenMap.Name.." has been Chosen!" local ClonedMap = ChosenMap:Clone() ClonedMap.Parent = workspace -- spawn players in map local SpawnPoints = ClonedMap:FindFirstChild("SpawnPoints") if not SpawnPoints then print("SpawnPoints not found") end local AvailableSpawnPoints = SpawnPoints:GetChildren() for i, player in pairs(plrs) do if player then character = player.Character if character then -- teleport player character:FindFirstChild("HumanoidRootPart").CFrame = AvailableSpawnPoints[1].CFrame table.remove(AvailableSpawnPoints,1) -- give sword local Sword = ServerStorage.Sword:Clone() Sword.Parent = player.Backpack -- give gametag local GameTag = Instance.new("BoolValue") GameTag.Name = "GameTag" GameTag.Parent = player.Character else if not player then table.remove(plrs,i) end end end end -- start game Status.Value = "Game Starting..." 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 -- ignore else if character:FindFirstChild("GameTag") then print(player.Name.." is still in the game") else table.remove(plrs,x) print(player.Name.." has been removed") end end else table.remove(plrs,x) print(player.Name.." has been removed") end end Status.Value = "There are "..i.." seconds remaining, and "..#plrs.." players left" if #plrs == 1 then Status.Value = plrs[1].Name.." Won!" plrs[1].leaderstats.Cash.Value = plrs[1].leaderstats.Cash.Value + reward break elseif #plrs == 0 then Status.Value = "Nobody Won" break elseif i == 0 then Status.Value = "Time 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 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 player:LoadCharacter() end ClonedMap:Destroy() Status.Value = "Game Ended" wait(2) end
^^^ this is the MainScript that controls the game
game.Players.PlayerAdded:Connect(function(player) local leaderstats = Instance.new("Folder") leaderstats.Name = "leaderstats" leaderstats.Parent = player local cash = Instance.new("IntValue") cash.Name = "Cash" cash.Value = 0 cash.Parent = leaderstats player.CharacterAdded:Connect(function(character) character.Humanoid.Died:Connect(function() if character.Humanoid and character.Humanoid:FindFirstChild("creator") then game.ReplicatedStorage.Status.Value = tostring(character.Humanoid.creator.Value).." KILLED "..player.Name end if character:FindFirstChild("GameTag") then character.GameTag:Destroy() end player:LoadCharacter() end) end) end)
^^^ and this is the Stats script that controls the leaderboard, player cash, etc
I understand that AlvinBlox apparently makes bad tutorials with outdated and bad code but I am not the type of person to just leave hours of work behind and give up on something since I was planning on modifying the code with actual animations and different swords to make a Combat Warriors style game
I ended up not being able to find a solution for my problem so instead I resorted to just making an entirely new text label for a killfeed and modified some scripts and it is even better than before. I think the problem was just that I was trying to modify the same value with different values at the same time so they clashed. This code was directly from AlvinBlox though so I'd say that he just needs to improve his code.