Requires your help to make Techno Studio's Armor system work (the video of it was uploaded 2 months ago..)

hello there yet again! I’m not sure if you does remember me in this category of the devforum, but I’m asking you guys for help with armor system made by Techno Studio (I’m so sorry @MikeartsRBLX I’m literally garbage at actually making scripts by myself so I can’t basically make armor system alone :sob:)
the video uploaded by Techno Studio is this video right here.
but there is some problems, the original author of that uncopylocked game I used for make armor system haesn’t finished their game for some reasons despite he used finished and functioning game when he was showcasing for his video, and the worse problem is that techno studio’s discord server (which I had to take small efforts to get into there since his other invites other then one invite he left in one of his comment) got raided in like August 25 (estimated) and I think the raider did removed majority of channels in the raiding process of Techno Studio’s discord server so that discord server was left rotten for like months…

so basically I want you to help me find the problems in this Roblox Place File game, I’ll show you some of them known problems I found in progress. (and I edited some of the lines while I was figuring the game script alone)

  1. the Textbutton that is used for click[C key] and click another button[E key] inside after clicking previous one and obtaining item is not working, current reason why the C key button isn’t bringing E key button and F key button is unknown for right now.

  2. at some point when player clicked play button in test section and game is ran, the output tab shows error text that redirects the player into Line 12 of the script called “Event” that is inside ServerScriptService, I does not know what makes this issue happen, but I’m wishing you that you could reupload that roblox place file game and enable http requests and test the game for fix it…

--scripts of the "Event" script inside ServerScriptService:


local function RespawnCharacter(plr)
	local character = game.Workspace[plr.Name]
	local humanoid = character:WaitForChild("Humanoid")
	local AbilityModule = require(game.ReplicatedStorage.Armors.Abilities)
	for i,v in pairs(game.ServerStorage.Inventory[plr.Name].Ability:GetChildren()) do
		if AbilityModule[v.Name].HumanoidActive == true then
			humanoid[AbilityModule[v.Name].HumanoidName] += v.Value
		end
	end
	for i,v in pairs(game.ServerStorage.Inventory[plr.Name].Armor:GetChildren()) do
		if v.CurrentArmor.Value ~= "" then
			if game.ServerStorage.Inventory[plr.Name].Armors[v.CurrentArmor.Value].RigValue.Value == "R15" then
				local Part = game.ReplicatedStorage.Armors[v.CurrentArmor.Value]["R15"][v.Name]:Clone()
				if Part.Name ~= "Helmet" then
					Part.Parent = game.Workspace[plr.Name]
					for i,v in pairs(Part:GetChildren()) do
						local weld= Instance.new("Weld")
						if v:IsA("BasePart") or v:IsA("UnionOperation") or v:IsA("Part") or v:IsA("MeshPart") then
							local characterPart = character:FindFirstChild(v.Name)

							weld.Part0 = characterPart
							weld.Part1 = Part[v.Name]
							weld.Parent = Part

						end
					end
				else
					local Accessory = Instance.new("Hat")
					for i,v in pairs(Part:GetChildren()) do
						local Weld = Instance.new("WeldConstraint", v)
						for i,f in pairs(character:GetChildren()) do
							if f:IsA("Accessory") then
								f:Destroy()
							end
						end
						local focus = Part.Handle
						Accessory.Parent = game.Workspace[plr.Name]
						local AccessoryWeld = Instance.new("Weld", focus)
						v.Parent = Accessory
						AccessoryWeld.Part0 = focus
						AccessoryWeld.Part1 = character.Head
						Weld.Part0 = v
						Weld.Part1 = focus
						Accessory.Name = "Helmet"
					end
				end
			elseif game.ServerStorage.Inventory[plr.Name].Armors[v.CurrentArmor.Value].RigValue.Value == "R6" then
				local Part = game.ReplicatedStorage.Armors[v.CurrentArmor.Value]["R6"][v.Name]:Clone()
				if Part.Name ~= "Helmet" then
					Part.Parent = game.Workspace[plr.Name]
					for i,v in pairs(Part:GetChildren()) do
						local weld= Instance.new("Weld")
						if v:IsA("BasePart") or v:IsA("UnionOperation") then
							local characterPart = character:FindFirstChild(v.Name)
							if characterPart then
								weld.Part0 = characterPart
								weld.Part1 = Part[v.Name]
								weld.Parent = Part
							end
						end
					end
				else
					local Accessory = Instance.new("Hat")
					for i,v in pairs(Part:GetChildren()) do
						local Weld = Instance.new("WeldConstraint", v)
						for i,f in pairs(character:GetChildren()) do
							if f:IsA("Accessory") then
								f:Destroy()
							end
						end
						local focus = Part.Handle
						Accessory.Parent = game.Workspace[plr.Name]
						local AccessoryWeld = Instance.new("Weld", focus)
						v.Parent = Accessory
						AccessoryWeld.Part0 = focus
						AccessoryWeld.Part1 = character.Head
						Weld.Part0 = v
						Weld.Part1 = focus
						Accessory.Name = "Helmet"
					end
				end
			end
		end
	end
