Regarding your first question:
At game start, I check the GameSparks ID of the connected player. Then, I take the associated pawn ID array (user can select his troops on the menu before the game start) by querying the cloud backend.
After that, I’m able to spawn in the first phase of the GameMode (all at location 0,0,0: it is not important to place a skill in a particular point) all the skills linked to the in-game troops.
In this way, I don’t have to spawn additional skills in runtime: I already have all the possible skill spawned on the Map.
The general code is running on the parent (Skill parent), as I have explained on the above post, meanwhile the particular implementation (for example, the cone of fire implementation) is running on the skill blueprints based on the parent.
Regarding the passive effect skills, in my case I have created another Parent blueprint: Altered Status Parent. An altered status is whatever influences the pawn stats turn by turn (ex. Poison is an altered status that removes 2HP every turn start). I’ve implemented a cycle through the active altered status in the GameMode after “Choose Next Pawn” where I decrement by one the duration of the altered status and I apply the effect, until it’s over.
So, basically I’ve separated all the active skills (the ones you need to activate with a target selection) from the passive abilities and/or altered effects.
Regarding the arrays: I’ve also created a Skills Array and an Altered Status Array inside the Unit Parent blueprint.
Anyway, I fully understood your six implementation points. I think that our skill systems share a lot of similitudes.