Hey guys!

So earlier today I was working on a new project of mine and decided to finally start organizing my code a bit better, so I created a bunch of functions inside my ModuleScript.

If a player would trigger a certain button, a script would then fire a specific function from the MainModule. This worked like two or three times, now it just refuses to execute.

MainModule

local Global = {}

--Variables
local rs = game:GetService("ReplicatedStorage")
local gdhats = game:GetService("ServerStorage").GuitarDude
local hhats = game:GetService("ServerStorage").HappyHank

--Tables (Shirt, Pants, Face)
GuitarClothes = {"http://www.roblox.com/asset/?id=398635080","http://www.roblox.com/asset/?id=382538502","rbxassetid://1016181246"}
GuitarHats = {gdhats.BackGuitar, gdhats.Bandito, gdhats.CheeseHat, gdhats.Necklace}

HankClothes = {"http://www.roblox.com/asset/?id=536299005","http://www.roblox.com/asset/?id=144076759","rbxassetid://616394568"}
HankHats = {hhats.Beard, hhats.DefaultioHair, hhats.Eyephones}


--Functions

function Global.GuitarAvatar()
	game.Players.PlayerAdded:Connect(function(plr)
		plr.CharacterAdded:Connect(function(char)
			wait(1)
			--Accessories
			for i,v in pairs (char:GetChildren()) do
				if v.ClassName == "Accessory" or v.ClassName == "Hat" then
					v:Destroy()
				end
			end
			
			GuitarHats[1]:Clone().Parent = char
			GuitarHats[2]:Clone().Parent = char
			GuitarHats[3]:Clone().Parent = char
			GuitarHats[4]:Clone().Parent = char
			
			--Face
			char.Head.face.Texture = GuitarClothes[3]
			
			--Shirt
			if not char:FindFirstChild("Shirt") then
				local shirt = Instance.new("Shirt")
				shirt.Parent = char
				shirt.ShirtTemplate = GuitarClothes[1]
			else
				local shirt = char:FindFirstChild("Shirt")
				shirt.ShirtTemplate = GuitarClothes[1]	
			end
			
			--Pants
			if not char:FindFirstChild("Pants") then
				local pants = Instance.new("Pants")
				pants.Parent = char
				pants.PantsTemplate = GuitarClothes[2]
			else
				local pants = char:FindFirstChild("Pants")
				pants.PantsTemplate = GuitarClothes[2]
			end
		end)
	end)
end

function Global.HankAvatar()
	game.Players.PlayerAdded:Connect(function(plr)
		plr.CharacterAdded:Connect(function(char)
			wait(1)
			--Accessories
			for i,v in pairs (char:GetChildren()) do
				if v.ClassName == "Accessory" or v.ClassName == "Hat" then
					v:Destroy()
				end
			end
			
			HankHats[1]:Clone().Parent = char
			HankHats[2]:Clone().Parent = char
			HankHats[3]:Clone().Parent = char
			HankHats[4]:Clone().Parent = char
			
			--Face
			char.Head.face.Texture = HankClothes[3]
			
			--Shirt
			if not char:FindFirstChild("Shirt") then
				local shirt = Instance.new("Shirt")
				shirt.Parent = char
				shirt.ShirtTemplate = HankClothes[1]
			else
				local shirt = char:FindFirstChild("Shirt")
				shirt.ShirtTemplate = HankClothes[1]	
			end
			
			--Pants
			if not char:FindFirstChild("Pants") then
				local pants = Instance.new("Pants")
				pants.Parent = char
				pants.PantsTemplate = HankClothes[2]
			else
				local pants = char:FindFirstChild("Pants")
				pants.PantsTemplate = HankClothes[2]
			end
		end)
	end)
end

--Events
rs.respawn.OnServerEvent:Connect(function(player)
	player:LoadCharacter()
end)

return Global

Script

local Global = require(game.ServerScriptService.GlobalHandler)


game.Players.PlayerAdded:Connect(function(plr)
	--Create Avatar 
	if not plr:FindFirstChild("avatar") then
		local value = Instance.new("StringValue")
		value.Parent = plr
		value.Name = "avatar"
	end

	--Avatar Customization
	plr.CharacterAdded:Connect(function(char)
		local avatar = plr:WaitForChild("avatar")
		if avatar.Value == "guitar" then
			Global.GuitarAvatar()
		elseif avatar.Value == "hank" then
			Global.HankAvatar()
		elseif avatar.Value == "secretary" then
			Global.SecretaryAvatar()
		elseif avatar.Value == "princess" then
			Global.PrincessAvatar()
		end
	end)
end)

Any ideas or suggestions? Code improvement is also grealy appreciated, I am well-aware that my code is still somewhat of a mess!

4 comments

0

When you call the GuitarAvatar function you have a PlayerAdded event, so the function wont run until a player joins the server.

0

Remove the playeradded qnd characteradded event at the beginning of the function guitaravatar and try that

0

^. events and functions are asynchronous

0

Ah ofcourse! But then how would I make it recognize the player and character in the function?