end
game.Players.PlayerAdded:Connect(function(plr)
	wait(4.3)
	if plr.PlayerGui:FindFirstChild("Inventory") then

	
		game.Players[plr.Name].PlayerGui.Inventory.Loading.Visible = true
		game.Players[plr.Name].PlayerGui.Inventory.Inventory.LoadingFrame.Visible = true

	if game.ServerStorage.Inventory[plr.Name]:FindFirstChild("Tools") then
	
		local Storage= game.ServerStorage.Inventory[plr.Name].Tools
		if Storage.Slot1.ToolName.Value == "" then
		else
			local clone = game.ReplicatedStorage.Tools[Storage.Slot1.ToolName.Value]:Clone()
			clone.Parent = plr.Backpack
		end
		------------------------------------------
		if Storage.Slot2.ToolName.Value == "" then
		else
			local clone = game.ReplicatedStorage.Tools[Storage.Slot2.ToolName.Value]:Clone()
			clone.Parent = plr.Backpack
		end
		------------------------------------------
		if Storage.Slot3.ToolName.Value == "" then
		else
			local clone = game.ReplicatedStorage.Tools[Storage.Slot3.ToolName.Value]:Clone()
			clone.Parent = plr.Backpack
		end
		
		end
		RespawnCharacter(plr)
		game.Players[plr.Name].PlayerGui.Inventory.Loading.Visible = false
		game.Players[plr.Name].PlayerGui.Inventory.Inventory.LoadingFrame.Visible = false
end
end)

--- EVENTS PLAY

