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)
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!
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.
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)