Error invalid get index (on base Dictionary) creando un inventario usando json

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Dawnix

Hola! para hacer esto me estoy basando en el siguiente video: https://www.youtube.com/watch?v=-2a4BbRDZEs&list=PLZ-54sd-DMALtZNRpfuha5SeoUkG2arVv&index=3

Creé una Tabla de Looteo con google sheets, en la que creo un nombre del mapa, y los objetos que se pueden obtener, y usando un add-on la pasé a JSON, y la importo a mi juego en una escena llamada ImportData, y teniendo la opcion de autoload activada, usando el siguiente código:

var Loot_Datos func _ready(): var DatosDelLoot_file = File.new() DatosDelLoot_file.open("res://Data/TabladelLoot.json", File.READ) var DatosDelLoot_json = JSON.parse(DatosDelLoot_file.get_as_text()) DatosDelLoot_file.close() Loot_Datos = DatosDelLoot_json.result print (Loot_Datos)

Luego en el código de otra escena la llamo con:

var NombreDelMapa var ConteoDeLoot var Loot_dic = {}

func _ready(): NombreDelMapa = "Tutorial1" DeterminarCantidadDeLoot() #SelectorDeLoot() #PopulatePanel()

func DeterminarCantidadDeLoot(): var ConteoMinimoDeItem = ImportData.Loot_Datos[NombreDelMapa].ItemConteoMin var ConteoMaximoDeItem = ImportData.Loot_Datos[NombreDelMapa].ItemConteoMax randomize() ConteoDeLoot = randi() % ((int(ConteoMaximoDeItem) - int(ConteoMinimoDeItem)) + 1) + int(ConteoMinimoDeItem) print (ConteoDeLoot)

func SelectorDeLoot(): for i in range(1, ConteoDeLoot + 1): randomize() var selector_loot = randi() % 100 + 1 var contador = 1 while selector_loot >= 0: if selector_loot <= ImportData.Loot_Datos[NombreDelMapa]["Item" + str(contador) + "Chance"]: var loot = [] loot.append(ImportData.Loot_Datos[NombreDelMapa]["Item" + str(contador) + "Nombre"]) randomize() loot.append(int(rand_range(float(ImportData.Loot_Datos[NombreDelMapa]["Item" + str(contador) + "CargaMin"]), float(ImportData.Loot_Datos[NombreDelMapa]["Item" + str(contador) + "CargaMax"])))) Loot_dic[Loot_dic.size() + 1] = loot break else: selector_loot = selector_loot - ImportData.Loot_Datos[NombreDelMapa]["Item" + str(contador) + "Chance"] contador = contador + 1 print (Loot_dic)

func PopulatePanel(): var contador = Loot_dic.size() print(contador) for i in get_tree().get_nodes_in_group("LootPanelSlots"): if contador != 0: get_node(str(i.get_path()) + "/Label").set_text(Loot_dic[contador][0]) var icono = "res://Iconos" + str(Loot_dic[contador][0]) + ".png" get_node(str(i.get_path("/LootTexture/LootButton").set_normal_texture(load(icono)))) if Loot_dic[contador][1] > 1: get_node(str(i.get_path()) + "/LootTexture/LootButton/Label").set_text(str(Loot_dic[contador][1])) contador = contador - 1

pero al ejecutarlo me salta un error en

func DeterminarCantidadDeLoot(): var ConteoMinimoDeItem = ImportData.Loot_Datos[NombreDelMapa].ItemConteoMin

: invalid get index (on base Directory)
probé modificar el archivo JSON, y cambié los { } que estaban después del nombre del mapa por , para ver si se solucionaba (creyendo que leía el diccionario como un array), pero el error fué distinto: invalid get index (on base Nil)
ya no se qué hacer… si alguien sabe agradezco cualquier ayuda
p.d. soy nuevo