game.ReplicatedStorage.Events.ItemsInfo.OnServerEvent:Connect(function(plr, frame, Write)
	if Write == "ItemInfo" then
		
	local Module = require(game.ReplicatedStorage.Items)

	local Info = plr.PlayerGui.Inventory.Inventory.Info
	local Iframe = Info.Infos
	Iframe.ItemName.TextLabel.Text = frame.Name 
		-----------
		Iframe.Description.Visible = true
		Iframe.ItemName.Visible = true
		Iframe.Type.Visible = true
		Iframe["ArmorName"].Visible = false
		-----------
	Iframe.Description.TextLabel.Text = Module[frame.Name].Description
		Iframe.Type.TextLabel.Text = Module[frame.Name].Type
	elseif Write == "ItemInfo2" then

		local Module = require(game.ReplicatedStorage.Items)

		local Info = plr.PlayerGui.Inventory.Inventory.Info
		local Iframe = Info.Infos
		Iframe.ItemName.TextLabel.Text = frame.ToolName.Value
		
		if Module[frame.ToolName.Value] then
			Iframe.Description.TextLabel.Text = Module[frame.ToolName.Value].Description
			Iframe.Type.TextLabel.Text = Module[frame.ToolName.Value].Type
		end
	elseif Write == "ItemInfoClothes" then
		local Module = require(game.ReplicatedStorage.Items)

		local Info = plr.PlayerGui.Inventory.Inventory.Info
		local Iframe = Info.Infos
		Iframe.ItemName.TextLabel.Text = frame.ClotName.Value
		if Module[frame.ClotName.Value] then
			Iframe.Description.TextLabel.Text = Module[frame.ClotName.Value].Description
			Iframe.Type.TextLabel.Text = Module[frame.ClotName.Value].Type
		end
	elseif Write == "ArmorPartInfo" then

		local Info = plr.PlayerGui.Inventory.Inventory.Info
		local View = plr.PlayerGui.Inventory.Inventory.View1
		local Iframe = Info.Infos
		local Module = require(game.ReplicatedStorage.Armors[frame.ArmorName.Value].ArmorModule)
		Info.Infos.ArmorName.TextLabel.Text = frame.ArmorName.Value
		for i,v in pairs(Module[frame.Name]) do
			
			if Info.Infos:FindFirstChild(v.Name) then
				else
			local label = Instance.new("TextLabel")
			label.Size = UDim2.new(0.893, 0,0.145, 0)
			label.Font = Enum.Font.FredokaOne
			label.LayoutOrder = 2
			label.BackgroundColor3 = Color3.new(1, 1, 1)
			label.Name = v.Name
			label.TextScaled = true
			Instance.new("UICorner", label)
			local dw = Instance.new("UIStroke", label)
			dw.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
			dw.Thickness = 3
			if v.adding == true then
				label.Text = v.Name.." +"..v.Add
			else
				label.Text = v.Name.." -"..v.Add
			end
			label.Parent = Info.Infos
				end
				
		end
	elseif Write == "ArmorPartRefhlesh" then
		local Info = plr.PlayerGui.Inventory.Inventory.Info
		local View = plr.PlayerGui.Inventory.Inventory.View1
		local Iframe = Info.Infos
		local Module = require(game.ReplicatedStorage.Armors[frame.ArmorName.Value].ArmorModule)
		Info.Infos.ArmorName.TextLabel.Text = frame.ArmorName.Value
		
		for i,v in pairs(Module[frame.Name]) do
			for i,c in pairs(Info.Infos:GetChildren()) do
				if c.Name == v.Name then
					c:Destroy()
				end
			end
		end
		end
	
end)
game.ReplicatedStorage.Events.ArmorsInfo.OnServerEvent:Connect(function(plr, frame, Write, CurArmor)
	if Write == "ArmorInfo" then

		local Module = require(game.ReplicatedStorage.Armors[CurArmor].ArmorModule)
		local Info = plr.PlayerGui.Inventory.Inventory.Info
		local Iframe = Info.Infos
		-----------
		Iframe.Description.Visible = false
		Iframe.ItemName.Visible = false
		Iframe.Type.Visible = false
		Iframe["ArmorName"].Visible = true
		-----------
		Iframe.ArmorName.TextLabel.Text = frame.Name 
		for i,v in pairs(Module[frame.Name]) do
			if Iframe:FindFirstChild(v.Name) then
				else
			local clonef = plr.PlayerGui.UIs.ArmorPowerTemplate:Clone()
			clonef.Name = v.Name
				if v.adding == true then
					
				clonef.TextLabel.Text = v.Name.." +"..v.Add
			else
				clonef.TextLabel.Text = v.Name.." -"..v.Add
			end
			clonef.Name = v.Name
			clonef.Parent = Iframe
			end
			end
	end
	
	if Write == "ArmorInfoRefhlesh" then
		local Module = require(game.ReplicatedStorage.Armors[CurArmor].ArmorModule)
		local Info = plr.PlayerGui.Inventory.Inventory.Info
		local Iframe = Info.Infos
		
		for i,v in pairs(Iframe:GetChildren()) do
			if v:FindFirstChild("ArmorAdd") then
				v:Destroy()
			end
		end
	end
end)



game.ReplicatedStorage.Events.ArmorRefresh.OnServerEvent:Connect(function(plr)
	print("connect")
	local armorgui = game.Players[plr.Name].PlayerGui.ArmorGui.ArmorFrame
	for i,v in pairs(armorgui.ArmorInfo.ArmorR.Arms.figure:GetChildren()) do
		if v.ClassName == "Model" then
			print(v)
			v:Destroy()
		end
	end
	
	for i,v in pairs(armorgui.ArmorInfo.ArmorR.Chest.figure:GetChildren()) do
		if v.ClassName == "Model" then
			print(v)
			v:Destroy()
		end
	end
	
	for i,v in pairs(armorgui.ArmorInfo.ArmorR.Legs.figure:GetChildren()) do
		if v.ClassName == "Model" then
			print(v)
			v:Destroy()
		end
	end
	armorgui.ArmorInfo.ArmorName.Value = ""
	armorgui.ArmorInfo.RigType.Value = ""
	armorgui.ArmorInfo.ArmorNamet.Text = "Armor Name"
end)

