---StringToArray --- --- Reference : Frazzle <3 --- ---@param str string function StringToArray(str) local charCount = #str local strCount = math.ceil(charCount / 99) local strings = {} for i = 1, strCount do local start = (i - 1) * 99 + 1 local clamp = math.clamp(#string.sub(str, start), 0, 99) local finish = ((i ~= 1) and (start - 1) or 0) + clamp strings[i] = string.sub(str, start, finish) end return strings end ---AddText --- --- Reference : Frazzle <3 --- ---@param str string function AddText(str) local str = tostring(str) local charCount = #str if charCount < 100 then AddTextComponentSubstringPlayerName(str) else local strings = StringToArray(str) for s = 1, #strings do AddTextComponentSubstringPlayerName(strings[s]) end end end ---GetLineCount --- --- Reference : Frazzle <3 --- ---@param Text string ---@param X number ---@param Y number ---@param Font number ---@param Scale number ---@param R number ---@param G number ---@param B number ---@param A number ---@param Alignment string ---@param DropShadow boolean ---@param Outline boolean ---@param WordWrap number ---@return function ---@public function GetLineCount(Text, X, Y, Font, Scale, R, G, B, A, Alignment, DropShadow, Outline, WordWrap) ---@type table local Text, X, Y = tostring(Text), (tonumber(X) or 0) / 1920, (tonumber(Y) or 0) / 1080 SetTextFont(Font or 0) SetTextScale(1.0, Scale or 0) SetTextColour(tonumber(R) or 255, tonumber(G) or 255, tonumber(B) or 255, tonumber(A) or 255) if DropShadow then SetTextDropShadow() end if Outline then SetTextOutline() end if Alignment ~= nil then if Alignment == 1 or Alignment == "Center" or Alignment == "Centre" then SetTextCentre(true) elseif Alignment == 2 or Alignment == "Right" then SetTextRightJustify(true) end end if tonumber(WordWrap) and tonumber(WordWrap) ~= 0 then if Alignment == 1 or Alignment == "Center" or Alignment == "Centre" then SetTextWrap(X - ((WordWrap / 1920) / 2), X + ((WordWrap / 1920) / 2)) elseif Alignment == 2 or Alignment == "Right" then SetTextWrap(0, X) else SetTextWrap(X, X + (WordWrap / 1920)) end else if Alignment == 2 or Alignment == "Right" then SetTextWrap(0, X) end end BeginTextCommandLineCount("CELL_EMAIL_BCON") AddText(Text) return GetTextScreenLineCount(X, Y) end ---RenderText --- --- Reference : https://github.com/iTexZoz/NativeUILua_Reloaded/blob/master/UIElements/UIResText.lua#L189 --- ---@param Text string ---@param X number ---@param Y number ---@param Font number ---@param Scale number ---@param R number ---@param G number ---@param B number ---@param A number ---@param Alignment string ---@param DropShadow boolean ---@param Outline boolean ---@param WordWrap number ---@return nil ---@public function RenderText(Text, X, Y, Font, Scale, R, G, B, A, Alignment, DropShadow, Outline, WordWrap) ---@type table local Text, X, Y = tostring(Text), (tonumber(X) or 0) / 1920, (tonumber(Y) or 0) / 1080 SetTextFont(Font or 0) SetTextScale(1.0, Scale or 0) SetTextColour(tonumber(R) or 255, tonumber(G) or 255, tonumber(B) or 255, tonumber(A) or 255) if DropShadow then SetTextDropShadow() end if Outline then SetTextOutline() end if Alignment ~= nil then if Alignment == 1 or Alignment == "Center" or Alignment == "Centre" then SetTextCentre(true) elseif Alignment == 2 or Alignment == "Right" then SetTextRightJustify(true) end end if tonumber(WordWrap) and tonumber(WordWrap) ~= 0 then if Alignment == 1 or Alignment == "Center" or Alignment == "Centre" then SetTextWrap(X - ((WordWrap / 1920) / 2), X + ((WordWrap / 1920) / 2)) elseif Alignment == 2 or Alignment == "Right" then SetTextWrap(0, X) else SetTextWrap(X, X + (WordWrap / 1920)) end else if Alignment == 2 or Alignment == "Right" then SetTextWrap(0, X) end end BeginTextCommandDisplayText("CELL_EMAIL_BCON") AddText(Text) EndTextCommandDisplayText(X, Y) end