About Me
Hello, I’m Neo! I am a 17 year old advanced scripter and have been scripting on Roblox for 3 years now. I have experience with object oriented programming; writing secure and legible code; and following the Lua style guide.
Showcase
Code Samples
Scalable Abbreviations Module
local ABBREVIATIONS = {
{Digits = 7, Suffix = "M"},
{Digits = 4, Suffix = "K"},
{Digits = 3, Suffix = " hundred"},
}
local function formatNumber(number, maxDigits)
local numberLength = #tostring(math.floor(number))
for _, value in ipairs(ABBREVIATIONS) do
if value.Digits <= numberLength then
local truncNumber = number / (10 ^ (value.Digits - 1))
return tostring(truncNumber):sub(1, maxDigits - 1)..value.Suffix
end
end
end
-- example
local num = 5812375821758971298
local abb = formatNumber(num, 3) -- keep in mind you might want to use scientific notation if the number goes bigger than your defined abbreviations
print(abb)
Proxy Table module (.Changed and .Indexed for tables)
local ProxyTable = {}
function ProxyTable.new(items)
local self = {}
self.Index = {}
self.NewIndex = {}
self.Table = items
return setmetatable(self, {
__index = function(self, index)
if ProxyTable[index] then
return ProxyTable[index]
end
for _, callback in ipairs(self.Index) do
callback(index)
end
return self.Table[index]
end,
__newindex = function(self, index, value)
for _, callback in ipairs(self.NewIndex) do
callback(index, value)
end
self.Table[index] = value
end,
})
end
function ProxyTable:Connect(connection, callback)
local connections = assert(self[connection], "No connection found with the name "..connection..".")
local key = #connections + 1
connections[key] = callback
return function() -- disconnect
connections[key] = nil
end
end
return ProxyTable
-- example
local tab = ProxyTable.new({'hello', "world"})
local disconnect = tab:Connect("Index", function()
print("we have been indexed")
end)
print(tab[1])
disconnect()
print(tab[1])
--[[
output:
we have been indexed
hello
hello
]]
Debounce (okay this one really isn’t that useful)
return function(callback, cooldown) -- create debounce
local lastCall = 0
return function(...) -- call debounce
if lastCall and tick() - lastCall >= cooldown then
lastCall = cooldown and tick() or nil
callback(...)
end
end
end
My recreation of RBX script signals and connections without using the roblox api
-- signal
local Connection = require() -- didn't figure out this part without using the roblox exclusive script global
local Signal = {}
Signal.__index = Signal
function Signal.new()
local self = setmetatable({}, Signal)
self._connections = {}
self._fired = false
return self
end
function Signal:Fire(...)
self._fired = true
for _, connection in ipairs(self._connections) do
connection.Callback(...)
end
self._fired = false
end
function Signal:Connect(callback)
local connection = Connection.new(callback)
self._connections:insert(connection)
return connection
end
function Signal:Wait()
self._waits:insert(false)
repeat until self._fired
end
-- connection
--@ Tuple | signal:Wait()
--@ connection | signal:Connect(function func)
-- @ bool | connection.Connected
-- @ void | connection:Disconnect()
local Connection = {}
Connection.__index = Connection
function Connection.new(callback)
local self = setmetatable({}, Connection)
self.Callback = callback
self.Connected = true
return self
end
function Connection:Disconnect()
self.Connected = false
self.Callback = nil
end
return Connection
hello person that reads code!
Videos
For now, this section is just a placeholder, I’ll film the videos later.
shops > guns > tools > ragdoll
breathing simulator
Availability
On weekdays I’m not able to work much but I’m available for two to four hours of work on weekends and holidays. My DMs are always open.
Payment
For commissions, I suggest I make the script in a separate game, show it to you, you pay me, then I give you the place file (I have no reason not to give you the script if I have already made it.)
- I will not work as a long term developer
- I will not use team create without at least half of the pay upfront.
Prices negotiable!
(I take both robux and paypal)
Contact
You can contact me here on the Developer Forum or via Discord at NEO#8513