Hello @insertech ,
I think using FName as a identifier is fine but pretty risky. It will definitely became a problem in the future if there is a change in there. For example, if you save that FName, and there is an update on that specific one, that will be a problem.
I think its better if you add one more variable separated from that FName if you show the FName on Screen, so in the future if you want to update that FName value, that won’t cause any problem.
Using Enum is a great way for this, however, one thing that you must note about enum, as far as I know, Enum can only accept uint8 (0-255) and that mean you can only have around 250 QuestObjective. If you know that you only need that size, that’s fine. However, if you plan to update the game much larger in the future, or the quests are more than that value, consider using normal integer for that.
If you aren’t sure about how much, it’s better to use uint32/int32 so you can freely increase the objective without limiting yourself to that 250.
You don’t want to think like “for now I will use enum and in the future if I need it, I will change it to integer” because there will be a lot to work on at that moment, and you have to make sure that every objective work again after that changes.
Edit
I already do a little experiment about creating enum in C++, you can create an uint32 enum, however, if you need to access the enum via blueprint / use in blueprint, you can only have uint8 enum. So in your case, the size limit is just around 250 (uint8).