these are the issues I found while modifying Techno Studio’s Armor system, I suck at scripting so much that I couldn’t find more problems in there but I only hopes for this armor system to be fixed so I can release my first functioning RPG game on roblox, thank you so much for noticing my post, I’ll go ahead to sleep now, peace out

-mari

Do you have the script for the C key? Also I need more details, thanks

One thing I realized,

for i,v in pairs(game.ServerStorage.Inventory[plr.Name].Armor:GetChildren()) do

Are you using this to get the player inventory? IF so, this 100% won’t work so just make a separate Inventory inside of player and store stuff there.

for i,v in pairs(Player.Inventory.Armor:GetChildren()) do
         -- Code
end

I also have a separate inventory in ReplicatedStorage (don’t ask why it’s not in ServerStorage) and put every armor in there (Helmet, Chestplate, and Leggings) and an actual one inside of my ProfileService data so when the player is equipping an armor I would do checks to see if the armor the player has actually exists.

oh hello there! sorry that I couldn’t provide more infos such as actual roblox place file I were supposed to share in this post but I forgot to do it since when I wrote texts for that post I uploaded yesterday it was nighttime and I felt sleepy that I forgot to add roblox place file in the post :face_holding_back_tears:

so anyways, the script for C key (that is inside proximity prompt inside item model inside the file named “Items” inside workspace) is like this (before I show you script code of that script by lua code block text, proximity prompt that contains this following script’s property is:
KeyboardKeyCode = [C], HoldDuration = 1)

so all of these asides, here is the script codes of the C key Script, I suppose.

script.Parent.Triggered:Connect(function(plr)
	local BillBoard = plr.PlayerGui.Screenes
	
	local CItem = plr.PlayerGui.CurItem
	BillBoard.Screen.Buttons.ItemName.Text = script.Parent.Parent.Name
	plr.PlayerGui.CurItem.Value = script.Parent.Parent
	BillBoard.Adornee = script.Parent.Parent.UIPart
	BillBoard.Screen.InfoEButtonScript.Disabled= false
	BillBoard.Screen.InfoFButtonScript.Disabled = false
	script.Parent.Enabled = false
	BillBoard.Screen.Buttons.Info:TweenPosition(UDim2.new(0.1, 0,0.5, 0), 'Out', "Quad",0.30) 	BillBoard.Screen.Buttons.PickUp:TweenPosition(UDim2.new(0.568, 0,0.5, 0), 'Out', "Quad",0.30)BillBoard.Screen.Buttons.ItemName:TweenPosition(UDim2.new(0.34, 0,0.16, 0), 'Out', "Quad",0.30)
	wait(2)
	BillBoard.Screen.Buttons.Info:TweenPosition(UDim2.new(0.333, 0,1.002, 0), 'Out', "Quad",0.30)BillBoard.Screen.Buttons.PickUp:TweenPosition(UDim2.new(0.333, 0,1.002, 0), 'Out', "Quad",0.30)BillBoard.Screen.Buttons.ItemName:TweenPosition(UDim2.new(0.333, 0,1.002, 0), 'In', Enum.EasingStyle.Linear,0.30)
	wait(0.30)
	BillBoard.Screen.InfoEButtonScript.Disabled= true
	BillBoard.Screen.InfoFButtonScript.Disabled = true
	script.Parent.Enabled = true
	BillBoard.Adornee = BillBoard
	plr.PlayerGui.CurItem.Value = CItem
end)

oh yea and also this screenshot of where that script is located

and I’ve also used your script suggestion you posted on this topic, I don’t know if that changed something else but I’m hoping it did changed something for good.

so here is the roblox place file, it has been freshly saved to file from that Techno Studio’s Armor system testing game a minutes ago, and it would be awesome if you could help me improve this roblox place file game anytime soon, thank you so much.
Techno Studio’s Armor system refresh.rbxl (427.8 KB)

-mari

Did you modify the ProximityPrompt script? Did you delete some important stuff such as PlayerGui.CurItem or anything?

I am also a little bit confused with this script. I highly recommend to make your own system as modifying a pre-made one can be extremely difficult because you will encounter ALOT of errors and tons of trial and error.

hello there yet again! and basically I found new other armor system that functions simply with few scripts,
in this youtube video the uploader of that video explains how does that armor system would work, and I’ve tried that armor system in my own game and tried it by myself, it did worked fine and I added my custom torso armor into that system and it also worked nice after some fixes,

but there is maybe only two problem, the first problem is when player respawns, the script inside " game.StarterGui.Inventory.Main " was supposed to only generate folder “YourItems” and “EquippedItems” in only first time, but when player resets and respawns, the script does not know these two folders already exists inside game.Players and generate two of them inside game.Players again, and it completely breaks the armor system… :sob:

and second problem is that Armors that player own and Armors that player equipped which is inside “YourItems” folder and “EquippedItems” folder which is generated inside game.Players does not save at all, and I do not know how can I make armors inside these two respective folders save upon player’s reset or rejoin… ;-;

here, I will try to show you code of script in game.StarterGui.Inventory.Main and roblox place file as extra, and this armor system issue has been going around in me for atleast months now, this hurts…

--this script belongs inside path game.StarterGui.Inventory.Main in the roblox place file that is attached to this reply
--inventoryHandler script, what I want to fix in here is that two folders inside game.Players get added again despite these two folders already exists inside game.Players ,
--so I want you to make this script acknowledge that these two folders already exists inside game.Players and the script would use already existing two folders instead of creating new again in game.Players
--and it would be even more amazing if you made armors inside these two folders (YourItems folder, which is made for store armors that player obtained, and EquippedItems folder that is made for show what armor player have worn)
--would be saveable by Datastore system to remember what armor that player has obtained and equipped and in next respawn or rejoin player get their armors in inventory and armors that player equipped.. :pray:
local player = script.Parent.Parent.Parent.Parent
local ItemFolder = Instance.new("Folder",player)
ItemFolder.Name = "YourItems"
local EquippedFolder = Instance.new("Folder",player)
EquippedFolder.Name = "EquippedItems"

local CharacterProfile = script.Parent.CharacterViewer.Character

function SlotsLoader()
	local Collumn = 0
	local Row = 0
	for i, v in pairs(script.Parent.SlotHolder:GetChildren()) do
		if v:IsA("TextButton") and v.Name ~= "ItemPreview" then
			v:Destroy()
		end
	end
	for i, v in pairs(ItemFolder:GetChildren()) do
		local SlotClone = script.Parent.SlotHolder.ItemPreview:Clone()
		local cam = Instance.new("Camera")
		cam.Parent = SlotClone.ItemPreview
		SlotClone.ItemPreview.CurrentCamera = cam
		local Item = v:Clone()
		Item.Parent = SlotClone.ItemPreview
		cam.CFrame = CFrame.new(Item.Main.Position + Item.Main.CFrame.LookVector * 2, Item.Main.Position)

		SlotClone.Name = v.Name
		SlotClone.Text = v.Name
		SlotClone.Position = UDim2.new(0,Collumn*100,0,Row*100)
		SlotClone.Visible = true
		SlotClone.Parent = script.Parent.SlotHolder
		SlotClone.ItemPreview.Spin.Disabled = false
		Collumn = Collumn + 1
		if Collumn == 5 then
			Collumn = 0
			Row = Row + 1
		end

		SlotClone.MouseButton1Click:Connect(function()
			for i, x in pairs(game.ReplicatedStorage.Armors:GetDescendants()) do
				if x.Name == SlotClone.Text then
					if script.Parent.Armor:FindFirstChild(x.Parent.Name).ItemPreview:FindFirstChildOfClass("Model") == nil then
						x:Clone().Parent = EquippedFolder
						player.Character.Humanoid.MaxHealth += x.HealthBonus.Value
						player.Character.Humanoid.Health += x.HealthBonus.Value
						ItemFolder:FindFirstChild(SlotClone.Text):Destroy()
						for i, slots in pairs(SlotClone.Parent:GetChildren()) do
							if slots.Name ~= "ItemPreview" then
								slots:Destroy()
							end
						end
						SlotsLoader()
					end
					
				end
			end
		end)
	end
end

function ViewProfile(Armor,Action,ArmorParent)

	if Action == "Equip" then
		local Equipment = Armor:Clone()
		for x, descendant in pairs(Equipment:GetDescendants()) do
			if descendant:IsA("BasePart") then descendant.Anchored = false end
		end
		local bodyPart = CharacterProfile:FindFirstChild(ArmorParent.Name)
		Equipment:SetPrimaryPartCFrame(bodyPart.CFrame)

		local weld = Instance.new("WeldConstraint", Equipment.PrimaryPart)
		weld.Part0 = bodyPart
		weld.Part1 = Equipment.PrimaryPart
		Equipment.Parent = CharacterProfile
	else
		CharacterProfile:FindFirstChild(Armor):Destroy()
	end
end

ItemFolder.ChildAdded:Connect(function()
	SlotsLoader()
end)

for i, v in pairs(script.Parent.Armor:GetChildren()) do
	if v:IsA("TextButton") then
		v.MouseButton1Click:Connect(function()
			if v.ItemPreview:FindFirstChildOfClass("Model") then
				player.Character.Humanoid.MaxHealth -= v.ItemPreview:FindFirstChildOfClass("Model").HealthBonus.Value
				player.Character.Humanoid.Health -= v.ItemPreview:FindFirstChildOfClass("Model").HealthBonus.Value
				player.Character:FindFirstChild(v.ItemPreview:FindFirstChildOfClass("Model").Name):Destroy()
				v.ItemPreview.Spin.Disabled = true
				ViewProfile(v.ItemPreview:FindFirstChildOfClass("Model").Name,"UnEquip",false)
				v.ItemPreview:FindFirstChildOfClass("Model").Parent = ItemFolder
				SlotsLoader()
			end
		end)
	end
end

EquippedFolder.ChildAdded:Connect(function(Armor)
	for i, v in pairs(game.ReplicatedStorage.Armors:GetDescendants()) do
		if v.Name == Armor.Name and script.Parent.Armor:FindFirstChild(v.Parent.Name).ItemPreview:FindFirstChildOfClass("Model") == nil then
			local ArmorClone = Armor:Clone()
			local cam = Instance.new("Camera")
			cam.Parent = script.Parent.Armor:FindFirstChild(v.Parent.Name).ItemPreview
			script.Parent.Armor:FindFirstChild(v.Parent.Name).ItemPreview.CurrentCamera = cam
			ArmorClone.Parent = script.Parent.Armor:FindFirstChild(v.Parent.Name).ItemPreview
			cam.CFrame = CFrame.new(Armor.Main.Position + Armor.Main.CFrame.LookVector * 2, Armor.Main.Position)
			script.Parent.Armor:FindFirstChild(v.Parent.Name).ItemPreview.Spin.Disabled = false
			
			local Equipment = Armor:Clone()
			for x, descendant in pairs(Equipment:GetDescendants()) do
				if descendant:IsA("BasePart") then descendant.Anchored = false end
			end
			local bodyPart = player.Character:FindFirstChild(v.Parent.Name)
			Equipment:SetPrimaryPartCFrame(bodyPart.CFrame)

			local weld = Instance.new("WeldConstraint", Equipment.PrimaryPart)
			weld.Part0 = bodyPart
			weld.Part1 = Equipment.PrimaryPart
			Equipment.Parent = player.Character
			ViewProfile(Armor,"Equip",v.Parent)
		end
	end
end)

and also here is the roblox place file, I’m sorry that I’m keep posting my roblox place file as extra, but I really want to make this armor system work… :smiling_face_with_tear:
CodsterCoding Armor System(rblx studio).rbxl (376.5 KB)

thank you so much for reading this reply. -mari

Well about the EquippedItems and YourItems part when you equip the armor you are basically moving all armors from YourItems to EquippedItems not cloning it, which is why when you reset everything is gone. Also the folders clone when you respawn. You should do something like this:

if not player:FindFirstChild("EquippedItems") then
local Folder = Instance.new("Folder", Player)
Folder.Name = "EquippedItems
end

To avoid the script making a completely new folder whilst not knowing that there is already an existing one.

By the way you need to set up a datastore if you actually want the armors to save inside of the player’s folder upon, and what I recommend is using the normal DataStore or ProfileService.

And as for the GUI not detecting armor parts in folder after player respawned, what you need to do is just make some sort of loop that loops through the folder and if there is an armor part, then create a button on the GUI.

