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

Killing rewarding script help?

Asked by 9 years ago

So, whenever a player kills another player with the sword, it gives the player 20 clashbux. I thought this would work but it didn't. ( I'm still confused with :GetPlayerFromCharacter() )

plr = game.Players:GetPlayerFromCharacter(script.Parent.Parent)
script.Parent.Handle.Touched:connect(function(hit)
    while true do
        wait()
        if hit.Parent.Humanoid ~= nil then
            if hit.Parent.Name ~= plr.Name then
                if hit.Parent.Humanoid.Health == 0 then
                    plr.Clashbux.Value = plr.Clashbux.Value + 20
                end
            end
        end
    end
end)

2 answers

Log in to vote
1
Answered by 9 years ago

ImageLabel answered the script, Mine actually works:


This is a regular script in WORKSPACE

game:GetService("Players").PlayerAdded:connect(function(plyr)
    local leaderstat = Instance.new("Model", plyr)
    leaderstat.Name = "leaderstats"
    local ClashBux = Instance.new("IntValue", leaderstat)
    ClashBux.Name = "Clashbux"
    plyr.CharacterAdded:connect(function(char)
        local h = char:FindFirstChild("Humanoid")
        if h then
            h.Died:connect(function()
                local tag = h:FindFirstChild("creator")
                if tag then
                    tag.Value.leaderstats.Clashbux.Value = tag.Value.leaderstats.Clashbux.Value + 20
                end
            end)
        end
    end)
end)

This one is local script in tool

local Tool = script.Parent;

enabled = true
function onButton1Down(mouse)
    if not enabled then
        return
    end

    enabled = false
    mouse.Icon = "rbxasset://textures\\GunWaitCursor.png"

    wait(.5)
    mouse.Icon = "rbxasset://textures\\GunCursor.png"
    enabled = true

end

function onEquippedLocal(mouse)

    if mouse == nil then
        print("Mouse not found")
        return 
    end

    mouse.Icon = "rbxasset://textures\\GunCursor.png"
    mouse.Button1Down:connect(function() onButton1Down(mouse) end)
end


Tool.Equipped:connect(onEquippedLocal)

SwordScript

r = game:service("RunService")


local damage = 1.5


local slash_damage = 1.6
local lunge_damage = 3

sword = script.Parent.Handle
Tool = script.Parent


local SlashSound = Instance.new("Sound")
SlashSound.SoundId = "rbxasset://sounds\\swordslash.wav"
SlashSound.Parent = sword
SlashSound.Volume = .7

local LungeSound = Instance.new("Sound")
LungeSound.SoundId = "rbxasset://sounds\\swordlunge.wav"
LungeSound.Parent = sword
LungeSound.Volume = .6

local UnsheathSound = Instance.new("Sound")
UnsheathSound.SoundId = "rbxasset://sounds\\unsheath.wav"
UnsheathSound.Parent = sword
UnsheathSound.Volume = 1


function blow(hit)
    if (hit.Parent == nil) then return end -- happens when bullet hits sword

    local humanoid = hit.Parent:findFirstChild("Humanoid")
    local vCharacter = Tool.Parent
    local vPlayer = game.Players:playerFromCharacter(vCharacter)
    local hum = vCharacter:findFirstChild("Humanoid") -- non-nil if tool held by a character
    if humanoid~=nil and humanoid ~= hum and hum ~= nil then
        -- final check, make sure sword is in-hand

        local right_arm = vCharacter:FindFirstChild("Right Arm")
        if (right_arm ~= nil) then
            local joint = right_arm:FindFirstChild("RightGrip")
            if (joint ~= nil and (joint.Part0 == sword or joint.Part1 == sword)) then
                tagHumanoid(humanoid, vPlayer)
                humanoid:TakeDamage(damage)
                wait(1)
                untagHumanoid(humanoid)
            end
        end


    end
end


function tagHumanoid(humanoid, player)
    if not humanoid:FindFirstChild("creator") then
        local creator_tag = Instance.new("ObjectValue")
        creator_tag.Value = player
        creator_tag.Name = "creator"
        creator_tag.Parent = humanoid
        print(player)
    end
