-
I want to make a module script that can easily remove / equip custom armor models for a RPG game.
-
The problem is everything works fine but sometimes the legs in the armor model don’t weld to the character and sometimes it does. Also there are no error messages
-
I have tried changing the orientations of the parts in the armor model and changing whether they weld to the lower or upper leg parts in the character but it only works on certain models.
My Server Script
local Module = require(game.ReplicatedStorage.ArmorModule) -- Require Module
-- Replicated Storage
local rs = game.ReplicatedStorage or game:GetService("ReplicatedStorage")
game.Players.PlayerAdded:Connect(function(plr) -- When Player Joins
local char = plr.Character or plr.CharacterAdded:Wait()
-- The Armor Is In rs.ARMORS
Module:MakeArmor(char, rs.ARMORS:FindFirstChild('Steel')) -- The legs on this don't weld
wait(10)
Module:MakeArmor(char, rs.ARMORS:FindFirstChild('Bone')) -- The legs on this weld fine
end)
My Module Script
local ArmorModule = {} -- Module Name
--Remove old armour.
function ArmorModule.RemoveArmor(character)
-- Search Through Character For The Names Of Armors
for i,v in pairs(character:GetChildren()) do
if not v:IsA("BasePart") and v:IsA("Model") then -- Makes Sure That Only Armor Models Are Deleted
if v.Name == "LeftUpperArm" then
v:Remove()
elseif v.Name == "LeftLowerArm" then
v:Remove()
elseif v.Name == "RightUpperArm" then
v:Remove()
elseif v.Name == "RightLowerArm" then
v:Remove()
elseif v.Name == "UpperTorso" then
v:Remove()
elseif v.Name == "LowerTorso" then
v:Remove()
elseif v.Name == "LeftUpperLeg" then
v:Remove()
elseif v.Name == "LeftLowerLeg" then
v:Remove()
elseif v.Name == "RightUpperLeg" then
v:Remove()
elseif v.Name == "RightLowerLeg" then
v:Remove()
end
end
end
end
local removearmor = ArmorModule.RemoveArmor
function ArmorModule:MakeArmor(character, armor)
removearmor(character) -- Removes the already equipped armor
local armorpart = armor:Clone()
-- Searches through the main armor model
for a, b in pairs(armorpart:GetChildren()) do
print(b.Name) -- This prints
-- Seaches through the model parts
for i,v in pairs(b:GetChildren()) do
print(v.Name) -- This prints
v.Anchored = false
v.CanCollide = false
if v.Name == 'Middle' then
v.Transparency = 1
-- Weldy Things
local Y = Instance.new("Weld")
Y.Part0 = character[b.Name]
Y.Part1 = b.Middle
Y.C0 = CFrame.new(0, 0, 0)
Y.Parent = Y.Part0
else
-- More Weldy Things
local W = Instance.new("Weld")
W.Part0 = b.Middle
W.Part1 = v
local CJ = CFrame.new(b.Middle.Position)
local C0 = b.Middle.CFrame:inverse()*CJ
local C1 = v.CFrame:inverse()*CJ
W.C0 = C0
W.C1 = C1
W.Parent = b.Middle
end
end
--Parents The Finished Armor Model
b.Parent = character
end
end
return ArmorModule
If You Need The Armor Folder With The Armor Models (It only works on the Bone armor and not the Steel armor however when I remove the meshes from the Bone armor the legs don’t work)
If I made any mistakes in the code or if its not optimized then do tell me. Any example scripts would be greatly appreciated and thanks for the help in advance.