# Weighted chance

I have looked at various other posts about weighted chance but still find this method much easier to understand than other methods I’ve viewed. I just wanted to make sure this is a correct and efficient way to do this. If you have any suggestions please let me know.

``````local plrChances = {}

local weight = Instance.new("IntValue", plr)
weight.Name = "Weight"
weight.Value = 1
end)

function module.determineSpy(plrs)
local spy
plrChances = {}

for i, plr in pairs(plrs) do
if plr and plr.Character then
for i = plr.Weight.Value, 0, -1 do
table.insert(plrChances, plr)
end
end
end
spy = plrChances[math.random(1, #plrChances)]

for i, v in pairs(plrs) do
if v == spy then
v.Weight.Value = 1
else
v.Weight.Value += 1
end
end

return spy
end
``````
1 Like

keep in mind this should be in #help-and-feedback:code-review
anyways you can probably just combine both of the for loops imo

Summary
``````local plrChances = {}

local weight = Instance.new("IntValue", plr)
weight.Name = "Weight"
weight.Value = 1
end)

function module.determineSpy(plrs)
local spy
plrChances = {}

for _, plr in pairs(plrs) do
if plr and plr.Character then
plr.Weight.Value += 1

for _ = plr.Weight.Value, 0, -1 do
table.insert(plrChances, plr)
end
end
end

spy = plrChances[math.random(1, #plrChances)]
spy.Weight.Value = 1
return spy
end
``````

basically we can just add the weight in the first for loop, and then set the spy to be weight 1 later.
this makes it more performant too

1 Like

yes youre right. although it wouldnt affect the outcome id say this is more suitable as the weight isnt changed before the for loop

``````function module.determineSpy(plrs)
local spy
plrChances = {}

for i, plr in pairs(plrs) do
if plr and plr.Character then
for i = plr.Weight.Value, 0, -1 do
table.insert(plrChances, plr)
end
plr.Weight.Value += 1
end
end

spy = plrChances[math.random(1, #plrChances)]
spy.Weight.Value = 1

return spy
end
``````
1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.