Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

how do I fix roblox sword damage not updating?

I made a sword that changes damage based on a value called pwr. You can increase the value by killing a npc. But when it increases it only increases once even though the value changes. I found out if I changed the value before starting the game then the damage is the same as the value but it wont increase even when the value is increasing.

this is the part of the script I used for custom sword damage.

DamageValues = { BaseDamage = 1, SlashDamage = script.Parent.pwr.Value, LungeDamage = script.Parent.pwr.Value * 2 }

this is the whole script

Tool = script.Parent Handle = Tool:WaitForChild("Handle") local dam = script.Parent.pwr

function Create(ty) return function(data) local obj = Instance.new(ty) for k, v in pairs(data) do if type(k) == 'number' then v.Parent = obj else obj[k] = v end end return obj end end

local BaseUrl = "rbxassetid://"

Players = game:GetService("Players") Debris = game:GetService("Debris") RunService = game:GetService("RunService")

DamageValues = { BaseDamage = 1, SlashDamage = script.Parent.pwr.Value, LungeDamage = script.Parent.pwr.Value * 2 }

--For R15 avatars Animations = { R15Slash = 522635514, R15Lunge = 522638767 }

Damage = DamageValues.BaseDamage

Grips = { Up = CFrame.new(0, 0, -1.70000005, 0, 0, 1, 1, 0, 0, 0, 1, 0), Out = CFrame.new(0, 0, -1.70000005, 0, 1, 0, 1, -0, 0, 0, 0, -1) }

Sounds = { Slash = Handle:WaitForChild("SwordSlash"), Lunge = Handle:WaitForChild("SwordLunge"), Unsheath = Handle:WaitForChild("Unsheath") }

ToolEquipped = false

--For Omega Rainbow Katana thumbnail to display a lot of particles. for i, v in pairs(Handle:GetChildren()) do if v:IsA("ParticleEmitter") then v.Rate = 20 end end

Tool.Grip = Grips.Up Tool.Enabled = true

function IsTeamMate(Player1, Player2) return (Player1 and Player2 and not Player1.Neutral and not Player2.Neutral and Player1.TeamColor == Player2.TeamColor) end

function TagHumanoid(humanoid, player) local Creator_Tag = Instance.new("ObjectValue") Creator_Tag.Name = "creator" Creator_Tag.Value = player Debris:AddItem(Creator_Tag, 2) Creator_Tag.Parent = humanoid end

function UntagHumanoid(humanoid) for i, v in pairs(humanoid:GetChildren()) do if v:IsA("ObjectValue") and v.Name == "creator" then v:Destroy() end end end

function Blow(Hit) if not Hit or not Hit.Parent or not CheckIfAlive() or not ToolEquipped then return end local RightArm = Character:FindFirstChild("Right Arm") or Character:FindFirstChild("RightHand") if not RightArm then return end local RightGrip = RightArm:FindFirstChild("RightGrip") if not RightGrip or (RightGrip.Part0 ~= Handle and RightGrip.Part1 ~= Handle) then return end local character = Hit.Parent if character == Character then return end local humanoid = character:FindFirstChildOfClass("Humanoid") if not humanoid or humanoid.Health == 0 then return end local player = Players:GetPlayerFromCharacter(character) if player and (player == Player or IsTeamMate(Player, player)) then return end UntagHumanoid(humanoid) TagHumanoid(humanoid, Player) humanoid:TakeDamage(Damage) end

function Attack() Damage = DamageValues.SlashDamage Sounds.Slash:Play()

if Humanoid then
	if Humanoid.RigType == Enum.HumanoidRigType.R6 then
		local Anim = Instance.new("StringValue")
		Anim.Name = "toolanim"
		Anim.Value = "Slash"
		Anim.Parent = Tool
	elseif Humanoid.RigType == Enum.HumanoidRigType.R15 then
		local Anim = Tool:FindFirstChild("R15Slash")
		if Anim then
			local Track = Humanoid:LoadAnimation(Anim)
			Track:Play(0)
		end
	end
