From 9e0537b0aa417e88a6a61238484ddcef74080ae0 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Sun, 7 May 2017 13:47:40 -0400 Subject: Added tons of stuff --- gamemode/core/inventory/common/items.lua | 5 ++++- gamemode/core/inventory/sv_invtracker.lua | 36 +++++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 5 deletions(-) (limited to 'gamemode/core/inventory') diff --git a/gamemode/core/inventory/common/items.lua b/gamemode/core/inventory/common/items.lua index 03113f5..95a507c 100644 --- a/gamemode/core/inventory/common/items.lua +++ b/gamemode/core/inventory/common/items.lua @@ -14,15 +14,18 @@ local function drop_self(tbl) end +--Client requests the item be droped from the ent, invid, and inv position function items.DropItem(ent_or_tbl,invid,frompos) + --[[ if type(ent_or_tbl) == "table" then drop_self(ent_or_tbl) else drop_provided(ent_or_tbl,invid,frompos) end + ]] assert(CLIENT,"requested to drop an item when we are not the client!") net.Start("art_RequestInvDrop") - net.WriteEntity(ent) + net.WriteEntity(ent_or_tbl) net.WriteUInt(invid,32) net.WriteTable(frompos) net.SendToServer() diff --git a/gamemode/core/inventory/sv_invtracker.lua b/gamemode/core/inventory/sv_invtracker.lua index 4c1fc1b..47dd164 100644 --- a/gamemode/core/inventory/sv_invtracker.lua +++ b/gamemode/core/inventory/sv_invtracker.lua @@ -63,19 +63,47 @@ net.Receive("art_RequestInvMove",function(len,ply) toinv:Put(topos,item) end) +function track.DropItem(item,pos) + local e = ents.Create("art_droppeditem") + e.Item = {Name = item.Name, Data = item:Serialize()} + e:SetPos(pos) + e:Spawn() +end + net.Receive("art_RequestInvDrop",function(len,ply) local froment = net.ReadEntity() local frominvid = net.ReadUInt(32) local frompos = net.ReadTable() assert(not froment:IsPlayer() or froment == ply, "Player tried to drop an item that was from another players inventory") + print("Using data for drop:") + PrintTable({ + ["froment"] = froment, + ["frominvid"] = frominvid, + ["frompos"] = frompos + }) + print("Player's data is:") + PrintTable(froment.data) local frominv = froment.data.inventories[frominvid] local item = frominv:Get(frompos) frominv:Remove(frompos) - local e = ents.Create("art_droppeditem") - e.Item = {Name = item.Name, Data = item:Serialize()} - e:SetPos((ply:GetForward() * 20) + ply:GetPos()) - e:Spawn() + local placetodrop + --Find somewhere to drop this + local tr = ply:GetEyeTrace() + if tr.Hit then + if tr.HitPos:Distance(ply:GetPos()) < 200 then + placetodrop = tr.HitPos + else + local tr2 = util.TraceLine({ + start = (tr.Normal*200) + tr.StartPos, + endpos = ((tr.Normal*200) + tr.StartPos) + Vector(-2000), + }) + placetodrop = tr2.HitPos + end + else + placetodrop = ply:GetForward() * 200 + end + track.DropItem(item,placetodrop) end) function track.ClearInventories(ply) -- cgit v1.2.3-70-g09d2