Guest User

Untitled

a guest
Dec 11th, 2017
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 42.62 KB | None | 0 0
  1. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. // GangWarsRP Gangs (client)
  3. // Copyright (c) Mercior
  4. // May 2011
  5.  
  6. include("sh_gangs.lua")
  7.  
  8.  
  9. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  10. // Gang Usermessages
  11.  
  12. MyGangsMembers = {}
  13. MyGang = {}
  14. MyGangInvites = {}
  15.  
  16.  
  17. // clears local gang info
  18. function GU_ClearInfo(um)
  19.     MyGang = {}
  20.     if F4Tabs and F4Tabs[4] then
  21.         F4Tabs[4]:Update()
  22.     end
  23. end
  24. usermessage.Hook("gang_clear", GU_ClearInfo)
  25.  
  26. // sets gang data
  27. local function ReceiveGangInfo(handle, id, encoded, decoded)
  28.  
  29.     MyGang = decoded
  30.  
  31.     if F4Tabs and F4Tabs[4] then
  32.         F4Tabs[4]:Update()
  33.     end
  34. end
  35. datastream.Hook("ds_gang_info", ReceiveGangInfo)
  36.  
  37. // sets gang members
  38. local function ReceiveGangMembers(handle, id, encoded, decoded)
  39.  
  40.     MyGangsMembers = decoded
  41.    
  42.     if F4Tabs and F4Tabs[4] then F4Tabs[4]:Update() end
  43. end
  44. datastream.Hook("ds_gang_members", ReceiveGangMembers)
  45.  
  46. // sets gang rivals
  47. local function ReceiveGangRivals(handle, id, encoded, decoded)
  48.  
  49.     MyGangRivals = decoded
  50.    
  51.     if F4Tabs and F4Tabs[4] then F4Tabs[4]:Update() end
  52. end
  53. datastream.Hook("ds_gang_rivals", ReceiveGangRivals)
  54.  
  55. // sets gang invites
  56. local function ReceiveGangInvites(handle, id, encoded, decoded)
  57.  
  58.     MyGangInvites = decoded
  59.    
  60.     if F4Tabs and F4Tabs[4] then F4Tabs[4]:Update() end
  61. end
  62. datastream.Hook("ds_gang_invites", ReceiveGangInvites)
  63.  
  64. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  65. // Territory Capture VGUI
  66.  
  67. local CappingTerritory = false
  68. local CapTime = 0
  69. local CapMax = 5
  70.  
  71. // Enemy is capturing our territory
  72. local function EnemyCapStart(um)
  73.     GangName = um:ReadString()
  74.    
  75.    
  76. end
  77. usermessage.Hook("enemy_cap_territory", EnemyCapStart)
  78.  
  79. // Enemy is capturing our territory
  80. local function EnemyCapComplete(um)
  81.     GangName = um:ReadString()
  82. end
  83. usermessage.Hook("enemy_took_territory", EnemyCapComplete)
  84.  
  85. // Capture start usermessage
  86. local function CapStart(um)
  87.     CappingTerritory = true
  88.     CapTime = CurTime()
  89.     CapMax = tonumber(um:ReadLong())
  90. end
  91. usermessage.Hook("territory_capture_start", CapStart)
  92.  
  93.  
  94. // Capture start usermessage
  95. local function CapEnd()
  96.     CappingTerritory = false
  97. end
  98. usermessage.Hook("territory_capture_end", CapEnd)
  99.  
  100. function GetGangmemberSteamFromName( name )
  101.     for k,v in pairs(MyGangsMembers) do
  102.         if v.steam and v.name == name then
  103.             return v.steam
  104.         end
  105.     end
  106. end
  107.  
  108.  
  109. // Draw capture bar
  110. local function DrawTerritoryCap()
  111.     if CappingTerritory and CapMax > 0 then
  112.         draw.RoundedBox( 8, (ScrW()/2) - 200, (ScrH()-108), 400, 30, Color(0, 0, 0, 180) )
  113.        
  114.         local perc = (CurTime() - CapTime) / CapMax
  115.         draw.RoundedBox( 8, (ScrW()/2) - 196, (ScrH()-108) + 4, math.Clamp((392 * perc), 16, 342), 22, Color(255, 255, 255, 220) )
  116.        
  117.         draw.DrawText("Capturing Territory", "ChatFont", (ScrW()/2), (ScrH()-100), Color(255,255,255,200), TEXT_ALIGN_CENTER)
  118.        
  119.         if perc > 1 then CappingTerritory = false end
  120.     end
  121. end
  122. hook.Add("HUDPaint", "DrawTerritoryCap", DrawTerritoryCap)
  123.  
  124.  
  125.  
  126. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  127. // Gang GUI
  128.  
  129. local function GangInvitesTab()
  130.  
  131.     local GangInvitesPanel = vgui.Create( "DPanel")
  132.     GangInvitesPanel:SetSize(740, 550)
  133.     GangInvitesPanel.Paint = function()
  134.         surface.SetDrawColor(0,0,0,255)
  135.         GangInvitesPanel:DrawFilledRect()
  136.     end
  137.     function GangInvitesPanel:Update()
  138.         self:Clear(true)
  139.        
  140.         local GangInfoList = vgui.Create("DListView", self)
  141.         GangInfoList:SetPos(0,0)
  142.         GangInfoList:SetSize(740, 550)
  143.         GangInfoList:SetMultiSelect(false)
  144.         GangInfoList:AddColumn("Gang Name")
  145.         if MyGangInvites and table.Count(MyGangInvites) > 0 then
  146.             for k,v in pairs(MyGangInvites) do
  147.                 GangInfoList:AddLine( v.gang, v.steam, Gang.GetRankName(v.rank) )
  148.             end
  149.            
  150.             GangInfoList.OnRowRightClick = function( panel, line )
  151.                
  152.                 local gname = GangInfoList:GetLine(line):GetValue(1)
  153.  
  154.                 local menu = DermaMenu()
  155.                 menu:AddOption("Accept Invite", function () RunConsoleCommand("say", "/gang_accept " .. gname) end)
  156.                 menu:AddOption("Reject Invite", function () RunConsoleCommand("say", "/gang_reject " .. gname) end)
  157.                 menu:Open()
  158.                
  159.             end
  160.         end
  161.  
  162.     end
  163.     GangInvitesPanel:Update()
  164.     return GangInvitesPanel
  165. end
  166.  
  167. local function GangMembersTab()
  168.  
  169.     local GangMembersPanel = vgui.Create( "DPanel")
  170.     GangMembersPanel:SetSize(740, 550)
  171.     GangMembersPanel.Paint = function()
  172.         surface.SetDrawColor(0,0,0,255)
  173.         GangMembersPanel:DrawFilledRect()
  174.     end
  175.     function GangMembersPanel:Update()
  176.         self:Clear(true)
  177.    
  178.         // Member list
  179.         local GangInfoList = vgui.Create("DListView", self)
  180.         GangInfoList:SetPos(0,0)
  181.         GangInfoList:SetSize(740, 550)
  182.         GangInfoList:SetMultiSelect(false)
  183.         GangInfoList:AddColumn("Member Name")
  184.         GangInfoList:AddColumn("Steam ID")
  185.         GangInfoList:AddColumn("Gang Rank")
  186.         if MyGangsMembers then
  187.             for k,v in pairs(MyGangsMembers) do
  188.                 GangInfoList:AddLine( v.name, v.steam, Gang.GetRankName(v.rank) )
  189.             end
  190.            
  191.             GangInfoList.OnRowRightClick = function( panel, line )
  192.                
  193.                 local plname = GangInfoList:GetLine(line):GetValue(1)
  194.                 local plsteam = GetGangmemberSteamFromName( plname )
  195.                
  196.                 if plsteam and plsteam != LocalPlayer():SteamID() then
  197.                     local menu = DermaMenu()
  198.  
  199.                     menu:AddOption(plname, function () end)
  200.                     menu:AddSpacer( )
  201.            
  202.                     //menu:AddOption("View Activity", function () RunConsoleCommand("gang_view", plsteam) end)
  203.                     //menu:AddSpacer( )
  204.                    
  205.                     menu:AddOption("Set Leader", function () RunConsoleCommand("say", "/gang_promote 1 " .. plsteam) end)
  206.                     menu:AddOption("Set Vice Leader", function () RunConsoleCommand("say", "/gang_promote 2 " .. plsteam) end)
  207.                     menu:AddOption("Set Captain", function () RunConsoleCommand("say", "/gang_promote 3 " .. plsteam) end)
  208.                     menu:AddOption("Set Soldier", function () RunConsoleCommand("say", "/gang_promote 4 " .. plsteam) end)
  209.                     menu:AddOption("Set Recruit", function () RunConsoleCommand("say", "/gang_promote 5 " .. plsteam) end)
  210.                     menu:AddSpacer( )
  211.  
  212.                     menu:AddOption("Kick from Gang", function () RunConsoleCommand("say", "/gang_kick " .. plsteam) end)
  213.  
  214.                     menu:Open()
  215.                 end
  216.             end
  217.         end
  218.     end
  219.     GangMembersPanel:Update()
  220.    
  221.     return GangMembersPanel
  222. end
  223.  
  224. local function GangRivalInfoPanel(name, logo, color, color2, level, rkilled, rstolen, truce)
  225.     local InfoPanel = vgui.Create('DPanel')
  226.     InfoPanel:SetSize(720, 84)
  227.    
  228.     InfoPanel.Paint = function()
  229.         surface.SetDrawColor(20,20,20,255)
  230.         InfoPanel:DrawFilledRect()
  231.     end
  232.    
  233.     // icon
  234.     local sIcon2 = vgui.Create('DImage')
  235.     sIcon2:SetParent(InfoPanel)
  236.     sIcon2:SetPos(5 + 2, 5 + 2)
  237.     sIcon2:SetImage("gangwars/gang/icons/" .. logo)
  238.     sIcon2:SetImageColor(color2)
  239.     sIcon2:SetSize(64, 64)
  240.    
  241.     local sIcon = vgui.Create('DImage')
  242.     sIcon:SetParent(InfoPanel)
  243.     sIcon:SetPos(5, 5)
  244.     sIcon:SetImage("gangwars/gang/icons/" .. logo)
  245.     sIcon:SetImageColor(color)
  246.     sIcon:SetSize(64, 64)
  247.  
  248.  
  249.     // Labels
  250.     local lblName = vgui.Create('DLabel')
  251.     lblName:SetParent(InfoPanel)
  252.     lblName:SetPos(94, 5)
  253.     lblName:SetFont("Trebuchet20")
  254.     lblName:SetText(name)
  255.     lblName:SizeToContents()
  256.     lblName:SetTextColor(color)
  257.  
  258.     local lblPrice = vgui.Create('DLabel')
  259.     lblPrice:SetParent(InfoPanel)
  260.     lblPrice:SetPos(94, 26)
  261.     lblPrice:SetFont("Trebuchet18")
  262.     lblPrice:SetText("Level " .. level .. " Gang")
  263.     lblPrice:SizeToContents()
  264.     lblPrice:SetTextColor(Color(255, 255, 0, 255))
  265.    
  266.    
  267.    
  268.     // rival stashes stolen
  269.     local lblPrice = vgui.Create('DLabel')
  270.     lblPrice:SetParent(InfoPanel)
  271.     lblPrice:SetPos(350, 50)
  272.     lblPrice:SetFont("DefaultBold")
  273.     lblPrice:SetText("Rival Stashes Stolen")
  274.     lblPrice:SizeToContents()
  275.     lblPrice:SetTextColor(Color(255, 255, 255, 255))
  276.     local lblPrice = vgui.Create('DLabel')
  277.     lblPrice:SetParent(InfoPanel)
  278.     lblPrice:SetPos(350, 65)
  279.     lblPrice:SetFont("DefaultLarge")
  280.     lblPrice:SetText(rstolen)
  281.     lblPrice:SizeToContents()
  282.     lblPrice:SetTextColor(Color(255, 255, 255, 255))
  283.    
  284.     // rival gangmembers killed
  285.     local lblPrice = vgui.Create('DLabel')
  286.     lblPrice:SetParent(InfoPanel)
  287.     lblPrice:SetPos(94, 50)
  288.     lblPrice:SetFont("DefaultBold")
  289.     lblPrice:SetText("Rival Gangmembers Killed")
  290.     lblPrice:SizeToContents()
  291.     lblPrice:SetTextColor(Color(255, 255, 255, 255))
  292.     local lblPrice = vgui.Create('DLabel')
  293.     lblPrice:SetParent(InfoPanel)
  294.     lblPrice:SetPos(94, 65)
  295.     lblPrice:SetFont("DefaultLarge")
  296.     lblPrice:SetText(rkilled)
  297.     lblPrice:SizeToContents()
  298.     lblPrice:SetTextColor(Color(255, 255, 255, 255))
  299.    
  300.    
  301.     // truce button
  302.     if truce and tonumber(truce) > 0 then
  303.         local btnLock = vgui.Create('DButton')
  304.         btnLock:SetParent(InfoPanel)
  305.         btnLock:SetSize(120, 30)
  306.         btnLock:SetPos(580, 5)
  307.         btnLock:SetText('Cancel Truce')
  308.         btnLock.DoClick = function()
  309.             Derma_Query("Cancel your truce request with " .. name .. "?", "Cancel Truce",
  310.                         "Ok", function() RunConsoleCommand("say", "/gang_canceltruce " .. name) end,
  311.                         "Cancel", function() end)
  312.         end
  313.     else
  314.         local btnLock = vgui.Create('DButton')
  315.         btnLock:SetParent(InfoPanel)
  316.         btnLock:SetSize(120, 30)
  317.         btnLock:SetPos(580, 5)
  318.         btnLock:SetText('Request Truce')
  319.         btnLock.DoClick = function()
  320.             Derma_Query("Request a truce with " .. name .. " ?", "Confirm Truce",
  321.                         "Ok", function() RunConsoleCommand("say", "/gang_truce " .. name) end,
  322.                         "Cancel", function() end)
  323.         end
  324.     end
  325.    
  326.     local btnLock = vgui.Create('DButton')
  327.     btnLock:SetParent(InfoPanel)
  328.     btnLock:SetSize(120, 30)
  329.     btnLock:SetPos(580, 40)
  330.     btnLock:SetText('Beg for mercy')
  331.     btnLock.DoClick = function()
  332.         Derma_Query("Begging for mercy against " .. name .. "  will cost your gang many points. Are you sure?", "Confirm you are a little girl",
  333.                     "Ok", function() RunConsoleCommand("say", "/gang_mercy " .. name) end,
  334.                     "Cancel", function() end)
  335.     end
  336.    
  337.     return InfoPanel
  338. end
  339.  
  340. local function GangRivalsTab()
  341.  
  342.     local GangRivalsPanel = vgui.Create( "DPanel")
  343.     GangRivalsPanel:SetSize(750, 550)
  344.     GangRivalsPanel.Paint = function()
  345.         surface.SetDrawColor(0,0,0,255)
  346.         GangRivalsPanel:DrawFilledRect()
  347.     end
  348.     function GangRivalsPanel:Update()
  349.    
  350.         self:Clear(true)
  351.        
  352.         // find rivals button
  353.         local btnLock = vgui.Create('DButton', self)
  354.         btnLock:SetSize(120, 30)
  355.         btnLock:SetPos(5,5)
  356.         btnLock:SetText('Add Rival Gang')
  357.         btnLock.DoClick = function()
  358.             DoGangSearch(function(gang)
  359.                 Derma_Query( "Are you sure you want to name " .. gang .. " as your rivals?", "Confirm Add Rival", "Yes",
  360.                 function(a)
  361.                     RunConsoleCommand("say", "/gang_addrival " .. gang)
  362.                 end, "No")
  363.             end)
  364.         end
  365.        
  366.         local GangUpgradeList = vgui.Create( "DPanelList", self )
  367.         GangUpgradeList:SetPos(5,40)
  368.         GangUpgradeList:SetSize(730, 440)
  369.         //GangUpgradeList:SetAutoSize(true)
  370.         GangUpgradeList:SetSpacing(4)
  371.         GangUpgradeList:EnableHorizontal( false )
  372.         GangUpgradeList:EnableVerticalScrollbar( true )
  373.  
  374.         if MyGangRivals then
  375.             for k,v in pairs(MyGangRivals) do
  376.                 GangUpgradeList:AddItem(GangRivalInfoPanel(v.name, v.logo, v.color, v.color2, v.level, v.members_killed, v.stashes_stolen, v.truce))
  377.             end
  378.         end
  379.        
  380.     end
  381.     GangRivalsPanel:Update()
  382.  
  383.     return GangRivalsPanel
  384. end
  385.  
  386. local function GangShopInfoPanel(item)
  387.     local InfoPanel = vgui.Create('DPanel')
  388.     InfoPanel:SetSize(720, 74)
  389.    
  390.     InfoPanel.Paint = function()
  391.         surface.SetDrawColor(20,20,20,255)
  392.         InfoPanel:DrawFilledRect()
  393.     end
  394.    
  395.     function InfoPanel:Update()
  396.         self:Clear(true)
  397.  
  398.         // icon
  399.         local sIcon = vgui.Create('DImage')
  400.         sIcon:SetParent(InfoPanel)
  401.         sIcon:SetPos(10, 5)
  402.         sIcon:SetImage(item.icon)
  403.         sIcon:SetSize(64, 64)
  404.         sIcon:SetToolTip(item.name)
  405.  
  406.        
  407.         // buy button
  408.         local btnLock = vgui.Create('DButton')
  409.         btnLock:SetParent(InfoPanel)
  410.         btnLock:SetSize(100, 40)
  411.         btnLock:SetPos(600, 18)
  412.         btnLock:SetText('Buy')
  413.         btnLock.DoClick = function()
  414.             Derma_Query("Purchase " .. item.name .. " for " .. CUR .. GangWars.FormatMoney(item.price) .. "?", "Confirm buy",
  415.                         "Ok", function() RunConsoleCommand("say", "/gang_buy " .. item.id) end,
  416.                         "Cancel", function() end)
  417.         end
  418.        
  419.         // Labels
  420.         local lblName = vgui.Create('DLabel')
  421.         lblName:SetParent(InfoPanel)
  422.         lblName:SetPos(94, 5)
  423.         lblName:SetFont("Trebuchet20")
  424.         lblName:SetText(item.name)
  425.         lblName:SizeToContents()
  426.         lblName:SetTextColor(Color(255, 255, 0, 255))
  427.        
  428.         local lblPrice = vgui.Create('DLabel')
  429.         lblPrice:SetParent(InfoPanel)
  430.         lblPrice:SetPos(94, 26)
  431.         lblPrice:SetFont("Trebuchet18")
  432.         lblPrice:SetText(CUR .. GangWars.FormatMoney(item.price))
  433.         lblPrice:SizeToContents()
  434.         lblPrice:SetTextColor(Color(0, 255, 0, 255))
  435.        
  436.         local lblPrice = vgui.Create('DLabel')
  437.         lblPrice:SetParent(InfoPanel)
  438.         lblPrice:SetPos(94, 50)
  439.         lblPrice:SetFont("Trebuchet18")
  440.         lblPrice:SetText(item.description)
  441.         lblPrice:SizeToContents()
  442.         lblPrice:SetTextColor(Color(255, 255, 255, 255))
  443.        
  444.        
  445.         local xp = 450
  446.        
  447.         local lblPrice = vgui.Create('DLabel')
  448.         lblPrice:SetParent(InfoPanel)
  449.         lblPrice:SetPos(xp - 3, 10)
  450.         lblPrice:SetFont("DefaultBold")
  451.         lblPrice:SetText("LDR VLR CPT SDR RCT")
  452.         lblPrice:SizeToContents()
  453.         lblPrice:SetTextColor(Color(255, 255, 255, 255))
  454.        
  455.        
  456.         // Access control
  457.         local function btn(b)
  458.             if not b then
  459.                 return 0
  460.             else
  461.                 return 1
  462.             end
  463.         end
  464.        
  465.        
  466.         self.HasItemPerm = function(perms, rank)
  467.             local d = 16
  468.             local pms = {0, 0, 0, 0, 0}
  469.             local r = 5
  470.             while perms > 0 do
  471.                 if perms - d >= 0 then
  472.                     perms = perms - d
  473.                     pms[r] = 1
  474.                 end
  475.                
  476.                 d = d / 2
  477.                 r = r - 1
  478.             end
  479.            
  480.             return pms[rank] == 1
  481.         end
  482.        
  483.  
  484.         self.GetItemPerms = function(self)
  485.             return (btn(self.GangAccessCheckBox[0]:GetChecked()) * 1 + btn(self.GangAccessCheckBox[1]:GetChecked()) * 2 + btn(self.GangAccessCheckBox[2]:GetChecked()) * 4 + btn(self.GangAccessCheckBox[3]:GetChecked()) * 8 + btn(self.GangAccessCheckBox[4]:GetChecked()) * 16)
  486.         end
  487.        
  488.         // access variable
  489.         local self_ptr = self
  490.         local self_ready = false
  491.        
  492.         local myrank = tonumber(LocalPlayer():GetNWInt("gang_rank"))
  493.        
  494.        
  495.         self.GangAccessCheckBox = {}
  496.         local checkbox_access = (MyGang != nil && myrank == 1)
  497.        
  498.         self.GangAccessCheckBox[0] = vgui.Create( "DCheckBox", InfoPanel )
  499.         self.GangAccessCheckBox[0]:SetPos( xp + 25 * 0, 25 )
  500.         self.GangAccessCheckBox[0]:SetDisabled( not checkbox_access )
  501.         self.GangAccessCheckBox[0].OnChange = function(self)
  502.             if self_ready then RunConsoleCommand("gang_permission", item.id, self_ptr:GetItemPerms()) end
  503.         end
  504.        
  505.         self.GangAccessCheckBox[1] = vgui.Create( "DCheckBox", InfoPanel )
  506.         self.GangAccessCheckBox[1]:SetPos( xp + 25 * 1, 25 )
  507.         self.GangAccessCheckBox[1]:SetDisabled( not checkbox_access )
  508.         self.GangAccessCheckBox[1].OnChange = function(self)
  509.             if self_ready then RunConsoleCommand("gang_permission",  item.id, self_ptr:GetItemPerms()) end
  510.         end
  511.  
  512.         self.GangAccessCheckBox[2] = vgui.Create( "DCheckBox", InfoPanel )
  513.         self.GangAccessCheckBox[2]:SetPos( xp + 25 * 2, 25 )
  514.         self.GangAccessCheckBox[2]:SetDisabled( not checkbox_access )
  515.         self.GangAccessCheckBox[2].OnChange = function(self)
  516.             if self_ready then RunConsoleCommand("gang_permission",  item.id, self_ptr:GetItemPerms()) end
  517.         end
  518.        
  519.         self.GangAccessCheckBox[3] = vgui.Create( "DCheckBox", InfoPanel )
  520.         self.GangAccessCheckBox[3]:SetPos( xp + 25 * 3, 25 )
  521.         self.GangAccessCheckBox[3]:SetDisabled( not checkbox_access )
  522.         self.GangAccessCheckBox[3].OnChange = function(self)
  523.             if self_ready then RunConsoleCommand("gang_permission",  item.id, self_ptr:GetItemPerms()) end
  524.         end
  525.        
  526.         self.GangAccessCheckBox[4] = vgui.Create( "DCheckBox", InfoPanel )
  527.         self.GangAccessCheckBox[4]:SetPos( xp + 25 * 4, 25 )
  528.         self.GangAccessCheckBox[4]:SetDisabled( not checkbox_access )
  529.         self.GangAccessCheckBox[4].OnChange = function(self)
  530.             if self_ready then RunConsoleCommand("gang_permission",  item.id, self_ptr:GetItemPerms()) end
  531.         end
  532.        
  533.         // set checkbox states
  534.         if MyGang and MyGang.shop_permissions then
  535.        
  536.             if MyGang.shop_permissions[item.id] then self.GangAccessCheckBox[0]:SetValue( self.HasItemPerm(MyGang.shop_permissions[item.id], 1) ) end
  537.             if MyGang.shop_permissions[item.id] then self.GangAccessCheckBox[1]:SetValue( self.HasItemPerm(MyGang.shop_permissions[item.id], 2) ) end
  538.             if MyGang.shop_permissions[item.id] then self.GangAccessCheckBox[2]:SetValue( self.HasItemPerm(MyGang.shop_permissions[item.id], 3) ) end
  539.             if MyGang.shop_permissions[item.id] then self.GangAccessCheckBox[3]:SetValue( self.HasItemPerm(MyGang.shop_permissions[item.id], 4) ) end
  540.             if MyGang.shop_permissions[item.id] then self.GangAccessCheckBox[4]:SetValue( self.HasItemPerm(MyGang.shop_permissions[item.id], 5) ) end
  541.         end
  542.        
  543.         // set checkbox flag (prevents onchange firing before here)
  544.         self_ready = true
  545.        
  546.     end
  547.     InfoPanel:Update()
  548.    
  549.     return InfoPanel
  550. end
  551.  
  552.  
  553. local function GangShopTab()
  554.  
  555.     local GangShopPanel = vgui.Create( "DPanel")
  556.     GangShopPanel:SetSize(750, 550)
  557.     GangShopPanel.Paint = function()
  558.         surface.SetDrawColor(0,0,0,255)
  559.         GangShopPanel:DrawFilledRect()
  560.     end
  561.  
  562.     local GangUpgradeList = vgui.Create( "DPanelList", GangShopPanel )
  563.     GangUpgradeList:SetPos(5,5)
  564.     GangUpgradeList:SetSize(730, 480)
  565.     GangUpgradeList:SetSpacing(4)
  566.     GangUpgradeList:EnableHorizontal( false )
  567.     GangUpgradeList:EnableVerticalScrollbar( true )
  568.  
  569.     local sitems = {}
  570.     for k,v in pairs(Gang.GangShop) do
  571.         if MyGang and MyGang.level and MyGang.level >= v.level then
  572.             table.insert(sitems, v)
  573.         end
  574.     end
  575.    
  576.     table.SortByMember(sitems, "level", function(a, b) return a > b end)
  577.    
  578.     for k,v in pairs(sitems) do
  579.         GangUpgradeList:AddItem(GangShopInfoPanel(v))
  580.     end
  581.  
  582.     return GangShopPanel
  583. end
  584.  
  585.  
  586. local function GangUpgradePanel(mat, lvl, price, name, description, command)
  587.     local UpgradePanel = vgui.Create('DPanel')
  588.     UpgradePanel:SetSize(720, 140)
  589.    
  590.     UpgradePanel.Paint = function()
  591.         surface.SetDrawColor(20,20,20,255)
  592.         UpgradePanel:DrawFilledRect()
  593.     end
  594.    
  595.     function UpgradePanel:Update()
  596.         self:Clear(true)
  597.  
  598.         // icon
  599.         local sIcon = vgui.Create('DImage')
  600.         sIcon:SetParent(UpgradePanel)
  601.         sIcon:SetPos(20, 15)
  602.         sIcon:SetImage(mat)
  603.         sIcon:SetSize(64, 64)
  604.         sIcon:SetToolTip(name)
  605.  
  606.        
  607.         // buy button
  608.         local btnLock = vgui.Create('DButton')
  609.         btnLock:SetParent(UpgradePanel)
  610.         btnLock:SetSize(120, 40)
  611.         btnLock:SetPos(580, 84)
  612.         btnLock:SetText('Buy Upgrade')
  613.         btnLock.DoClick = function()
  614.             Derma_Query("Purchase " .. name .. " for " .. CUR .. GangWars.FormatMoney(price) .. "?", "Confirm buy",
  615.                         "Ok", function() RunConsoleCommand("say", "/gang_upgrade " .. command) end,
  616.                         "Cancel", function() end)
  617.         end
  618.        
  619.         local aff = Gang.GetUpgradeEffect(command, lvl)
  620.         local aff2 = Gang.GetUpgradeEffect(command, lvl-1)
  621.        
  622.         // Labels
  623.         local lblName = vgui.Create('DLabel')
  624.         lblName:SetParent(UpgradePanel)
  625.         lblName:SetPos(94, 10)
  626.         lblName:SetFont("Trebuchet24")
  627.         lblName:SetText(name .. " Upgrade")
  628.         lblName:SizeToContents()
  629.         lblName:SetTextColor(Color(255, 255, 0, 255))
  630.        
  631.         local lblName = vgui.Create('DLabel')
  632.         lblName:SetParent(UpgradePanel)
  633.         lblName:SetPos(580, 10)
  634.         lblName:SetFont("Trebuchet24")
  635.         lblName:SetText("Level " .. lvl .. " / 10")
  636.         lblName:SizeToContents()
  637.         lblName:SetTextColor(Color(255, 255, 255, 255))
  638.  
  639.         local lblPrice = vgui.Create('DLabel')
  640.         lblPrice:SetParent(UpgradePanel)
  641.         lblPrice:SetPos(94, 35)
  642.         lblPrice:SetFont("Trebuchet20")
  643.         lblPrice:SetText(CUR .. GangWars.FormatMoney(price))
  644.         lblPrice:SizeToContents()
  645.         lblPrice:SetTextColor(Color(0, 255, 0, 255))
  646.        
  647.         local lblStats = vgui.Create('DLabel')
  648.         lblStats:SetParent(UpgradePanel)
  649.         lblStats:SetPos(94, 55)
  650.         lblStats:SetSize(580, 20)
  651.         lblStats:SetFont("Defaultlarge")
  652.         lblStats:SetText(description)
  653.         lblStats:SetWrap(true)
  654.         lblStats:SetTextColor(Color(255, 255, 255, 255))
  655.        
  656.         // affects
  657.         if lvl > 0 then
  658.             local lblName = vgui.Create('DLabel')
  659.             lblName:SetParent(UpgradePanel)
  660.             lblName:SetPos(94, 90)
  661.             lblName:SetFont("DefaultBold")
  662.             lblName:SetText("Current")
  663.             lblName:SizeToContents()
  664.             lblName:SetTextColor(Color(255, 255, 255, 255))
  665.            
  666.             local lblName = vgui.Create('DLabel')
  667.             lblName:SetParent(UpgradePanel)
  668.             lblName:SetPos(94, 110)
  669.             lblName:SetFont("Defaultlarge")
  670.             lblName:SetText(aff2)
  671.             lblName:SizeToContents()
  672.             lblName:SetTextColor(Color(255, 255, 255, 255))
  673.         end
  674.        
  675.         // next level affects
  676.         if lvl < 10 then
  677.             local lblName = vgui.Create('DLabel')
  678.             lblName:SetParent(UpgradePanel)
  679.             lblName:SetPos(350, 90)
  680.             lblName:SetFont("DefaultBold")
  681.             lblName:SetText("Next Level")
  682.             lblName:SizeToContents()
  683.             lblName:SetTextColor(Color(255, 255, 255, 255))
  684.            
  685.             local lblName = vgui.Create('DLabel')
  686.             lblName:SetParent(UpgradePanel)
  687.             lblName:SetPos(350, 110)
  688.             lblName:SetFont("Defaultlarge")
  689.             lblName:SetText(aff)
  690.             lblName:SizeToContents()
  691.             lblName:SetTextColor(Color(255, 255, 255, 255))
  692.         end
  693.        
  694.     end
  695.     UpgradePanel:Update()
  696.    
  697.     return UpgradePanel
  698. end
  699.  
  700.  
  701. local function GangUpgradesTab()
  702.  
  703.     local GangUpgradesPanel = vgui.Create( "DPanel")
  704.     GangUpgradesPanel:SetSize(750, 550)
  705.     GangUpgradesPanel.Paint = function()
  706.         surface.SetDrawColor(0,0,0,255)
  707.         GangUpgradesPanel:DrawFilledRect()
  708.     end
  709.     function GangUpgradesPanel:Update()
  710.         self:Clear(true)
  711.        
  712.         local GangUpgradeList = vgui.Create( "DPanelList", self )
  713.         GangUpgradeList:SetPos(5,10)
  714.         GangUpgradeList:SetSize(730, 480)
  715.         GangUpgradeList:SetSpacing(4)
  716.         GangUpgradeList:EnableHorizontal( false )
  717.         GangUpgradeList:EnableVerticalScrollbar( true )
  718.            
  719.         local function AddUpgradeIcon(mat, lvl, price, name, description, command)
  720.             GangUpgradeList:AddItem(GangUpgradePanel(mat, lvl, price, name, description, command))
  721.         end
  722.  
  723.         if MyGang.level then
  724.             AddUpgradeIcon("gangwars/gang/icon_hpboost",        MyGang.hpboost,     Gang.GetUpgradePrice(MyGang.hpboost),       "Gang Heart",           "Increase the max health of all your gangmembers",  "hpboost")
  725.             AddUpgradeIcon("gangwars/gang/icon_regen",          MyGang.regen,       Gang.GetUpgradePrice(MyGang.regen),         "Street Spirit",        "Give your gangmembers regenerating health.",       "regen")
  726.             //AddUpgradeIcon("gangwars/gang/icon_extraitems",   MyGang.extraitems,  Gang.GetUpgradePrice(MyGang.extraitems),    "Militia",              "Add items to the gang shop.",                      "extraitems")
  727.             AddUpgradeIcon("gangwars/gang/icon_xpboost",        MyGang.xpboost,     Gang.GetUpgradePrice(MyGang.xpboost),       "Made Man",             "Increase the XP boost of all your gangmembers.",   "xpboost")
  728.             AddUpgradeIcon("gangwars/gang/icon_speedboost",     MyGang.speedboost,  Gang.GetUpgradePrice(MyGang.speedboost),    "Streetwise",           "Speed up your gangmembers.",                       "speedboost")
  729.             AddUpgradeIcon("gangwars/gang/icon_printboost",     MyGang.printboost,  Gang.GetUpgradePrice(MyGang.printboost),    "Goldfinger",           "Increase the output of your money printers.",      "printboost")
  730.             AddUpgradeIcon("gangwars/gang/icon_drugboost",      MyGang.drugboost,   Gang.GetUpgradePrice(MyGang.drugboost),     "Sticky Fingers",       "Learn to grow drugs faster.",                      "drugboost")
  731.             AddUpgradeIcon("gangwars/gang/icon_dropboost",      MyGang.dropboost,   Gang.GetUpgradePrice(MyGang.dropboost),     "Charmed",              "Increases your gangmembers luck.",                 "dropboost")
  732.         end
  733.        
  734.     end
  735.     GangUpgradesPanel:Update()
  736.  
  737.     return GangUpgradesPanel
  738. end
  739.  
  740. local function GangCreateTab()
  741.  
  742.     local GangCreatePanel = vgui.Create( "DPanel")
  743.     GangCreatePanel.logo = 1
  744.     GangCreatePanel:SetSize(750, 550)
  745.     GangCreatePanel.Paint = function()
  746.         surface.SetDrawColor(0,0,0,255)
  747.         GangCreatePanel:DrawFilledRect()
  748.     end
  749.     function GangCreatePanel:Update()
  750.         self:Clear(true)
  751.    
  752.         // New gang panel
  753.        
  754.         local lblGangName = vgui.Create('DLabel', self)
  755.         lblGangName:SetPos(60, 25)
  756.         lblGangName:SetText('Create a new gang')
  757.         lblGangName:SetFont("Trebuchet24")
  758.         lblGangName:SizeToContents()
  759.        
  760.         local NewGangPanel = vgui.Create( "DPanel", self )
  761.         NewGangPanel:SetPos( 120, 85 )
  762.         NewGangPanel:SetSize( 400, 380 )
  763.         NewGangPanel.Paint = function()
  764.             surface.SetDrawColor( 0, 0, 0, 255 )
  765.             surface.DrawRect( 0, 0, NewGangPanel:GetWide(), NewGangPanel:GetTall() )
  766.         end
  767.        
  768.         local lblGangColor
  769.         local LogoLeft
  770.         local LogoRight
  771.         local imgGangLogo
  772.         local lblGanglogo
  773.         local txtGangName
  774.         local lblGangName
  775.  
  776.  
  777.         txtGangName = vgui.Create('DTextEntry', NewGangPanel)
  778.         txtGangName:SetSize(206, 23)
  779.         txtGangName:SetPos(100, 10)
  780.         txtGangName:SetText('')
  781.         txtGangName.OnEnter = function() end
  782.        
  783.         local txtGangPassword = vgui.Create('DTextEntry', NewGangPanel)
  784.         txtGangPassword:SetSize(206, 23)
  785.         txtGangPassword:SetPos(100, 35)
  786.         txtGangPassword:SetText('')
  787.         txtGangPassword.OnEnter = function() end
  788.        
  789.         lblGangName = vgui.Create('DLabel', NewGangPanel)
  790.         lblGangName:SetPos(10, 10)
  791.         lblGangName:SetText('Gang Name')
  792.         lblGangName:SetFont("MenuLarge")
  793.         lblGangName:SizeToContents()
  794.        
  795.         local lblGangPassword = vgui.Create('DLabel', NewGangPanel)
  796.         lblGangPassword:SetPos(10, 35)
  797.         lblGangPassword:SetText('Password')
  798.         lblGangPassword:SetFont("MenuLarge")
  799.         lblGangPassword:SizeToContents()
  800.        
  801.         lblGangColor = vgui.Create('DLabel', NewGangPanel)
  802.         lblGangColor:SetPos(10, 140 + 25)
  803.         lblGangColor:SetText('Color')
  804.         lblGangColor:SetFont("MenuLarge")
  805.         lblGangColor:SizeToContents()
  806.        
  807.         local colorGang = vgui.Create( "DColorMixer", NewGangPanel);
  808.         colorGang:SetSize( 180, 100 );
  809.         colorGang:SetPos( 40, 140 + 45 );
  810.         colorGang:SetColor(Color(255,255,0,255))
  811.        
  812.         local lblGangColor2 = vgui.Create('DLabel', NewGangPanel)
  813.         lblGangColor2:SetPos(220, 140 + 25)
  814.         lblGangColor2:SetText('Shadow Color')
  815.         lblGangColor2:SetFont("MenuLarge")
  816.         lblGangColor2:SizeToContents()
  817.        
  818.         local colorGang2 = vgui.Create( "DColorMixer", NewGangPanel);
  819.         colorGang2:SetSize( 180, 100 );
  820.         colorGang2:SetPos( 220 + 30, 140 + 45 );
  821.         colorGang2:SetColor(Color(255,255,255,255))
  822.        
  823.         local imgGangLogoShadow = vgui.Create('DImage', NewGangPanel)
  824.         imgGangLogoShadow:SetSize(64, 64)
  825.         imgGangLogoShadow:SetPos(130 + 2, 50 + 25 + 2)
  826.         imgGangLogoShadow:SetImage("gangwars/gang/icons/1")
  827.        
  828.         imgGangLogo = vgui.Create('DImage', NewGangPanel)
  829.         imgGangLogo:SetSize(64, 64)
  830.         imgGangLogo:SetPos(130, 50 + 25)
  831.         imgGangLogo:SetImage("gangwars/gang/icons/1")
  832.  
  833.         function NewGangPanel:Think()
  834.             if self.lcol != colorGang:GetColor() or self.scol != colorGang:GetColor() then
  835.                 self.lcol = colorGang:GetColor()
  836.                 self.scol = colorGang2:GetColor()
  837.                 imgGangLogo:SetImageColor( self.lcol )
  838.                 imgGangLogoShadow:SetImageColor( self.scol )
  839.             end
  840.         end
  841.        
  842.         LogoLeft = vgui.Create('DSysButton', NewGangPanel)
  843.         LogoLeft:SetSize(25, 25)
  844.         LogoLeft:SetPos(80, 70 + 25)
  845.         LogoLeft:SetType('left')
  846.         LogoLeft.DoClick = function()
  847.             if self.logo > 1 then
  848.                 self.logo = self.logo - 1
  849.                 imgGangLogo:SetImage("")
  850.                 imgGangLogo:SetImage("gangwars/gang/icons/" .. self.logo)
  851.                 imgGangLogoShadow:SetImage("")
  852.                 imgGangLogoShadow:SetImage("gangwars/gang/icons/" .. self.logo)
  853.             end
  854.         end
  855.  
  856.         LogoRight = vgui.Create('DSysButton', NewGangPanel)
  857.         LogoRight:SetSize(25, 25)
  858.         LogoRight:SetPos(220, 70 + 25)
  859.         LogoRight:SetType('right')
  860.         LogoRight.DoClick = function()
  861.             if self.logo < 25 then
  862.                 self.logo = self.logo + 1
  863.                 imgGangLogo:SetImage("")
  864.                 imgGangLogo:SetImage("gangwars/gang/icons/" .. self.logo)
  865.                 imgGangLogoShadow:SetImage("")
  866.                 imgGangLogoShadow:SetImage("gangwars/gang/icons/" .. self.logo)
  867.             end
  868.         end
  869.  
  870.         lblGanglogo = vgui.Create('DLabel', NewGangPanel)
  871.         lblGanglogo:SetPos(10, 50 + 25)
  872.         lblGanglogo:SetText('Logo')
  873.         lblGanglogo:SetFont("MenuLarge")
  874.         lblGanglogo:SizeToContents()
  875.  
  876.         // Create button
  877.         local DermaButton = vgui.Create( "DButton", NewGangPanel )
  878.         DermaButton:SetText( "Create Gang" )
  879.         DermaButton:SetPos( 10, 260 + 45 )
  880.         DermaButton:SetSize( 160, 30 )
  881.         DermaButton.DoClick = function ()
  882.             Derma_Query( "Creating a gang costs $100,000, are you sure?", "Confirm Purchase", "Yes",
  883.             function(a)
  884.                 datastream.StreamToServer( "CreateGang", { name =  txtGangName:GetValue(), password = util.CRC(txtGangPassword:GetValue()), logo = self.logo, color = colorGang:GetColor(), color2 = colorGang2:GetColor() } )
  885.             end, "No")
  886.         end
  887.     end
  888.     GangCreatePanel:Update()
  889.    
  890.     return GangCreatePanel
  891. end
  892.  
  893. local function GangGeneralTab()
  894.     local GangGeneralPanel = vgui.Create( "DPanel")
  895.     GangGeneralPanel.logo = 1
  896.     GangGeneralPanel:SetSize(750, 550)
  897.     GangGeneralPanel.Paint = function()
  898.         surface.SetDrawColor(0,0,0,255)
  899.         GangGeneralPanel:DrawFilledRect()
  900.     end
  901.  
  902.     if not MyGang or not MyGang.level then return end
  903.    
  904.     local self = GangGeneralPanel
  905.     local rank = tonumber(LocalPlayer():GetNWInt("gang_rank"))
  906.     local gang = MyGang.name or ""
  907.    
  908.     // XP Bar
  909.     local perc = MyGang.xp / Gang.XP2Level(MyGang.level)
  910.     local box1 = vgui.Create( "DColouredBox", self )
  911.     box1:SetPos( 0,0 )
  912.     box1:SetSize( 750, 20 )
  913.     box1:SetColor( Color( 255, 255, 255))
  914.     local box2 = vgui.Create( "DColouredBox", self )
  915.     box2:SetPos( 2,2 )
  916.     box2:SetSize( 750*perc, 16 )
  917.     box2:SetColor( Color( 255, 160, 0))
  918.     local myLabel= vgui.Create("DLabel", self)
  919.     myLabel:SetPos( 300,4 )
  920.     myLabel:SetColor( Color(0, 0, 0, 0) )
  921.     myLabel:SetTextColor( Color(0,0,0,255) )
  922.     myLabel:SetFont("DefaultBold")
  923.     myLabel:SetText(GangWars.FormatMoney(MyGang.xp) .. " / " .. GangWars.FormatMoney(Gang.XP2Level(MyGang.level)))
  924.     myLabel:SizeToContents() // make the control the same size as the text.
  925.    
  926.     // HTML
  927.     html = [[   <html>
  928.                 <body bgcolor="#000000" style="font-family: Arial; font-size: 14px; font-weight:bold; color:#FFFFFF"> ]]
  929.                
  930.     local hcol = "#00FF00"
  931.     if MyGang.points < 0 then hcol = "#FF0000" end
  932.                
  933.     html = html .. "<center><span style='color:#FFFF00; font-size: 18px'><b>" .. MyGang.name .. "</b></font></center><br/>"
  934.     html = html .. "<b><span style='color:#" .. hcol .. "; font-size: 18px'>" .. MyGang.points .. " </span><span style='color:#FFFFFF; font-size: 18px'>Points</span></b><br/><br/>"
  935.     html = html .. "<font color='#c1a400'><b>Members:</b></font> " .. MyGang.members .. " / ".. Gang.GetMemberLimit(MyGang.level) .."<br/>"
  936.     html = html .. "<font color='#c1a400'><b>Level:</b></font> " .. MyGang.level .. " / 10<br/>"
  937.     html = html .. "<font color='#c1a400'><b>Bank:</b></font> " .. CUR .. GangWars.FormatMoney(MyGang.money) .. "<br/>"
  938.    
  939.     html = html .. "<br/>"
  940.    
  941.     if MyGang.hpboost > 0 then
  942.         html = html .. "<font color='#c1a400'><b>Gang Heart:</b></font> " ..Gang.GetUpgradeEffect("hpboost", MyGang.hpboost-1) .."<br/>"
  943.     end
  944.     if MyGang.regen > 0 then
  945.         html = html .. "<font color='#c1a400'><b>Street Spirit:</b></font> " ..Gang.GetUpgradeEffect("regen", MyGang.regen-1) .."<br/>"
  946.     end
  947.     if MyGang.xpboost > 0 then
  948.         html = html .. "<font color='#c1a400'><b>Made Man:</font> " ..Gang.GetUpgradeEffect("xpboost", MyGang.xpboost-1) .."<br/>"
  949.     end
  950.     if MyGang.speedboost > 0 then
  951.         html = html .. "<font color='#c1a400'><b>Streetwise:</b></font> " ..Gang.GetUpgradeEffect("speedboost", MyGang.speedboost-1) .."<br/>"
  952.     end
  953.     if MyGang.printboost > 0 then
  954.         html = html .. "<font color='#c1a400'><b>Goldfinger:</b></font> " ..Gang.GetUpgradeEffect("printboost", MyGang.printboost-1) .."<br/>"
  955.     end
  956.     if MyGang.drugboost > 0 then
  957.         html = html .. "<font color='#c1a400'><b>Sticky Fingers:</b></font> " ..Gang.GetUpgradeEffect("drugboost", MyGang.drugboost-1) .."<br/>"
  958.     end
  959.     if MyGang.dropboost > 0 then
  960.         html = html .. "<font color='#c1a400'><b>Charmed:</b></font> " ..Gang.GetUpgradeEffect("dropboost", MyGang.dropboost-1) .."<br/>"
  961.     end
  962.     if MyGang.extraitems > 0 then
  963.         for i=1,MyGang.extraitems do
  964.             html = html .. "<font color='#c1a400'><b>Militia "..i..":</b></font> " ..Gang.GetUpgradeEffect("extraitems", i-1) .."<br/>"
  965.         end
  966.     end
  967.     html = html .. "<br/><br/>"
  968.    
  969.     // Info html
  970.     local GangInfoHTML = vgui.Create("HTML", self)
  971.     GangInfoHTML:SetPos(0, 20)
  972.     GangInfoHTML:SetSize(330, 480)
  973.     GangInfoHTML:SetHTML(html)
  974.    
  975.     // Set logo
  976.     local imgGangLogoShadow = vgui.Create('DImage', self)
  977.     imgGangLogoShadow:SetSize(64, 64)
  978.     imgGangLogoShadow:SetPos(330 + 2, 20 + 2)
  979.     imgGangLogoShadow:SetImage("")
  980.     imgGangLogoShadow:SetImage("gangwars/gang/icons/" .. MyGang.logo)
  981.     if MyGang.color2 then imgGangLogoShadow:SetImageColor(MyGang.color2) end
  982.    
  983.     local imgGangLogo = vgui.Create('DImage', self)
  984.     imgGangLogo:SetSize(64, 64)
  985.     imgGangLogo:SetPos(330, 20)
  986.     imgGangLogo:SetImage("")
  987.     imgGangLogo:SetImage("gangwars/gang/icons/" .. MyGang.logo)
  988.     if MyGang.color then imgGangLogo:SetImageColor(MyGang.color) end
  989.  
  990.    
  991.     // Buttons
  992.     local GangInfoList = vgui.Create("DPanel", self)
  993.     GangInfoList:SetPos(400, 20)
  994.     GangInfoList:SetSize(400, 460)
  995.     GangInfoList.Paint = function()
  996.         surface.SetDrawColor(0,0,0,255)
  997.         GangInfoList:DrawFilledRect()
  998.     end
  999.  
  1000.     local ypos = 10
  1001.    
  1002.     // Refresh button
  1003.     local DermaButton = vgui.Create( "DButton", GangInfoList )
  1004.     DermaButton:SetText( "Refresh View" )
  1005.     DermaButton:SetPos( 10, ypos )
  1006.     DermaButton:SetSize( 330, 30 )
  1007.     DermaButton.DoClick = function ()
  1008.         RunConsoleCommand("say", "/gang_refresh")
  1009.     end
  1010.    
  1011.     ypos = ypos + 40
  1012.    
  1013.     // Donate Money button
  1014.     local DermaButton = vgui.Create( "DButton", GangInfoList )
  1015.     DermaButton:SetText( "Donate To Gang" )
  1016.     DermaButton:SetPos( 10, ypos )
  1017.     DermaButton:SetSize( 330, 30 )
  1018.     DermaButton.DoClick = function ()
  1019.         Derma_StringRequest( "Donate to Gang", "Enter the amount to donate to your gang", "", function(a) RunConsoleCommand("say", "/gang_donate " .. a) end)
  1020.     end
  1021.    
  1022.     ypos = ypos + 40
  1023.    
  1024.     // Leave button
  1025.     local DermaButton = vgui.Create( "DButton", GangInfoList )
  1026.     DermaButton:SetText( "Leave Gang" )
  1027.     DermaButton:SetPos( 10, ypos )
  1028.     DermaButton:SetSize( 330, 30 )
  1029.     DermaButton.DoClick = function ()
  1030.         Derma_Query( "Are you sure you want to leave your gang?", "Confirm Leave Gang", "Yes", function(a) RunConsoleCommand("say", "/gang_leave") end, "No")
  1031.     end
  1032.    
  1033.     if rank <= 2 then
  1034.        
  1035.         ypos = ypos + 40
  1036.    
  1037.         // Invite button
  1038.         local DermaButton = vgui.Create( "DButton", GangInfoList )
  1039.         DermaButton:SetText( "Invite" )
  1040.         DermaButton:SetPos( 10, ypos )
  1041.         DermaButton:SetSize( 330, 30 )
  1042.         DermaButton.DoClick = function ()
  1043.             local menu = DermaMenu()
  1044.             for _,ply in pairs(player.GetAll()) do
  1045.                 if ply ~= LocalPlayer() then
  1046.                     menu:AddOption(ply:Nick(), function () RunConsoleCommand("say", "/gang_invite " .. ply:UserID()) end)
  1047.                 end
  1048.             end
  1049.             if not menu.Panels then
  1050.                 menu:AddOption("Noone available", function() end)
  1051.             end
  1052.             menu:Open()
  1053.         end
  1054.  
  1055.     end
  1056.    
  1057.     return GangGeneralPanel
  1058. end
  1059.  
  1060. function GangsTab()
  1061.  
  1062.     local GangTabs = vgui.Create( "DPanel")
  1063.     GangTabs:SetSize(760, 550)
  1064.    
  1065.     GangTabs.Tabs = {}
  1066.    
  1067.     GangTabsInGang = vgui.Create( "DPropertySheet", GangTabs)
  1068.     GangTabsInGang:SetSize(760, 550)
  1069.     GangTabsInGang:SetPos(0,0)
  1070.    
  1071.     GangTabsNoGang = vgui.Create( "DPropertySheet", GangTabs)
  1072.     GangTabsNoGang:SetSize(760, 550)
  1073.     GangTabsNoGang:SetPos(0,0)
  1074.    
  1075.     // make tabs
  1076.     /*
  1077.     GangTabs.Tabs.GeneralTab = GangGeneralTab()
  1078.     GangTabs.Tabs.MembersTab = GangMembersTab()
  1079.     GangTabs.Tabs.RivalsTab = GangRivalsTab()
  1080.     GangTabs.Tabs.ShopTab = GangShopTab()
  1081.     GangTabs.Tabs.UpgradesTab = GangUpgradesTab()
  1082.     GangTabs.Tabs.CreateTab = GangCreateTab()
  1083.     GangTabs.Tabs.InvitesTab = GangInvitesTab()
  1084.  
  1085.     GangTabsInGang:AddSheet("General",      GangTabs.Tabs.GeneralTab,   "gui/silkicons/shield", false, false)
  1086.     GangTabsInGang:AddSheet("Members",      GangTabs.Tabs.MembersTab,   "gui/silkicons/group", false, false)
  1087.     GangTabsInGang:AddSheet("Rivals",       GangTabs.Tabs.RivalsTab,    "gui/silkicons/world", false, false)
  1088.     GangTabsInGang:AddSheet("Upgrades",     GangTabs.Tabs.UpgradesTab,  "gui/silkicons/wrench", false, false)
  1089.     GangTabsInGang:AddSheet("Shop",         GangTabs.Tabs.ShopTab,      "gui/silkicons/application_view_tile", false, false)
  1090.            
  1091.     GangTabsNoGang:AddSheet("Create Gang",  GangTabs.Tabs.CreateTab,    "gui/silkicons/add", false, false)
  1092.     GangTabsNoGang:AddSheet("Gang Invites", GangTabs.Tabs.InvitesTab,   "gui/silkicons/group", false, false)
  1093.  
  1094.     GangTabsNoGang:SetVisible(false)
  1095.     GangTabsInGang:SetVisible(false)   
  1096.     */
  1097.    
  1098.     function GangTabsInGang:ClearTabs()
  1099.         self.tabScroller:Remove()
  1100.         self.tabScroller        = vgui.Create( "DHorizontalScroller", self )
  1101.         self.tabScroller:SetOverlap( 5 )
  1102.        
  1103.         for k,v in pairs(self.Items) do
  1104.             v.Tab:Remove()
  1105.             v.Panel:Remove()
  1106.         end
  1107.        
  1108.         self.m_pActiveTab = nil
  1109.         self.Items = {}
  1110.     end
  1111.     function GangTabsNoGang:ClearTabs()
  1112.         self.tabScroller:Remove()
  1113.         self.tabScroller        = vgui.Create( "DHorizontalScroller", self )
  1114.         self.tabScroller:SetOverlap( 5 )
  1115.        
  1116.         for k,v in pairs(self.Items) do
  1117.             v.Tab:Remove()
  1118.             v.Panel:Remove()
  1119.         end
  1120.        
  1121.         self.m_pActiveTab = nil
  1122.         self.Items = {}
  1123.     end
  1124.    
  1125.    
  1126.     function GangTabs:Update()
  1127.    
  1128.         // set active tab group
  1129.         if MyGang and MyGang.name then
  1130.            
  1131.             // clear tab control
  1132.             GangTabsInGang:ClearTabs()
  1133.    
  1134.             // remake tabs
  1135.             GangTabs.Tabs.GeneralTab = GangGeneralTab()
  1136.             GangTabs.Tabs.MembersTab = GangMembersTab()
  1137.             GangTabs.Tabs.RivalsTab = GangRivalsTab()
  1138.             GangTabs.Tabs.ShopTab = GangShopTab()
  1139.             GangTabs.Tabs.UpgradesTab = GangUpgradesTab()
  1140.            
  1141.  
  1142.             // and rebuild
  1143.             GangTabsInGang:AddSheet("General",      GangTabs.Tabs.GeneralTab,   "gui/silkicons/group", false, false)
  1144.             GangTabsInGang:AddSheet("Members",      GangTabs.Tabs.MembersTab,   "gui/silkicons/group", false, false)
  1145.             GangTabsInGang:AddSheet("Rivals",       GangTabs.Tabs.RivalsTab,    "gui/silkicons/group", false, false)
  1146.             GangTabsInGang:AddSheet("Upgrades",     GangTabs.Tabs.UpgradesTab,  "gui/silkicons/group", false, false)
  1147.             GangTabsInGang:AddSheet("Shop",         GangTabs.Tabs.ShopTab,      "gui/silkicons/group", false, false)
  1148.                    
  1149.             // show
  1150.             GangTabsNoGang:SetVisible(false)
  1151.             GangTabsInGang:SetVisible(true)    
  1152.             GangTabsNoGang:SetZPos(1)
  1153.             GangTabsInGang:SetZPos(10)
  1154.  
  1155.        
  1156.         else
  1157.  
  1158.             // clear tab control
  1159.             //GangTabsNoGang:ClearTabs()
  1160.            
  1161.             // remake tabs
  1162.             GangTabs.Tabs.CreateTab = GangCreateTab()
  1163.             GangTabs.Tabs.InvitesTab = GangInvitesTab()
  1164.            
  1165.             // and rebuild
  1166.             GangTabsNoGang:AddSheet("Create Gang",  GangTabs.Tabs.CreateTab,    "gui/silkicons/group", false, false)
  1167.             GangTabsNoGang:AddSheet("Gang Invites", GangTabs.Tabs.InvitesTab,   "gui/silkicons/group", false, false)
  1168.    
  1169.             // show
  1170.             GangTabsNoGang:SetVisible(true)
  1171.             GangTabsInGang:SetVisible(false)
  1172.             GangTabsNoGang:SetZPos(10)
  1173.             GangTabsInGang:SetZPos(1)
  1174.    
  1175.         end
  1176.     end
  1177.  
  1178.        
  1179.     return GangTabs
  1180. end
  1181.  
  1182.  
  1183. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1184. // Gang Search
  1185.  
  1186. local function GangInfoPanel(name, logo, color, color2, level, callback)
  1187.     local InfoPanel = vgui.Create('DPanel')
  1188.     InfoPanel:SetSize(720, 74)
  1189.    
  1190.     InfoPanel.Paint = function()
  1191.         surface.SetDrawColor(20,20,20,255)
  1192.         InfoPanel:DrawFilledRect()
  1193.     end
  1194.    
  1195.     // icon
  1196.     local sIcon2 = vgui.Create('DImage')
  1197.     sIcon2:SetParent(InfoPanel)
  1198.     sIcon2:SetPos(5 + 2, 5 + 2)
  1199.     sIcon2:SetImage("gangwars/gang/icons/" .. logo)
  1200.     sIcon2:SetImageColor(color2)
  1201.     sIcon2:SetSize(64, 64)
  1202.    
  1203.     local sIcon = vgui.Create('DImage')
  1204.     sIcon:SetParent(InfoPanel)
  1205.     sIcon:SetPos(5, 5)
  1206.     sIcon:SetImage("gangwars/gang/icons/" .. logo)
  1207.     sIcon:SetImageColor(color)
  1208.     sIcon:SetSize(64, 64)
  1209.  
  1210.    
  1211.     // select button
  1212.     local btnLock = vgui.Create('DButton')
  1213.     btnLock:SetParent(InfoPanel)
  1214.     btnLock:SetSize(120, 40)
  1215.     btnLock:SetPos(580, 18)
  1216.     btnLock:SetText('Select')
  1217.     btnLock.DoClick = function()
  1218.         if callback then
  1219.             pcall(callback, name, logo, color)
  1220.         end
  1221.        
  1222.         ShowGangSearchWindow( )
  1223.     end
  1224.    
  1225.     // Labels
  1226.     local lblName = vgui.Create('DLabel')
  1227.     lblName:SetParent(InfoPanel)
  1228.     lblName:SetPos(94, 5)
  1229.     lblName:SetFont("Trebuchet20")
  1230.     lblName:SetText(name)
  1231.     lblName:SizeToContents()
  1232.     lblName:SetTextColor(color)
  1233.  
  1234.     local lblPrice = vgui.Create('DLabel')
  1235.     lblPrice:SetParent(InfoPanel)
  1236.     lblPrice:SetPos(94, 26)
  1237.     lblPrice:SetFont("Trebuchet18")
  1238.     lblPrice:SetText("Level " .. level .. " Gang")
  1239.     lblPrice:SizeToContents()
  1240.     lblPrice:SetTextColor(Color(255, 255, 0, 255))
  1241.    
  1242.     return InfoPanel
  1243. end
  1244.  
  1245. local function ReceiveGangSearchInfo(handle, id, encoded, decoded)
  1246.  
  1247.     if decoded and GangSearchList then
  1248.         GangSearchList:Clear( true )
  1249.        
  1250.         //Msg("data:\n")
  1251.         //PrintTable(decoded)
  1252.        
  1253.         for k,v in pairs(decoded) do
  1254.             GangSearchList:AddItem( GangInfoPanel( v.name, v.logo, v.color, v.color2, v.level, GangSearchCallback ) )
  1255.         end
  1256.     end
  1257. end
  1258. datastream.Hook("ds_gang_search", ReceiveGangSearchInfo)
  1259.  
  1260.  
  1261.  
  1262. local function GangSearchPanel()
  1263.     local InfoPanel = vgui.Create('DPanel')
  1264.     InfoPanel:SetSize(720, 74)
  1265.    
  1266.     InfoPanel.Paint = function()
  1267.         surface.SetDrawColor(0,0,0,255)
  1268.         InfoPanel:DrawFilledRect()
  1269.     end
  1270.    
  1271.     local lblPrice = vgui.Create('DTextEntry')
  1272.     lblPrice:SetParent(InfoPanel)
  1273.     lblPrice:SetPos(50, 0)
  1274.     lblPrice:SetSize(360, 26)
  1275.     lblPrice:SetFont("Trebuchet18")
  1276.     lblPrice:SetText("")
  1277.     lblPrice:SetTextColor(Color(0,0,0, 255))
  1278.     lblPrice.OnEnter = function()
  1279.         RunConsoleCommand("say", "/gang_search ".. lblPrice:GetValue())
  1280.         lblPrice:SetText("")
  1281.     end
  1282.     // search button
  1283.     local btnLock = vgui.Create('DButton')
  1284.     btnLock:SetParent(InfoPanel)
  1285.     btnLock:SetSize(120, 26)
  1286.     btnLock:SetPos(420, 0)
  1287.     btnLock:SetText('Search')
  1288.     btnLock.DoClick = function()
  1289.         RunConsoleCommand("say", "/gang_search ".. lblPrice:GetValue())
  1290.         lblPrice:SetText("")
  1291.     end
  1292.  
  1293.    
  1294.     return InfoPanel
  1295. end
  1296.  
  1297. local cl_gang_search_menu = nil
  1298.  
  1299. function ShowGangSearchWindow(hide)
  1300.     if not cl_gang_search_menu or not cl_gang_search_menu:IsVisible() then
  1301.    
  1302.         if not cl_gang_search_menu or not cl_gang_search_menu:IsValid() then
  1303.             cl_gang_search_menu = vgui.Create('DFrame')
  1304.             cl_gang_search_menu:SetSize(740, 540)
  1305.             cl_gang_search_menu:Center()
  1306.             cl_gang_search_menu:SetTitle("Search Gangs")
  1307.             cl_gang_search_menu:SetSizable(false)
  1308.             cl_gang_search_menu:SetDeleteOnClose(false)
  1309.             cl_gang_search_menu:ShowCloseButton(true)
  1310.             cl_gang_search_menu.OnClose = nil
  1311.            
  1312.             function cl_gang_search_menu:Think()
  1313.                 if (!self.Dragging) then return end
  1314.                 local x = gui.MouseX() - self.Dragging[1]
  1315.                 local y = gui.MouseY() - self.Dragging[2]
  1316.                 x = math.Clamp( x, 0, ScrW() - self:GetWide() )
  1317.                 y = math.Clamp( y, 0, ScrH() - self:GetTall() )
  1318.                 self:SetPos( x, y )        
  1319.             end
  1320.  
  1321.             local searchpanel = GangSearchPanel()
  1322.             searchpanel:SetParent(cl_gang_search_menu)
  1323.             searchpanel:SetPos(0, 30)
  1324.             searchpanel:SetVisible(true)
  1325.  
  1326.             local ilist = vgui.Create( "DPanelList", cl_gang_search_menu )
  1327.             ilist:SetPos(5, 30 + 64)
  1328.             ilist:SetSize(720, 520 - 30 - 64)
  1329.             ilist:SetSpacing(2)
  1330.             ilist:EnableHorizontal( false )
  1331.             ilist:EnableVerticalScrollbar( true )
  1332.             // set a global to access the list
  1333.             GangSearchList = ilist
  1334.         end
  1335.        
  1336.  
  1337.         cl_gang_search_menu:MakePopup()
  1338.         gui.EnableScreenClicker(true)
  1339.         cl_gang_search_menu:SetVisible(true)
  1340.     else
  1341.         if cl_gang_search_menu then
  1342.             cl_gang_search_menu:SetVisible(false)
  1343.             gui.EnableScreenClicker(false)
  1344.         end
  1345.     end
  1346. end
  1347. //concommand.Add("gang_search", ShowGangSearchWindow)
  1348.  
  1349. function DoGangSearch(callback)
  1350.     GangSearchCallback = callback
  1351.     ShowGangSearchWindow()
  1352. end
Add Comment
Please, Sign In to add comment