Model spawn on Players won't work

  1. What do you want to achieve?
    so I’ve been trying to make class based game and i wanted to give players weapons to let them fight

  2. What is the issue?
    at the first attempt I tried to make the model tool and give it when round starts. but I didn’t like how tools are in the player’s inventory

  3. What solutions have you tried so far?
    first I tried to search the Developer forum but i couldn’t find any. so I tried to my own script that gives models when round starts but I only knew how to give tools not models so I have no idea how to do that. Is there a way to give models to players?

this is a screen shot what i want to do

and these are what i tried

the local script

local player = game.Players.LocalPlayer
local userinputservice = game.GetService("UserInputService")
local remote = script:WaitForChild("WeaponRemote")
local enabled = false

userinputservice.InputBegan:Connect(function(Input, GPE)
	if not GPE then
		if Input.KeyCode == Enum.KeyCode.Q then
			
		end
	end
end)

the script

local remote = script.Parent:WaitForChild("Katana")

remote.OnServerEvent:Connect(function(Player, value)
	local character = workspace:WaitForChild(Player.Name)
	if value == "weapon" then
		if character:FindFirstChild("Katana") then
			
			
		else
			local kt = game:GetService("ReplicatedStorage"):WaitForChild("Katana")
			if kt then
				kt:Clone().Parent = character
				local w = Instance.new("Weld", character.RightArm)
				w.Part0 = character.RightArm
				w.part1 = kt.Grabpart
				
			end
		end
	end
end)

.
.
.
and the script wont work.

Help!

try cloning it to the players backpack instead of the character.