local function MakeLetter(ply, args, type) ply:GetTable().LastLetterMade = CurTime() -- Instruct the player's letter window to open local ftext = string.gsub(args, "//", "\n") ftext = string.gsub(ftext, "\\n", "\n") .. "\n\n" .. "Ваш," .. "\n" .. ply:Nick() local length = string.len(ftext) local numParts = math.floor(length / 39) + 1 local tr = {} tr.start = ply:EyePos() tr.endpos = ply:EyePos() + 95 * ply:GetAimVector() tr.filter = ply local trace = util.TraceLine(tr) local letter = ents.Create("letter") letter:SetModel("models/props_c17/paper01.mdl") letter:Setowning_ent(ply) letter:SetPos(trace.HitPos) letter.nodupe = true letter:Spawn() letter:GetTable().Letter = true letter.type = type letter.numPts = numParts local startpos = 1 local endpos = 39 letter.Parts = {} for k = 1, numParts, 1 do table.insert(letter.Parts, string.sub(ftext, startpos, endpos)) startpos = startpos + 39 endpos = endpos + 39 end letter.SID = ply.SID if not ply.maxletters then ply.maxletters = 0 end ply.maxletters = ply.maxletters + 1 timer.Simple(6000, function() if IsValid(letter) then letter:Remove() end end) end local function WriteLetter(ply, args) if args == "" then ply:ChatPrint("not right arg") return "" end MakeLetter(ply, args, 1) return "" end DarkRP.defineChatCommand("event_write", WriteLetter) local function TypeLetter(ply, args) if args == "" then ply:ChatPrint("not right arg") return "" end MakeLetter(ply, args, 2) return "" end DarkRP.defineChatCommand("event_type", TypeLetter) local function RemoveLetters(ply) for k, v in pairs(ents.FindByClass("letter")) do if v.SID == ply.SID then v:Remove() end end ply:ChatPrint("cleaned up all letters") return "" end DarkRP.defineChatCommand("event_removeletters", RemoveLetters)