end

function untagHumanoid(humanoid)
    if humanoid ~= nil then
        local tag = humanoid:findFirstChild("creator")
        if tag ~= nil then
            tag.Parent = nil
        end
    end
end


function attack()
    damage = slash_damage
    SlashSound:play()
    local anim = Instance.new("StringValue")
    anim.Name = "toolanim"
    anim.Value = "Slash"
    anim.Parent = Tool
end

function lunge()
    damage = lunge_damage

    LungeSound:play()

    local anim = Instance.new("StringValue")
    anim.Name = "toolanim"
    anim.Value = "Lunge"
    anim.Parent = Tool


    force = Instance.new("BodyVelocity")
    force.velocity = Vector3.new(0,10,0) --Tool.Parent.Torso.CFrame.lookVector * 80
    force.Parent = Tool.Parent.Torso
    wait(.25)
    swordOut()
    wait(.25)
    force.Parent = nil
    wait(.5)
    swordUp()

    damage = slash_damage
end

function swordUp()
    Tool.GripForward = Vector3.new(-1,0,0)
    Tool.GripRight = Vector3.new(0,1,0)
    Tool.GripUp = Vector3.new(0,0,1)
end

function swordOut()
    Tool.GripForward = Vector3.new(0,0,1)
    Tool.GripRight = Vector3.new(0,-1,0)
    Tool.GripUp = Vector3.new(-1,0,0)
end

function swordAcross()
    -- parry
end


Tool.Enabled = true
local last_attack = 0
function onActivated()

    if not Tool.Enabled then
        return
    end

    Tool.Enabled = false

    local character = Tool.Parent;
    local humanoid = character.Humanoid
    if humanoid == nil then
        print("Humanoid not found")
        return 
    end

    t = r.Stepped:wait()

    if (t - last_attack < .2) then
        lunge()
    else
        attack()
    end

    last_attack = t

    --wait(.5)

    Tool.Enabled = true
end


function onEquipped()
    UnsheathSound:play()
end


script.Parent.Activated:connect(onActivated)
script.Parent.Equipped:connect(onEquipped)


connection = sword.Touched:connect(blow)

Then the handle, mesh, etc. You're done!



Hope it helps!

Ad
Log in to vote
2
Answered by
ImageLabel 1541 Moderation Voter
9 years ago

You would have to create a tag of some sort, that will be temporarily parented to the possible victim's Humanoid whenever they are struck by your sword. ROBLOX's gear already have a built-in system that does pretty much what was this -- (CreatorValue). The assassin's player object would be linked as that tag's Value property.

In your leaderboard statistics handler, you would have to refer to the tag's Value to get the murderer, and award them points.


You can refer to this question for help creating the CreatorValue.

Here below is how you would go about getting that value, and using it for rewards and leaderstat manipulation.

local players = game:GetService('Players')
print(players)
players.PlayerAdded:connect(function (player)
    player.CharacterAdded:connect(function (character)
    local humanoid = character:WaitForChild('Humanoid')
    -- waits for humanoid after character and player are
    -- added
        print(player, character)
        humanoid.Died:connect(function ()
            --Humanoid dies
            print(died)
            local list = humanoid:GetChildren()
            -- list of all children of humanoid

            for i = 1, #list do
            --iterate
                if list[i].Name == 'CreatorValue' then
                -- if value at iterator is CreatorValue
                    local suspect = list[i].Value
                    print(suspect:GetFullName())
                    -- suspect is murderer
                    -- award suspect

                    -- player is dead
                    -- do something with player
                end
            end
        end)
    end)
end)
0
do i just do game.Players[suspect].Clashbux.Value = game.Players[suspect].Clashbux.Value + 20 to award? Operation_Meme 890 — 9y
0
No, suspect already is the `Player`, so just do "suspect.Clashbux.Value...." ImageLabel 1541 — 9y
0
kk Operation_Meme 890 — 9y
0
You tried man.. EzraNehemiah_TF2 3552 — 9y
0
Lol your answer was unnecessary and inefficient --all you had to do was simply handle point awarding using the creator value :/ ImageLabel 1541 — 8y

Answer this question