Trouble with LUA Classes
Posted: Sun Feb 10, 2008 11:31 pm
I've started work on an RPG. So lately, I've been fiddling around with classes.
They seem like a good way to make the programming a little easier.
There's something wrong with this code block but I don't know what.
For some reason it's not creating a new Inventory object inside of the Player object.
I'm guessing that it traces back to this line:
But I can't figure out why. 
Does anyone know why it would be doing this?
They seem like a good way to make the programming a little easier.
There's something wrong with this code block but I don't know what.
Code: Select all
Item = {itemName = "", itemValue = 0}
function Item:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
Inventory = {items = {}}
function Inventory:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
Player = {credits = 0, bag = Inventory:new{}}
function Player:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
function Player:GetItemCount()
return table.getn(self.bag.items)
end
function Player:GetItemName(x)
return self.bag.items[x].itemName
end
function Player:RemoveItem(x)
self.bag.items[x] = nil
end
function Player:AddItem(x, item)
self.bag.items[x] = item
end
srp = Item:new{itemName = "Super Pistol", itemValue = 10000}
lsr = Item:new{itemName = "Death Machine", itemValue = 1000000}
BP = Item:new{itemName = "Pistol", itemValue = 0}
DR = Item:new{itemName = "Rifle", itemValue = 0}
ET = Item:new{itemName = "Grenade", itemValue = 0}
a = Player:new{credits = 50}
a:AddItem(a:GetItemCount() + 1, srp)
a:AddItem(a:GetItemCount() + 1, lsr)
b = Player:new{credits = 85}
b:AddItem(b:GetItemCount() + 1, BP)
b:AddItem(b:GetItemCount() + 1, DR)
b:AddItem(b:GetItemCount() + 1, ET)
print(a:GetItemName(1)) -->>Super Pistol
print(a:GetItemName(2)) -->> Death Machine
print(a:GetItemCount()) -->> 5
print(a.credits) -->> 50
print(b:GetItemName(1)) -->> Super Pistol
print(b:GetItemName(2)) -->> Death Machine
print(b:GetItemName(3)) -->> Pistol
print(b:GetItemCount()) -->> 5
print(b.credits) -->> 85 I'm guessing that it traces back to this line:
Code: Select all
Player = {credits = 0, bag = Inventory:new{}}Does anyone know why it would be doing this?