Hello everyone, I made a function that awards a currency called skillpoints when ever it is called. The input for the function requires a player and the amount of skill points you want to reward. However even though I defined the function, it throws a nil value. I pretty much setup where I wanted to add skill points as the same where I already added them and they work.
Here is the nil error:
23:05:40.336 - ServerScriptService.MainScript:573: attempt to call global 'awardskillpoints' (a nil value)
23:05:40.337 - Stack Begin
23:05:40.338 - Script 'ServerScriptService.MainScript', Line 573
23:05:40.338 - Stack End
For some reason it is saying my function, known as "awardskillpoints" is non existent. Here is where I want my function to work.
local localtimer = roundtimer
while localtimer > 0 do
wait(1)
localtimer = localtimer - 1
timertag.Value = localtimer
aliveplayers = {}
killeralive = false
officeralive = false
subofficeralive = false
civilianalive = false
for _, player in pairs(players) do
if player ~= nil then
local character = player.Character
if character ~= nil then
local alivetag = character:FindFirstChild("AliveTag")
local humanoid = character:FindFirstChild("Humanoid")
if alivetag ~= nil and humanoid ~= nil and humanoid.Health > 0 then
if player == killer then
killeralive = true
elseif player == officer then
officeralive = true
elseif player == subofficer then
subofficeralive = true
elseif player == civilian then
civilianalive = true
end
table.insert(aliveplayers, player)
end
end
end
end
for _, player in pairs(players) do
if player ~= nil and player == civilian and civilianalive == true and localtimer == 290 then
awardskillpoints(player, 1) -- This is being nil
event:FireClient(player, "GotPoints", "1")
end
end
-- if one player is alive, or killer is dead.
if #aliveplayers <= 1 or killeralive == false then
break
end
end
Here is my function:
function awardskillpoints(player, skillpoints)
if player ~= nil and skillpoints ~= nil and skillpointdebounce == false then
skillpointdebounce = true
local mydata = playerdata[player.userId]
if mydata ~= nil then
mydata.skillpoints = mydata.skillpoints + skillpoints
local skillpointsvalue = player:FindFirstChild("Skill Points")
if skillpointsvalue ~= nil then
skillpointsvalue.Value = mydata.skillpoints
delay(0.00001, function ()
skillpointdebounce = false
end)
end
end
end
end
end
Finally, here are the parts that work calling this function.
for _, player in pairs(players) do
if matchresults == "KillerWins" and player == killer then
awardskillpoints(player, 4)
awardwin(player)
awardxp(player, 100)
elseif matchresults == "CiviliansWin" and player ~= killer and player ~= officer and player ~= subofficer then
awardskillpoints(player, 5)
awardwin(player)
awardxp(player, 100)
elseif matchresults == "OfficerWins" and player == officer then
awardskillpoints(player, 5)
awardwin(player)
awardxp(player, 100)
elseif matchresults == "SuvOfficerWins" and player == subofficer then
awardskillpoints(player, 6)
awardwin(player)
awardxp(player, 100)
elseif player == killer or player == officer or player == civilian or player == subofficer then
awardxp(player, 50)
else
awardskillpoints(player, 0)
end
end
end
In this section of script, the function works perfectly no issues at all.
Here is another area where I used it.
for _, player in pairs(aliveplayers)do
delay(1.2, function()
awardskillpoints(player, 1)
end)
just a section, but this worked fine too.
Any ideas will help, Not that I expect this question to be answered since more than 3/4 of my questions seemed to have been ignored.
Thank you in advanced.

5 comments
It could be that you are trying to call the function before it's been defined.
forgot to mention but, the function is defined at the very top.
just an idea, throw a brief wait before the while loop that is giving you trouble. I mean the error means that for whatever reason the function doesn't exist when it's called.. might be a timing issue (even though you declare it at the top)
another possibility is that the error is for the wrong function entirely (idk why that would be), but does the event:FireClient work?
The event client does work, I did find a method to do it, which was defining everything a "weird" way.