TNolan01 | Web Developer and Programmer

About Me

Hello I am Nolan an experienced Programmer and Web Developer who has been coding for about 6 years now. I am fluent in the languages of HTML, C++, Rust, Luau, as well as somewhat able to code in Assembly, Go, and C#. I am also an experienced QA Tester and Creative Designer.

Showcase

Summary

Rust Survival Game Code:

local RunService = game:GetService("RunService")

local BASE_TEMP = -25
local FREEZING_TEMP = -40
local BLIZZARD_DROP = -30
local SURVIVAL_TICK = 1

local Environment = {
	Temperature = BASE_TEMP,
	Blizzard = false,
	TimeOfDay = 0
}

local function initCharacter(character)
	local humanoid = character:WaitForChild("Humanoid")
	humanoid:SetAttribute("Hunger", 100)
	humanoid:SetAttribute("Warmth", 100)
	humanoid:SetAttribute("Stamina", 100)
end

Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(initCharacter)
end)

local function updateEnvironment(dt)
	Environment.TimeOfDay += dt
	if Environment.TimeOfDay >= 60 then
		Environment.TimeOfDay = 0
	end
	if Environment.TimeOfDay < 30 then
		Environment.Temperature = BASE_TEMP
	else
		Environment.Temperature = BASE_TEMP - 15
	end
end

local function updateBlizzard()
	if math.random() < 0.002 then
		Environment.Blizzard = not Environment.Blizzard
		if Environment.Blizzard then
			Environment.Temperature += BLIZZARD_DROP
		else
			Environment.Temperature -= BLIZZARD_DROP
		end
	end
end

local function updatePlayer(player)
	local character = player.Character
	if not character then return end

	local humanoid = character:FindFirstChild("Humanoid")
	if not humanoid then return end

	local hunger = humanoid:GetAttribute("Hunger")
	local warmth = humanoid:GetAttribute("Warmth")
	if hunger == nil or warmth == nil then return end

	hunger -= 3

	if Environment.Temperature < FREEZING_TEMP then
		warmth -= 10
	else
		warmth += 5
	end

	if hunger <= 0 or warmth <= 0 then
		humanoid:TakeDamage(15)
	end

	humanoid:SetAttribute("Hunger", math.clamp(hunger, 0, 100))
	humanoid:SetAttribute("Warmth", math.clamp(warmth, 0, 100))
end

local accumulator = 0

RunService.Heartbeat:Connect(function(dt)
	accumulator += dt
	if accumulator < SURVIVAL_TICK then
		return
	end
	accumulator -= SURVIVAL_TICK
	updateEnvironment(SURVIVAL_TICK)
	updateBlizzard()
	for _, player in ipairs(Players:GetPlayers()) do
		updatePlayer(player)
	end
end)

Summary

Luau Translation System:


local Translator = {}

Translator.LanguageCodes = {
	es = true,
	en = true,
	fr = true,
	de = true,
	it = true,
	pt = true,
	ru = true,
	zh = true,
	ja = true,
	ko = true,
	ar = true,
	hi = true,
	bn = true,
	pa = true,
	jv = true,
	vi = true,
	tr = true,
	pl = true,
	nl = true,
	sv = true
}

local API_ENDPOINT = "https://libretranslate.de/translate"

local function translate(text, source, target)
	if not text or text == "" then
		return nil
	end

	local payload = {
		q = text,
		source = source,
		target = target,
		format = "text"
	}

	local success, response = pcall(function()
		return HttpService:PostAsync(
			API_ENDPOINT,
			HttpService:JSONEncode(payload),
			Enum.HttpContentType.ApplicationJson
		)
	end)

	if not success then
		return nil
	end

	local data = HttpService:JSONDecode(response)
	return data.translatedText
end

function Translator.SpanishTo(languageCode, text)
	if not Translator.LanguageCodes[languageCode] then
		return nil
	end
	return translate(text, "es", languageCode)
end

function Translator.ToSpanish(languageCode, text)
	if not Translator.LanguageCodes[languageCode] then
		return nil
	end
	return translate(text, languageCode, "es")
end

return Translator

Summary

Windows Computer OS System:

local UIS = game:GetService("UserInputService")
local player = Players.LocalPlayer

local gui = Instance.new("ScreenGui")
gui.Name = "WindowsSystem"
gui.ResetOnSpawn = false
gui.Parent = player:WaitForChild("PlayerGui")

