So I have a map voting system where there is three pads, all named VotingPad1, VotingPad2, VotingPad3. When the voting time begins, each pad is linked to a board that displays the map name and the current live count of votes for that specific map. If you step on the pad, the board displays one vote. If you move to another pad, the old board says 0 and the new board says 1, etc etc. The issue I'm having here is with 2 or more people when they try to vote. For example, lets say we had Player1 and Player2 testing the system. Player1 steps on VotingPad1, the board connected to VotingPad1 displays one vote. Player2 steps on VotingPad2, now the 1 vote displayed on the board for VotingPad1 becomes 0 and the votes for VotingPad2 becomes 2, even though Player1 and Player2 are stepping on separate pads. The issue is the script is displaying their combined votes for some reason.
I have a server script inside ServerScriptService that runs all game functions through a module script, which is also located inside ServerScriptService. I then have a LocalScript inside StarterPlayerScripts handling all client functions, i.e stepping on the pad and sending the player's vote to the server.
Module Script:
function GameHandler:StartMapVoting()
mapVotes = {}
for i,v in next, coreFunction.VotingPads:GetChildren() do
table.insert(mapVotes, {id = tonumber(v.Name:match("%d+")), mapName = GameHandler:GetMap(), players = {}})
end
rEvent:FireAllClients("StartVoting")
gameSettings.voting = true
GameHandler:DisplayTime()
GameHandler:DisplayVotes()
end
function GameHandler:DisplayVotes()
spawn(function()
while gameSettings.voting do
wait()
for i,v in next, coreFunction.VotingPads:GetChildren() do
local plrsVoting, mName
for index, key in next, mapVotes do
if key.id == tonumber(v.Name:match("%d+")) then
plrsVoting = #key.players
mName = key.mapName
print(#key.players)
break
end
end
v.Screen.CountGui.TextLabel.Text = mName.. " - "..plrsVoting.." "..((plrsVoting == "1" and "Voter") or "Voter")
end
end
end)
end
rEvent.OnServerEvent:Connect(function(plr, auth, Data)
if auth == "VoteMap" then
for i,v in next, mapVotes do
for index, key in next, v.players do
if key.player == plr.UserId then
table.remove(v.players, index)
break
end
end
end
for i,v in next, mapVotes do
if v.id == Data.PadID then
table.insert(v.players, {player = plr.UserId})
end
end
elseif auth == "RemoveVote" then
for i,v in next, mapVotes do
for index, key in next, v.players do
if key.player == plr.UserId then
table.remove(v.players, index)
break
end
end
end
end
end)
Local Script:
local function startMapVoting()
local currentVote = nil
for _, obj in next, coreFunction.VotingPads:GetChildren() do
if obj:IsA("BasePart") and obj.Name:match("VotingPad") then
table.insert(services, obj.Touched:Connect(function()
local padID = tonumber(obj.Name:match("%d+"))
if currentVote == nil then
currentVote = padID
rEvent:FireServer("VoteMap", {PadID = padID})
elseif currentVote ~= padID then
currentVote = padID
rEvent:FireServer("VoteMap", {PadID = padID})
end
end))
elseif currentVote ~= nil then
currentVote = nil
rEvent:FireServer("RemoteVote")
end
end
end
rEvent.OnClientEvent:Connect(function(auth, Data)
if auth == "StartVoting" then
startMapVoting()
elseif auth == "EndVoting" then
for i,v in next, services do
v:Disconnect()
end
end
end)

1 comment
I attached a Gyazo link to further explain it in a video format, but looks like it didn't post. Here it is: https://gyazo.com/58df4def909c1d70d68fff9e3eb24d61