Advertisement
artemx32

sh_camtool.lua

Oct 29th, 2019
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 18.17 KB | None | 0 0
  1. if CLIENT then
  2.  
  3.     local T = { };
  4.     T.OPEN = false;
  5.     T.OPENLOCATOR = false;
  6.     T.STACK = { };
  7.     T.MAIN = { };
  8.     T.INTERVAL = 0;
  9.     T.ID_INCREMENTOR = 1;
  10.     T.RENDER = function()
  11.         T.INTERVAL = T.INTERVAL + 3;
  12.         for i, params in pairs(T.STACK) do
  13.             local ent  = Entity(params['entity']);
  14.             local v    = params['vector'];
  15.             local a    = params['angle'];
  16.             local fov  = params['fov'];
  17.             local bnd  = params['bounds'];
  18.             local b    = params['enable'];
  19.             local lbl  = params['label'];
  20.             local nrz  = params['nearz'];
  21.             local frz  = params['farz'];
  22.             local spd  = params['showspeed'];
  23.             local ARS  = params['ars'];
  24.             if T.INTERVAL >= 100 then
  25.                 T.DELIVER_ARS_DATA(params['entity']);
  26.             end
  27.             if IsValid(ent) and b then
  28.                 local Speed = math.floor(-ent:GetVelocity():Dot(ent:GetAngles():Forward()) * 0.06858);
  29.                 --render.SetScissorRect(ScrW() * bnd[1], ScrH() * bnd[2], ScrW() * bnd[3], ScrH() * bnd[4], true);
  30.                     local ps = string.Explode(',', v);
  31.                     local as = string.Explode(',', a);
  32.                     render.RenderView( {
  33.                         origin = ent:LocalToWorld(Vector(ps[1], ps[2], ps[3])),
  34.                         angles = ent:LocalToWorldAngles(Angle(as[1], as[2], as[3])),
  35.                         x = ScrW() * bnd[1], y = ScrH() * bnd[2],
  36.                         w = ScrW() * bnd[3], h = ScrH() * bnd[4],
  37.                         fov = fov,
  38.                         drawviewmodel = false,
  39.                         znear = nrz,
  40.                         zfar = frz
  41.                     } )
  42.                     draw.NoTexture();
  43.                     surface.SetTextColor(255, 255, 255, 255);
  44.                     surface.SetTextPos(ScrW() * bnd[1] + ScrW() * 0.01, ScrH() * bnd[2]);
  45.                     surface.SetFont('Trebuchet24');
  46.                     local W, H = surface.GetTextSize(lbl);
  47.                     surface.DrawText(lbl .. (spd and ( ', ' .. Speed .. ' km/h' ) or '' ) .. '|' .. ARS);
  48.                     surface.SetDrawColor(0, 0, 0, 150);
  49.                     surface.DrawRect(ScrW() * bnd[1] + ScrW() * 0.01, ScrH() * bnd[2], W, H);
  50.                 --render.SetScissorRect(0, 0, 0, 0, false);
  51.             end
  52.         end
  53.     end
  54.     T.ADD = function()
  55.         local t = { };
  56.         t['entity'] = LocalPlayer():EntIndex();
  57.         t['vector'] = '0,0,0';
  58.         t['angle'] = '0,0,0';
  59.         t['bounds'] = { 0.5, 0.5, 0.25, 0.25 }; -- multiplicator of resolution
  60.         t['fov'] = 70;
  61.         t['enable'] = true;
  62.         t['showspeed'] = false;
  63.         t['uid'] = T.ID_INCREMENTOR;
  64.         t['label'] = '';
  65.         t['nearz'] = 0;
  66.         t['farz'] = 200;
  67.         t['ars'] = '-';
  68.         table.insert(T.STACK, t);
  69.         t = nil;
  70.         T.ID_INCREMENTOR = T.ID_INCREMENTOR + 1;
  71.     end
  72.     T.CHANGEPARAMS = function(id)
  73.        
  74.         local F = vgui.Create('DFrame');
  75.         F:SetSize(300, 570);
  76.         F:Center();
  77.         F:MakePopup();
  78.         F:SetBackgroundBlur(true);
  79.         F:SetTitle('Camera settings');
  80.  
  81.         local CPY = vgui.Create('DButton', F);
  82.         CPY:SetSize(100, 22);
  83.         CPY:SetText('Copy to new');
  84.         CPY:SetPos(30, 30);
  85.         CPY.DoClick = function()
  86.             F:Close();
  87.             T.CLONE(T.TABLE_INDEX_BY_UID(id));
  88.         end
  89.        
  90.         local str = nil;
  91.  
  92.         if T.STACK[T.TABLE_INDEX_BY_UID(id)]['label'] != '' then
  93.             str = file.Read('cams/'..T.STACK[T.TABLE_INDEX_BY_UID(id)]['label']..'.json', 'DATA');
  94.         end
  95.  
  96.         local btnLbl = str == nil and 'Save camera' or 'Override camera';
  97.  
  98.         local SAVE = vgui.Create('DButton', F);
  99.         SAVE:SetSize(100, 22);
  100.         SAVE:SetText(btnLbl);
  101.         SAVE:SetPos(F:GetWide() - SAVE:GetWide() - 30, 30);
  102.         SAVE.DoClick = function()
  103.             local t = T.STACK[T.TABLE_INDEX_BY_UID(id)];
  104.             local str = util.TableToJSON(t);
  105.             local filename = string.Trim(t['label']);
  106.             if filename == '' then
  107.                 F:Hide();
  108.                 local f = vgui.Create('DFrame');
  109.                 f:SetSize(300, 70);
  110.                 f:Center();
  111.                 f:MakePopup();
  112.                 f:SetBackgroundBlur(true);
  113.                 f:SetTitle('Enter name of the camera');
  114.                 local entr = vgui.Create('DTextEntry', f);
  115.                 entr:SetPos(20, 30);
  116.                 entr:SetSize(230, 20);
  117.                 local ok = vgui.Create('DButton', f);
  118.                 ok:SetPos(250, 30);
  119.                 ok:SetSize(30, 20);
  120.                 ok:SetText('OK');
  121.                 ok.DoClick = function()
  122.                     local str = string.Trim(entr:GetText());
  123.                     if str != '' then
  124.                         filename = str;
  125.                         file.Write('cams/' .. filename .. '.json', str);
  126.                     end
  127.                     f:Close();
  128.                 end
  129.                 entr.OnEnter = ok.DoClick
  130.                 f.OnClose = function() 
  131.                     F:Show();
  132.                 end
  133.             else
  134.                 file.Write('cams/' .. filename .. '.json', str);
  135.             end
  136.         end
  137.        
  138.         local ID = vgui.Create('DTextEntry', F);
  139.         ID:SetNumeric(true);
  140.         ID:SetPos(100, 70);
  141.         ID:SetSize(40, 22);
  142.        
  143.         local IDD = vgui.Create('DLabel', F);
  144.         IDD:SetPos(30, 70);
  145.         IDD:SetText('Ent ID');
  146.        
  147.         local VEC = vgui.Create('DTextEntry', F);
  148.         VEC:SetPos(100, 100);
  149.         VEC:SetSize(150, 22);  
  150.        
  151.         local VECC = vgui.Create('DLabel', F);
  152.         VECC:SetPos(30, 100);
  153.         VECC:SetText('Pos offset');
  154.        
  155.         local ANG = vgui.Create('DTextEntry', F);
  156.         ANG:SetPos(100, 130);
  157.         ANG:SetSize(150, 22);  
  158.        
  159.         local ANGG = vgui.Create('DLabel', F);
  160.         ANGG:SetPos(30, 130);
  161.         ANGG:SetText('Ang offset');
  162.        
  163.         local CAMX = vgui.Create('DTextEntry', F);
  164.         CAMX:SetPos(100, 170);
  165.         CAMX:SetSize(40, 22);  
  166.         CAMX:SetNumeric(true);
  167.        
  168.         local CAMXX = vgui.Create('DLabel', F);
  169.         CAMXX:SetPos(30, 170);
  170.         CAMXX:SetText('Draw X');
  171.        
  172.         local CAMY = vgui.Create('DTextEntry', F);
  173.         CAMY:SetPos(100, 200);
  174.         CAMY:SetSize(40, 22);
  175.         CAMY:SetNumeric(true);
  176.        
  177.         local CAMYY = vgui.Create('DLabel', F);
  178.         CAMYY:SetPos(30, 200);
  179.         CAMYY:SetText('Draw Y');
  180.        
  181.         local CAMW = vgui.Create('DTextEntry', F);
  182.         CAMW:SetPos(100, 240);
  183.         CAMW:SetSize(40, 22);  
  184.         CAMW:SetNumeric(true);
  185.        
  186.         local CAMWW = vgui.Create('DLabel', F);
  187.         CAMWW:SetPos(30, 240);
  188.         CAMWW:SetText('Draw W');
  189.        
  190.         local CAMH = vgui.Create('DTextEntry', F);
  191.         CAMH:SetPos(100, 270);
  192.         CAMH:SetSize(40, 22);  
  193.         CAMH:SetNumeric(true);
  194.        
  195.         local CAMHH = vgui.Create('DLabel', F);
  196.         CAMHH:SetPos(30, 270);
  197.         CAMHH:SetText('Draw H');
  198.        
  199.         local FOV = vgui.Create('DTextEntry', F);
  200.         FOV:SetPos(100, 310);
  201.         FOV:SetSize(40, 22);   
  202.         FOV:SetNumeric(true);
  203.        
  204.         local FOVV = vgui.Create('DLabel', F);
  205.         FOVV:SetPos(30, 310);
  206.         FOVV:SetText('FOV');
  207.        
  208.         local Enbl = vgui.Create('DCheckBoxLabel', F);
  209.         Enbl:SetSize(100, 40);
  210.         Enbl:SetPos(100, 370);
  211.         Enbl:SetText('Toggle enabled');
  212.  
  213.         local Spd = vgui.Create('DCheckBoxLabel', F);
  214.         Spd:SetSize(100, 40);
  215.         Spd:SetPos(100, 385);
  216.         Spd:SetText('Show kmh');   
  217.  
  218.         local LBL = vgui.Create('DTextEntry', F);
  219.         LBL:SetPos(100, 400);
  220.         LBL:SetSize(150, 22);
  221.                
  222.         local LBLL = vgui.Create('DLabel', F);
  223.         LBLL:SetPos(30, 400);
  224.         LBLL:SetText('Camera label');
  225.  
  226.         local NEARZ = vgui.Create('DTextEntry', F);
  227.         NEARZ:SetPos(120, 430);
  228.         NEARZ:SetSize(60, 22); 
  229.         NEARZ:SetNumeric(true);
  230.                
  231.         local NEARZZ = vgui.Create('DLabel', F);
  232.         NEARZZ:SetPos(30, 430);
  233.         NEARZZ:SetText('Camera ZNear');
  234.         NEARZZ:SetSize(100, 30);
  235.  
  236.         local FARZ = vgui.Create('DTextEntry', F);
  237.         FARZ:SetPos(120, 460);
  238.         FARZ:SetSize(60, 22);  
  239.         FARZ:SetNumeric(true);
  240.                
  241.         local FARZZ = vgui.Create('DLabel', F);
  242.         FARZZ:SetPos(30, 460);
  243.         FARZZ:SetText('Camera ZFar');
  244.  
  245.         local OK = vgui.Create('DButton', F);
  246.         OK:SetSize(100, 30);
  247.         OK:SetText('Apply');
  248.         OK:SetPos(F:GetWide() / 2 - 50, F:GetTall() - 35);
  249.         OK.DoClick = function()
  250.             F:Close();
  251.             if T.STACK[id] ~= nil then
  252.                 T.STACK[id]['entity'] = tonumber(ID:GetText());
  253.                 T.STACK[id]['vector'] = VEC:GetText();
  254.                 T.STACK[id]['angle'] = ANG:GetText();
  255.                 T.STACK[id]['bounds'][1] = tonumber(CAMX:GetText());
  256.                 T.STACK[id]['bounds'][2] = tonumber(CAMY:GetText());
  257.                 T.STACK[id]['bounds'][3] = tonumber(CAMW:GetText());
  258.                 T.STACK[id]['bounds'][4] = tonumber(CAMH:GetText());
  259.                 T.STACK[id]['fov'] = tonumber(FOV:GetText());
  260.                 T.STACK[id]['enable'] = Enbl:GetChecked();
  261.                 T.STACK[id]['label'] = LBL:GetText();
  262.                 T.STACK[id]['nearz'] = NEARZ:GetText();
  263.                 T.STACK[id]['farz'] = FARZ:GetText();
  264.                 T.STACK[id]['showspeed'] = Spd:GetChecked();
  265.             end
  266.         end
  267.        
  268.         local Placer = nil;
  269.        
  270.         local PLACE = vgui.Create('DButton', F);
  271.         PLACE:SetSize(150, 30);
  272.         PLACE:SetText('Locate renderer via window');
  273.         PLACE:SetPos(F:GetWide() / 2 - 75, F:GetTall() - 70);
  274.         PLACE.DoClick = function()
  275.             if T.OPENLOCATOR then return end
  276.             Placer = vgui.Create('DFrame');
  277.             Placer:SetSize(ScrW() * tonumber(CAMW:GetText()), ScrH() * tonumber(CAMH:GetText()));
  278.             Placer:SetPos(ScrW() * tonumber(CAMX:GetText()), ScrH() * tonumber(CAMY:GetText()));
  279.             Placer:SetTitle('');
  280.             Placer:MakePopup();
  281.             Placer:SetSizable(true);
  282.             Placer.Paint = function(self, w, h)
  283.                 draw.NoTexture();
  284.                 surface.SetDrawColor(255, 0, 0, 100);
  285.                 surface.DrawRect(0, 0, w-5, 5);
  286.                 surface.DrawRect(w-5, 0, 5, h-5);
  287.                 surface.DrawRect(5, h-5, w-5, 5);
  288.                 surface.DrawRect(0, 5, 5, h-5);
  289.             end
  290.             Placer.Think = function(self)
  291.                 local mousex = math.Clamp( gui.MouseX(), 1, ScrW() - 1 )
  292.                 local mousey = math.Clamp( gui.MouseY(), 1, ScrH() - 1 )
  293.  
  294.                 local ox, oy = self:GetPos();
  295.  
  296.                 if ( self.Dragging ) then
  297.  
  298.                     local x = mousex - self.Dragging[1]
  299.                     local y = mousey - self.Dragging[2]
  300.  
  301.                     -- Lock to screen bounds if screenlock is enabled
  302.                     if ( self:GetScreenLock() ) then
  303.  
  304.                         x = math.Clamp( x, 0, ScrW() - self:GetWide() )
  305.                         y = math.Clamp( y, 0, ScrH() - self:GetTall() )
  306.  
  307.                     end
  308.  
  309.                     self:SetPos( input.IsKeyDown(KEY_LSHIFT) and ox or x, input.IsKeyDown(KEY_LCONTROL) and oy or y );
  310.  
  311.                 end
  312.  
  313.                 if ( self.Sizing ) then
  314.  
  315.                     local x = mousex - self.Sizing[1]
  316.                     local y = mousey - self.Sizing[2]
  317.                     local px, py = self:GetPos()
  318.  
  319.                     if ( x < self.m_iMinWidth ) then x = self.m_iMinWidth elseif ( x > ScrW() - px && self:GetScreenLock() ) then x = ScrW() - px end
  320.                     if ( y < self.m_iMinHeight ) then y = self.m_iMinHeight elseif ( y > ScrH() - py && self:GetScreenLock() ) then y = ScrH() - py end
  321.  
  322.                     self:SetSize( x, y )
  323.                     self:SetCursor( "sizenwse" )
  324.                     return
  325.  
  326.                 end
  327.  
  328.                 self:SetCursor( "sizeall" )
  329.  
  330.                 -- Don't allow the frame to go higher than 0
  331.                 if ( self.y < 0 ) then
  332.                     self:SetPos( self.x, 0 )
  333.                 end
  334.             end
  335.             Placer.OnClose = function()
  336.                 local x, y, w, h = Placer:GetBounds();
  337.                 CAMX:SetText(math.Round(x / ScrW(), 3));
  338.                 CAMY:SetText(math.Round(y / ScrH(), 3));
  339.                 CAMW:SetText(math.Round(w / ScrW(), 3));
  340.                 CAMH:SetText(math.Round(h / ScrH(), 3));
  341.                 T.OPENLOCATOR = false;
  342.                 OK.DoClick();
  343.             end
  344.             T.OPENLOCATOR = true;
  345.         end
  346.  
  347.         F.OnClose = function()
  348.             if IsValid(Placer) then
  349.                 Placer:Close();
  350.             end
  351.         end
  352.         if T.STACK[id] ~= nil then
  353.             ID:SetText(T.STACK[id]['entity']);
  354.             VEC:SetText(T.STACK[id]['vector']);
  355.             ANG:SetText(T.STACK[id]['angle']);
  356.             CAMX:SetText(T.STACK[id]['bounds'][1]);
  357.             CAMY:SetText(T.STACK[id]['bounds'][2]);
  358.             CAMW:SetText(T.STACK[id]['bounds'][3]);
  359.             CAMH:SetText(T.STACK[id]['bounds'][4]);
  360.             FOV:SetText(T.STACK[id]['fov']);
  361.             Enbl:SetChecked(T.STACK[id]['enable']);
  362.             Spd:SetChecked(T.STACK[id]['showspeed']);
  363.             LBL:SetText(T.STACK[id]['label']);
  364.             NEARZ:SetText(T.STACK[id]['nearz']);
  365.             FARZ:SetText(T.STACK[id]['farz']);
  366.         end
  367.     end
  368.     T.TABLE_INDEX_BY_ENTINDEX = function(ent_id)
  369.         local id = 0;
  370.         for i, kv in pairs(T.STACK) do
  371.             if kv['entity'] == ent_id then
  372.                 id = i;
  373.             end
  374.         end
  375.         return id;
  376.     end
  377.     T.TABLE_INDEX_BY_UID = function(uid)
  378.         local id = 1;
  379.         for i, kv in pairs(T.STACK) do
  380.             if kv['uid'] == uid then
  381.                 id = i;
  382.             end
  383.         end
  384.         return id;
  385.     end
  386.     T.DELIVER_ARS_DATA = function(eid)
  387.         local t = { };
  388.         t['ply'] = LocalPlayer();
  389.         t['id'] = eid;
  390.         net.Start('camtool_tunnel_handler')
  391.             net.WriteTable(t)
  392.         net.SendToServer();
  393.     end
  394.     T.CLONE = function(tableid)
  395.         local original = T.STACK[tableid];
  396.         local t = table.Copy(original); -- new
  397.         original = nil;
  398.         table.insert(T.STACK, t);
  399.         t = nil;
  400.     end
  401.     T.SHOWMENU = function()
  402.         if T.OPEN then return end
  403.        
  404.         T.MAIN = vgui.Create('DFrame');
  405.         T.MAIN:SetSize(500, 600);
  406.         T.MAIN:Center();
  407.         T.MAIN:MakePopup();
  408.         T.MAIN:SetTitle('Multiple camera tool v0.7')
  409.         T.MAIN.CONTAINER = { };
  410.        
  411.         local p = vgui.Create('DPanel', T.MAIN);
  412.         p:SetAlpha(0);
  413.        
  414.         local CONT = vgui.Create('DPanelList', T.MAIN);
  415.         CONT:SetPos(25, 80);
  416.         CONT:SetSize(T.MAIN:GetWide() - 50, T.MAIN:GetTall() - 120);
  417.        
  418.         local BAdd = vgui.Create('DButton', T.MAIN);
  419.         BAdd:SetPos(50, 50);
  420.         BAdd:SetSize(150, 25);
  421.         BAdd:SetText('Create camera'); 
  422.            
  423.         local BLoad = vgui.Create('DButton', T.MAIN);
  424.         BLoad:SetSize(150, 25);
  425.         BLoad:SetPos(T.MAIN:GetWide() - BLoad:GetWide() - 50, 50);
  426.         BLoad:SetText('Load camera from JSON file');   
  427.         BLoad.DoClick = function()
  428.             T.MAIN:Hide();
  429.             local f = vgui.Create('DFrame');
  430.             f:SetSize(400, 400);
  431.             f:SetTitle('Open file');
  432.             f:MakePopup();
  433.             f:Center();
  434.             f:SetBackgroundBlur(true);
  435.             local files = vgui.Create('DFileBrowser', f);
  436.             files:Dock(FILL);
  437.             files:SetPath('DATA');
  438.             files:SetBaseFolder('cams');
  439.             files:SetOpen(true);
  440.             files:SetCurrentFolder('cams');
  441.             files.OnSelect = function(self, path)
  442.                 local str = file.Read(path, 'DATA');
  443.                 local t = util.JSONToTable(str);
  444.                 if t != nil then
  445.                     if #table.GetKeys(t) > 0 then
  446.                         t['uid'] = T.ID_INCREMENTOR + 1;
  447.                         table.insert(T.STACK, t);
  448.                         T.ID_INCREMENTOR = T.ID_INCREMENTOR + 1;
  449.                         chat.AddText(Color(50,255,50), 'Camera loaded');
  450.                     else
  451.                         chat.AddText(Color(255,50,50), 'Invalid JSON file1');
  452.                     end
  453.                 else
  454.                     chat.AddText(Color(255,50,50), 'Invalid JSON file2');
  455.                 end
  456.                 f:Close();
  457.             end
  458.  
  459.             f.OnClose = function() 
  460.                 T.MAIN:Show();
  461.             end
  462.         end
  463.  
  464.         p.Think = function()
  465.             --[[this condition resets main id incrementor when main camera table is empty]]--
  466.             if #T.STACK == 0 and T.ID_INCREMENTOR > 1 then
  467.                 T.ID_INCREMENTOR = 1;
  468.             end
  469.             --[[this condition resets main id incrementor when main camera table is empty]]--
  470.             if #T.MAIN.CONTAINER != #T.STACK then
  471.                 CONT:Clear();
  472.                 for i, kv in pairs(T.STACK) do
  473.                     local b = vgui.Create('DButton');
  474.                     b:SetPos(0, i * 45);
  475.                     b.ID = kv['uid'];
  476.                     b:SetText('');
  477.                     b:SetSize(CONT:GetWide(), 40);
  478.                     b.Paint = function(self, w, h)
  479.                         draw.NoTexture();
  480.                         surface.SetDrawColor(120, 120, 120, 255);
  481.                         surface.DrawRect(0, 0, w, h);
  482.                         surface.SetDrawColor(255, 0, 0, 100);
  483.                         surface.DrawRect(w * 0.9, 0, w * 0.1, h);
  484.                        
  485.                         local ent = Entity(kv['entity']);
  486.                         local v   = kv['vector'];
  487.                         local a   = kv['angle'];
  488.                         local fov = kv['fov'];
  489.                         local bnd = kv['bounds'];
  490.                         local b   = kv['enable'];
  491.                         local uid = kv['uid'];
  492.                         if IsValid(ent) and b then
  493.                             local ps = string.Explode(',', v);
  494.                             local as = string.Explode(',', a);
  495.                             local x, y = self:GetPos();
  496.                             local x2, y2 = T.MAIN:GetPos();
  497.                             local x3, y3 = CONT:GetPos();
  498.                             render.RenderView( {
  499.                                 origin = ent:LocalToWorld(Vector(ps[1], ps[2], ps[3])),
  500.                                 angles = ent:LocalToWorldAngles(Angle(as[1], as[2], as[3])),
  501.                                 x = x + x2 + x3, y = y + y2 + y3,
  502.                                 w = h, h = h,
  503.                                 fov = fov
  504.                             } )
  505.                         end
  506.                         if T.TABLE_INDEX_BY_UID(uid) == nil then
  507.                             self:Remove();
  508.                         end
  509.                         draw.SimpleText('Camera #' .. i .. '.Entity ID: ' .. kv['entity'], 'drwaCross', w * 0.2, h * 0.14, Color(150, 150, 150));
  510.                         draw.SimpleText('x', 'drwaCross', w * 0.935, h * 0.14, Color(255, 255, 255));
  511.                     end
  512.                     b.DoClick = function()
  513.                         local x, y = BAdd:LocalCursorPos();
  514.                         if x < b:GetWide() * 0.8 then
  515.                             T.CHANGEPARAMS(T.TABLE_INDEX_BY_UID(b.ID));
  516.                         else
  517.                             for idd, tbl in pairs(T.STACK) do
  518.                                 if tbl['uid'] == b.ID then
  519.                                     table.remove(T.STACK, idd);
  520.                                 end
  521.                             end
  522.                             table.remove(T.MAIN.CONTAINER, T.TABLE_INDEX_BY_UID(b.ID));
  523.                             b:Remove();
  524.                         end
  525.                     end
  526.                     CONT:AddItem(b);
  527.                     T.MAIN.CONTAINER[i] = b;
  528.                 end
  529.             end
  530.  
  531.             if not file.Exists('cams', 'DATA') then
  532.                 file.CreateDir('cams');
  533.             end
  534.         end
  535.        
  536.         T.MAIN.OnClose = function()
  537.             T.OPEN = false;
  538.         end
  539.        
  540.         BAdd.DoClick = function()
  541.             T.ADD();
  542.         end
  543.        
  544.         T.OPEN = true;
  545.     end
  546.  
  547.     hook.Add('HUDPaint','camtool_r', T.RENDER);
  548.     concommand.Add('camtool', T.SHOWMENU);
  549.  
  550.     surface.CreateFont('drwaCross', {
  551.         font = 'Segoe UI';
  552.         size = 30;
  553.     });
  554.  
  555.     T.GET_ARS_DATA = function()
  556.         local s = net.ReadString();
  557.         local i = net.ReadInt(32);
  558.         if T.STACK[T.TABLE_INDEX_BY_ENTINDEX(i)] != nil then
  559.             T.STACK[T.TABLE_INDEX_BY_ENTINDEX(i)]['ars'] = s;
  560.         end
  561.     end
  562.     net.Receive('camtool_tunnel_handler', T.GET_ARS_DATA);
  563. end
  564.  
  565. if SERVER then
  566.  
  567.     util.AddNetworkString('camtool_tunnel_handler');
  568.    
  569.     local function recv()
  570.  
  571.         local t = net.ReadTable();
  572.         local ply = t['ply'];
  573.         local entID = t['id'];
  574.  
  575.         local ent = Entity(entID);
  576.         local INFO = '-';
  577.  
  578.         if IsValid(ent) then
  579.            
  580.             if ent.ALS_ARS != nil and ent.Panel.V1 > 0.5 then
  581.  
  582.                 --if ent.ALS_ARS.
  583.                 if ent.ALS_ARS.NoFreq != nil then
  584.                     if ent.ALS_ARS.NoFreq > 0 then
  585.  
  586.                         INFO = 'ОЧ';
  587.  
  588.                     end
  589.                 end
  590.                 if ent.ALS_ARS.F5 > 0 then
  591.  
  592.                     INFO = 'АРС 0';
  593.  
  594.                 end
  595.                 if ent.ALS_ARS.F4 > 0 then
  596.  
  597.                     INFO = 'АРС 40 км/ч';
  598.                    
  599.                 end
  600.                 if ent.ALS_ARS.F3 > 0 then 
  601.  
  602.                     INFO = 'АРС 60 км/ч';
  603.  
  604.                 end
  605.                 if ent.ALS_ARS.F2 > 0 then     
  606.  
  607.                     INFO = 'АРС 70 км/ч';
  608.  
  609.                 end
  610.                 if ent.ALS_ARS.F1 > 0 then
  611.  
  612.                     INFO = 'АРС 80 км/ч';
  613.  
  614.                 end
  615.  
  616.             end
  617.  
  618.             if ent.BARS != nil then
  619.  
  620.                 --if ent.ALS_ARS.
  621.                 if ent.BARS.NoFreq > 0 then
  622.  
  623.                     INFO = 'ОЧ';
  624.  
  625.                 end
  626.                 if ent.BARS.F5 > 0 then
  627.  
  628.                     INFO = 'АРС 0';
  629.  
  630.                 end
  631.                 if ent.BARS.F4 > 0 then
  632.  
  633.                     INFO = 'АРС 40 км/ч';
  634.                    
  635.                 end
  636.                 if ent.BARS.F3 > 0 then
  637.  
  638.                     INFO = 'АРС 60 км/ч';
  639.  
  640.                 end
  641.                 if ent.BARS.F2 > 0 then    
  642.  
  643.                     INFO = 'АРС 70 км/ч';
  644.  
  645.                 end
  646.                 if ent.BARS.F1 > 0 then
  647.  
  648.                     INFO = 'АРС 80 км/ч';
  649.  
  650.                 end
  651.  
  652.             end
  653.  
  654.             if ent.ARS != nil then
  655.  
  656.                 --if ent.ALS_ARS.
  657.                 if ent.ARS.NoFreq > 0 then
  658.  
  659.                     INFO = 'ОЧ';
  660.  
  661.                 end
  662.                 if ent.ARS.F5 > 0 then
  663.  
  664.                     INFO = 'АРС 0';
  665.  
  666.                 end
  667.                 if ent.ARS.F4 > 0 then
  668.  
  669.                     INFO = 'АРС 40 км/ч';
  670.                    
  671.                 end
  672.                 if ent.ARS.F3 > 0 then 
  673.  
  674.                     INFO = 'АРС 60 км/ч';
  675.  
  676.                 end
  677.                 if ent.ARS.F2 > 0 then     
  678.  
  679.                     INFO = 'АРС 70 км/ч';
  680.  
  681.                 end
  682.                 if ent.ARS.F1 > 0 then
  683.  
  684.                     INFO = 'АРС 80 км/ч';
  685.  
  686.                 end
  687.  
  688.             end
  689.  
  690.         end
  691.  
  692.         if IsValid(ply) then
  693.  
  694.             net.Start('camtool_tunnel_handler');
  695.                 net.WriteString(INFO);
  696.                 net.WriteInt(entID, 32);
  697.             net.Send(ply);
  698.  
  699.         end
  700.  
  701.     end
  702.  
  703.     net.Receive('camtool_tunnel_handler', recv);
  704.  
  705. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement