[FREE] DonateUI, a simple, effective donor perk

DonateUI

Grab DonateUI[OLD] for free here: https://www.roblox.com/library/5233746733/DonateUI

Get the new DonateUI:

Test it here: https://www.roblox.com/games/5233781585/DonateUI-demonstration

DonateUI was made with simplicity in mind, no clutter, everything at ease. DonateUI has features such as:
Gamepass DonorUI only
Remove Heads or hats
Add faces
Add Head
Add hats (coming soon)
and amazing animations!

Example

image

I can’t wait to get your feedback on my new model and I hope you all enjoy using it as much as I did making it!

Join my Discord here: Systematised Discord
Join Systematised group: https://www.roblox.com/groups/6800710/Systematised#!/about

Source Code
LocalScripts
Open
script.Parent.MouseButton1Click:Connect(function()
	script.Parent.Parent.Parent.Parent.MainFrame:TweenPosition(UDim2.new(0.005, 12, 0.612, -271), "Out", "Sine", 1)
	script.Parent.Text = ""
	script.Parent.Parent.Title.Text = ""
	script.Parent.Default_Roundify_11px:TweenSize(UDim2.new(0, 0, 2.441, 0), "Out", "Sine", 0.25)
	wait(0.2)
	script.Parent.Parent.Parent:TweenSize(UDim2.new(0, 134, 0, 0), "Out", "Sine", 0.25)
	
	
	
end)
Donate


local gamepass = 10409566
local Button = script.Parent
local player = game.Players.LocalPlayer
Button.MouseButton1Click:Connect(function()
	game:GetService("MarketplaceService"):PromptGamePassPurchase(player, gamepass)
end)
RemoveHead
-- // Services \\

local RepStorage = game:GetService("ReplicatedStorage")

-- // Variables \\

local RemoveHead = RepStorage:WaitForChild("RemoveHead")

-- // Functions \\
script.Parent.MouseButton1Click:Connect(function()
	RemoveHead:InvokeServer()
end)

function Process(enter)
	if enter then
		RemoveHead:InvokeServer()
	end
end
AddFace
-- // Services \\

local RepStorage = game:GetService("ReplicatedStorage")

-- // Variables \\

local ApplyFace = RepStorage:WaitForChild("ApplyFace")
local textBox = script.Parent

-- // Functions \\
script.Parent.Parent.faceApply.MouseButton1Click:Connect(function()
	ApplyFace:InvokeServer(textBox.Text)
end)

function Process(enter)
	if enter then
		ApplyFace:InvokeServer(textBox.Text)
	end
end

-- // Events \\

textBox.FocusLost:Connect(Process)
AddHead
-- // Services \\

local RepStorage = game:GetService("ReplicatedStorage")

-- // Variables \\

local AddHead = RepStorage:WaitForChild("AddHead")

-- // Functions \\
script.Parent.MouseButton1Click:Connect(function()
	AddHead:InvokeServer()
end)

function Process(enter)
	if enter then
		AddHead:InvokeServer()
	end
end
Donate
local open = false
script.Parent.MouseButton1Click:Connect(function()
	if open == false then
		open = false
		script.Parent.TextSize = 20
		script.Parent.Text = "CLOSE"
		script.Parent.Parent.SecondMenu:TweenSize(UDim2.new(0.961, 0, -0.346, 230), "Out", "Quint", 0.2)
		script.Parent.Parent.SecondMenu.TextLabel.Visible = true
		wait(0.25)
		script.Parent.Parent.SecondMenu.Prompt.TextTransparency = 0
		script.Parent.Parent.SecondMenu.Prompt:TweenSize(UDim2.new(0, 142, 0, 30), "Out", "Quint", 0.25)
		
			open = true
	else
		open = true
		script.Parent.TextSize = 15
		script.Parent.Text = "SUPPORT DONATEUI"
		script.Parent.Parent.SecondMenu.Prompt.TextTransparency = 1
		script.Parent.Parent.SecondMenu.Prompt:TweenSize(UDim2.new(0, 0, 0, 0), "Out", "Quint", 0.25)
		wait(0.25)
		script.Parent.Parent.SecondMenu.TextLabel.Visible = false
		script.Parent.Parent.SecondMenu:TweenSize(UDim2.new(0.961, 0, 0, 0), "Out", "Quint", 0.2)
		
		open = false
		
	end
end)
Close
script.Parent.MouseButton1Click:Connect(function()
	script.Parent.Parent.Parent:TweenPosition(UDim2.new(-0.3, 12, 0.612, -271), "Out", "Sine", 1)
	wait(0.3)
	script.Parent.Parent.Parent.Parent.OpenFrame:TweenSize(UDim2.new(0, 134, 0, 70), "Out", "Sine", 0.25)
	script.Parent.Parent.Parent.Parent.OpenFrame.Content.Title.Text = "DONATEUI"
	wait(0.2)
	script.Parent.Parent.Parent.Parent.OpenFrame.Content.Open.Default_Roundify_11px:TweenSize(UDim2.new(1, 0, 2.441, 0), "Out", "Sine", 0.25)
	wait(0.1)
	script.Parent.Parent.Parent.Parent.OpenFrame.Content.Open.Text = "OPEN"
end)
Scripts
Secondary
local Client = game.ReplicatedStorage.DonateClient 
local messagedone = false
function respawned(char)
	wait()
	local player = game.Players:FindFirstChild(char.Name)
		if char:FindFirstChild("Head") ~= nil then
		if game:GetService("MarketplaceService"):UserOwnsGamePassAsync(player.UserId, 10409566) then -- DonateUI supporters
			Client.MainFrame.Content.Title.Text = "DONATEUI SUPPORTER"
			Client.MainFrame.Content.Title.Position = UDim2.new(0, 32, 0, 15)
			Client.MainFrame.Content.Title.Size = UDim2.new(1, -60, 0, 10)
			Client.MainFrame.Content.SecondMenu.Visible = false
			Client.MainFrame.Content.Donate.Visible = false
			Client.MainFrame.Content.Close.Position = UDim2.new(0.328, 5, 1.021, -30)
			if messagedone == false then
			script.Message:Clone().Parent = player.PlayerGui
			wait(2)
			player.PlayerGui.Message.Message:TweenSize(UDim2.new(0, 265, 0, 300), "Out", "Quart", 0.3)
			wait(0.3)
			player.PlayerGui.Message.Message.Content.Text:TweenSize(UDim2.new(0.958, 0, 0, 230), "Out", "Quart", 0.4)
			player.PlayerGui.Message.Message.Content.Text.TextLabel.Visible = true
				player.PlayerGui.Message.Message.Content.Title.Visible = true
				player.PlayerGui.Message.Message.Content.Close:TweenSize(UDim2.new(0.34, -10, -0.043, 25), "Out", "Quart", 0.4)
				player.PlayerGui.Message.Message.Content.Close.TextTransparency = 0
				
				
				messagedone = true
				end
		
			
		end
	end
end
game.Workspace.ChildAdded:connect(respawned)
Loader

local gamepassId = 0000000 -- Donator Gamepass ID

local donateuiperks = true -- Donator perks for DonateUI supporters (thank you <3 if you keep true)





















local Client = game.ReplicatedStorage.DonateClient
if donateuiperks == true then
	script.Secondary.Disabled = false
	end

function respawned(char)
	wait()
	local player = game.Players:FindFirstChild(char.Name)
		if char:FindFirstChild("Head") ~= nil then
		if game:GetService("MarketplaceService"):UserOwnsGamePassAsync(player.UserId, gamepassId) then
			if game:GetService("MarketplaceService"):UserOwnsGamePassAsync(player.UserId, 10409566) then
				wait()
			else
			Client:Clone().Parent = player.PlayerGui
			end
		end
	end
	end
	
game.Workspace.ChildAdded:connect(respawned)
DonateHandler
-- Services --

local InsertService = game:GetService("InsertService")
local RepStorage = game:GetService("ReplicatedStorage")

-- Variables --

local ApplyFace = RepStorage:WaitForChild("ApplyFace")
local RemoveHead = RepStorage:WaitForChild("RemoveHead")
local AddHead = RepStorage:WaitForChild("AddHead")

-- Functions --

