Advertisement
HK47

ыфвыв

Oct 19th, 2014
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.82 KB | None | 0 0
  1. AddCSLuaFile()
  2.  
  3. ENT.Type = "anim"
  4. ENT.Base = "base_anim"
  5. ENT.Spawnable = true
  6. ENT.PrintName = "Teleporter"
  7. ENT.Category = "TELEPORTERS"
  8.  
  9. ENT.health = 100
  10.  
  11. if SERVER then
  12.     util.AddNetworkString("create_a_teleport")
  13.     util.AddNetworkString("teleport_player_kekc")
  14.     util.AddNetworkString("teleport_change_health")
  15. else
  16.     surface.CreateFont("teleporters_font1", {
  17.         font = "Segoe UI",
  18.         size = 1000,
  19.         weight = 0,
  20.         blursize = 0,
  21.         scanlines = 0,
  22.         antialias = true,
  23.         underline = false,
  24.         italic = false,
  25.         strikeout = false,
  26.         symbol = false,
  27.         rotary = false,
  28.         shadow = false,
  29.         additive = false,
  30.         outline = false,
  31.     })
  32. end
  33.  
  34. function ENT:Draw()
  35.     if SERVER then return end
  36.    
  37.     self:DrawModel()
  38.    
  39.     if self.teleport then
  40.         local private = "<>"
  41.         if self.teleport.private then private = "Yes" else private = "No" end
  42.    
  43.         cam.Start3D2D(self:GetPos() + Vector(0, 0, 70), Angle(0, CurTime() * 60, 90), 0.1)
  44.             draw.DrawText("Name: " .. self.teleport.name, "teleporters_font1", 0, 0, Color(255, 255, 255), TEXT_ALIGN_CENTER)
  45.             draw.DrawText("Owner: " .. self.teleport.owner:Nick(), "teleporters_font1", 0, 80, Color(255, 255, 255), TEXT_ALIGN_CENTER)
  46.             draw.DrawText(self.teleport.desc, "teleporters_font1", 0, 160, Color(255, 255, 255), TEXT_ALIGN_CENTER)
  47.             draw.DrawText("Private: " .. private, "teleporters_font1", 0, 240, Color(255, 255, 255), TEXT_ALIGN_CENTER)
  48.             draw.DrawText("Health: " .. self.health, "teleporters_font1", 0, 320, Color(255 - self.health * 2.55, self.health * 2.55, 0), TEXT_ALIGN_CENTER)
  49.         cam.End3D2D()
  50.        
  51.         cam.Start3D2D(self:GetPos() + Vector(0, 0, 70), Angle(0, 180 + CurTime() * 60, 90), 0.1)
  52.             draw.DrawText("Name: " .. self.teleport.name, "teleporters_font1", 0, 0, Color(255, 255, 255), TEXT_ALIGN_CENTER)
  53.             draw.DrawText("Owner: " .. self.teleport.owner:Nick(), "teleporters_font1", 0, 80, Color(255, 255, 255), TEXT_ALIGN_CENTER)
  54.             draw.DrawText(self.teleport.desc, "teleporters_font1", 0, 160, Color(255, 255, 255), TEXT_ALIGN_CENTER)
  55.             draw.DrawText("Private: " .. private, "teleporters_font1", 0, 240, Color(255, 255, 255), TEXT_ALIGN_CENTER)
  56.             draw.DrawText("Health: " .. self.health, "teleporters_font1", 0, 320, Color(255 - self.health * 2.55, self.health * 2.55, 0), TEXT_ALIGN_CENTER)
  57.         cam.End3D2D()
  58.     end
  59. end
  60.  
  61. function ENT:OnTakeDamage(dmg)
  62.     if CLIENT then return end
  63.     if not GetConVar("tps_kekc_enablehp"):GetBool() then return end
  64.    
  65.     self.health = math.Round(self.health - dmg:GetDamage() / 10)
  66.    
  67.     if self.health <= 0 then
  68.         self:EmitSound("phx/explode00.wav", 400, 100)
  69.        
  70.         local ef = EffectData()
  71.         ef:SetOrigin(self:GetPos())
  72.         util.Effect("Explosion", ef)
  73.        
  74.         self:Remove()
  75.        
  76.         return
  77.     end
  78.    
  79.     net.Start("teleport_change_health")
  80.         net.WriteInt(self.health, 32)
  81.         net.WriteEntity(self)
  82.     net.Broadcast()
  83. end
  84.  
  85. function ENT:Initialize()
  86.     if CLIENT then     
  87.         return
  88.     end
  89.  
  90.     self:SetModel("models/props_lab/teleplatform.mdl")
  91.     self:SetMoveType(MOVETYPE_VPHYSICS)
  92.     self:SetSolid(SOLID_VPHYSICS)
  93.     self:PhysicsInit(SOLID_VPHYSICS)
  94. end
  95.  
  96. function ENT:PhysicsCollide(data, physobj)
  97.     if CLIENT then return end
  98. end
  99.  
  100. local next_use = 0
  101. function ENT:Use(ply, caller)
  102.     if not GetConVar("tps_kekc_enable"):GetBool() then if CurTime() > next_use then ply:ChatPrint("Teleporters is not enable on this server!") next_use = CurTime() + 1 end return end
  103.  
  104.     if not self.Active then
  105.         umsg.Start("open_menu_kekc", ply)
  106.             umsg.Entity(ply)
  107.             umsg.Entity(self)
  108.         umsg.End()
  109.        
  110.         return
  111.     end
  112.    
  113.     umsg.Start("use_teleport_kekc", ply)
  114.         umsg.Entity(ply)
  115.         umsg.Entity(self)
  116.     umsg.End()
  117. end
  118.  
  119. function ENT:SpawnFunction(ply, tr, name)
  120.     if not tr.Hit then return end
  121.  
  122.     local pos = tr.HitPos + tr.HitNormal * 32
  123.    
  124.     local ent = ents.Create(name)
  125.     ent:SetPos(pos)
  126.     ent:Spawn()
  127.     ent:Activate()
  128.    
  129.     if IsValid(ent:GetPhysicsObject()) then ent:GetPhysicsObject():Wake() else return NULL end
  130.    
  131.     return ent
  132. end
  133.  
  134. function ENT:OnRemove()
  135.     table.RemoveByValue(TELEPORTS_TABLE_KEKC, self.teleport)
  136. end
  137.  
  138.  
  139. // CALLBACK FUNCTIONS
  140.  
  141. // Callback function creates a teleport
  142. local function CreateTeleport()
  143.     local name = net.ReadString()
  144.     local desc = net.ReadString()
  145.     local ply = net.ReadEntity()
  146.     local lab = net.ReadBit()
  147.     local ent = net.ReadEntity()
  148.    
  149.     ent.teleport = {}
  150.     ent.teleport.name = name
  151.     ent.teleport.entity = ent
  152.     ent.teleport.private = util.tobool(lab)
  153.     ent.teleport.desc = desc
  154.     ent.teleport.owner = ply
  155.     ent.Active = true
  156.    
  157.     umsg.Start("kts_create_client")
  158.         umsg.Entity(ent)
  159.         umsg.String(name)
  160.         umsg.Bool(util.tobool(lab))
  161.         umsg.String(desc)
  162.         umsg.Entity(ply)
  163.     umsg.End()
  164.                
  165.     table.insert(TELEPORTS_TABLE_KEKC, ent.teleport)
  166. end
  167. net.Receive("create_a_teleport", CreateTeleport)
  168.  
  169.  
  170. // Callback function teleports player
  171. local function TeleportPlayer()
  172.     local ply = net.ReadEntity()
  173.     local tp = net.ReadEntity()
  174.    
  175.     if IsValid(ply) and ply:Alive() and IsValid(tp) and SERVER then
  176.         if not tp.teleport.private then
  177.             ply:SetPos(tp:GetPos())
  178.             //ply:EmitSound("garrysmod/save_load" .. math.random(1, 4) .. ".wav")
  179.             ply:EmitSound("hl1/ambience/particle_suck1.wav")
  180.             ply:SetEyeAngles(Angle(0, tp:GetAngles().yaw, 0))
  181.            
  182.             umsg.Start("effect_teleport_kekc", ply)
  183.                 umsg.Entity(ply)
  184.             umsg.End()
  185.         else
  186.             if ply != tp.teleport.owner then
  187.                 ply:ChatPrint("This teleport is private!")
  188.             else
  189.                 ply:SetPos(tp:GetPos())
  190.                 //ply:EmitSound("garrysmod/save_load" .. math.random(1, 4) .. ".wav")
  191.                 ply:EmitSound("hl1/ambience/particle_suck1.wav")
  192.                 ply:SetEyeAngles(Angle(0, tp:GetAngles().yaw, 0))
  193.                
  194.                 umsg.Start("effect_teleport_kekc", ply)
  195.                     umsg.Entity(ply)
  196.                 umsg.End()
  197.             end
  198.         end
  199.     else
  200.         ply:ChatPrint("This teleport is not valid or you're not alive")
  201.     end
  202. end
  203. net.Receive("teleport_player_kekc", TeleportPlayer)
  204.  
  205.  
  206. // Callback function changes health on client
  207. local function ChangeHealth_cl()
  208.     if SERVER then return end
  209.  
  210.     local hp = net.ReadInt(32)
  211.     local tp = net.ReadEntity()
  212.    
  213.     tp.health = hp
  214. end
  215. net.Receive("teleport_change_health", ChangeHealth_cl)
  216.  
  217.  
  218. // Callback function opens the menu
  219. local function OpenTeleportMenu(data)
  220.     if SERVER then return end
  221.  
  222.     local ply = data:ReadEntity()
  223.     local tp = data:ReadEntity()
  224.    
  225.     if ply.Menu_teleports_kekc and IsValid(ply.Menu_teleports_kekc) then return end
  226.    
  227.     ply.Menu_teleports_kekc = vgui.Create("DFrame")
  228.    
  229.     local win = ply.Menu_teleports_kekc
  230.     win:SetSize(600, 300)
  231.     win:Center()
  232.     win:SetTitle("Menu")
  233.     win:MakePopup()
  234.     win.Paint = function()
  235.         if win and IsValid(win) then
  236.             local w = win:GetWide()
  237.             local h = win:GetTall()
  238.            
  239.             draw.RoundedBox(0, 0, 0, w, h, Color(0, 0, 0, 220))
  240.         end
  241.     end
  242.    
  243.     local l = vgui.Create("DListView", win)
  244.     l:SetSize(580, 260)
  245.     l:SetPos(10, 30)
  246.     l:AddColumn("Name")
  247.     l:AddColumn("Owner")
  248.     l:AddColumn("Description")
  249.     l:AddColumn("Private")
  250.     l:AddColumn("Distance")
  251.     l.OnClickLine = function(parent, line, isselected)
  252.         local entity = NULL
  253.            
  254.         for k, v in pairs(TELEPORTS_TABLE_KEKC) do
  255.             if v.name == line:GetValue(1) then
  256.                 entity = v.entity
  257.             end
  258.         end
  259.        
  260.         if entity == tp then ply:ChatPrint("You can't teleport to youself!") return end
  261.    
  262.         //now we teleports player
  263.         net.Start("teleport_player_kekc")
  264.             net.WriteEntity(ply)
  265.             net.WriteEntity(entity)
  266.         net.SendToServer()
  267.        
  268.         if win and IsValid(win) then win:Close() end
  269.     end
  270.    
  271.     for k, v in pairs(TELEPORTS_TABLE_KEKC) do
  272.         if v.entity == tp then continue end
  273.        
  274.         local private = "<>"
  275.         if v.private then private = "Yes" else private = "No" end
  276.        
  277.         l:AddLine(v.name, v.owner:Nick(), v.desc, private, math.Round(tp:GetPos():Distance(v.entity:GetPos())))
  278.     end
  279. end
  280. usermessage.Hook("use_teleport_kekc", OpenTeleportMenu)
  281.  
  282.  
  283. // Callback function opens the menu
  284. local function CreateEffect(data)
  285.     if SERVER then return end
  286.  
  287.     local bloom = 1
  288.     local ply = data:ReadEntity()
  289.    
  290.     hook.Add("RenderScreenspaceEffects", "stuff_storm_hp" .. ply:EntIndex(), function()
  291.         if bloom <= 0 then hook.Remove("RenderScreenspaceEffects", "stuff_storm_hp" .. ply:EntIndex()) return end
  292.        
  293.         bloom = bloom - 0.003
  294.        
  295.         local tab = {}
  296.         tab["$pp_colour_addr"] = 0
  297.         tab["$pp_colour_addg"] = 0
  298.         tab["$pp_colour_addb"] = 0
  299.         tab["$pp_colour_brightness"] = bloom
  300.         tab["$pp_colour_contrast"] = 1
  301.         tab["$pp_colour_colour"] = 1
  302.         tab["$pp_colour_mulr"] = 0
  303.         tab["$pp_colour_mulg"] = 0
  304.         tab["$pp_colour_mulb"] = 0
  305.          
  306.         DrawColorModify(tab)
  307.     end)
  308. end
  309. usermessage.Hook("effect_teleport_kekc", CreateEffect)
  310.  
  311.  
  312. // Callback function opens menu
  313. local function OpenMenu(data)
  314.     if SERVER then return end
  315.  
  316.     local ply = data:ReadEntity()
  317.     local ent = data:ReadEntity()
  318.    
  319.     if ply.kts_menu2 and IsValid(ply.kts_menu2) then return end
  320.    
  321.     ply.kts_menu2 = vgui.Create("DFrame")
  322.    
  323.     local win = ply.kts_menu2
  324.     win:SetSize(200, 130)
  325.     win:Center()
  326.     win:SetTitle("Options")
  327.     win:ShowCloseButton(true)
  328.     win:MakePopup()
  329.     win.Paint = function()
  330.         if win and win:IsActive() then
  331.             local w = win:GetWide()
  332.             local h = win:GetTall()
  333.            
  334.             draw.RoundedBox(0, 0, 0, w, h, Color(0, 0, 0, 220))
  335.         end
  336.     end
  337.        
  338.     local name = vgui.Create("DTextEntry", win)
  339.     name:SetPos(10, 30)
  340.     name:SetSize(180, 20)
  341.     name:SetText("Name")
  342.        
  343.     local desc = vgui.Create("DTextEntry", win)
  344.     desc:SetPos(10, 60)
  345.     desc:SetSize(180, 20)
  346.     desc:SetText("Description")
  347.        
  348.     local ch = vgui.Create("DCheckBoxLabel", win)
  349.     ch:SetPos(10, 80)
  350.     ch:SetValue(0)
  351.     ch:SetText("Private?")
  352.     ch:SizeToContents()
  353.        
  354.     local accept = vgui.Create("DButton", win)
  355.     accept:SetPos(10, 100)
  356.     accept:SetSize(180, 20)
  357.     accept:SetText("Accept")
  358.     accept.DoClick = function()
  359.         if win and win:IsActive() then
  360.             local n, d, p, c = name:GetValue(), desc:GetValue(), LocalPlayer(), ch:GetChecked()
  361.             local close
  362.                
  363.             if string.len(n) > 15 then p:ChatPrint("You have reached maximum symbols in Name text box!") return end
  364.             if string.len(n) > 40 then p:ChatPrint("You have reached maximum symbols in Description text box!") return end
  365.                
  366.             for k, v in pairs(TELEPORTS_TABLE_KEKC) do
  367.                 if v.name == n then close = true break end
  368.             end
  369.                
  370.             if close then p:ChatPrint("Teleport with " .. n .. " name is already exists!") return end
  371.                
  372.             net.Start("create_a_teleport")
  373.                 net.WriteString(n)
  374.                 net.WriteString(d)
  375.                 net.WriteEntity(p)
  376.                 net.WriteBit(c)
  377.                 net.WriteEntity(ent)
  378.             net.SendToServer()
  379.                
  380.             win:Close()
  381.         end
  382.     end
  383. end
  384. usermessage.Hook("open_menu_kekc", OpenMenu)
  385.  
  386.  
  387. // Callback function makes client variables
  388. local function CreateClient(data)
  389.     local ent = data:ReadEntity()
  390.     local n = data:ReadString()
  391.     local c = data:ReadBool()
  392.     local d = data:ReadString()
  393.     local p = data:ReadEntity()
  394.  
  395.     ent.teleport = {}
  396.     ent.teleport.name = n
  397.     ent.teleport.entity = ent
  398.     ent.teleport.private = c
  399.     ent.teleport.desc = d
  400.     ent.teleport.owner = p
  401.    
  402.     table.insert(TELEPORTS_TABLE_KEKC, ent.teleport)
  403. end
  404. usermessage.Hook("kts_create_client", CreateClient)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement