GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: dexi - 2012. február 25. - 19:41:54

Cím: ID lekérése egy telefonszámból
Írta: dexi - 2012. február 25. - 19:41:54
stock GetPlayerIDFromPhoneNumb( numb )
{
new str[128];
format(str, sizeof(str),\"RolePlay_A/Telefonszámok/%d.ini\", numb);
new a;
    for( new k = 0; k < MAX_PLAYERS; k++ )
    {
       if( dini_Exists(str) )
       {
           new StRG[256];
           format( StRG, sizeof(StRG), \"%s\", dini_Get(str,\"Tulaj\"));
          
           if( !strcmp( pName(k), StRG, false) )
           {
               a = GetPlayerIDFromName( pName(k) );
         if(IsPlayerConnected(a))
         {
            printf( \"Neve: %s | ID: %d\", pName(k), a );
            return a;
         }
      }
       }
    }
return a;
}

 
Ezt sikerült alkotnom de a tapasztalataim a következõek:
Ha egyedül vagyok fent a szerveren perfektül mûködik ..
De ha már más is fentvan akkor id 0 nem mûködik...
tehát ha \"01245\" telefonszám tulaja éppen ID 0 akkor nem kéri le rendesen...
Miért lehet ez?
Cím: ID lekérése egy telefonszámból
Írta: hegdavid95 - 2012. február 25. - 20:02:07
Azért mert ez a kód mindig 0 val tér vissza és amikor csak te vagy fent neked 0 a playerid-d ezért mûködik de amikor többen is akkor playerid 1-nek is 0-t fog adni
Cím: ID lekérése egy telefonszámból
Írta: dexi - 2012. február 25. - 20:06:20
Segítenél kijavítani mert nem-vágom hol rontottam el.
EDIT:
Azt elfelejtettem le írni hogy mikor van fent valaki akkor mindegyik más megy, csak ID 0 nem.
Cím: ID lekérése egy telefonszámból
Írta: Zsolesszka - 2012. február 26. - 01:04:10
Mivel fogalmam sincs hogy pontosan, mit is szeretnél ezért írtam egy változatot az elgondolásom alapján:
[pawn]stock
GetPlayerIDFromPhoneNumb( numb )
{
new
   str[128];
format(str, sizeof(str), \"RolePlay_A/Telefonszámok/%d.ini\", numb);
if(dini_Exists(str))
{
   format(str, sizeof(str), \"%s\", dini_Get(str, \"Tulaj\"));
   for(new i = 0; i < MAX_PLAYERS; i++)
   {
      if(IsPlayerConnected(i))
      {
         if(!strcmp(pName(i), str))
         {
            printf(\"Neve: %s | ID: %d\", pName(i), i);
            return i;
         }
      }
   }
}
return INVALID_PLAYER_ID;
}[/pawn]
Cím: ID lekérése egy telefonszámból
Írta: dexi - 2012. február 26. - 01:57:07
Köszi a választ azóta rájöttem az én megoldásom:
 

stock GetPlayerIDFromPhoneNumb( numb )
{
new pid;
new File[256];
format( File, sizeof(File),\"RolePlay_A/Telefonszámok/%d.ini\", numb);
if( dini_Exists(File) )
{
    for(new PlayerID = 0; PlayerID < MAX_PLAYERS; PlayerID++)
    {
   if( IsPlayerConnected(PlayerID) )
   {
           if( !strcmp(pName(PlayerID), dini_Get(File, \"Tulaj\"), true) )
           {
           pid = PlayerID;
           printf(\"\\nTelefonszám: %d  \\nEbbõl való tulaj ID: %d  \\nTulaj neve: %s  \\nKiolvasott név: %s\\n\\n\",numb, pid, pName(pid), dini_Get(File, \"Tulaj\"));
      }
                else
        {
              pid = -1;
      }
   }
}
}
else
{
pid = -1;
print(\"Nincs ilyen telefonszám. Visszatérési érték: \\\" -1 \\\" \");
}
return pid;
}
Cím: ID lekérése egy telefonszámból
Írta: Zsolesszka - 2012. február 26. - 16:52:26


Ez ugyanaz amit írtam csak beletéve a hülyeség/meggondolatlanság.  :angel:
 
Ha van fenn a szerveren 30 játékos és a 30-dik játékosnak kell az ID-je telefonszám alapján,
akkor a te verziódnál 30-szor olvassa ki a fájlból a \"Tulaj\" nevét, ami egy fájl esetében (\"RolePlay_A/Telefonszámok/%d.ini\") mindig ugyanazt az adatot tartalmazza ezért felesleges, és leterhelõ a szervernek. (nem történik fájlmódosítás míg lefut a lekérdezés, ezért nem kell ~30-szor kiolvastatni az adatot (játékos számtól és véletlentõl függ hányszor kerül kiolvasásra az említett \"Tulaj\" adat))
 
       for(new PlayerID = 0; PlayerID < MAX_PLAYERS; PlayerID++)
    {
      if( IsPlayerConnected(PlayerID) )
      {
           if( !strcmp(pName(PlayerID), dini_Get(File, \"Tulaj\"), true) )
           {
[/quote]