Ok, When i play my game inStudio the voting system work perfectly fine. but when the player Respawning/LoadCharacter, the Voting system didn't count the player after they respawning. Any Idea?
ServerScript
local rep = game.ReplicatedStorage
local assets = rep.Assets
local maps = assets.Maps
local signal = assets.Signal
local event = signal.Event
local FEvent = signal.FEvent
local mapVotes = {}
local Game = workspace.Game
local g_maps = Game.Maps
local stats = Game.Stats
local settings = {
playersRequired = 1
}
event.OnServerEvent:connect(function(player, variables)
if variables.reason == 'voteOnMap' then
for a,b in pairs(mapVotes) do
for d,c in pairs(b.players) do
if c.player == player.UserId then
table.remove(b.players, d)
break
end
end
end
for a,b in pairs(mapVotes) do
if b.id == variables.itemNum then
table.insert(b.players, {player = player.UserId})
end
end
elseif variables.reason == "removeFromVote" then
for a,b in pairs(mapVotes) do
for d,c in pairs(b.players) do
if c.player == player.UserId then
table.remove(b.players, d)
break
end
end
end
end
end)
function getMap()
local randomMap = maps:GetChildren()[math.random(1,#maps:GetChildren())]
for a,b in pairs(mapVotes) do
if b.mapName == randomMap.Name then
return getMap()
end
end
return randomMap.Name
end
while wait() do
if #game.Players:GetPlayers() < settings.playersRequired then
local playersNeeded = settings.playersRequired-#game.Players:GetPlayers()
stats.Status.Value = playersNeeded.." "..((playersNeeded==1 and "Player")or "Players").." Need player"
else
mapVotes = {}
for a,b in pairs(Game.Special.VotingPads:GetChildren()) do
table.insert(mapVotes, {id = tonumber(b.Name:match("%d+")); mapName=getMap(); players={};})
end
event:FireAllClients({reason="StartVoting"})
end
end)
Client Script
local rep = game.ReplicatedStorage
local assets = rep.Assets
local maps = assets.Maps
local signal = assets.Signal
local event = signal.Event
local FEvent = signal.FEvent
local Game = workspace.Game
local stats = Game.Stats
local vars = {
currentvote = nil;
services = {};
}
event.OnClientEvent:connect(function(variables)
if variables.reason == "StartVoting" then
table.insert(vars.services, game:GetService("RunService").RenderStepped:Connect(function()
local ray = Ray.new(char.PrimaryPart.CFrame.p, Vector3.new(0,-1000,0))
local object = workspace:FindPartOnRay(ray, char, false, false)
if object and object.Name:match("VotingPad") then
local votingPadNum = tonumber(object.Name:match("%d+"))
if vars.currentvote == nil then
vars.currentvote = votingPadNum
event:FireServer({reason="voteOnMap"; itemNum = votingPadNum;})
elseif vars.currentvote~= votingPadNum then
vars.currentvote = votingPadNum
event:FireServer({reason="voteOnMap"; itemNum = votingPadNum;})
end
elseif vars.currentvote ~= nil then
vars.currentvote = nil
event:FireServer({reason="removeFromVote"})
end
end))
elseif variables.reason == "endVoting" then
for a,b in pairs(vars.services) do
b:disconnect()
end
vars.services={}
end
end)
