Why is the ‘initializeClickDetectors()’ on the last line of code red, and thus making the script not work.
Non-working Version
local vowels = {
{letter = "A", probability = 0.3},
{letter = "E", probability = 0.3},
{letter = "I", probability = 0.1},
{letter = "O", probability = 0.2},
{letter = "U", probability = 0.1}
}
local consonants = {
{letter = "B", probability = 0.05},
{letter = "C", probability = 0.1},
{letter = "D", probability = 0.15},
{letter = "F", probability = 0.05},
{letter = "G", probability = 0.05},
{letter = "H", probability = 0.05},
{letter = "J", probability = 0.02},
{letter = "K", probability = 0.02},
{letter = "L", probability = 0.1},
{letter = "M", probability = 0.05},
{letter = "N", probability = 0.15},
{letter = "P", probability = 0.05},
{letter = "Q", probability = 0.01},
{letter = "R", probability = 0.15},
{letter = "S", probability = 0.05},
{letter = "T", probability = 0.1},
{letter = "V", probability = 0.02},
{letter = "W", probability = 0.02},
{letter = "X", probability = 0.01},
{letter = "Y", probability = 0.05},
{letter = "Z", probability = 0.01}
}
-- Calculate total probabilities for vowels and consonants
local function calculateTotalProbability(data)
local total = 0
for _, entry in ipairs(data) do
total = total + entry.probability
end
return total
end
local totalVowelProbability = calculateTotalProbability(vowels)
local totalConsonantProbability = calculateTotalProbability(consonants)
-- Function to get a random letter
local function getRandomLetter(letterType)
local data
local totalProbability
if letterType == "vowel" then
data = vowels
totalProbability = totalVowelProbability
else
data = consonants
totalProbability = totalConsonantProbability
end
local cumulativeProbability = 0
local randomValue = math.random()
for _, entry in ipairs(data) do
cumulativeProbability = cumulativeProbability + (entry.probability / totalProbability)
if randomValue <= cumulativeProbability then
return entry.letter
end
end
end
-- Slots in the workspace
local slots = {}
for i = 1, 9 do
local slot = game.Workspace:FindFirstChild("Slot" .. i)
if slot then
table.insert(slots, slot)
end
end
-- Function to set a letter in an available slot
local function setLetterInSlot(letter)
for _, slot in ipairs(slots) do
local surfaceGui = slot:FindFirstChildWhichIsA("SurfaceGui")
if surfaceGui then
local textLabel = surfaceGui:FindFirstChild("TextLabel")
-- Check if the TextLabel is empty
if textLabel and textLabel.Text == "" then
textLabel.Text = letter
return
end
end
end
end
-- Function to clear all slots
local function clearBoard()
for _, slot in ipairs(slots) do
local surfaceGui = slot:FindFirstChildWhichIsA("SurfaceGui")
if surfaceGui then
local textLabel = surfaceGui:FindFirstChild("TextLabel")
if textLabel then
textLabel.Text = ""
end
end
end
end
-- Event handler for clicking the vowel block
local function onVowelBlockClick()
local letter = getRandomLetter("vowel")
setLetterInSlot(letter)
}
-- Event handler for clicking the consonant block
local function onConsonantBlockClick()
local letter = getRandomLetter("consonant")
setLetterInSlot(letter)
}
-- Initialize click detectors
local function initializeClickDetectors()
-- Find the blocks in the workspace
local vowelBlock = game.Workspace:FindFirstChild("VowelBlock")
local consonantBlock = game.Workspace:FindFirstChild("ConsonantBlock")
local clearBlock = game.Workspace:FindFirstChild("ClearBlock")
-- Initialize click detector for the vowel block
if vowelBlock then
local clickDetector = vowelBlock:FindFirstChild("ClickDetector")
if clickDetector then
clickDetector.MouseClick:Connect(onVowelBlockClick)
end
end
-- Initialize click detector for the consonant block
if consonantBlock then
local clickDetector = consonantBlock:FindFirstChild("ClickDetector")
if clickDetector then
clickDetector.MouseClick:Connect(onConsonantBlockClick)
end
end
-- Initialize click detector for the ClearBlock
if clearBlock then
local clickDetector = clearBlock:FindFirstChild("ClickDetector")
if clickDetector then
clickDetector.MouseClick:Connect(clearBoard)
end
end
end
-- Invoke function to initialize click detectors
initializeClickDetectors()
Version that works, but without the function to clear the text values on the surfacegui
-- Define arrays of vowels and consonants with their probabilities
local vowels = {
{letter = "A", probability = 0.3},
{letter = "E", probability = 0.3},
{letter = "I", probability = 0.1},
{letter = "O", probability = 0.2},
{letter = "U", probability = 0.1}
}
local consonants = {
{letter = "B", probability = 0.05},
{letter = "C", probability = 0.1},
{letter = "D", probability = 0.15},
{letter = "F", probability = 0.05},
{letter = "G", probability = 0.05},
{letter = "H", probability = 0.05},
{letter = "J", probability = 0.02},
{letter = "K", probability = 0.02},
{letter = "L", probability = 0.1},
{letter = "M", probability = 0.05},
{letter = "N", probability = 0.15},
{letter = "P", probability = 0.05},
{letter = "Q", probability = 0.01},
{letter = "R", probability = 0.15},
{letter = "S", probability = 0.05},
{letter = "T", probability = 0.1},
{letter = "V", probability = 0.02},
{letter = "W", probability = 0.02},
{letter = "X", probability = 0.01},
{letter = "Y", probability = 0.05},
{letter = "Z", probability = 0.01}
}
-- Calculate total probability for vowels and consonants
local function calculateTotalProbability(data)
local totalProbability = 0
for _, entry in ipairs(data) do
totalProbability = totalProbability + entry.probability
end
return totalProbability
end
local totalVowelProbability = calculateTotalProbability(vowels)
local totalConsonantProbability = calculateTotalProbability(consonants)
-- Get a random letter based on the specified type and probability
local function getRandomLetter(letterType)
local randomValue = math.random()
if letterType == "vowel" then
local cumulativeProbability = 0
for _, entry in ipairs(vowels) do
cumulativeProbability = cumulativeProbability + (entry.probability / totalVowelProbability)
if randomValue <= cumulativeProbability then
return entry.letter
end
end
elseif letterType == "consonant" then
local cumulativeProbability = 0
for _, entry in ipairs(consonants) do
cumulativeProbability = cumulativeProbability + (entry.probability / totalConsonantProbability)
if randomValue <= cumulativeProbability then
return entry.letter
end
end
end
end
-- Define slots in the workspace
local slots = {}
for i = 1, 9 do
local slot = game.Workspace:FindFirstChild("Slot" .. i)
if slot then
table.insert(slots, slot)
end
end
-- Function to set a letter in an available slot
local function setLetterInSlot(letter)
for _, slot in ipairs(slots) do
local surfaceGui = slot:FindFirstChildWhichIsA("SurfaceGui")
if surfaceGui then
local textLabel = surfaceGui:FindFirstChild("TextLabel")
if textLabel and textLabel.Text == "" then
textLabel.Text = letter
return
end
end
end
end
-- Event handler for vowel block click
local function onVowelBlockClick()
local letter = getRandomLetter("vowel")
setLetterInSlot(letter)
end
-- Event handler for consonant block click
local function onConsonantBlockClick()
local letter = getRandomLetter("consonant")
setLetterInSlot(letter)
end
-- Set up click detectors for vowel and consonant blocks
local function initializeClickDetectors()
local vowelBlock = game.Workspace:FindFirstChild("VowelBlock")
local consonantBlock = game.Workspace:FindFirstChild("ConsonantBlock")
if vowelBlock then
local vowelClickDetector = vowelBlock:FindFirstChild("ClickDetector")
if vowelClickDetector then
vowelClickDetector.MouseClick:Connect(onVowelBlockClick)
end
end
if consonantBlock then
local consonantClickDetector = consonantBlock:FindFirstChild("ClickDetector")
if consonantClickDetector then
consonantClickDetector.MouseClick:Connect(onConsonantBlockClick)
end
end
end
-- Initialize click detectors
initializeClickDetectors()