local taskbar = Instance.new("Frame")
taskbar.Size = UDim2.new(1, 0, 0, 40)
taskbar.Position = UDim2.new(0, 0, 1, -40)
taskbar.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
taskbar.BorderSizePixel = 0
taskbar.Parent = gui

local startButton = Instance.new("TextButton")
startButton.Size = UDim2.new(0, 120, 1, 0)
startButton.Text = "Windows"
startButton.TextColor3 = Color3.new(1,1,1)
startButton.BackgroundColor3 = Color3.fromRGB(35,35,35)
startButton.BorderSizePixel = 0
startButton.Parent = taskbar

local startMenu = Instance.new("Frame")
startMenu.Size = UDim2.new(0, 260, 0, 300)
startMenu.Position = UDim2.new(0, 0, 1, -340)
startMenu.BackgroundColor3 = Color3.fromRGB(40,40,40)
startMenu.BorderSizePixel = 0
startMenu.Visible = false
startMenu.Parent = gui

local menuLayout = Instance.new("UIListLayout")
menuLayout.Padding = UDim.new(0, 6)
menuLayout.Parent = startMenu

local windowFolder = Instance.new("Folder")
windowFolder.Name = "Windows"
windowFolder.Parent = gui

local function makeDraggable(frame, bar)
    local dragging = false
    local dragStart
    local startPos

    bar.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = true
            dragStart = input.Position
            startPos = frame.Position
        end
    end)

    bar.InputEnded:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = false
        end
    end)

    UIS.InputChanged:Connect(function(input)
        if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
            local delta = input.Position - dragStart
            frame.Position = startPos + UDim2.new(0, delta.X, 0, delta.Y)
        end
    end)
end

local function createWindow(title)
    local window = Instance.new("Frame")
    window.Size = UDim2.new(0, 420, 0, 300)
    window.Position = UDim2.new(0.3, 0, 0.2, 0)
    window.BackgroundColor3 = Color3.fromRGB(235,235,235)
    window.BorderSizePixel = 0
    window.Parent = windowFolder

    local titleBar = Instance.new("Frame")
    titleBar.Size = UDim2.new(1, 0, 0, 32)
    titleBar.BackgroundColor3 = Color3.fromRGB(45,45,45)
    titleBar.BorderSizePixel = 0
    titleBar.Parent = window

    local titleLabel = Instance.new("TextLabel")
    titleLabel.Size = UDim2.new(1, -40, 1, 0)
    titleLabel.Position = UDim2.new(0, 8, 0, 0)
    titleLabel.Text = title
    titleLabel.TextXAlignment = Enum.TextXAlignment.Left
    titleLabel.TextColor3 = Color3.new(1,1,1)
    titleLabel.BackgroundTransparency = 1
    titleLabel.Parent = titleBar

    local closeButton = Instance.new("TextButton")
    closeButton.Size = UDim2.new(0, 32, 1, 0)
    closeButton.Position = UDim2.new(1, -32, 0, 0)
    closeButton.Text = "X"
    closeButton.TextColor3 = Color3.new(1,1,1)
    closeButton.BackgroundColor3 = Color3.fromRGB(170, 50, 50)
    closeButton.BorderSizePixel = 0
    closeButton.Parent = titleBar

    closeButton.MouseButton1Click:Connect(function()
        window:Destroy()
    end)

    makeDraggable(window, titleBar)

    return window
end

local function createStartApp(name)
    local button = Instance.new("TextButton")
    button.Size = UDim2.new(1, -12, 0, 36)
    button.Position = UDim2.new(0, 6, 0, 0)
    button.Text = name
    button.TextColor3 = Color3.new(1,1,1)
    button.BackgroundColor3 = Color3.fromRGB(60,60,60)
    button.BorderSizePixel = 0
    button.Parent = startMenu

    button.MouseButton1Click:Connect(function()
        startMenu.Visible = false
        createWindow(name)
    end)
end

createStartApp("Notepad")
createStartApp("Explorer")
createStartApp("Settings")

startButton.MouseButton1Click:Connect(function()
    startMenu.Visible = not startMenu.Visible
end)

Summary

Phone Code OS:

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