function ApplyFace_Event(player, id)
	local asset = InsertService:LoadAsset(tonumber(id))
	local faceid = asset:WaitForChild("face").Texture
	
	if player.Character then
		player.Character.Head.face.Texture = faceid
		return "Applied"
	end
	
	asset:Destroy()
	return "Could not apply face"
end

function RemoveHead_Event(player, id)
	
	if player.Character then
		player.Character.Head.Transparency = 1
		player.Character.Head.face.Transparency = 1
		return "Applied"
	end
	
	return "Could not remove head"
end

function AddHead_Event(player, id)
	
	if player.Character then
		player.Character.Head.Transparency = 0
		player.Character.Head.face.Transparency = 0
		return "Applied"
	end
	
	return "Could not add head"
end


-- Callbacks --

ApplyFace.OnServerInvoke = ApplyFace_Event
RemoveHead.OnServerInvoke = RemoveHead_Event
AddHead.OnServerInvoke = AddHead_Event

Credit to @Rare_tendo for ApplyFace

27 Likes

The only thing that you should add is a system that you have to buy a gamepass to use it.

3 Likes

Can you post your source code and/or an image of the UI for mobile users and those who want to see the resource before adding it?

The only way for it to show up is if the user has the gamepass set in “Loader”

Source code? I’m confused on what you mean here.

Source code is the code within all your Scripts, many users either utilise pastebin/hastebin or create a GitHub repository to store the code in.

3 Likes

Do you have an example of someone else’s Source code so I have an idea of the format I should use when making one?

It’s literally the code in your script, just copy paste it to a paste bin then at the bottom of the page there is a syntax drop bar and select lua, then publish it and paste the link here.

2 Likes

Next time I’m not on mobile I’ll make one for sure and add some screenshots, I’ll also add support for mobile if everyone would like that.

I really like your idea and you creation! Though you have some size issues. Well, I joined the test-place on my phone, and it seemed like it wasn’t scaled.
Else I’d say that you did a good job.

It wasn’t scaled but it isnt unusable for most mobile devices. I hope you like it and maybe use it in future.

Yeah. I might use it in the future! It looks nice. :slightly_smiling_face:

If you are planning on adding it today, I would wait a few days since I am working on full mobile support which will come soon!

You might want to make this scalable for mobile. I played the game and I was not able to open the ui because the button was just to far to the right.

This totally depends on your phone screen resolution, I am working on an average size for all phones so it is both usable and sleek on mobile.

In reply to this, what phone do you use? I could add seperate support for your phone later on.

Feedback:

You can use a simple hide details then paste your source code

Source Code

Server

game.Players.PlayerAdded:Connect(function()
   -- blah blah blah
end)

Client

script.Parent.MouseButton1Click:Connect(function()
   -- blah blah blah
end)


Also I would add some images in the actual post because images help people see what they are getting on the actual roblox forum, this means that lets say if they are on mobile or don’t have much time to join your game and find out, they can see what they would get, and bookmark it for later.

It can be simple as below showing off the UI

image


The UI scalability is a bit broken, especially for small screens


When I shrunk it to the smallest I could, that is what I got. I would look to get that fixed asap

4 Likes

Thanks for the feedback! I’ll add the image you took for now as I am on my phone. UI Scaling isn’t my best strength at all, and I am all new to UI, my first UI was 1 month ago and I learn things everyday and scaling and offset is the next to do. Thanks for the clearup on source code, but what if I have more than one script or localscript?

Thanks for the feedback! I hope you enjoy DonateUI if you use it.

1 Like

If you have more than 1 script you can separate them using more details
like so

Scripts

Server Scripts

Server Script Service

-- Script --

Replicated Script Service

-- Script --

Workspace

-- Script --


Local Scripts

Local Player

-- Script --

UI

-- Script --

Replicated Script Service

-- Script --


1 Like

UPDATE 1.4

Get the latest update here: https://www.roblox.com/library/5233746733/DonateUI

NEW STUFF

Donator Perks (theres an option to turn it off) (get free donateui in all games WITH DONATEUI INSTALLED if you have this: https://www.roblox.com/game-pass/10409566/DonateUI-Perks)

Cleaner scripts

Organised the loader

Source Code (Here)

Fixes

Fixed text not registering when tweening fully
Fixed all UI elements dissapearing when doing certain things.

Known Issues

Remove Hats is not working