First off, I will start by saying that I am an inexperienced scripter, but I have a background in web design. Being that I just started developing on Roblox a week ago I have been breaking down many models and learning the scripts, editing to see what makes them tick etc.
I am having troubles figuring something out. After reading countless threads I have seen many people frown on free models, so please excuse me from the get go, but alongside reading a great deal, I have been using some free models (KittehRPG) to learn through trial and error. I do use Ro-Defender, and have really limited my usage beyond figuring out these starting blocks so I can do more on my own through time.
I have had many successes over the past week, but this one here is really stumping me. I have two swords, along with two different sword scripts, and one has much improved animations. I have been trying to take those animations and drop them into the old weapon, and then applying the new animations to the old weapon.
I know they work with the model, because if I copy the improved animations themselves, as well as the script that pairs with them, and then place them in the old weapon (deleting my other script from the old model), it works flawlessly and the old weapon then uses the new animations. Unfortunately it will not then use any of my damage modifiers, xp evaluators, etc.
After tirelessly attempting to take components of the new, improved script, as well as the new animations, and applying only the animation portions of the script, while removing the old animations, and also leaving the other portions of the script still functioning, I have been unsuccessful.
Now, I already can speculate what components are triggering the animations, but after many attempts to pinpoint and edit only the needed elements, I have not had any luck. Here is the old script elements that I feel are triggering the animations:
function attack()
local anim = Instance.new("StringValue")
anim.Name = "toolanim"
anim.Value = "Slash"
anim.Parent = Tool
end
function lunge()
local anim = Instance.new("StringValue")
anim.Name = "toolanim"
anim.Value = "Lunge"
anim.Parent = Tool
force = Instance.new("BodyVelocity")
force.velocity = Vector3.new(0,4000,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
function onActivated()
if not Tool.Enabled then return end
Tool.Enabled = false
local character = Tool.Parent;
local humanoid = character.Humanoid
if humanoid == nil then return end
attack()
wait(1)
Tool.Enabled = true
end
function onEquipped()
end
script.Parent.Activated:connect(onActivated)
script.Parent.Equipped:connect(onEquipped)
connection = sword.Touched:connect(blow)
Here is the script that comes from the improved weapon:
sp = script.Parent
r = game:service("RunService")
debris = game:GetService("Debris")
anims = {"RightSlash","LeftSlash","OverHeadSwing","LeftSwingFast","RightSwingFast"}
Sounds = {{145180512, "Metal"}, {145180522, "Metal"}, {145180533, "Wood"}, {145180541, "Wood"}, {145180529, "Slash"}, {145180550, "Slash"}}
WoodSounds = {}
MetalSounds = {}
SlashSounds = {}
basedamage = 10
slashdamage = 50
swingdamage = 60
damage = basedamage
sword = sp:WaitForChild('Handle')
sp.Taunting.Value = false
local UnsheathSound = Instance.new("Sound")
UnsheathSound.SoundId = "http://www.roblox.com/Asset/?id=145180523"
UnsheathSound.Parent = sword
UnsheathSound.Volume = .2
for _,Sound in pairs(Sounds) do
local S = Instance.new("Sound")
S.SoundId = "http://www.roblox.com/Asset/?id=" .. Sound[1]
S.Parent = sword
S.Volume = .2
if Sound[2] == "Wood" then
table.insert(WoodSounds, S)
elseif Sound[2] == "Metal" then
table.insert(MetalSounds, S)
elseif Sound[2] == "Slash" then
table.insert(SlashSounds, S)
end
end
function waitfor(parent,name)
while true do
local child = parent:FindFirstChild(name)
if child ~= nil then
return child
end
wait()
end
end
waitfor(sp,"Taunting")
waitfor(sp,"RunAnim")
local Halt = false;
function blow(hit)
if hit:findFirstChild("IsShield") then
damage = 0
pcall(function()
if hit.IsShield.Value == "Wood" then
WoodSounds[math.random(#WoodSounds)]:Play()
elseif hit.IsShield.Value == "Metal" then
MetalSounds[math.random(#MetalSounds)]:Play()
else
WoodSounds[math.random(#WoodSounds)]:Play()
end
end);
return
end
if Halt then return end;
Halt = true;
if hit.Parent ~= nil then
local humanoid = hit.Parent:findFirstChild("Humanoid")
local vCharacter = sp.Parent
if vCharacter ~= nil then
local vPlayer = game.Players:playerFromCharacter(vCharacter)
if vPlayer ~= nil then
local hum = vCharacter:findFirstChild("Humanoid")
if humanoid ~= nil then
if hum ~= nil and humanoid ~= hum then
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(.3)
end
end
end
end
end
end
end
Halt = false;
end
function tagHumanoid(humanoid,player)
for i,v in ipairs(humanoid:GetChildren()) do
if v.Name == "creator" then
v:Destroy()
end
end
local creator_tag = Instance.new("ObjectValue")
creator_tag.Value = player
creator_tag.Name = "creator"
creator_tag.Parent = humanoid
debris:AddItem(creator_tag,1)
end
sp.Enabled = true
function onActivated()
if sp.Enabled and not sp.Taunting.Value then
sp.Enabled = false
local character = sp.Parent;
local humanoid = character.Humanoid
if humanoid == nil then
print("Humanoid not found")
return
end
SlashSounds[math.random(#SlashSounds)]:Play()
local newanim = anims[math.random(1,#anims)]
while newanim == sp.RunAnim.Value do
newanim = anims[math.random(1,#anims)]
end
sp.RunAnim.Value = newanim
if newanim == "OverHeadSwing" then
damage = swingdamage
else
damage = slashdamage
end
wait(.75)
damage = basedamage
sp.Enabled = true
end
end
function onEquipped()
UnsheathSound:play()
end
sp.Activated:connect(onActivated)
sp.Equipped:connect(onEquipped)
connection = sword.Touched:connect(blow)
So to reiterate, how can I take ONLY the animation portions from the improved script and replace the old animation triggers from the old script?
The new, improved script is confusing, because it seemingly adds damage modifiers in with the animations, and this is making it very complicated pruning out ONLY the animation modifiers to apply into the old model, as I wish to retain the damage values in the old code.
Sorry for my long-winded explanation, I am just trying to be as detailed as possible as this is my first post here, and I am looking for somebody to get me on the right track. Through the past week I came across many hardships, but I have done mass trial and error and have had many successes. This one is just not co-operating.
Thanks for any help or guidance.

29 comments
I ment publishing the swords as free models, so I could take a look at them (right click -> save to roblox). Anyways, are you sure that the new sword doesn't have any other scripts?
Ok I see what you mean now. I have published both as free models now. You can find the sword with the improved animations at the following link: https://www.roblox.com/library/750180197/Standard-Sword-with-Animations ~ and you can find the old wooden sword with the old, fairly poor animation here: https://www.roblox.com/library/750180844/Wooden-Sword ~ Thanks again!
Oh my, these scripts are such a mess.
I was hoping I could explain everything. I can't. There were way too many changes I had to make. I suggest you make your own sword, from scratch. These scripts had a lot of junk and deprecated stuff inside of them. This is why you shouldn't learn from free models. Anyways, here is the fixed (?) sword, with the fancy animations and some helpful comments: https://www.roblox.com/library/750408641/Jed
This is fantastic work, I can't thank you enough and I loved the "nopenopenope" comment, haha! Two quick things: #1 - The sword no longer has sounds. Is there a way to implement the unsheath and swinging sounds that the old model has? #2 - The other sword also sort of spins/rotates in hand when attacking. I did like that. Can that animation be placed in? Really appreciate everything you've done!!!
Well, if you take a look at the "LocalGui" script of the iron sword, there is a function called "spinsword" or something like that. Just take the function and the variable declarations from the beggining of the script, move all that to my "Animate" script in the wooden sword, and call it wherever you want. For the sounds - my "Animate" script comes with an attack, equipped and unequipped function.
Play the sounds inside these functions. Detailed tutorial (official): http://wiki.roblox.com/index.php?title=Sounds
By the way, the sword spinning is a scripted animation.
Ok thanks, so far I got the unsheath sound working, so that is a start. The trouble I am having is with the grip commands, as well as playing the slash sounds at all. This current edit of your script does the unsheath sound now, but nothing else.
https://pastebin.com/hxsfSmwJ - So with the other sword it has all these grip commands, etc. any time I try to paste them in to trigger the spin, the sword stops working at all. Also not too sure where to place those slash sounds to be occurring at random.
Output? Errors? Warnings?
For the sounds - don't try to copy the original creator's overcomplicated method - do like I did with the animations. Place some sounds you want inside a folder inside of handle, put them into an array with GetChildren(). You got the Play() part right though :)
Darn, I am totally lost. For the last four hours I have tried everything so I could return with some success. Tried your method, got as far as creating a folder. Did not know where to start the array or how to write it properly. As for spin, there is no output error from the code I placed above. It just doesn't trigger.
I'm way over my head here. Sorry for being such a rookie. I can't even figure out how to get these sounds to work, I read over that tutorial, but when working it into my script I have no clue. Same with the spin animation.
With the spin animation, if I use the script above, the sword still works, and does the unsheath sound, but no other sounds, and the spin animation does not work, nor print an error. If I move parts of where I pasted the spin animation, or add other code from the other source, the sword equips, but does not swing at all.
You have to call spinsword(spintime) somewhere.
You might want to go back to http://wiki.roblox.com/index.php?title=AllTutorials
https://pastebin.com/rBYu7K7b
Thanks, will look over this tonight and get back to you soon.
Welp, I added the folder to handle and added and named sounds in it. Then I added this script inside the handle: https://pastebin.com/tA7RbDjM ~ It seems the sword swings, but no sounds, and no output error. I will need to spend more time with the Lua tutorials. Obviously I can not follow these directions and am off-track in the tiniest details.
Regarding having to "call spinsword(spintime) somewhere", I tried looking up calling items, and tried adding it into the function attack call in your animate script. But I get an error. Here is the script edit I did trying to call the function: https://pastebin.com/ERQu7exR
Although the sword still equips and plays unsheath sound, as well as swing, it outputs this error on every swing: 21:22:16.921 - Stack Begin 21:22:16.922 - Script 'Players.Player1.Backpack.Wooden Sword.Animate', Line 30 21:22:16.922 - Stack End 21:22:17.795 - Players.Player1.Backpack.Wooden Sword.Animate:30: attempt to call global 'spinsword' (a nil value)
Also, I just want to say thanks again for all of your help. I appreciate that you aren't just handing me the script, but taking the time to educate me through my errors. I have a lot to learn, obviously, but I do believe this is giving me some good starter blocks, and I hope that in the end I can get both of these working.
http://wiki.roblox.com/index.php?title=Function#Using_Functions
Based on this article, as well as regarding the sound, I have no clue why these are not working. As far as I can tell, that function on spinsword is being called and should trigger: https://pastebin.com/1hhr3VSa - Yet nothing happens. If I add a new function attack or on mouse click, it stops working. Super frustrating.
The sound, there is no error. I placed this script: https://pastebin.com/NNxeaPr4 ~ inside the handle, along with the folder of the two slash sounds. Nothing happening at all. What am I doing wrong? I am following these very basic links you are posting, but when editing these scripts there are too many things unexplained in these articles pertaining to my circumstances.
You're not calling spinsword(), only declaring it, unless I missed something. In the second script, you never call nor connect onActivated(), you just declare it.
Stop trying to learn using free models. You don't even understand the basics. https://scriptinghelpers.org/guides/lua-quick-start-guide | http://wiki.roblox.com/?title=Scripting
Programical, if you're out there - you really helped me learn so much through this series of posts / the scripts we worked on. Thank you!