Infinite, Stackable Inventory/Crafting/Vendor - UPDATED v1.5
Forum rules
Do not post questions here!
This forum is for example code you want to show other people. Ren'Py questions should be asked in the Ren'Py Questions and Announcements forum.
Do not post questions here!
This forum is for example code you want to show other people. Ren'Py questions should be asked in the Ren'Py Questions and Announcements forum.
- MidnightCafe
- Newbie
- Posts: 3
- Joined: Fri Jun 09, 2017 4:20 pm
- Contact:
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED
There's probably an easy solution to this, but I'm having trouble getting the inventory screen over the dialogue box.
And while I'm at it, is it at all possible to have the dialogue box close/hide whenever the inventory screen is opened?
And while I'm at it, is it at all possible to have the dialogue box close/hide whenever the inventory screen is opened?
- noeinan
- Eileen-Class Veteran
- Posts: 1153
- Joined: Sun Apr 04, 2010 10:10 pm
- Projects: Ren'Py QuickStart, Crimson Rue
- Organization: Statistically Unlikely Games
- Deviantart: noeinan
- Github: noeinan
- Location: Washington State, USA
- Contact:
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED
I don't have the code pulled up right now, but I believe you assign menu priority with "zorder" and you can make certain screens disappear when another screen opens by giving them both the same menu tag. (Ex. menu, menu1, menu2.) If you search the forums for those tags you should be able to get some more information on them.MidnightCafe wrote:There's probably an easy solution to this, but I'm having trouble getting the inventory screen over the dialogue box.
And while I'm at it, is it at all possible to have the dialogue box close/hide whenever the inventory screen is opened?
- MidnightCafe
- Newbie
- Posts: 3
- Joined: Fri Jun 09, 2017 4:20 pm
- Contact:
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED
Both of these worked, thank you!daikiraikimi wrote: I don't have the code pulled up right now, but I believe you assign menu priority with "zorder" and you can make certain screens disappear when another screen opens by giving them both the same menu tag. (Ex. menu, menu1, menu2.) If you search the forums for those tags you should be able to get some more information on them.
I don't think the tutorial covered it, but is it possible to keep someone from trading an item unless you have a specific item? (Maria has a stopwatch, but won't trade unless you have milk, for example)
- noeinan
- Eileen-Class Veteran
- Posts: 1153
- Joined: Sun Apr 04, 2010 10:10 pm
- Projects: Ren'Py QuickStart, Crimson Rue
- Organization: Statistically Unlikely Games
- Deviantart: noeinan
- Github: noeinan
- Location: Washington State, USA
- Contact:
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED
Glad I could be of use! I don't think there's anything like that currently programmed in. The easiest way I can think of implementing this is to simply not add the stopwatch to the inventory unless the player has milk. (Ex. If [player has milk] then [add stopwatch to Maria's inventory].)MidnightCafe wrote:
Both of these worked, thank you!
I don't think the tutorial covered it, but is it possible to keep someone from trading an item unless you have a specific item? (Maria has a stopwatch, but won't trade unless you have milk, for example)
However, that doesn't really fix things if 1. you want the player to see the stopwatch, and then not be able to buy it, therefore they go on a search for milk, and 2. if you want the player to trade the stopwatch *for* milk, instead of the trade only being active if milk is in the inventory.
Looking at the code...
Code: Select all
def trade(seller, buyer, item):
seller.drop(item[0])
buyer.take(item[0])
Code: Select all
def real_trade(seller, buyer, Sitem, Bitem):
seller.drop(Sitem[0])
buyer.take(Sitem[0])
buyer.drop(Bitem[0])
seller.take(Bitem[0])
Code: Select all
def watch_trade(seller, buyer, Sitem, Bitem):
if Sitem = "watch" and Bitem = "milk":
seller.drop(Sitem[0])
buyer.take(Sitem[0])
buyer.drop(Bitem[0])
seller.take(Bitem[0])
else:
jump no_milk
The syntax on that is, I'm pretty sure, not correct since all the functions are written inside a python block, but it seems like that's the basic structure you would need. (Just translate into python proper, if you post on the forums someone might be able to help more with that.) The problem with this is that you need to make a new function for every single item-item trade. Not a problem if you only have a few plot-pertinent trades, but it's not going to work if you want to be able to trade any two items of equal value, for example.
There is also "trade mode" in various places throughout the code, and you would probably need to make a new "trade mode" that has actual trading instead of moving things around. Maybe change the old "trade mode" into "move mode" or "storage mode" and then make a new "trade mode" that allows for trading of items. (Or, instead, you could trigger the trade through dialogue instead of using the shop screen, which honestly would make things easier.)
OH. That made me think of another much easier solution. Don't put the watch in the inventory at all, or put it in and make it an unreasonably high price. Then use dialogue with the shopkeeper entirely-- if the player has milk, the shopkeeper will ask the player to trade milk for the watch. Then just add the items to their appropriate inventories based on dialogue choices, skipping all the more complicated code all together. Ex:
Code: Select all
shopkeeper "Oh, if only I had some milk."
if [player has milk in their inventory]:
player "I have milk!"
shopkeeper "Wow! Will you trade for this stopwatch?"
menu:
Yes
[remove milk from inventory]
[add stopwatch to inventory]
shopkeeper "Thank you so much!
No
shopkeeper "Oh, that's too bad..."
else:
shopkeeper "If someone had milk, I would trade them my very expensive stopwatch... But I guess not."
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED v1.5
I really like it. Don't know if it's expected behaviour but you can sell stuff for 0 g (Coin).
Newest classical cover: Advance Wars - Sami Theme: https://www.youtube.com/watch?v=657Jt7hJRVc
Forum with my music: http://luxliev.proboards.com/
Forum with my music: http://luxliev.proboards.com/
- Modzso
- Newbie
- Posts: 24
- Joined: Fri Jun 24, 2016 5:38 am
- Projects: Ghosts of Fablees - Chapter 1.
- Tumblr: captainmodzso
- Deviantart: nephle
- Contact:
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED v1.5
Someone has solved the usuable items already?
An item in the inventory when I click on it, it's gonna give you certain things / benefits? Like an apple, clicked on it and it gives a few hp?
Any solution for that?
An item in the inventory when I click on it, it's gonna give you certain things / benefits? Like an apple, clicked on it and it gives a few hp?
Any solution for that?
- noeinan
- Eileen-Class Veteran
- Posts: 1153
- Joined: Sun Apr 04, 2010 10:10 pm
- Projects: Ren'Py QuickStart, Crimson Rue
- Organization: Statistically Unlikely Games
- Deviantart: noeinan
- Github: noeinan
- Location: Washington State, USA
- Contact:
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED v1.5
Making an item that changes a variable when clicked is easy enough! You just need to add SetVariable as one of the actions.
However, after clicking the apple it will remain in your inventory. Every time you click the apple it will give you another 5 health. If you want to consume the apple after use, you will need to code an action that removes an apple from the inventory. I'm not 100% on how to do that myself, though. My best guess would be something like this...
And then changing the item definition to add the new action:
But there are probably some errors in there regarding how it "talks" to other areas of the code. Maybe someone with more coding practice would be able to narrow it down from there?
Code: Select all
$ apple = Item("Apple", "A juicy fruit which restores 5 health.", "inv/apple.png", 100, act=[Show("inventory_popup", message="+5 Health"), SetVariable('health',health+1)])
Code: Select all
class UseItem(Action):
def __init__(self, item):
self.item = item
def __call__(self):
pc_inv.drop(item[0])
And then changing the item definition to add the new action:
Code: Select all
$ apple = Item("Apple", "A juicy fruit which restores 5 health.", "inv/apple.png", 100, act=[UseItem(apple), Show("inventory_popup", message="+5 Health"), SetVariable('health',health+1)])
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED
daikiraikimi wrote: ↑Mon Jan 30, 2017 6:27 pmI am not an expert by any means, but here is my best guess:Yadi wrote: iam tried to make a cafe gameplay example
so, iam change the items acts to jump to label test if we clicked the icon and then iam put this code in label testbut i got an error, said: name 'item' isn't defined, then what the right code of it ?Code: Select all
label test: if item[0].dishOrg > 50: $costumerhappy = + 6 call Satisfied_costumer from Satisfied_costumer
Everywhere else in the code that uses item directly is a function, inside a python block. Variables inside of functions aren't defined outside of that function. It seems to me that you will need to make a function that takes in information about the item and then calls "Satisfied_customer" if the conditions are met.
iam barely saw this, because i am not getting any notifications if my question has been answered, so i thought iam just beings ignored, but thanks for replied even i don't need this anymore, and you know, your inventory-system is interesting so that's why i was trying to learn coding from it...
thanks once again
- niannn
- Regular
- Posts: 57
- Joined: Tue Jun 27, 2017 1:04 am
- Completed: Keynote, Die.Alone?, The Villaintine
- Projects: The Villaintine: Sepia
- Tumblr: niaaannn
- itch: niannn
- Location: Philippines
- Contact:
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED v1.5
just wondering if there's a way to solve this one?
As you can see from the image, the description of an item upon hovering doesn't show up where it's supposed to be. I don't have any idea how to fix this and I would really appreciate help. Also, thank you in advance!
sidenote: I am not so well-versed with python and modified the code only a little based on the basic guidelines on how to use it (I did try to fix this with my basic understanding but I think all my attempts are not getting me anywhere and I need help). So, I'm still a rookie. I might ask again if I don't understand the answer so I hope you'll be patient with me. Once again, thank you very much in advance.
As you can see from the image, the description of an item upon hovering doesn't show up where it's supposed to be. I don't have any idea how to fix this and I would really appreciate help. Also, thank you in advance!
sidenote: I am not so well-versed with python and modified the code only a little based on the basic guidelines on how to use it (I did try to fix this with my basic understanding but I think all my attempts are not getting me anywhere and I need help). So, I'm still a rookie. I might ask again if I don't understand the answer so I hope you'll be patient with me. Once again, thank you very much in advance.
-
- Regular
- Posts: 91
- Joined: Mon Jul 31, 2017 8:33 am
- Deviantart: LedianWithACamera
- Contact:
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED v1.5
Hi! I couldn't figure something out and I wanted to know if it was possible or not.
Is there a way to have a chest react to something you put inside, if that makes sense? I'm trying to use this with a dating sim, and I want to be able to use this to give a gift to a character, but only one at a time, and have it jump to a reaction right away. Is there a way to do this?
Edit: I'm working on a way to do this but it's kinda confusing.
There's my code, it's just something I made really quick to try and test it. When I try and play the game...
Can you even make an item jump to a label when you use it, or can it only make text pop up on the screen?
Is there a way to have a chest react to something you put inside, if that makes sense? I'm trying to use this with a dating sim, and I want to be able to use this to give a gift to a character, but only one at a time, and have it jump to a reaction right away. Is there a way to do this?
Edit: I'm working on a way to do this but it's kinda confusing.
Code: Select all
label start:
$ jane_inv = Inventory("Items")
$ sword = Item("Not A Sword", "It looks like a sword, but it isn't.", "images/sword.png", 500, call ReactSword)
$ interaction = None
$ characterabond = 0
$ characterbbond = 0
jump beginning
label beginning:
menu:
"Character A":
jump CharacterA
"Character B":
jump CharacterB
"Check Bond":
jump bondcheck
label CharacterA:
"Hey!"
menu:
"Give Gift":
$ interaction = A
show screen inventory_screen(jane_inv)
menu:
"Back":
jump beginning
label CharacterB:
"Hi."
menu:
"Give Gift":
$ interaction = B
show screen inventory_screen(jane_inv)
menu:
"Back":
jump beginning
label ReactSword:
if interaction == none:
Show("inventory_popup", message="You can't use this here.")
else:
if interaction == A:
"Really? It's not a sword?"
$ characterabond += 1
$ interaction = none
hide screen inventory_screen
jump beginning
else:
if interaction == B:
"I thought it was a sword..."
$ characterbbond += 1
$ interaction = none
hide screen inventory_screen
jump beginning
label bondcheck:
"A's bond is [characterabond] and B's bond is [characterbbond]!"
jump beginning
There's my code, it's just something I made really quick to try and test it. When I try and play the game...
Code: Select all
I'm sorry, but errors were detected in your script. Please correct the
errors listed below, and try again.
File "game/script.rpy", line 50: expected statement.
Show("inventory_popup", message="You can't use this here.")
^
Ren'Py Version: Ren'Py 6.99.12.4.2187
-
- Regular
- Posts: 91
- Joined: Mon Jul 31, 2017 8:33 am
- Deviantart: LedianWithACamera
- Contact:
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED v1.5
Code: Select all
I'm sorry, but an uncaught exception occurred.
While running game code:
File "game/definitions.rpy", line 126, in script
$ osanoitem = Item("Osano Najimi", "")
File "game/definitions.rpy", line 126, in <module>
$ osanoitem = Item("Osano Najimi", "")
NameError: name 'Item' is not defined
-- Full Traceback ------------------------------------------------------------
Full traceback:
File "C:\Users\SerebiiGamer\Desktop\renpy-6.99.12.4-sdk\renpy\bootstrap.py", line 295, in bootstrap
renpy.main.main()
File "C:\Users\SerebiiGamer\Desktop\renpy-6.99.12.4-sdk\renpy\main.py", line 419, in main
game.context().run(node)
File "game/definitions.rpy", line 126, in script
$ osanoitem = Item("Osano Najimi", "")
File "C:\Users\SerebiiGamer\Desktop\renpy-6.99.12.4-sdk\renpy\ast.py", line 814, in execute
renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
File "C:\Users\SerebiiGamer\Desktop\renpy-6.99.12.4-sdk\renpy\python.py", line 1719, in py_exec_bytecode
exec bytecode in globals, locals
File "game/definitions.rpy", line 126, in <module>
$ osanoitem = Item("Osano Najimi", "")
NameError: name 'Item' is not defined
Windows-8-6.2.9200
Ren'Py 6.99.12.4.2187
-
- Regular
- Posts: 91
- Joined: Mon Jul 31, 2017 8:33 am
- Deviantart: LedianWithACamera
- Contact:
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED v1.5
Does anyone have any clue on how to fix the item not defined issue? Really sorry to double post, it's just my project literally will not launch without it, the error message shows up in an editra window instead of the normal error window, I'm super desperate for help right now.
-
- Newbie
- Posts: 2
- Joined: Thu Oct 12, 2017 4:21 am
- Contact:
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED v1.5
This script is really great!
But, am I the only one with the issue that after saving and reloading a game, the inventory reverts back to default? Current items are not saved.
I've tried initializing the inventory before the begin label, as well as after it. I can't figure it out.
Has anyone fixed this issue?
But, am I the only one with the issue that after saving and reloading a game, the inventory reverts back to default? Current items are not saved.
I've tried initializing the inventory before the begin label, as well as after it. I can't figure it out.
Has anyone fixed this issue?
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED v1.5
same problem, things are not saved in storage when you load a save.
any fix? or updated version?
any fix? or updated version?
- niannn
- Regular
- Posts: 57
- Joined: Tue Jun 27, 2017 1:04 am
- Completed: Keynote, Die.Alone?, The Villaintine
- Projects: The Villaintine: Sepia
- Tumblr: niaaannn
- itch: niannn
- Location: Philippines
- Contact:
Re: Infinite, Stackable Inventory/Crafting/Vendor - UPDATED v1.5
Hello, I encountered this problem before and the solution I found so far is that you need to declare your cookbook and your inventories as default.
Here's a code snippet from my second game showing how I declared just that place this code just above 'label start'. I hope that helps
Here's a code snippet from my second game showing how I declared just that place this code just above 'label start'. I hope that helps
Code: Select all
init:
default cookbook = list()
default inv = Inventory("Inventory")
## Inventory Items
$ medicine = Item("Item", "some item")
Who is online
Users browsing this forum: Kous_Coffee