
Key RequiredUniversal

-- i hate string manipulation, causes headaches every time
function findlast(str,fstr)
local rstr = string.reverse(str)
local rfstr = string.reverse(fstr)
local fstart,fend = string.find(rstr,rfstr)
local rfstart,rfend = (string.len(str)-fend)+1,(string.len(str)-fstart)+1
return rfstart,rfend
end
function splitwords(txt,stopatwordends,chrcap)
local amttodo = string.len(txt)/chrcap
local amt = 0
local rettable = {}
local tr = true
while tr do
local oldamt = amt
if amttodo < 1 then
amt = amt + amttodo*chrcap
else
amt = amt + chrcap
end
local newtxt = string.sub(txt,oldamt,amt)
if stopatwordends and amttodo > 1 then
local pos = findlast(newtxt," ")
if pos then
newtxt = string.sub(newtxt,oldamt,pos)
end
end
if string.len(newtxt) > 0 then
table.insert(rettable,newtxt)
end
amttodo = amttodo - 1
if amttodo <= 0 then
tr = false
end
end
return rettable
end
function gettable(txt,chrcap,stopatwordends,newlines)
if chrcap == nil then
chrcap = 199
end
if stopatwordends == nil then
stopatwordends = false
end
if newlines == nil then
newlines = true
end
local rettable = {}
if newlines and #string.split(txt,"\n") > 1 then
for i,v in pairs(string.split(txt,"\n")) do
if v ~= nil and v ~= "" then
if string.len(v) > chrcap then
local spltable = splitwords(v,stopatwordends,chrcap)
for i,v in pairs(spltable) do
table.insert(rettable,v)
end
else
table.insert(rettable,v)
end
end
end
else
if string.len(txt) > chrcap then
local spltable = splitwords(txt,stopatwordends,chrcap)
for i,v in pairs(spltable) do
table.insert(rettable,v)
end
else
table.insert(rettable,txt)
end
end
return rettable
end
local textservice = game:GetService("TextService")
local textcservice = game:GetService("TextChatService")
function say(txt,channel)
local success,err = pcall(function()
if textcservice.ChatVersion == Enum.ChatVersion.TextChatService then
textcservice:FindFirstChildWhichIsA("ChatInputBarConfiguration").TargetTextChannel:SendAsync(txt)
else
game.ReplicatedStorage.DefaultChatSystemChatEvents.SayMessageRequest:FireServer(txt,channel or "All")
end
end)
end
local ot = false
pcall(function()
local Notify = function(_Title, _Text , Time)
game.StarterGui:SetCore("SendNotification", {Title = _Title, Text = _Text, Icon = "rbxassetid://2541869220", Duration = Time})
end
local Metatable = getrawmetatable(game.StarterGui)
setreadonly(Metatable, false)
local event = require(localplr.PlayerScripts:FindFirstChild("ChatMain",true)).MessagePosted
local oldfunc
oldfunc = hookfunction(event.fire,function(a1,a2,a3)
local args = {a1,a2,a3}
if ot and args[1] == event then
return nil
else
return oldfunc(table.unpack(args))
end
end)
end)
local ids = {}
local idnum = 0
function saytable(tab,delay,antichatlog)
if antichatlog == nil then
antichatlog = true
end
if delay == nil then
delay = 5
end
if antichatlog then
ot = true
end
idnum = idnum + 1
local currid = idnum
ids[currid] = true
coroutine.wrap(function()
for i,v in pairs(tab) do
if ids[currid] == false then
continue
end
local saytxt = v
say(saytxt)
wait(delay)
end
if antichatlog then
ot = false
end
end)()
return currid
end
function stopsaying(id)
ids[id] = false
end
local rettable = {}
rettable.getmessages = gettable
rettable.saymessages = saytable
rettable.say = say
rettable.splitwords = splitwords
rettable.findlast = findlast
rettable.stopsaying = stopsaying
return rettableNo comments yet for this script.



