Advertisement
Guest User

idi nahui zaebal

a guest
Feb 7th, 2016
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.51 KB | None | 0 0
  1. --message box
  2. --online icon16/status_online
  3. surface.CreateFont("mbox_message",{
  4.     font="Segoe UI",
  5.     size=24,
  6.     weight=500
  7. })
  8. --Get Player by Steam ID
  9. local function GPBSID(sid)
  10.     for k,v in pairs(player.GetAll()) do
  11.         if v:SteamID() == sid then
  12.             return v
  13.         end
  14.     end
  15.     return nil
  16. end
  17.  
  18. local function SendMessage(Address,Message)
  19.     net.Start("SanicMessages")
  20.         net.WriteEntity(LocalPlayer())
  21.         net.WriteEntity(Address)
  22.         net.WriteString(Message)
  23.     net.SendToServer()
  24. end
  25.  
  26. local Chat = {}
  27. local showed = -1
  28. net.Receive("SanicMessages",function()
  29.     local Sender = net.ReadEntity()
  30.     local Message = net.ReadString()
  31.     ShowMessage(Sender,Message)
  32. end)
  33. function ShowMessage(sender,message)
  34.     showed = showed + 1
  35.     surface.SetFont("mbox_message")
  36.     local tw1,th = surface.GetTextSize(message)
  37.     local tw2 = surface.GetTextSize("New message from "..sender:GetName())
  38.     local tw = tw1
  39.     if tw1 < tw2 then tw = tw2 end
  40.     local de = {}
  41.     de.main = vgui.Create("DPanel")
  42.     de.main:SetAlpha(0)
  43.     de.main:SetSize(tw+20+48,58)
  44.     de.main.Paint = function(self,w,h)
  45.         draw.RoundedBox(0,0,0,w,h,Color(0,0,0,150))
  46.     end
  47.     de.main.avatar = vgui.Create("AvatarImage",de.main)
  48.     de.main.avatar:SetSize(48,48)
  49.     de.main.avatar:SetPos(5,5)
  50.     de.main.avatar:SetPlayer(sender,64)
  51.     de.main.new = vgui.Create("DLabel",de.main)
  52.     de.main.new:SetPos(58,5)
  53.     de.main.new:SetText("New message from "..sender:GetName())
  54.     de.main.new:SetFont("mbox_message")
  55.     de.main.new:SizeToContents()
  56.     de.main.textbox = vgui.Create("DLabel",de.main)
  57.     de.main.textbox:SetPos(58,30)
  58.     de.main.textbox:SetFont("mbox_message")
  59.     de.main.textbox:SetText(message)
  60.     de.main.textbox:SizeToContents()
  61.     de.main:SetPos(10,th+((th*1+37)*showed))
  62.     local y = 0
  63.     timer.Create("ShowMessageSlow"..message..math.random(-999,999),0.001,255/50,function()
  64.         y = y + 50
  65.         de.main:SetAlpha(y)    
  66.     end)
  67.     surface.PlaySound("garrysmod/content_downloaded.wav")
  68.     timer.Create("MessageRemove"..message..math.random(-999,999),10,1,function() //because fuck timers with one name
  69.         de.main:Remove()
  70.         showed = showed - 1
  71.     end)
  72.     local wtf = false
  73.     for k,v in pairs(Chat) do
  74.         if v.Player == sender:SteamID() then
  75.             wtf = true
  76.             table.insert(v.History,{Sender = sender:SteamID(),Message = message})
  77.         end
  78.     end
  79.     if wtf == false then
  80.         table.insert(Chat,{Player = sender:SteamID(),History = {{Sender = sender:SteamID(), Message = message,Sended = false}}})
  81.     end
  82. end
  83.  
  84. local function CreateChatWindow()  
  85.     local mchat = vgui.Create("DFrame")
  86.     mchat:SetSize(ScrW()/3,ScrH()/2)
  87.     mchat:Center()
  88.     mchat:SetSizable(true)
  89.     mchat:MakePopup()
  90.     mchat.ps = vgui.Create("DPropertySheet",mchat)
  91.     mchat.ps:Dock(FILL)
  92.     for k,v in pairs(Chat) do
  93.         local chatpanel = vgui.Create("DPanel",mchat.ps)
  94.         chatpanel.Player = v.Player
  95.         chatpanel:SetBackgroundColor(Color(255,255,255,0))
  96.         chatpanel.enter = vgui.Create("DTextEntry",chatpanel)
  97.         chatpanel.enter:Dock(BOTTOM)
  98.         chatpanel.enter:DockMargin(0,5,0,0)
  99.         chatpanel.enter.OnKeyCodeTyped = function(self,key)
  100.             if key == KEY_ENTER then
  101.                 SendMessage(GPBSID(v.Player),self:GetValue())
  102.                 table.insert(Chat[k].History,{Sender = LocalPlayer():SteamID(),Message = self:GetValue(),Sended=true})
  103.                 chatpanel.history:Clear()
  104.                 for x,y in pairs(v.History) do
  105.                     local pnl = vgui.Create("DPanel")
  106.                     pnl:Dock(TOP)
  107.                     pnl:SetHeight(26)
  108.                     pnl.avatar = vgui.Create("AvatarImage",pnl)
  109.                     pnl.avatar:SetPlayer(GPBSID(y.Sender),16)
  110.                     pnl.avatar:SetSize(16,16)
  111.                     pnl.avatar:SetPos(5,5)
  112.                     pnl.text = vgui.Create("DLabel",pnl)
  113.                     pnl.text:SetPos(26,6)
  114.                     pnl.text:SetText(y.Message)
  115.                     pnl.text:SizeToContents()
  116.                     pnl.text:SetTextColor(Color(0,0,0,255))
  117.                     if y.Sended then
  118.                         pnl.Paint = function(self,w,h)
  119.                             local tw = surface.GetTextSize(y.Message)
  120.                             tw = tw + 12.5 + 16
  121.                             draw.RoundedBox(5,1,1,tw,26,Color(255,255,255,255))
  122.                         end
  123.                     else
  124.                         pnl.Paint = function(self,w,h)
  125.                             local tw = surface.GetTextSize(y.Message)
  126.                             tw = tw + 12.5 + 16
  127.                             draw.RoundedBox(5,1,1,tw,26,Color(218,227,237,255))
  128.                         end        
  129.                     end
  130.                     chatpanel.history:AddItem(pnl)
  131.                 end
  132.             end
  133.         end
  134.         chatpanel.history = vgui.Create("DScrollPanel",chatpanel)
  135.         chatpanel.history:Dock(FILL)
  136.         chatpanel.history.LH = v.History
  137.         chatpanel.history.Think = function(self)
  138.             if v.History != self.LH then
  139.                 self:Clear()
  140.                 for x,y in pairs(v.History) do
  141.                     local pnl = vgui.Create("DPanel")
  142.                     pnl:Dock(TOP)
  143.                     pnl:SetHeight(26)
  144.                     pnl.avatar = vgui.Create("AvatarImage",pnl)
  145.                     pnl.avatar:SetPlayer(GPBSID(y.Sender),16)
  146.                     pnl.avatar:SetSize(16,16)
  147.                     pnl.avatar:SetPos(5,5)
  148.                     pnl.text = vgui.Create("DLabel",pnl)
  149.                     pnl.text:SetPos(26,6)
  150.                     pnl.text:SetText(y.Message)
  151.                     pnl.text:SizeToContents()
  152.                     pnl.text:SetTextColor(Color(0,0,0,255))
  153.                     if y.Sended then
  154.                         pnl.Paint = function(self,w,h)
  155.                             local tw = surface.GetTextSize(y.Message)
  156.                             tw = tw + 12.5 + 16
  157.                             draw.RoundedBox(5,1,1,tw,26,Color(255,255,255,255))
  158.                         end
  159.                     else
  160.                         pnl.Paint = function(self,w,h)
  161.                             local tw = surface.GetTextSize(y.Message)
  162.                             tw = tw + 12.5 + 16
  163.                             draw.RoundedBox(5,1,1,tw,26,Color(218,227,237,255))
  164.                         end        
  165.                     end
  166.                     self:AddItem(pnl)
  167.                     self:ScrollToChild(pnl)
  168.                 end
  169.             end
  170.         end
  171.         for x,y in pairs(v.History) do
  172.             local pnl = vgui.Create("DPanel")
  173.             pnl:Dock(TOP)
  174.             pnl:SetHeight(26)
  175.             pnl.avatar = vgui.Create("AvatarImage",pnl)
  176.             pnl.avatar:SetPlayer(GPBSID(y.Sender),16)
  177.             pnl.avatar:SetSize(16,16)
  178.             pnl.avatar:SetPos(5,5)
  179.             pnl.text = vgui.Create("DLabel",pnl)
  180.             pnl.text:SetPos(26,6)
  181.             pnl.text:SetText(y.Message)
  182.             pnl.text:SizeToContents()
  183.             pnl.text:SetTextColor(Color(0,0,0,255))
  184.             if y.Sended then
  185.                 pnl.Paint = function(self,w,h)
  186.                     local tw = surface.GetTextSize(y.Message)
  187.                     tw = tw + 12.5 + 16
  188.                     draw.RoundedBox(5,1,1,tw,26,Color(255,255,255,255))
  189.                 end
  190.             else
  191.                 pnl.Paint = function(self,w,h)
  192.                     local tw = surface.GetTextSize(y.Message)
  193.                     tw = tw + 12.5 + 16
  194.                     draw.RoundedBox(5,1,1,tw,26,Color(218,227,237,255))
  195.                 end        
  196.             end
  197.             chatpanel.history:AddItem(pnl)
  198.         end
  199.         mchat.ps:AddSheet(GPBSID(chatpanel.Player):GetName(),chatpanel,"icon16/status_online.png")
  200.     end
  201. end
  202. concommand.Add("sanicchat_open",CreateChatWindow)
  203. function CreateChat(ply,cmd,args)
  204.     local sid = args[1]..args[2]..args[3]..args[4]..args[5]
  205.     table.insert(Chat,{Player=sid,History={}})
  206.     print("Chat with "..GPBSID(sid):GetName().." ("..sid..") created")
  207. end
  208. concommand.Add("sanicchat_create",CreateChat)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement