you just need one (1) array for every item type.
Code:
char coins[1000];
char lives[40];
char OtherCoolItemHere[7];
...


But every item must hold a unique identifier - use a skill for that. When an item is collected the first time, it simply sets the corresponding variable (in the array) to 1.
Code:
if (vec_dist(my.x,player.x) < 32) {coins[my.skill8] = 1;ent_remove (me);}


When the level is loaded, the item checks everytime, if the variable is 1 or 0.
Code:
void coin() {
   if coins[my.skill8] ent_remove (me);
   ...
   ... }


Again: You must make sure, that every item has a unique ID.