stroudie
|
  |
| Joined: 28 Nov 2008 |
| Total Posts: 2556 |
|
|
| 01 Mar 2012 03:14 PM |
Working on studio, tells me cannot award badge (due to being on studio and not a game server), yet online it won't work (yes, I tested with another person). Help finding the problem would be appreciated.
Script:
function BeKills() if game.Players.LocalPlayer.leaderstats.KOs.Value >= 100 then player = game.Players.LocalPlayer game:GetService("BadgeService"):AwardBadge(player.userId, 73689948) end end
function InKills() if game.Players.LocalPlayer.leaderstats.KOs.Value >= 500 then player = game.Players.LocalPlayer game:GetService("BadgeService"):AwardBadge(player.userId, 73689957) end end
function ExKills() if game.Players.LocalPlayer.leaderstats.KOs.Value >= 1000 then player = game.Players.LocalPlayer game:GetService("BadgeService"):AwardBadge(player.userId, 73689972) end end
while true do wait(0.1) BeKills() InKills() ExKills() end
|
|
|
| Report Abuse |
|
|
stroudie
|
  |
| Joined: 28 Nov 2008 |
| Total Posts: 2556 |
|
| |
|
stroudie
|
  |
| Joined: 28 Nov 2008 |
| Total Posts: 2556 |
|
|
| 01 Mar 2012 04:26 PM |
| Is anyone going to bother to help? |
|
|
| Report Abuse |
|
|
Navydev
|
  |
| Joined: 21 Feb 2012 |
| Total Posts: 274 |
|
|
| 01 Mar 2012 04:29 PM |
| Want to know a few things, and first off is this script hanging out in the workspace, inside a player, or in a brick |
|
|
| Report Abuse |
|
|
RoflBread
|
  |
| Joined: 18 Jun 2009 |
| Total Posts: 3803 |
|
|
| 01 Mar 2012 04:30 PM |
| I'm rusty, having not gone on the forum in a while, but don't you have to have that script inside the player, so as to make the .LocalPlayer accessible? |
|
|
| Report Abuse |
|
|
Navydev
|
  |
| Joined: 21 Feb 2012 |
| Total Posts: 274 |
|
|
| 01 Mar 2012 04:30 PM |
| First off, to access LocalPlayer, it has to be a Local Script, and it must reside in a character or tool, if it isnt, it wont work, nor would it say anything because it technically isn't an error. |
|
|
| Report Abuse |
|
|
Navydev
|
  |
