The for only includes the first if because you are not using begin..end. Also, there is no need for the first if, you can do it this way:
type
PInfo = record
Alive: boolean;
end;
var
Player: array[1..32] of PInfo;
procedure AppOnIdle(Ticks: integer);
var
i: byte;
begin
for i := 1 to NumPlayers do
begin
Player[i].Alive := GetPlayerStat(i,'Alive');
if Player[i].Alive = true then
Command('/say Player[' + InttoStr(i) + '].Alive = true')
else Command('/say Player[' + InttoStr(i) + '].Alive = false');
end;
end;
If you write all the code in one line it gets confusing, you know.
And also i think i read somewhere that you can't rely on NumPlayers. You should use 32 instead.