Hm, the Parent and Child Class thing is really basic objective programming. You make a Base_Class BP that has all the Data that your Spells should have (cast time, etc).
Then you create a Child BP of that Base_Class BP for each of your spells. You can then simply change the values, like casting time, icon image etc in the default settings.
You can also view the created variables of the Base_Class in the Child Classes by clicking on the EYE Symbol on the left side of the BP and selecting “Show inherited”.
If you now make an array of your Base_Class BP, you can also story the Childs in it. And although the Childs are all different, you can access every variable, because
they are coming from the Base_Class. You would only need to cast a spell to its specific Child_Class if you want to access a variable or function that you created directly
in the Child_Class BP. You will also want to define a function called “OnUse” or something like that, in the Base_Class, so every Child_Class also has this function and
can override it. If you now call this function from one of your Array Elements (which would be of type Base_Class), will still call the overridden version of that function
inside of the Child_Class, which is really the Type inside of the Array. This function is called a “virtual” function.
For the Component idea: I would not suggest this. You will need to add several Components and you would need to add them on RunTime. I would go for the basic
array of Base_Class idea.
NOTE: If your want to story Spells and Items in this Array, you will want to have a Base_Class with the OnUse function, then 2 Childs (Spells_Class and Item_Class)
and then childs of these 2 Class. Then you would make an Array of the Base_Class again and you would be able to Store all Childs Classes in it.
The OnUse function will be called when you press a Hotbar Button and it will call down to the Childs version of this function. So a spell would deal damage and item would
consume and heal or what every you want.
The Data that both share (like an Image), would be placed in the Base_Class too. Only information that only spells or items need, would be placed in the Spells_Class or Item_Class.
I guess you get the point by now. If not, i would highly recommend to learn object oriented programming first. Because even BPs are a programming language and without understanding
the basics, you won’t find yourself in a good spot with it. Dodging C++ is not really an option in terms of knowledge about how to use such a language.