| Joined: 21 Feb 2012 |
| Total Posts: 274 |
|
|
| 01 Mar 2012 04:31 PM |
Secondly, it would be safer and less demanding on the server if the badges were awarded inside the leaderboard. You should insert all the giving scripts as "if's" after( for the default it's kills) kills = kills + 1 if .... awardbadge |
|
|
| Report Abuse |
|
|
Seranok
|
  |
| Joined: 12 Dec 2009 |
| Total Posts: 11083 |
|
|
| 01 Mar 2012 04:32 PM |
| Guys what happens if you try to award a badge to a Guest? |
|
|
| Report Abuse |
|
|
Rob498
|
  |
 |
| Joined: 05 Sep 2008 |
| Total Posts: 42722 |
|
| |
|
Navydev
|
  |
| Joined: 21 Feb 2012 |
| Total Posts: 274 |
|
|
| 01 Mar 2012 04:35 PM |
This is an example of my leader board, but it is modified to award players your badges:
stands = {} CTF_mode = false
function onHumanoidDied(humanoid, player) local stats = player:findFirstChild("leaderstats") if stats ~= nil then local deaths = stats:findFirstChild("WOs") deaths.Value = deaths.Value + 1
-- do short dance to try and find the killer
local killer = getKillerOfHumanoidIfStillInGame(humanoid)
handleKillCount(humanoid, player) end end
function onPlayerRespawn(property, player) -- need to connect to new humanoid if property == "Character" and player.Character ~= nil then local humanoid = player.Character.Humanoid local p = player local h = humanoid humanoid.Died:connect(function() onHumanoidDied(h, p) end ) end end
function getKillerOfHumanoidIfStillInGame(humanoid) -- returns the player object that killed this humanoid -- returns nil if the killer is no longer in the game
-- check for kill tag on humanoid - may be more than one - todo: deal with this local tag = humanoid:findFirstChild("creator")
-- find player with name on tag if tag ~= nil then local killer = tag.Value if killer.Parent ~= nil then -- killer still in game return killer end end
return nil end
function handleKillCount(humanoid, player) local killer = getKillerOfHumanoidIfStillInGame(humanoid) if killer ~= nil then local stats = killer:findFirstChild("leaderstats") if stats ~= nil then local kills = stats:findFirstChild("Points") if killer ~= player then kills.Value = kills.Value + 2 if kills >= 100 then game:GetService("BadgeService"):AwardBadge(killer.userId, 73689948) elseif kills >= 500 then game:GetService("BadgeService"):AwardBadge(player.userId, 73689957) ------BADGE AWARDER HERE elseif kills > = 1000 then game:GetService("BadgeService"):AwardBadge(player.userId, 73689972) end
else kills.Value = kills.Value - 0 end end end end
-----------------------------------------------
function findAllFlagStands(root) local c = root:children() for i=1,#c do if (c[i].className == "Model" or c[i].className == "Part") then findAllFlagStands(c[i]) end if (c[i].className == "FlagStand") then table.insert(stands, c[i]) end end end
function hookUpListeners() for i=1,#stands do stands[i].FlagCaptured:connect(onCaptureScored) end end
function onPlayerEntered(newPlayer)
if CTF_mode == true then
local stats = Instance.new("IntValue") stats.Name = "leaderstats"
local captures = Instance.new("IntValue") captures.Name = "Captures" captures.Value = 0
captures.Parent = stats
-- VERY UGLY HACK -- Will this leak threads? -- Is the problem even what I think it is (player arrived before character)? while true do if newPlayer.Character ~= nil then break end wait(5) end
stats.Parent = newPlayer
else
local stats = Instance.new("IntValue") stats.Name = "leaderstats"
local kills = Instance.new("IntValue") kills.Name = "Points" kills.Value = 0
local deaths = Instance.new("IntValue") deaths.Name = "WOs" deaths.Value = 0
kills.Parent = stats deaths.Parent = stats
-- VERY UGLY HACK -- Will this leak threads? -- Is the problem even what I think it is (player arrived before character)? while true do if newPlayer.Character ~= nil then break end wait(5) end
local humanoid = newPlayer.Character.Humanoid
humanoid.Died:connect(function() onHumanoidDied(humanoid, newPlayer) end )
-- start to listen for new humanoid newPlayer.Changed:connect(function(property) onPlayerRespawn(property, newPlayer) end )
stats.Parent = newPlayer
end
end
function onCaptureScored(player)
local ls = player:findFirstChild("leaderstats") if ls == nil then return end local caps = ls:findFirstChild("Captures") if caps == nil then return end caps.Value = caps.Value + 1
end
findAllFlagStands(game.Workspace) hookUpListeners() if (#stands > 0) then CTF_mode = true end game.Players.ChildAdded:connect(onPlayerEntered)
|
|
|
| Report Abuse |
|
|
Navydev
|
  |
| Joined: 21 Feb 2012 |
| Total Posts: 274 |
|
|
| 01 Mar 2012 04:37 PM |
It will check to award a badge every time a player KOs someone, through the value killer. Lines down from it, kills is used to award badges, because kills = player.leaderboard.Points, and so when the player(killer, or used in the If statement, kills,) has more than or equal to your set points, s/he will get the badge.
Ok?
Still don't know where you put that script. |
|
|
| Report Abuse |
|
|
stroudie
|
  |
| Joined: 28 Nov 2008 |
| Total Posts: 2556 |
|
|
| 01 Mar 2012 04:47 PM |
| Sorry for not mentioning. The parent of this script is the starterpack originally. It runs in the players backpack. As I have already said, it's working but not working :/ |
|
|
| Report Abuse |
|
|
Navydev
|
  |
| Joined: 21 Feb 2012 |
| Total Posts: 274 |
|
|
| 01 Mar 2012 04:50 PM |
| Yea, but was it a local script? :P |
|
|
| Report Abuse |
|
|
stroudie
|
  |
| Joined: 28 Nov 2008 |
| Total Posts: 2556 |
|
| |
|
Navydev
|
  |
| Joined: 21 Feb 2012 |
| Total Posts: 274 |
|
|
| 01 Mar 2012 04:56 PM |
| Cool cutscene :3, and the while true do loop was largly uneeded. .Changed() would work better X3 |
|
|
| Report Abuse |
|
|
stroudie
|
  |
| Joined: 28 Nov 2008 |
| Total Posts: 2556 |
|
|
| 01 Mar 2012 05:01 PM |
| Alright, what should I do about the badges being given though? |
|
|
| Report Abuse |
|
|
Navydev
|
  |
| Joined: 21 Feb 2012 |
| Total Posts: 274 |
|
|
| 01 Mar 2012 11:41 PM |
| You got a leaderboard, right? Set up a little script that activates in it when ever a player's KOs value changes |
|
|
| Report Abuse |
|
|