local plyMeta = FindMetaTable("Player") --[[--------------------------------------------------------------------------- Show a black screen ---------------------------------------------------------------------------]] local function blackScreen(um) local toggle = um:ReadBool() if toggle then local black = color_black local w, h = ScrW(), ScrH() hook.Add("HUDPaintBackground", "BlackScreen", function() surface.SetDrawColor(black) surface.DrawRect(0, 0, w, h) end) else hook.Remove("HUDPaintBackground", "BlackScreen") end end usermessage.Hook("blackScreen", blackScreen) --[[--------------------------------------------------------------------------- Wrap strings to not become wider than the given amount of pixels ---------------------------------------------------------------------------]] local function charWrap(text, remainingWidth, maxWidth) local totalWidth = 0 text = text:gsub(".", function(char) totalWidth = totalWidth + surface.GetTextSize(char) -- Wrap around when the max width is reached if totalWidth >= remainingWidth then -- totalWidth needs to include the character width because it's inserted in a new line totalWidth = surface.GetTextSize(char) remainingWidth = maxWidth return "\n" .. char end return char end) return text, totalWidth end function DarkRP.textWrap(text, font, maxWidth) local totalWidth = 0 surface.SetFont(font) local spaceWidth = surface.GetTextSize(' ') text = text:gsub("(%s?[%S]+)", function(word) local char = string.sub(word, 1, 1) if char == "\n" or char == "\t" then totalWidth = 0 end local wordlen = surface.GetTextSize(word) totalWidth = totalWidth + wordlen -- Wrap around when the max width is reached if wordlen >= maxWidth then -- Split the word if the word is too big local splitWord, splitPoint = charWrap(word, maxWidth - (totalWidth - wordlen), maxWidth) totalWidth = splitPoint return splitWord elseif totalWidth < maxWidth then return word end -- Split before the word if char == ' ' then totalWidth = wordlen - spaceWidth return '\n' .. string.sub(word, 2) end totalWidth = wordlen return '\n' .. word end) return text end --[[--------------------------------------------------------------------------- Decides whether a given player is in the same room as the local player note: uses a heuristic ---------------------------------------------------------------------------]] function plyMeta:isInRoom() local tracedata = {} tracedata.start = LocalPlayer():GetShootPos() tracedata.endpos = self:GetShootPos() local trace = util.TraceLine(tracedata) return not trace.HitWorld end --[[--------------------------------------------------------------------------- Key name to key int mapping ---------------------------------------------------------------------------]] local keyNames function input.KeyNameToNumber(str) if not keyNames then keyNames = {} for i = 1, 107, 1 do keyNames[input.GetKeyName(i)] = i end end return keyNames[str] end