hey there ScottWho, your suggestion did worked, now the script detects if these two files I previously mentioned exists on game.Players and if it already exists, it will not generate another two of them again… but there is still an giant problem in here… the armor player owned and equipped before resetting/rejoining does not save at all, but I think it’s because for some reasons when player dies and respawned, the armor inventory gui in that test game gets broken, I have thought of this because when player respawns, the contents inside these two folders still remain, but player cannot wear armors or such from using these two folders with armor gui in that test game, and if player rejoins, the armor that player owned goes byebye until player retributes them again…

I’ve used chatgpt even through it would fumble the script most of the times, but I have used suggestions that chatgpt sent me, but I still had no luck, but maybe you can investigate the chat logs of this chatgpt conversation I made… to the chatGPT conversation (used for fix armor gui script)

and lastly, here is the renewed roblox place file here, nothing noteable other then the gui script detecting if these two folders already exists and the script will not generate these two folders while these two folders still exists inside… so here is the roblox place file… this is going sad today :frowning:
CodsterCoding Armor System Test game with new map(rblx studio).rbxl (753.5 KB)

thank you so much for reading again. -mari

1 Like

This looks pretty hard to fix, but I could make an armor system and send the file here if you want, but it’ll take time. It’s pretty easy, and requires welding, folder checking and datastore.

1 Like

thank you very much for trying to make an armor system for the armor system project, it would be so awesome if we could fix the armor system together with your new armor system :face_holding_back_tears:

-mari

I can do it solo but right now I don’t think I have time for that because I am also working on my own roblox project and doing coding 'n stuff. Hope you understand. In the meantime you can learn some coding or you can even search for more customizable armor systems out there.

1 Like

heyyy there, while you were working on your own roblox project with good amount of care and efforts, I was still struggling with armor GUI system in the holidays, I’ve tried my best with ChatGPT and telling ChatGPT AI to do not put code descriptions in middle of code lines, but there wasn’t any luck of fixing it alone… :sob:
link to my updated conversation with ChatGPT AI about armor system

and so, I didn’t found exact problem of it but I did find this error in the output, the error shows this text.
" DataStoreService: CantStoreValue: Cannot store Dictionary in data store. Data stores can only accept valid UTF-8 characters. API: SetAsync, Data Store: PlayerItemsDataStore "

I have researched much about this through, and it turns out we cannot put literal object model and such other then strings and such into Data Store, so what I wish to do is that when player obtains armor or equips armor, it adds up some values in datastore and when player character is spawned, the registered values in datastore grants back contents that was supposed to be inside folder that were supposed to be contained in Data Store, but I do not have intelligence to create that idea into reality…

so all of it asides, here is roblox place file again incase you would need that, it was 8:48pm when I was writing this reply, so see you in tomorrow, maybe.
-mari
CodsterCoding Armor System Test game with new map(rblx studio).rbxl (753.9 KB)

1 Like

One thing is, don’t rely on ChatGPT all the time, because most of the time the code will not work, and I will check out your game in the weekends

1 Like

hello there, weekends has arrived now right…? I’m hoping that you could check out the roblox place file whenever you could, I’m so sorry that I literally suck at scripting so much that I made separate roblox game for test armor system that is purely written by chatGPT but yet anything in there does not work at all… (link to shared chatGPT conversation made for make armor system with only chatGPT: this link…)
(I will share you the roblox place file of test game with armor system that is purely made by ChatGPT suggestions if you want to, thanks)

thank you so much for returning to this post(hopefully), and I wish I could repay you for helping me with the armor system somehow… -mari

1 Like

may i just add an armour system is a very complex first scripting task, i will add my input here that typically developers when saving inventory related chinwag it is common to use values or booleans to check what the user has and its statistics (if we have durability levels or more complex stuff)

however it can also be saved in long strings and more likely tables
im aware this isnt the most helpful comment but keep this in mind.

1 Like

In my opinion your game so far looks messy to the point where I am also confused, but I will give you ideas to create your own armor system:

  1. Create a working datastore. DataStore2 or ProfileService is recommended, but if you want to go with the basic style then go for the normal DataStore. This is needed to save your armor when the player leaves/rejoins.

  2. Create a folder. You will need this to store your armor, weapons and stuff. When equipping armor, don’t move the items from the folder to the player’s character or EquippedArmor folder, instead clone them so you don’t lose the armor from your inventory when you rejoin. To prevent wearing multiple of the same armor at once, if the player is trying to equip the armor, first check if the same armor is in the player’s EquippedArmor folder and if it is, don’t let the player equip it, and if not, then let the player equip it.

  3. Use ChildAdded. You will need this for your GUI inventory system. Your game has a problem where if the player resets everything in the inventory GUI will disappear, so .ChildAdded will be useful or you can even use a for loop to load armor to the GUI inventory.

  4. For the armor equipping part, use welds. You will need welds to stick parts to the character, such as chestplates, leggings, and helmets. Here is an example code:

