If I understand you correctly . What I would do for problem one . To stop the same item spawning twice is when you spawn that item add it to another array eg spawned items array and then before you spawn an item do a check by iterating through to see if that item already exists within the spawned actor array if it does then skip it and generate a new random array index if it doesn’t already exist then you know it will be a unique spawn.
Other options are removing it from the array once spawned but if you need to repeat the logic you would have to rebuild and sort the arrays . Another option is for example having a boolean eg isItemSpawned and setting it to true after spawning and checking it before spawning
Also for the random positioning of objects rather than manually placing 30 actor bp in the world where you want things to spawn you again could have an array of all the possible spawn transforms saved and when you spawn again just pick a transform out of the array
Also check out this tutorial by epic https://m.youtube.com/watch?v=9-7SmkasS_A
It teaches about creating a spawning volume which you can place in the level and scale as required so you can spawn things either in concentrated areas or all over the map which I think might be more suited for you unless you are doing a overly customised system
Also check out this thread it is an awesome bit of information. In this case he is spawning enemies but it doesn’t matter it can be used for items or anything you want
Hope this helps any questions or need further help feel free to pm me here or skype me on enigmalabs