|
|
Line 1: |
Line 1: |
| Some useful functions...
| | <div length=150px> |
| <pre> | | {{TitledBox/start|grey|dark=true |
| | | |heading=<big>Statistics for the [http://{{SERVERNAME}} Roblox wiki].</big>|float:left; width:50%; margin-left: 0}} |
| --- shared:RealType( v )
| | {{EmphasisBox/start|grey}} |
| | | {{NUMBEROFPAGES}} pages, {{NUMBEROFARTICLES}} articles, and {{NUMBEROFFILES}} files have been edited {{NUMBEROFEDITS}} times. |
| function shared:RealType(v)
| | ---- |
| | | There are {{NUMBEROFUSERS}} registered users on the Roblox Wiki. Of that, {{NUMBEROFADMINS}} are administrators. |
| local libraries = {Axes, BrickColor, CFrame, Color3, Faces, Ray, Region3, UDim, UDim2, Vector2, Vector3, Instance, math, table, string, coroutine}
| | ---- |
| | | {{PAGESINNS:user}} |
| if type(v) == "userdata" then
| | {{EmphasisBox/end}} |
|
| | {{TitledBox/end}} |
| for _,i in pairs(libraries) do
| | </div> |
| if v == i then
| |
| return string.lower(tostring(i))
| |
| end
| |
| end
| |
| | |
| if pcall(function() i = v:IsA("Instance") end) then
| |
| return "object"
| |
| elseif pcall(function() x = v.X end) then
| |
| if pcall(function() z = v.Z end) then
| |
| if Axes.new(v.X, v.Y, v.Z) == v then
| |
| return "axes"
| |
| elseif pcall(function() comp = v:components() end) then
| |
| return "coordinateframe"
| |
| else
| |
| return "vector3"
| |
| end
| |
| elseif Vector2.new(v.X, v.Y) == v then
| |
| return "vector2"
| |
| elseif pcall(function() xo = v.X.Offset end) then
| |
| return "universaldimension2"
| |
| end
| |
| elseif pcall(function() r = v.r end) then
| |
| if BrickColor.new(v.r, v.g, v.b) == v then
| |
| return "brickcolor"
| |
| elseif Color3.new(v.r, v.g, v.b) == v then
| |
| return "color3"
| |
| end
| |
| elseif pcall(function() top = v.Top) then
| |
| if Faces.new(v.Back, v.Bottom, v.Front, v.Left, v.Right, v.Top) == v then
| |
| return "faces"
| |
| end
| |
| elseif pcall(function() connect = v.connected end) then
| |
| return "rbxscriptconnection"
| |
| elseif pcall(function() conn = v:connect(function()end)end) then
| |
| return "rbxscriptsignal"
| |
| elseif pcall(function() origin = v.Origin end) then
| |
| return "ray"
| |
| elseif pcall(function() cf = v.CFrame end) then
| |
| return "region3"
| |
| elseif pcall(function() o = v.Offset end) then
| |
| return "universaldimension"
| |
| end
| |
| end
| |
| | |
| return type(v)
| |
| end
| |
| | |
| --- shared:ToupleToTable( ... )
| |
| | |
| function shared:ToupleToTable(...)
| |
| assert(loadstring("return {" .. ... .. "}"))()
| |
| end
| |
| | |
| function r(v) -- for me
| |
| return shared:RealType(v)
| |
| end
| |
| | |
| --- math.curt(v)
| |
| | |
| function math.curt(v)
| |
| if r(v) ~= "number" then
| |
| error("Number expected",1)
| |
| end
| |
| | |
| return v^(1/3)
| |
| end
| |
| | |
| function t(...) -- for me
| |
| return shared:ToupleToTable(...)
| |
| end
| |
| | |
| --- math.add(...)
| |
| | |
| function math.add(...)
| |
| local fin = 0
| |
| | |
| for i,v in pairs(t(...)) do
| |
| if r(v) ~= "number" then
| |
| error("Number expected",1)
| |
| end
| |
| fin = fin + v
| |
| end
| |
| return fin
| |
| end
| |
| | |
| --- math.sub(...)
| |
| | |
| function math.sub(...)
| |
| local fin = 0
| |
| | |
| for i,v in pairs(t(...)) do
| |
| if r(v) ~= "number" then
| |
| error("Number expected",1)
| |
| end
| |
| fin = fin - v
| |
| end
| |
| return fin
| |
| end
| |
| | |
| --- math.factorial(v)
| |
| | |
| function math.factorial(v)
| |
| local fin = v
| |
| | |
| for i=1, v do
| |
| if r(v) ~= "number" then
| |
| error("Number expected",1)
| |
| end
| |
| if i >= v or v - i <= 0 then
| |
| break
| |
| end
| |
| fin = fin * (v - i)
| |
| end
| |
| return fin
| |
| end
| |
| | |
| --- math.mul(...)
| |
| | |
| function math.mul(...)
| |
| local fin = 0
| |
| | |
| for i,v in pairs(t(...)) do
| |
| if r(v) ~= "number" then
| |
| error("Number expected",1)
| |
| end
| |
| fin = fin * v
| |
| end
| |
| return fin
| |
| end
| |
| | |
| --- math.div(...)
| |
| | |
| function math.div(...)
| |
| local fin = 0
| |
| | |
| for i,v in pairs(t(...)) do
| |
| if r(v) ~= "number" then
| |
| error("Number expected",1)
| |
| end
| |
| fin = fin / v
| |
| end
| |
| return fin
| |
| end
| |
| | |
| --- string.concat(...)
| |
| | |
| function string.concat(...)
| |
| local fin = ""
| |
| | |
| for i,v in pairs(t(...)) do
| |
| if r(v) ~= "string" then
| |
| error("String expected",1)
| |
| end
| |
| fin = fin .. tostring(v)
| |
| end
| |
| return fin
| |
| end
| |
| | |
| --- math.concat(...)
| |
| | |
| function math.concat(...)
| |
| local fin = ""
| |
| | |
| for i,v in pairs(t(...)) do
| |
| if r(v) ~= "number" and r(v) ~= "string" then
| |
| error("String or Number expected",1)
| |
| end
| |
| fin = fin .. tostring(v)
| |
| end
| |
| return fin
| |
| end
| |
| | |
| </pre> | |
| | |
| ==CustomEvent library==
| |
| This library _should_ allow you to create, fire, connect, etc. custom events.
| |
| | |
| <pre>
| |
| local g = {}
| |
| | |
| local events = {
| |
| -- eventName = { firstConnections, connections, lastConnections }
| |
| } | |
| | |
| function g:CreateEvent(eventName)
| |
| if not eventName then
| |
| error("String expected for eventName when calling CreateEvent",1)
| |
| end
| |
| if events[tostring(eventName)] ~= nil then
| |
| error("There is already a customevent with name " .. '"' .. tostring(eventName) .. '".',1)
| |
| end
| |
| events[tostring(eventName)] = {{},{},{}}
| |
| | |
| function events[tostring(eventName)]:connect(func)
| |
| local index = #events[2]+1
| |
| local r = {}
| |
| function r:disconnect()
| |
| events[2][index] = nil
| |
| end
| |
| r.connected = false
| |
| events[2][#events[2]+1] = {func,r}
| |
| return r
| |
| end
| |
| function events[tostring(eventName)]:connectFirst(func)
| |
| local index = #events[1]+1
| |
| local r = {}
| |
| function r:disconnect()
| |
| events[1][index] = nil
| |
| end
| |
| r.connected = false
| |
| events[1][#events[1]+1] = {func,r}
| |
| return r
| |
| end
| |
| function events[tostring(eventName)]:connectLast(func)
| |
| local index = #events[3]+1
| |
| local r = {}
| |
| function r:disconnect()
| |
| events[3][index] = nil
| |
| end
| |
| r.connected = false
| |
| events[3][#events[3]+1] = {func,r}
| |
| return r
| |
| end
| |
| | |
| function events[tostring(eventName)]:fire()
| |
| for i,v in pairs(events[1]) do
| |
| v[2].connected=true
| |
| v[1]()
| |
| v[2].connected=false
| |
| end
| |
| for i,v in pairs(events[2]) do
| |
| v[2].connected=true
| |
| v[1]()
| |
| v[2].connected=false
| |
| end
| |
| for i,v in pairs(events[3]) do
| |
| v[2].connected=true
| |
| v[1]()
| |
| v[2].connected=false
| |
| end
| |
| end
| |
| end
| |
| | |
| function g:GetEvent(eventName)
| |
| return events[tostring(eventName)] or nil
| |
| end
| |
| | |
| return g
| |
| | |
| -- This may not work yet...
| |
| </pre> | |