Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Tool/Handle Gives Points Rather Than Humanoid?

Asked by 8 years ago

Hello fellow ROBLOXian Scripters. I am in need of help, I am making a game that implements a Leaderboard consisting two things: XP and Levels. I was wondering instead of me touching the brick, is there a way a tool can touch it and give XP? It's for a basketball game.

--Basically checks if the toucher of the button is a player, then adds money to that player.

local ting = 0 --debouncer

function onTouched(hit)

    if ting == 0 then --debounce check
    ting = 1 --activate debounce
    check = hit.Parent:FindFirstChild("Handle") --Find the human that touched the button

    if check ~= nil then --If a human is found, then

        local user = game.Players:GetPlayerFromCharacter(hit.Parent) --get player from touching human
        local stats = user:findFirstChild("leaderstats") --Find moneyholder

        if stats ~= nil then --If moneyholder exists then
            local cash = stats:findFirstChild("XP") --Money type
            cash.Value  = cash.Value +1000 --increase amount of money by the number displayed here (500)
            wait(3) --wait-time before button works again
        end

    end

    ting = 0 --remove debounce
    end

end

script.Parent.Touched:connect(onTouched)

Credit to Uberubert

Here's some extra code when left-clicking the basketball:

Tool = script.Parent

function fire(v)
    local vCharacter = Tool.Parent
    local vPlayer = game.Players:playerFromCharacter(vCharacter)
    local spawnPos = vCharacter.PrimaryPart.Position
    spawnPos  = spawnPos + (v * 5)
    connection:disconnect()
    wait()
    Tool.BallShadow.Disabled = false
    Tool.Parent = game.Workspace
    Tool.Handle.Position = spawnPos
    Tool.Handle.Velocity = (v * Tool.Power.Value)+Vector3.new(0,50,0)
end

function onActivated()
    local character = Tool.Parent;
    local humanoid = character.Humanoid
    if humanoid == nil then
    print("Humanoid not found")
    return 
    end
    local targetPos = humanoid.TargetPoint
    local lookAt = (targetPos - character.Head.Position).unit
    fire(lookAt)
end

while true do
    script.Parent.Activated:wait()
    connection = game:service("RunService").Stepped:connect(onActivated)
    wait()
end

Video: https://www.youtube.com/watch?v=ErSN1PHk4O8

-LukeGabrieI

1 answer

Log in to vote
0
Answered by 8 years ago
Edited 7 years ago

Here you go sir made officially by Resplendid 100%

The Brick is:

--Made 100% by Resplendid
--For LukeGabriel
function onTouch(hit)
local look = hit.Parent:findFirstChild("BallHandler").Value
    local found = game.Players:findFirstChild(look)
    local cash = found:findFirstChild("leaderstats")
    cash.XP.Value = cash.XP.Value+1000
    print("Gave +1000 XP")
end
script.Parent.Touched:connect(onTouch)


and the leaderstats in workspace by itself:

--Made 100% by Resplendid
--For LukeGabriel
local playerStats = {} --this keeps a list of the stats for each player that enters the game

 game.Players.PlayerAdded:connect(function(player)
     local leaderstats = Instance.new("Model", player)
     leaderstats.Name = "leaderstats"
     local points = Instance.new("IntValue", leaderstats) -- Lines 10, 11, and 12 are removable. Remove them if you want only the rank to be displayed.
     points.Name = "XP"  
     playerStats[player] = leaderstats 
 end)

Also there needs to be a IntValue inside of the ball called "BallHandler" with a script of:

while wait() do
    plr=game.Players:FindFirstChild(script.Parent.Parent.Parent.Name)
    if plr then
        script.Parent.Value=plr.Name
    end
end

Here you go! It worked for me and it should work for you. Also, give me credit for this work.

Thanks, Resplendid.

Ad

Answer this question