Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | JerryHayat |
Hello! I decided to study the inventory system using this demo:
https://github.com/szechset/PC-Inventory-Demo
I decided to make an item generator in order to delve a little more into this system and faced the fact that I needed a container for the generator, similar to the inventory.
I added code to generate slots and items from the inventory example and ran into the problem that Godot reads both dictionaries
Inventory:
func _ready():
if !dictionary_inv.itemDictionary.empty():
for item in dictionary_inv.itemDictionary:
var itemType = dictionary_inv.itemDictionary[item].itemType
var itemName = dictionary_inv.itemDictionary[item].itemName
var itemIcon = dictionary_inv.itemDictionary[item].itemIcon
var itemStack = dictionary_inv.itemDictionary[item].itemStack
var itemStackMax = dictionary_inv.itemDictionary[item].itemStackMax
var itemStackValue = dictionary_inv.itemDictionary[item].itemStackValue
var itemEq = dictionary_inv.itemDictionary[item].itemEq
itemList.append(ItemClass.new(itemType, itemName, itemIcon, itemStack, itemStackMax, itemStackValue, itemEq, null))
for i in range(inventorySize):
var slot = SlotClass.new(i, 'none')
slotList.append(slot)
$inv_ui/zpa/Container/GridContainer.add_child(slot)
if !dictionary_inv.itemDictionary.empty():
var x = 0
var itemDelete = Array()
for i in dictionary_inv.itemDictionary:
if i < inventorySize:
if dictionary_inv.itemDictionary[i].itemStack:
if dictionary_inv.itemDictionary[i].itemStackValue > dictionary_inv.itemDictionary[i].itemStackMax:
itemDelete.append(i)
itemList.remove(x)
else:
slotList[i].setItem(itemList[x])
slotUsed.append(itemList[x].itemIndex)
x += 1
else:
slotList[i].setItem(itemList[x])
slotUsed.append(itemList[x].itemIndex)
x += 1
elif i >= inventorySize and i < (inventorySize + eqSize):
if dictionary_inv.itemDictionary[i].itemEq.has(slotList[i].slotEq):
slotList[i].setItem(itemList[x])
x += 1
elif !dictionary_inv.itemDictionary[i].itemEq.has(slotList[i].slotEq):
itemDelete.append(i)
itemList.remove(x)
else:
itemDelete.append(i)
itemList.remove(x)
for i in itemDelete:
dictionary_inv.itemDictionary.erase(i)
slotUsed.sort()
Duplicate lines for the item container:
if !allItemn.allItem.empty():
for item in allItemn.allItem:
var itemType = allItemn.allItem[item].itemType
var itemName = allItemn.allItem[item].itemName
var itemIcon = allItemn.allItem[item].itemIcon
var itemStack = allItemn.allItem[item].itemStack
var itemStackMax = allItemn.allItem[item].itemStackMax
var itemStackValue = allItemn.allItem[item].itemStackValue
var itemEq = allItemn.allItem[item].itemEq
itemList.append(ItemClass.new(itemType, itemName, itemIcon, itemStack, itemStackMax, itemStackValue, itemEq, null))
for j in range(creative):
var slot = SlotClass.new(j, 'none')
slotList.append(slot)
$creative_container/ScrollContainer/GridContainer.add_child(slot)
if !allItemn.allItem.empty():
var x = 0
var itemDelete = Array()
for j in allItemn.allItem:
if j < creative:
if allItemn.allItem[j].itemStack:
if allItemn.allItem[j].itemStackValue > allItemn.allItem[j].itemStackMax:
itemDelete.append(j)
itemList.remove(x)
else:
slotList[j].setItem(itemList[x])
slotUsed.append(itemList[x].itemIndex)
x += 1
else:
slotList[j].setItem(itemList[x])
slotUsed.append(itemList[x].itemIndex)
x += 1
elif j >= creative and j < (creative):
if allItemn.allItem[j].itemEq.has(slotList[j].slotEq):
slotList[j].setItem(itemList[x])
x += 1
elif !allItemn.allItem[j].itemEq.has(slotList[j].slotEq):
itemDelete.append(j)
itemList.remove(x)
else:
itemDelete.append(j)
itemList.remove(x)
for j in itemDelete:
allItemn.allItem.erase(j)
slotUsed.sort()
But items are loaded into both inventory and container using 2 dictionaries at once.
I don’t think your question is understandable. May you colaborate? Put some gif or describe better your issue, I don’t get it really.
Reloecc | 2020-09-12 19:02
In general, this system only works with one dictionary, and when I try to create 2 different dictionaries for inventory and chest, an error occurs when all dictionaries are combined and the items overlap.
The screenshot shows that the item appeared in the place of another object: Screenshot by Lightshot
JerryHayat | 2020-09-13 17:56
Willing to send code for inventory scene? Code here is mess (wrong formating?) and I am not sure what in the code is “possible working if…” and what’s “this is definitely wrong”.
–
btw, I’ve read the github code you’ve got inspired from carefully, must say it’s utterly bad code that I can’t recommend for learning.
Reloecc | 2020-09-13 18:12