A little bug I've found when referencing script areas (or items) through for loop variables:
Yours:
for(int i=1; i<=28; ++i) AddEntityCollideCallback("Player", "ScriptArea_"+i, "Diecollide", false, 1);
The way that I have to do it to make it work:
for(int i=1; i<=28; ++i) AddEntityCollideCallback("Player", "ScriptArea_"+i+"", "Diecollide", false, 1);
(One other thing - I've never included the "int" in the for loop declaration. Not sure if that's the issue or not because I'm not familiar with it.)
Note the change in ScriptArea"+i, adding the second + and empty quotes "" has fixed this same issue for me multiple times.
Give it a shot and let me know. I'm pretty sure this will fix things for you.
For further reference, one of my own functions to do something exactly the same:
void InitAreas()
{
int x=1;
for(x=1; x<=20; x++)
{
AddEntityCollideCallback("Player", "NoiseArea_"+x+"", "ScareySound", true, 1);
}
}