So I've been working on an Inventory system for my game and I've decided to add a shop to it.
I am using this inventory system provided in here.
And this is what my Inventory code looks like:
Code: Select all
######################CODE############################
init -1 python:
class Item(object):
def __init__(self, name, info, cost, wt, damage, amount=0, **kwargs):
self.name = name
self.info = info
self.cost = cost
self.wt = wt
self.damage = damage
self.amount = amount
#inventory
class Backpack(object):
def __init__(self, maxwt, gold, **kwargs):
self.maxwt = maxwt
self.space_left = maxwt
self.mySet = set()
self.gold = gold
def add_Item(self, item, found=False):
#find item
if item.wt <= self.space_left:
self.mySet.add(item)
self.space_left -= item.wt
item.amount += 1
return "{0} added to inventory.".format(item.name)
else:
if item.wt > self.space_left:
return "There is not enough space in your inventory!"
#buy
def buy_item(self, item):
if item.cost <= self.gold and (item.wt <= self.space_left):
self.gold -= item.cost
self.mySet.add(item)
self.space_left -= item.wt
item.amount += 1
return "You've successfully bought {0}.".format(item.name)
else:
if item.wt > self.space_left:
return "There is not enough space in your inventory!"
elif item.cost > self.gold:
return "You don't have enough Money!"
else:
return "There is some problem here."
#sell
def sell_Item(self, item):
if item in self.mySet:
item.amount -= 1
self.space_left += item.wt
if item.amount == 0:
self.mySet.remove(item)
self.gold += item.cost #divide by 2
return "You've successfully sold {0}.".format(item.name)
else:
return "{0} not in inventory!".format(item.name)
def remove_Item(self, item, sell=False):
if not sell:
if item in self.mySet:
item.amount -= 1
self.space_left += item.wt
if item.amount == 0:
self.mySet.remove(item)
return "{0} removed from inventory.".format(item.name)
else:
return "{0} not in inventory!".format(item.name)
else:
if item in self.mySet:
item.amount -= 1
self.space_left += item.wt
if item.amount == 0:
self.mySet.remove(item)
self.gold += item.cost #divide by 2
return "{0} removed from inventory.".format(item.name)
#shops
class GShopinv(object):
def __init__(self, maxwt, gold, **kwargs):
self.maxwt = maxwt
self.space_left = maxwt
self.mySet = set()
self.gold = gold
def add_gShopItem(self, item):
self.mySet.add(item)
return "New items added to Shops."#.format(item.name)
def remove_gShopItem(self, item):
self.mySet.remove(item)
return "Some Items have been removed from Shops."#.format(item.name)
class MShopinv(object):
def __init__(self, maxwt, gold, **kwargs):
self.maxwt = maxwt
self.space_left = maxwt
self.mySet = set()
self.gold = gold
def add_mShopItem(self, item):
self.mySet.add(item)
return "New items added to Shops."#.format(item.name)
def remove_mShopItem(self, item):
self.mySet.remove(item)
return "Some Items have been removed from Shops."#.format(item.name)
# ------------- Variable declarations ---------------
#BACKPACK & MONEY
default backpack = set()
default myBackpack = Backpack(50, 50)
default money = 50
#SHOPs
default gshop = GShopinv(50,50)
default gshopinv = set()
default mshop = MShopinv(50,50)
default mshopinv = set()
#ITEMS (name, info, cost, wt, damage)
default chocolates = Item("Chocolates", "The best gift for your loved one...unless they don't like chocolate!", 150, 1, 0)
#other items...
This is the screen for my shop:
Code: Select all
screen giftshopbuy():
tag room
add "screens/giftshop.png"
add "screens/shopkeeper.png" xalign 0.0 yalign 0.5 #use transformation to slide to left side**
use no_quick_menu
#shop items
default tt = Tooltip("No item selected.")
vpgrid:
cols 5
spacing 15
draggable True
mousewheel True
ysize 400
scrollbars "vertical"
side_xalign 0.76
side_yalign 0.5
for item in gshop.mySet:
textbutton ("[item.name]:\n [item.cost]"):
xysize (100, 80)
text_style "buttonz"
action Confirm("Do you wish to buy this item?", yes=Function(myBackpack.mySet.buy_item, (item)))#**how?
hovered tt.Action(item.info)
vbox:
xalign 0.0
yalign 0.96
spacing 10
#back btn
use lobby_button("screens/back_%s.png", [Hide("giftshopbuy"), Show("overlay"), Show("tracker"), Show("giftshop")])
#sell
textbutton _("Sell Mode") text_style "buttony2" action Show("giftshopsell")
#tooltip
vbox:
xalign 0.5
yalign 0.8
text tt.value
The problem is that I seem to be doing something wrong in there because whenever I enter the shop I get the following error:
Code: Select all
I'm sorry, but an uncaught exception occurred.
While running game code:
File "game/script.rpy", line 256, in script
call screen giftshopbuy
File "renpy/common/000statements.rpy", line 531, in execute_call_screen
store._return = renpy.call_screen(name, *args, **kwargs)
File "game/scripts/lobby.rpy", line 123, in execute
screen giftshopbuy():
File "game/scripts/lobby.rpy", line 123, in execute
screen giftshopbuy():
File "game/scripts/lobby.rpy", line 132, in execute
vpgrid:
File "game/scripts/lobby.rpy", line 144, in execute
for item in gshop.mySet:
File "game/scripts/lobby.rpy", line 145, in execute
textbutton ("[item.name]:\n [item.cost]"):
File "game/scripts/lobby.rpy", line 145, in keywords
textbutton ("[item.name]:\n [item.cost]"):
AttributeError: 'RevertableSet' object has no attribute 'buy_item'
-- Full Traceback ------------------------------------------------------------
Full traceback:
File "game/script.rpy", line 256, in script
call screen giftshopbuy
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\ast.py", line 1949, in execute
self.call("execute")
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\ast.py", line 1937, in call
return renpy.statements.call(method, parsed, *args, **kwargs)
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\statements.py", line 277, in call
return method(parsed, *args, **kwargs)
File "renpy/common/000statements.rpy", line 531, in execute_call_screen
store._return = renpy.call_screen(name, *args, **kwargs)
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\exports.py", line 2905, in call_screen
rv = renpy.ui.interact(mouse="screen", type="screen", roll_forward=roll_forward)
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\ui.py", line 297, in interact
rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\display\core.py", line 2702, in interact
repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, **kwargs)
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\display\core.py", line 3094, in interact_core
root_widget.visit_all(lambda i : i.per_interact())
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\display\core.py", line 541, in visit_all
d.visit_all(callback, seen)
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\display\core.py", line 541, in visit_all
d.visit_all(callback, seen)
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\display\core.py", line 541, in visit_all
d.visit_all(callback, seen)
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\display\screen.py", line 430, in visit_all
callback(self)
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\display\core.py", line 3094, in <lambda>
root_widget.visit_all(lambda i : i.per_interact())
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\display\screen.py", line 440, in per_interact
self.update()
File "D:\CIIN\Programas\renpy-7.3.5-sdk.7z\renpy-7.3.5-sdk\renpy\display\screen.py", line 625, in update
self.screen.function(**self.scope)
File "game/scripts/lobby.rpy", line 123, in execute
screen giftshopbuy():
File "game/scripts/lobby.rpy", line 123, in execute
screen giftshopbuy():
File "game/scripts/lobby.rpy", line 132, in execute
vpgrid:
File "game/scripts/lobby.rpy", line 144, in execute
for item in gshop.mySet:
File "game/scripts/lobby.rpy", line 145, in execute
textbutton ("[item.name]:\n [item.cost]"):
File "game/scripts/lobby.rpy", line 145, in keywords
textbutton ("[item.name]:\n [item.cost]"):
File "<screen language>", line 148, in <module>
AttributeError: 'RevertableSet' object has no attribute 'buy_item'
Windows-8-6.2.9200
Ren'Py 7.3.5.606
A Cursed Travelers Tale 1.0
Tue Aug 18 14:41:10 2020
Code: Select all
for item in gshop.mySet:
textbutton ("[item.name]:\n [item.cost]"):
...Thank you for reading and have a nice day~
