diff options
| author | Scott <scotth0828@gmail.com> | 2016-04-30 20:31:37 -0400 |
|---|---|---|
| committer | Scott <scotth0828@gmail.com> | 2016-04-30 20:31:37 -0400 |
| commit | e8fc8b5bf824ed3283dede946e66f5fd843d54ff (patch) | |
| tree | cf935647c5c5ae0c44b30e8a1256df7799c41a5a /ftp_gmstranded/entities/weapons/gms_inventory.lua | |
| parent | 6f6cce0561c19e7af14bcc6e6b1c7de2d5efc530 (diff) | |
| download | gmstranded-e8fc8b5bf824ed3283dede946e66f5fd843d54ff.tar.gz gmstranded-e8fc8b5bf824ed3283dede946e66f5fd843d54ff.tar.bz2 gmstranded-e8fc8b5bf824ed3283dede946e66f5fd843d54ff.zip | |
Some changes
Diffstat (limited to 'ftp_gmstranded/entities/weapons/gms_inventory.lua')
| -rw-r--r-- | ftp_gmstranded/entities/weapons/gms_inventory.lua | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/ftp_gmstranded/entities/weapons/gms_inventory.lua b/ftp_gmstranded/entities/weapons/gms_inventory.lua new file mode 100644 index 0000000..15aaa27 --- /dev/null +++ b/ftp_gmstranded/entities/weapons/gms_inventory.lua @@ -0,0 +1,277 @@ + +AddCSLuaFile() + +SWEP.Slot = 2 +SWEP.SlotPos = 5 + +SWEP.Base = "gms_base_weapon" +SWEP.PrintName = "Inventory" +SWEP.ViewModel = "models/Weapons/v_hands.mdl" +SWEP.WorldModel = "models/props_c17/tools_wrench01a.mdl" + +SWEP.Purpose = "Lets the user keep structures on them for a certain amount of time." +SWEP.Instructions = "Left click on a structure to pick up a structure." + +SWEP.HoldType = "knife" + +SWEP.Structures = {} +SWEP.StructureModels = {} + +local active = false + +// setting time to 0 will make it unlimited + +local dSlot = 4 +local dTime = 24 + +group = { + + { + + rank = "superadmin", + slot = 8, + time = 0, + }, + + { + + rank = "admin", + slot = 8, + time = 0, + + }, + + +} + +SWEP.FixWorldModel = true +SWEP.FixWorldModelPos = Vector( -1.5, 1, -3 ) +SWEP.FixWorldModelAng = Angle( 90, 90, 0 ) +SWEP.FixWorldModelScale = 1 + +local strTBL = {} +local mdlTBL = {} + +if (SERVER) then + +util.AddNetworkString('invStructures') +util.AddNetworkString('createEntity') + +net.Receive('createEntity', function(len, pl) + + strTBL = net.ReadTable() + local slot = net.ReadInt(32) + mdlTBL = net.ReadTable() + + local tr = pl:TraceFromEyes( 200 ) + local loc = tr.HitPos + Vector( 0, 0, 10 ) + + + + + mbEnt=ents.Create(strTBL[slot]) + + if ( strTBL[slot] == "gms_fridge" ) then loc = loc + (mbEnt:GetUp() * 50) else mbEnt:DropToGround() end + + mbEnt:SetModel(mdlTBL[slot]) + mbEnt:SetPos(loc) + mbEnt:Spawn() + SPropProtection.PlayerMakePropOwner( pl, mbEnt ) + + pl:PrintMessage(HUD_PRINTTALK, strTBL[slot]) + pl:PrintMessage(HUD_PRINTTALK, slot) + pl:PrintMessage(HUD_PRINTTALK, mdlTBL[slot]) + + table.remove(strTBL,slot) + table.remove(mdlTBL, slot) + + + +end) + +function SWEP:Think() + + self.Structures = strTBL + self.StructureModels = mdlTBL + +end + +function SWEP:PrimaryAttack() + + self.Structures = strTBL + + local ent = self.Owner:GetEyeTrace().Entity + if ( SPropProtection.PlayerIsPropOwner( self.Owner, ent ) ) then + table.insert(self.Structures, ent:GetClass()) + table.insert(self.StructureModels, ent:GetModel()) + ent:Remove() + + net.Start('invStructures') + + net.WriteTable(self.Structures) + net.WriteTable(self.StructureModels) + + net.Send(self.Owner) + + end + +end + + +end + + + +if (CLIENT) then + +local StructuresTbl = strTBL +local StructureModelsTbl = mdlTBL + +function SWEP:SecondaryAttack() + + net.Receive('invStructures', function(len, pl) + StructuresTbl = net.ReadTable() + StructureModelsTbl = net.ReadTable() + //PrintTable(StructuresTbl) + end) + + if ( active == false ) then + local df = vgui.Create("invPanel") + active = true + end + +end + + + +local PANEL = {} + +function PANEL:Init() + self:SetTitle("") + + rowAmount = 1 + + for k,v in pairs( group ) do + if (LocalPlayer():IsUserGroup(v['rank'])) then + dSlot = v['slot'] + dTime = v['time'] + end + + end + + for i=1,dSlot do + if (i % 5 == 0) then rowAmount=rowAmount+1 end + end + + OffSet = 5 + + self:SetSize(400 + (OffSet*5),(rowAmount*100) + (OffSet*(rowAmount+1)) + 20) + self:SetPos((ScrW()/2)-(self:GetWide()/2),ScrH()-self:GetTall()) + self:ShowCloseButton(true) + gui.EnableScreenClicker(true) + + + row = 1 + col = 1 + + + + for i=1,dSlot do + local button = vgui.Create("slotPanel", self) + + print(StructuresTbl[i]) + + if (StructuresTbl[i] != nil and StructureModelsTbl[i] != nil) then + + + local icon = vgui.Create( "DModelPanel", button ) + icon:SetSize( 100, 150 ); + icon:SetCamPos( Vector( 50,50,50 ) ); + icon:SetLookAt( Vector( 0, 0, -40 ) ); + //icon:SetLookAt( Vector( right, left, up/down ) ); + icon:SetModel( StructureModelsTbl[i] ) + icon:SetText(tostring(StructuresTbl[i])) + + icon.DoClick = function() + + local mb = DermaMenu() + + mb:AddOption("Drop", function() + + net.Start('createEntity') + + net.WriteTable( StructuresTbl ) + net.WriteInt( i, 32 ) + net.WriteTable( StructureModelsTbl ) + + net.SendToServer() + + table.remove( StructuresTbl, i ) + table.remove( StructureModelsTbl, i ) + + self:Close() + local df = vgui.Create("invPanel") + active = true + + end) + + mb:Open() + + end + end + + + if (i/4 <= col) then + + button:SetPos((row-1)*button:GetWide() + (OffSet*row),(col-1)*button:GetTall() + (OffSet*col) + 20) + row=row+1 + + else + + row=1 + col=col+1 + button:SetPos((row-1)*button:GetWide() + (OffSet*row),(col-1)*button:GetTall() + (OffSet*col) + 20) + row=row+1 + + end + end + +end + +function PANEL:Paint(w,h) + if (!LocalPlayer():HasWeapon("gms_inventory")) then return end + if (LocalPlayer():GetActiveWeapon():GetClass() != "gms_inventory") then + self:Close() + end + + draw.RoundedBox( 0, 0, 0, w, h, Color( 48, 48, 48, 255 ) ) + +end + +function PANEL:Close() + active = false + gui.EnableScreenClicker( false ) + self:Remove() +end + +vgui.Register("invPanel", PANEL, "DFrame") + +local PANEL = {} + +function PANEL:Init() + + self:SetSize(100,100) + self:SetPos(0,0) + self:SetText("") + +end + +function PANEL:Paint(w,h) + if (!LocalPlayer():HasWeapon("gms_inventory")) then return end + draw.RoundedBox( 0, 0, 0, w, h, Color( 24, 24, 24, 255 ) ) + +end + +vgui.Register("slotPanel", PANEL, "DButton") + +end
\ No newline at end of file |
