Hi there! You are currently browsing as a guest. Why not create an account? Then you get less ads, can thank creators, post feedback, keep a list of your favourites, and more!
Test Subject
Original Poster
#1 Old 30th Jun 2021 at 10:07 PM
Default Check if there's an object in the inventory for an action
Hi! I was wondering if it's possible to
A. Check if an object is present in a sim's inventory, and only enable options on an object if it is.
B. Make the objects disappear after the action is done.

Basically, I want this for a custom craft table. I wanna know if it's possible to only be able to make certain objects if you have certain "ingredients" (which would disappear) and an "instructions" object (which won't disappear).
Advertisement
Lab Assistant
#2 Old 1st Jul 2021 at 11:05 AM
To check if an object is present in Sim's inventory I use [prim 0x0033] Manage Inventory. It should be set to "Set To Next Token Of GUID", token is the GUID of the object you want to check if it's present. Set target inventory to Singular Neighbour. Neighbour should be My person data 0x001F (neighbor id). Since you want to check for an object, category should be set to visible non-memory.

Here's an example:

Index doesn't have to be Local 3, it can be any other local as long as Local Var Count is correct. I think it's the best not to use previously used local.

Repeat this procedure for every object you want to check. If you want your Sim to have more than one object of some kind to be able to use crafting station, you have to loop it. E.g. you want your Sim to have at least 3 objects of some kind in their inventory. Before you use prim 33, use prim 2 (Expression) and set it to read "Local 0 := Literal 0". Then use prim 33 like I explained you to do (but set index as Local 1). Set true target to the next node, which should be prim 2, make prim 2 read "Local0 += Literal 1", true target should point back to prim 33. False target of prim 33 should point to prim 2 reading "Local0 >= Literal 3". True target of that node should be true and false traget of that node should be false.

Another example:


You can also make node 3 point to node 4 and set false target of node for to point at node 2 and then set false target of node 2 to false.



This will be the function that checks is the crafting station can be used, so you'll want to name it something like "Interaction - Use Station - TEST". Give your function instance different from the others. When you're finished with this BHAV, you should move to Pie Menu Functions. In "Use Station" or whatever you're going to call it menu, set Guardian BHAV to point to your "Interaction - Use Station - TEST" BHAV.



Removing an object from inventory is similar to checking for its presence. What is different is that after you have found the object, you make the true target of Manage Inventory (Set To Next Token Of GUID) point to another prim 33, which is set to "Remove Token At Index". In this prim 33 (Remove Token At Index) you set inventory to Singular Neighbour My person data 0x001F (neighbor id) like you did in prim 33 (Set To Next Token Of GUID). Index has to be the same you used in prim 33 (Set To Next Token Of GUID).

It's something like this:


I hope I didn't make it look too confusing.
Test Subject
Original Poster
#3 Old 1st Jul 2021 at 6:37 PM
This is great! Exactly what I needed. Thanks for your help!
Back to top