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.
You could try to do what i always do. Place all your functions before the script so before putting the entire rest of your script just slap all your functions there.