Mert a forech akkor tárolja a játékos azonosítószámokat (ID) mikor csatlakozik egy játékos.
Mikor az OnFilterScriptInit meghívásra kerül az adott filterscript még nem tárolja a játékos azonosítószámokat.
Másképp fogalmazva ha egy szerverben van egy mód és 4 darab filterscript melyekben felhasználásra kerül a foreach akkor 5 darab játékosok azonosítószámát tároló foreach eljárás van használatban.
Minél több filterscript ami foreachot használ annál több algoritmus kerül felhasználásra.
Ez az egyik nagy hátránya a rengeteg filterscript használatnak.
Hogy mûködésre bírd a filterscriptet tárolni kell a játékmód futása közben betöltött filterscriptben is az online játékosokat.
Mivel az említett probléma csak akkor fordul elõ ha egy szerver már fut és vannak rajt játékosok, és ekkor kerül betöltésre egy filterscript (szerver indításkor nincs ilyen probléma mivel még nincs csatlakozva játékos.
Hát nem teszteltem de próbáld ki talán így:
public
OnFilterScriptInit( )
{
for(new forplayerid; forplayerid < MAX_PLAYERS; forplayerid++)
{
if(IsPlayerConnected(forplayerid))
{
#if defined _FOREACH_BOT
if (!IsPlayerNPC(forplayerid))
{
Itter_Add(Player, forplayerid);
}
#if !defined FOREACH_NO_BOTS
else
{
Itter_Add(Bot, forplayerid);
}
#pragma tabsize 4
Itter_Add(Character, forplayerid);
#endif
#else
Itter_Add(Player, forplayerid);
#endif
}
}
foreach(new i4 : Player)
{
printf(\"%d\", i4);
}
return 1;
}