aboutsummaryrefslogtreecommitdiff
path: root/gamemode/core/inventory
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2017-05-07 13:47:40 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2017-05-07 13:47:40 -0400
commit9e0537b0aa417e88a6a61238484ddcef74080ae0 (patch)
treee2bd590ec3de41d384aa5f6206b14e1a73647846 /gamemode/core/inventory
parent191ba416c8b611ea4901cead138789a357c56134 (diff)
downloadartery-9e0537b0aa417e88a6a61238484ddcef74080ae0.tar.gz
artery-9e0537b0aa417e88a6a61238484ddcef74080ae0.tar.bz2
artery-9e0537b0aa417e88a6a61238484ddcef74080ae0.zip
Added tons of stuff
Diffstat (limited to 'gamemode/core/inventory')
-rw-r--r--gamemode/core/inventory/common/items.lua5
-rw-r--r--gamemode/core/inventory/sv_invtracker.lua36
2 files changed, 36 insertions, 5 deletions
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)