plytalent

lib

Apr 3rd, 2022 (edited)
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.98 KB | None | 0 0
  1. local sussy,returnpls = pcall(function()
  2.     local libsetting = {
  3.         loglevel=1
  4.     }
  5.     local scheduler = {}
  6.     local buffer = {}
  7.     local real_func = {
  8.         print = print,
  9.         tostring = tostring
  10.     }
  11.  
  12.     local namepool = {}
  13.  
  14.     local random = Random.new()
  15.     local letters = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}
  16.  
  17.     function getRandomLetter()
  18.         return letters[random:NextInteger(1,#letters)]
  19.     end
  20.  
  21.     function getRandomString(length, includeCapitals)
  22.         local length = length or 10
  23.         local str = ''
  24.         for i=1,length do
  25.             local randomLetter = getRandomLetter()
  26.             if includeCapitals and random:NextNumber() > .5 then
  27.                 randomLetter = string.upper(randomLetter)
  28.             end
  29.             str = str .. randomLetter
  30.         end
  31.         if namepool[str] then
  32.             str = getRandomString()
  33.         end
  34.         namepool[str] = str
  35.         return str
  36.     end
  37.  
  38.     function buffer.new()
  39.         local self = setmetatable({},buffer)
  40.         self.Buffer = {}
  41.         return self
  42.     end
  43.  
  44.     function buffer:Read()
  45.         local newstr = ""
  46.         for i=1,#self.buffer do
  47.             newstr = newstr.. tostring(self.buffer[i])
  48.         end
  49.         return newstr
  50.     end
  51.  
  52.     function buffer:Write(data)
  53.         self.buffer[#self.buffer+1] = data
  54.     end
  55.  
  56.     function scheduler.new()
  57.         local self = setmetatable({},scheduler)
  58.         self.loop = game:GetService("RunService").Stepped
  59.         self.__internal_event__ = {}
  60.         self.__internal_var__ = {}
  61.         self.__internal_func__ = {}
  62.         self.funcs = {}
  63.         self.__internal_var__.Changing_event = false
  64.         self.__internal_var__.Executed_Function = true
  65.         self.__internal_var__.execution_index = 1
  66.         self.__internal_var__.RandomString = getRandomString()
  67.         self.__internal_func__.bindtoloop = function()
  68.             self.__internal_event__.MainEventLoop = self.loop:Connect(function(delta)
  69.                 local start_index = 1
  70.                 if self.__internal_var__.execution_index > 1 then
  71.                     start_index = self.__internal_var__.execution_index
  72.                 end
  73.                 local delta = tick()
  74.                 for i=start_index , #self.funcs do
  75.                     if self.funcs[i] then
  76.                         self.__internal_var__.Executed_Function = false
  77.                         self.funcs[i]()
  78.                         self.__internal_var__.Executed_Function = true
  79.                         debug("[Scheduler Event]", "[", self.__internal_var__.RandomString, "]", "Function Took", (tick()-delta)*1000, "ms to Execute")
  80.                         delta = tick()
  81.                         self.__internal_var__.execution_index = i
  82.                         if self.__internal_var__.Changing_event then
  83.                             break
  84.                         end  
  85.                     end
  86.                 end
  87.             end)
  88.             debug("[Scheduler]", "[", self.__internal_var__.RandomString, "]", "Binded To New Loop")
  89.         end
  90.         self.__internal_func__.bindtoloop()
  91.         debug("[Scheduler]", "[", self.__internal_var__.RandomString, "]", "Initialized")
  92.         return self
  93.     end
  94.     function scheduler:Add_Func(self,func,args)
  95.         debug("[Scheduler]", "[", self.__internal_var__.RandomString, "]", "Add Function To scheduler")
  96.         self.funcs[#self.funcs+1] = func
  97.     end
  98.     function scheduler:Remove_Func(self,func)
  99.         for index=1, #self.funcs do
  100.             if self.funcs[index] == func then
  101.                 debug("[Scheduler]", "[", self.__internal_var__.RandomString, "]", "Remove Function From scheduler")
  102.                 self.funcs[index] = nil
  103.             end
  104.         end
  105.     end
  106.     function scheduler:Switch_Event(ev)
  107.         if not ev then
  108.             debug("[Scheduler]", "[", self.__internal_var__.RandomString, "]", "Switching Event Scheduler")
  109.             self.__internal_event__.MainEventLoop:Disconnect()
  110.             self.__internal_var__.Changing_event = true
  111.             while self.__internal_var__.Executed_Function do
  112.                 self.loop:Wait()
  113.             end
  114.             self.__internal_var__.Changing_event = false
  115.             self.loop = ev
  116.             self.__internal_func__.bindtoloop()
  117.         end
  118.     end
  119.  
  120.     local tostring = function(input)
  121.         local typeofinput = typeof(input):lower()
  122.         if typeofinput == "instance" or typeofinput == "userdata" then
  123.             local can_get_name, name = pcall(function()
  124.                 return input.Name
  125.             end)
  126.             if can_get_name then
  127.                 return tostring(name)
  128.             end
  129.         elseif typeofinput == "table" then
  130.             local newbuffer = buffer.new()
  131.             newbuffer:Write("{")
  132.             newbuffer:Write("\n")
  133.             for index,value in pairs(input) do
  134.                 newbuffer:Write(index)
  135.                 newbuffer:Write(" = ")
  136.                 newbuffer:Write(tostring(value))
  137.                 newbuffer:Write(",")
  138.                 newbuffer:Write("\n")
  139.             end
  140.             newbuffer:Write("}")
  141.             return newbuffer:Read()
  142.         end
  143.         return real_func["tostring"](input)
  144.     end
  145.     local print = function(...)
  146.         if libsetting.loglevel > 0 then
  147.             local args = {...}
  148.             local buffer = buffer.new()
  149.             for i=1, #args do
  150.                 buffer:Write(args[i])
  151.                 buffer:Write("\t")
  152.             end
  153.             rconsoleinfo(buffer:Read())
  154.         end
  155.     end
  156.     local debug = function(...)
  157.         if libsetting.loglevel > 4 then
  158.             local args = {"[Debug]",...}
  159.             print(args)
  160.         end
  161.     end
  162.  
  163.     return {
  164.         scheduler   =   scheduler,
  165.         buffer      =   buffer,
  166.         Custom_Functions = {
  167.             tostring = tostring,
  168.             print = print,
  169.             debug = debug
  170.         },
  171.         settings = libsetting
  172.     }
  173. end)
  174. return sussy, returnpls
  175.  
Add Comment
Please, Sign In to add comment