local Weld = Instance.new("Weld", Armor)

Weld.Name = "ArmorWeld"
Weld.Part0 = Character.Torso
Weld.Part1 = Player.Folder.Chestplate

You can also use offsets to make sure that the armor is in perfect place, so it doesn’t look like the armor is floating outside of the player when it is welded.

  1. Never use ChatGPT for coding. ChatGPT is a very useful AI for information and help, but if you ask for code most of the time it will never work. Try watching roblox
    scripting tutorials like AlvinBlox’s scripting tutorials:

https://www.youtube.com/watch?v=aX0Kw_txrIY&list=PLsbxI7NIoTtiiV9w4CEkZgYfCcNn2dcv9&ab_channel=AlvinBlox

or TheDevKing’s scripting tutorials:

https://www.youtube.com/watch?v=BkYwRdCukZA&list=PLhieaQmOk7nIfMZ1UmvKGPrwuwQVwAvFa

These scripting tutorials are a great source of learning and help you to improve your skill in coding further. Experience is also a great way of learning.

You can also do something to learn like take out free models from toolbox, and review the script inside and find out how exactly they work. You can also try messing around, making scripts, etc. I recommend you to start off small and then advancing to more complex scripting like CFrames, Tweening and Velocity.

As a solo developer, I understand that making your own game can be a huge pain, but with enough experience and learning I was able to overcome my problems and take my next step into developing.

One more thing to say, modifying pre-made systems like Techno Studio’s is a bad practice if you don’t know what you are doing, so that’s why I encourage you to create your own armor system from scratch to avoid problems and complications.

– MikeartsRBLX

1 Like

hey there, I’m sorry for interrupting you once more, but I have returned to modifying howtoroblox’s armor system, I know I was supposed to actually learn from making the codes by myself but I find myself literally so suck at scripting for the game everytime,

so, I’ve changed WeldConstraint to Weld and renamed the weld created for weld the armor model with player into “ArmorToPlayerBodyWeld” so it will be easier to identify, but even with my effort of not using chatGPT at that following time, I was barely able to find out that currently the script does not creates welds for torso type armor, talisman type armor, waisttalisman type armors, I couldn’t acknowledge anything at this day to fix the script, but I still want to finish the armor system someday, I have imported the roblox place file once again for somebody to take a loot at the issues, and I feel bad while posting the roblox place file in reply because I literally can’t even script despite I can make 3d models with blender and producing decent-looking arts and making other peoples in devforum to take times to check out my roblox place file with errors in their free-time :sob:

I’m sorry to bring you again into this topic, but I’ll show you the screenshot of issue and roblox place file just in case… or maybe I can pay you with robux for you to help me write script codes for my armor systems and such, contact me whenever you can if you’re interested in paid-working for my game projects :smiling_face_with_tear: :+1:

  • the ongoing problem in re-continued howtoroblox’s armor system test game, the weld that was supposed to be generated inside Leather Top armor is not generated, currently unsolved.

the roblox place file -
howtoroblox’s armor system R6 ported.rbxl (183.9 KB)

thank you so much for showing interests in my topic :face_holding_back_tears:
-mari

I may have mentioned Welds earlier, they may work but WeldConstraints are actually better, more of the upgraded version, since normal Welds just break when that object is moved.

You don’t need to pay robux at all, because armor systems are actually quite easy to make. I’ll check out the file when I actually have free time. (I’m currently VERY busy with school and stuff)

1 Like

hello there, sorry for being very late to reply you regarding this topic :sweat_smile:
anyways, I’m hoping you that you are currently free from your school and such, so if you have any time, feel free to check out my roblox place file whenever you could, thank you so much for these helps.
-mari

1 Like

I’ll try, I’m currently drowning in homework and upcoming exams this week :smiling_face_with_tear:

1 Like