end	

end

function Lunge() Damage = DamageValues.LungeDamage

Sounds.Lunge:Play()

if Humanoid then
	if Humanoid.RigType == Enum.HumanoidRigType.R6 then
		local Anim = Instance.new("StringValue")
		Anim.Name = "toolanim"
		Anim.Value = "Lunge"
		Anim.Parent = Tool
	elseif Humanoid.RigType == Enum.HumanoidRigType.R15 then
		local Anim = Tool:FindFirstChild("R15Lunge")
		if Anim then
			local Track = Humanoid:LoadAnimation(Anim)
			Track:Play(0)
		end
	end
end	
--[[
if CheckIfAlive() then
	local Force = Instance.new("BodyVelocity")
	Force.velocity = Vector3.new(0, 10, 0) 
	Force.maxForce = Vector3.new(0, 4000, 0)
	Debris:AddItem(Force, 0.4)
	Force.Parent = Torso
end
]]

wait(0.2)
Tool.Grip = Grips.Out
wait(0.6)
Tool.Grip = Grips.Up

Damage = DamageValues.SlashDamage

end

Tool.Enabled = true LastAttack = 0

function Activated() if not Tool.Enabled or not ToolEquipped or not CheckIfAlive() then return end Tool.Enabled = false local Tick = RunService.Stepped:wait() if (Tick - LastAttack < 0.001) then Attack() else Lunge() end LastAttack = Tick --wait(0.5) Damage = DamageValues.BaseDamage local SlashAnim = (Tool:FindFirstChild("R15Slash") or Create("Animation"){ Name = "R15Slash", AnimationId = BaseUrl .. Animations.R15Slash, Parent = Tool })

local LungeAnim = (Tool:FindFirstChild("R15Lunge") or Create("Animation"){
	Name = "R15Lunge",
	AnimationId = BaseUrl .. Animations.R15Lunge,
	Parent = Tool
})
Tool.Enabled = true

end

function CheckIfAlive() return (((Player and Player.Parent and Character and Character.Parent and Humanoid and Humanoid.Parent and Humanoid.Health > 0 and Torso and Torso.Parent) and true) or false) end

function Equipped() Character = Tool.Parent Player = Players:GetPlayerFromCharacter(Character) Humanoid = Character:FindFirstChildOfClass("Humanoid") Torso = Character:FindFirstChild("Torso") or Character:FindFirstChild("HumanoidRootPart") if not CheckIfAlive() then return end ToolEquipped = true Sounds.Unsheath:Play() end

function Unequipped() Tool.Grip = Grips.Up ToolEquipped = false end

Tool.Activated:Connect(Activated) Tool.Equipped:Connect(Equipped) Tool.Unequipped:Connect(Unequipped)

Connection = Handle.Touched:Connect(Blow)

1 answer

You need to update the damage every time it changes, right now it only updates one time.

Something like this. (this script probably wont work cos i dum 0:)

DamageValues = { BaseDamage = 1, SlashDamage = script.Parent.pwr.Value, LungeDamage = script.Parent.pwr.Value * 2 }

script.Parent.pwr:GetPropertyChangedSignal'Value':Connect(function()
	DamageValues.BaseDamage = 1
	DamageValues.SlashDamage = script.Parent.pwr.Value
	DamageValues.LungeDamage = script.Parent.pwr.Value * 2
end)

What if you did

local BaseDamage
local SlashDamage
local LungeDamage

game:GetService'RunService'.Heartbeat:Connect(function()
	BaseDamage = 1
	SlashDamage = script.Parent.pwr.Value or 1
	LungeDamage = script.Parent.pwr.Value * 2 or 1
end)

--[[
also edit rest of script so theres no 'DamageValues' before basedamage, slash, and lunge
]]

5 comments

0

I tried making a script like that and then it would not let me use the sword.

0

wot the error

0

swordscript line 25 stack end

0

But I already fixed it. I had to make it a while true do loop.

0

o ok

This discussion is preserved as it was. New answers, comments, and votes are closed.