if RunService:IsServer() then
	local DataStoreService = game:GetService("DataStoreService")
	local TeleportService = game:GetService("TeleportService")

	local PinStore = DataStoreService:GetDataStore("PhonePins_V3")

	local Remote = Instance.new("RemoteEvent")
	Remote.Name = "PhonePinTransfer"
	Remote.Parent = ReplicatedStorage

	for instance in workspace:GetChildren() do
		instance:Destroy()
	end

	local ActiveSessions = {}
	local RETRIES = 6
	local PLACE_ID = game.PlaceId

	local function getWithRetry(key)
		for i = 1, RETRIES do
			local success, data = pcall(function()
				return PinStore:GetAsync(key)
			end)
			if success then
				return data
			end
			task.wait(i)
		end
	end

	local function setWithRetry(key, value)
		for i = 1, RETRIES do
			local success = pcall(function()
				PinStore:SetAsync(key, value)
			end)
			if success then
				return true
			end
			task.wait(i)
		end
	end

	Players.PlayerAdded:Connect(function(player)
		player.CharacterAutoLoads = false

		local userId = player.UserId
		if ActiveSessions[userId] then
			player:Kick("Duplicate session")
			return
		end

		ActiveSessions[userId] = true

		local data = getWithRetry(userId)
		if not data then
			TeleportService:Teleport(PLACE_ID, player)
			return
		end

		if data.Session and data.Session ~= game.JobId then
			player:Kick("Data in use")
			return
		end

		Remote:FireClient(player, data.Pin)
	end)

	Players.PlayerRemoving:Connect(function(player)
		ActiveSessions[player.UserId] = nil

		local pin = player:GetAttribute("PendingPIN")
		if not pin then return end

		setWithRetry(player.UserId, {
			Pin = pin,
			Session = game.JobId
		})
	end)

	game:BindToClose(function()
		for player in Players:GetPlayers() do
			local pin = player:GetAttribute("PendingPIN")
			if pin then
				setWithRetry(player.UserId, {
					Pin = pin,
					Session = game.JobId
				})
			end
		end
	end)
else
	local player = Players.LocalPlayer
	local Remote = ReplicatedStorage:WaitForChild("PhonePinTransfer")

	local phone = {
		Battery = Instance.new("IntValue"),
		Messages = {},
		Pin = nil,
		Unlocked = false
	}

	phone.Battery.Value = 100

	phone.Battery:GetPropertyChangedSignal("Value"):Connect(function()
		if phone.Battery.Value <= 0 then
			phone.Unlocked = false
		end
	end)

	Remote.OnClientEvent:Connect(function(pin)
		phone.Pin = pin
	end)

	while true do
		phone.Battery.Value = math.clamp(phone.Battery.Value - 1, 0, 100)
		task.wait(60)
	end

	local function unlock(input)
		if not phone.Pin then
			phone.Pin = input
			player:SetAttribute("PendingPIN", input)
			phone.Unlocked = true
			return true
		end

		if input == phone.Pin then
			phone.Unlocked = true
			return true
		end

		return false
	end

	local function sendMessage(userId, text)
		if not phone.Unlocked then return end
		if phone.Battery.Value <= 0 then return end
		if #text > 200 then return end

		table.insert(phone.Messages, {
			To = userId,
			Text = text,
			Time = os.time()
		})

		phone.Battery.Value -= 2
	end

	_G.Phone = {
		Unlock = unlock,
		SendMessage = sendMessage,
		Data = phone
	}
end


Summary

AI Calculator Math Bot:

local Chat = game:GetService("Chat")

local BotName = "MathBot"

local Functions = {
	sqrt = math.sqrt,
	sin = math.sin,
	cos = math.cos,
	tan = math.tan,
	abs = math.abs,
	floor = math.floor,
	ceil = math.ceil
}

local function safeEvaluate(expression)
	expression = expression:lower()
	expression = expression:gsub("%^", "**")

	for name in pairs(Functions) do
		expression = expression:gsub(name .. "%(", "Functions." .. name .. "(")
	end

	if expression:match("[^%d%+%-%*/%.%(%)%*%sFunctions]") then
		return nil
	end

	local func = loadstring("return " .. expression)
	if not func then return nil end

	setfenv(func, { Functions = Functions })

	local success, result = pcall(func)
	if success then
		return result
	end
	return nil
end

local function respond(player, message)
	local answer = safeEvaluate(message)
	if answer then
		Chat:Chat(player.Character.Head, BotName .. ": " .. tostring(answer), Enum.ChatColor.Blue)
	end
end

Players.PlayerAdded:Connect(function(player)
	player.Chatted:Connect(function(msg)
		respond(player, msg)
	end)
end)

Availability

I am currently available for work sessions that are 2-4 hours on the weekends due to school.

Payment

I prefer payment in Robux and prices may vary but it will usually be 1700-3000 depending on the complexity of the program.

Contact

I prefer contact through the devforum and Roblox and I’m working on getting a twitter.

Thanks for reading!

1 Like

Cool! I’ve actually made a translator before but the UI is a bit janky.

2 Likes

Yeah it’s hard to make translators lol.

I’ll definitely make sure to try and play your game!

2 Likes

Do note that clients aren’t that smart to understand code. So better to show a video than your code.

2 Likes

Yeah I’ll go do that.

1 Like

Hello?
Doesn’t the code after the while true do battery end wait 60 never run?

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

if RunService:IsServer() then
	local DataStoreService = game:GetService("DataStoreService")
	local TeleportService = game:GetService("TeleportService")

	local PinStore = DataStoreService:GetDataStore("PhonePins_V3")

	local Remote = Instance.new("RemoteEvent")
	Remote.Name = "PhonePinTransfer"
	Remote.Parent = ReplicatedStorage

	for instance in workspace:GetChildren() do
		instance:Destroy()
	end

	local ActiveSessions = {}
	local RETRIES = 6
	local PLACE_ID = game.PlaceId

	local function getWithRetry(key)
		for i = 1, RETRIES do
			local success, data = pcall(function()
				return PinStore:GetAsync(key)
			end)
			if success then
				return data
			end
			task.wait(i)
		end
	end

	local function setWithRetry(key, value)
		for i = 1, RETRIES do
			local success = pcall(function()
				PinStore:SetAsync(key, value)
			end)
			if success then
				return true
			end
			task.wait(i)
		end
	end

	Players.PlayerAdded:Connect(function(player)
		player.CharacterAutoLoads = false

		local userId = player.UserId
		if ActiveSessions[userId] then
			player:Kick("Duplicate session")
			return
		end

		ActiveSessions[userId] = true

		local data = getWithRetry(userId)
		if not data then
			TeleportService:Teleport(PLACE_ID, player)
			return
		end

		if data.Session and data.Session ~= game.JobId then
			player:Kick("Data in use")
			return
		end

		Remote:FireClient(player, data.Pin)
	end)

	Players.PlayerRemoving:Connect(function(player)
		ActiveSessions[player.UserId] = nil

		local pin = player:GetAttribute("PendingPIN")
		if not pin then return end

		setWithRetry(player.UserId, {
			Pin = pin,
			Session = game.JobId
		})
	end)

	game:BindToClose(function()
		for player in Players:GetPlayers() do
			local pin = player:GetAttribute("PendingPIN")
			if pin then
				setWithRetry(player.UserId, {
					Pin = pin,
					Session = game.JobId
				})
			end
		end
	end)
else
	local player = Players.LocalPlayer
	local Remote = ReplicatedStorage:WaitForChild("PhonePinTransfer")

	local phone = {
		Battery = Instance.new("IntValue"),
		Messages = {},
		Pin = nil,
		Unlocked = false
	}

	phone.Battery.Value = 100

	phone.Battery:GetPropertyChangedSignal("Value"):Connect(function()
		if phone.Battery.Value <= 0 then
			phone.Unlocked = false
		end
	end)

	Remote.OnClientEvent:Connect(function(pin)
		phone.Pin = pin
	end)

	while true do
		phone.Battery.Value = math.clamp(phone.Battery.Value - 1, 0, 100)
		task.wait(60)
	end

	local function unlock(input)
		if not phone.Pin then
			phone.Pin = input
			player:SetAttribute("PendingPIN", input)
			phone.Unlocked = true
			return true
		end

		if input == phone.Pin then
			phone.Unlocked = true
			return true
		end

		return false
	end

	local function sendMessage(userId, text)
		if not phone.Unlocked then return end
		if phone.Battery.Value <= 0 then return end
		if #text > 200 then return end

		table.insert(phone.Messages, {
			To = userId,
			Text = text,
			Time = os.time()
		})

		phone.Battery.Value -= 2
	end

	_G.Phone = {
		Unlock = unlock,
		SendMessage = sendMessage,
		Data = phone
	}
end