0 votes

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

asked May 27 in Projects by Dawnix (12 points)

Please log in or register to answer this question.

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.