Szerző Téma: Foreach probléma  (Megtekintve 481 alkalommal)

Foreach probléma
« Dátum: 2012. július 10. - 11:22:01 »
0 Show voters
Sziasztok.
Miért van az, hogy nekem az adminrendszeres filterscriptemben a foreach nem mûködik OnFilterScriptInit-nél?
definiáltam a FILTERSCRIPT define-t is de úgysem jó.
Ennyi kód van csak onfilterscriptinitben:
 
public  OnFilterScriptInit(  )
{
foreach(new i4 : Player)
{
SendClientMessage( i4,  -1,  \"Lefutott\"  );
}
}

 
És nem írja ki, hogy lefutott :(

Foreach probléma
« Válasz #1 Dátum: 2012. július 10. - 13:37:35 »
0 Show voters
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;
}

Foreach probléma
« Válasz #2 Dátum: 2012. július 10. - 22:30:27 »
0 Show voters
Oks, köszi, végülis írtam 1 saját \"foreach\" szerûséget sima foreach helyett.Az jól mûködik, nem olyan hosszú, stb.
Tudom nem mindig a hosszúság a lényeg.
Jah és köszi, zárok!

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal