Hi, I need some help on my code, I am making inventory system, using object oriented programming.
Please read all!
local function RefreshInventory(InventoryTable)
for i,v in pairs(script.Parent.Inventory.NoFreeSlots:GetChildren()) do
v:Destroy()
end
for i,v in pairs(InventoryTable) do
local Tmp = v.ViewportFrame
Tmp.Name = v.name
Tmp.Parent = script.Parent.Inventory.NoFreeSlots
Tmp.Position = v.Slot.Position
end
end
Events.Receive.OnClientEvent:Connect(function(Name)
Inventory:AddItem(Name)
wait(.2)
RefreshInventory(Inventory:GetInventory())
end)
For some reason
InventoryTable is nil, no Cue why
function Inventory.Start(Player)
local self = {}
self.Inventory = {}
self.Mouse = Player:GetMouse()
self.Player = Player
self.Holding = false
self.Slots = Player.PlayerGui.Game.Inventory.Slots
self.SlotsInUse = {}
self.Current = nil
for i,v in pairs(self. Slots:GetChildren()) do
self.SlotsInUse[v] = false
end
return setmetatable(self,Inventory)
end
This is how I create it.
.__index is defined!
The trouble is here:
function Inventory:Viewports(Name,Distance)
local object
object = game.ReplicatedStorage.Modules:FindFirstChild(Name)
if not object then
return;
end
local ViewportTemplate = script.Viewport:Clone()
local Camara = Instance.new('Camera',ViewportTemplate)
ViewportTemplate.CurrentCamara = Camara
object = object:Clone()
object.Anchored = true
object.Parent = ViewportTemplate
Camara.CFrame = CFrame.new(object.Position + Vector3.new(0,2,10),object.Position)
print(ViewportTemplate.Name)
return ViewportTemplate
end
So basically I do this:
table.insert(self.Inventory, {Index = 1,Slot=self:FindSlot(),ViewportFrame=self:CreateViewportFrame(Name,2),name=Name})
But… when I call from client
function Inventory:GetInventory()
return self.Inventory
end
It returns nil
An idea why this doesn’t works?
:FindSlot() works fine
And CreateViewport too.
But it seems i can’t return table to client!