Szerző Téma: Unfreeze (kifagyasztás) probléma!  (Megtekintve 921 alkalommal)

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
Unfreeze (kifagyasztás) probléma!
« Dátum: 2010. március 28. - 09:01:03 »
0 Show voters
Hellosztok!
Lenne egy kis problémám a /kifagyaszt paranccsal(unfreeze). A /fagyaszt parancs muködik, de miután kifagyasztanám azt írja hogy Ez a játékos nincs befagyasztva.
Itt a code:
 
dcmd_kifagyaszt(playerid, params[])
{
new kapoid;
new fagyasztva[MAX_PLAYERS];
new kapo[MAX_PLAYER_NAME];
new kuldo[MAX_PLAYER_NAME];
new string[128];
    kapoid = strval(params);
   
if(HaBeJelentkezve[playerid] == 1)
{
if(JatekosInfo[playerid][AdminSzint] == 5)
{
    if(!strlen(params)) return SendClientMessage(playerid, COLOR_WHITE, \"HASZNÁLAT: /kifagyaszt [játékosID]\");
    if(fagyasztva[kapoid] == 0)
   {
      if(IsPlayerConnected(kapoid))
      {
         if(fagyasztva[kapoid] == 0)
         {
            SendClientMessage(playerid, COLOR_RED, \"A játékos nincs befagyasztva!\");
         }
         else if(fagyasztva[kapoid] == 1) // ezt kihagytad!
         {
            fagyasztva[kapoid] = 0;
            GetPlayerName(kapoid, kapo, sizeof(kapo));
            GetPlayerName(playerid, kuldo, sizeof(kuldo));
            TogglePlayerControllable(playerid, true);
            format(string, sizeof(string), \"[FELHÍVÁS] %s kilett fagyasztva %s által!\",kapo, kuldo);
            SendClientMessageToAll(0xFFFF00AA, string);
                     } else {
            format(string, sizeof(string), \"HIBA: %d nem egy aktív játékos.\", kapoid);
            SendClientMessage(playerid, COLOR_RED, string);
            }
         }
      }
   } else if(JatekosInfo[playerid][AdminSzint] >= 3)
            {
                if(IsPlayerConnected(playerid))
                 {
         if(JatekosInfo[playerid][AdminSzint] >= 4)
         {
            SendClientMessage(playerid, COLOR_RED, \"Nem tudsz nagyobb szintu admint fagyasztani!\");
         }
                else if(playerid != INVALID_PLAYER_ID)
                   {
                   fagyasztva[kapoid] = 0;
            GetPlayerName(playerid, kapo, sizeof(kapo));
                GetPlayerName(playerid, kuldo, sizeof(kuldo));
                  TogglePlayerControllable(playerid, true);
                 format(string, sizeof(string), \"[FELHÍVÁS] %s kilett fagyasztva %s által\",kapo ,kuldo);
                  SendClientMessageToAll(COLOR_RED, string);
                   } else {
         format(string, sizeof(string), \"HIBA: %d nem egy aktív játékos.\", kapoid);
         SendClientMessage(playerid, COLOR_RED, string);
          }
   }
   } else {
   SendClientMessage(playerid, COLOR_RED, \"HIBA: Túl kicsi a szinted!\");
   }
} else {
SendClientMessage(playerid, COLOR_RED, \"HIBA: Bekell jelentkezned mielott használnád ezt a parancsot!\");
}
return 1;
}

 
Ha kiveszem a következo részt:
 
if(fagyasztva[kapoid] == 0)
         {
            SendClientMessage(playerid, COLOR_RED, \"A játékos nincs befagyasztva!\");
         }

 
Akkor tökéletesen muködik, de ha akárhova rakom akkor mindig azt írja egy befagyasztott játékosnál hogy már kivan fagyasztva.

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
Unfreeze (kifagyasztás) probléma!
« Válasz #1 Dátum: 2010. március 28. - 10:14:50 »
0 Show voters
Azért van, mert a fagyasztva vektorod lokálisan van deklarálva, így a fordító automatikusan 0 értékkel kezeli( ezért fogod azt az üzenetet kapni ). Megoldás: használj globális logikai változót; Muködni fog, és mivel úgyis csak két értékre van szükséged, jobban jön a logikai változó( kevesebb helyet igényel ).
 

//Globális névtérbe
new bool: fagyasztva[ MAX_PLAYERS ];

 
Ezt használd a freeze, és az unfreeze parancsokban is, a lokálisan deklarált fagyasztva nevu változókat pedig töröld.  ;) Ha nem megy, akkor írj.
ZeRo

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
Unfreeze (kifagyasztás) probléma!
« Válasz #2 Dátum: 2010. március 28. - 10:47:42 »
0 Show voters
Nem írnád le légyszíves a parancsot? A változóval persze. Mivel én még ilyen változókkal nem dolgoztam :)

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
Unfreeze (kifagyasztás) probléma!
« Válasz #3 Dátum: 2010. március 28. - 11:20:45 »
0 Show voters
Hát a kód elég átláthatatlan, ajánlom figyelmedbe az indentációt.  ;)
 

//Globális névtérbe
new bool: fagyasztva[ MAX_PLAYERS ];
dcmd_kifagyaszt(playerid, params[])
{
new kapoid;
new kapo[MAX_PLAYER_NAME];
new kuldo[MAX_PLAYER_NAME];
new string[128];
   kapoid = strval(params);
if(HaBeJelentkezve[playerid] == 1)
{
if(JatekosInfo[playerid][AdminSzint] == 5)
{
    if(!strlen(params)) return SendClientMessage(playerid, COLOR_WHITE, \"HASZNÁLAT: /kifagyaszt [játékosID]\");
            if(IsPlayerConnected(kapoid))
   {
      if( !fagyasztva[ kapoid ] )
      {
         return SendClientMessage(playerid, COLOR_RED, \"A játékos nincs befagyasztva!\");
      }
      fagyasztva[kapoid] = false;
      GetPlayerName(kapoid, kapo, sizeof(kapo));
      GetPlayerName(playerid, kuldo, sizeof(kuldo));
      TogglePlayerControllable(playerid, true);
      format(string, sizeof(string), \"[FELHÍVÁS] %s kilett fagyasztva %s által!\",kapo, kuldo);
      SendClientMessageToAll(0xFFFF00AA, string);
           } else {
      format(string, sizeof(string), \"HIBA: %d nem egy aktív játékos.\", kapoid);
      SendClientMessage(playerid, COLOR_RED, string);
   }
} else if(JatekosInfo[playerid][AdminSzint] >= 3)
{
           if(IsPlayerConnected(playerid))
           {
      if(JatekosInfo[playerid][AdminSzint] >= 4)
      {
         SendClientMessage(playerid, COLOR_RED, \"Nem tudsz nagyobb szintu admint fagyasztani!\");
      }
            else if(playerid != INVALID_PLAYER_ID)
               {
                fagyasztva[kapoid] = false;
             GetPlayerName(playerid, kapo, sizeof(kapo));
             GetPlayerName(playerid, kuldo, sizeof(kuldo));
               TogglePlayerControllable(playerid, true);
              format(string, sizeof(string), \"[FELHÍVÁS] %s kilett fagyasztva %s által\",kapo ,kuldo);
              SendClientMessageToAll(COLOR_RED, string);
             } else {
         format(string, sizeof(string), \"HIBA: %d nem egy aktív játékos.\", kapoid);
         SendClientMessage(playerid, COLOR_RED, string);
       }
   }
} else {
SendClientMessage(playerid, COLOR_RED, \"HIBA: Túl kicsi a szinted!\");
}
} else {
SendClientMessage(playerid, COLOR_RED, \"HIBA: Bekell jelentkezned mielott használnád ezt a parancsot!\");
}
return 1;
}

 
Szerk: A dcmd és a strtok már elavult eszközök, azt hiszem írnom kell egy leírást, mert még mindig elég sokan \'élnek a múltban\'.  :)
ZeRo
« Utoljára szerkesztve: 2010. március 28. - 11:22:28 írta ZeRo »

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
Unfreeze (kifagyasztás) probléma!
« Válasz #4 Dátum: 2010. március 28. - 11:24:53 »
0 Show voters
Hát igen. Sokat változott a SA:MP mióta visszajöttem...Kiadták a 0.3-at a sok parancsok változása...STB...definíciók...hát igen :D
De szeretek a \"múltban\" élni :D
Szerk.: Köszi a segítséget mostmár muködik. Még csinálok pár parancsot és sztem publikálni fogom ezt az admin scriptet :) (Sztem elérte azt a szinted amikor már releasélni lehet)
« Utoljára szerkesztve: 2010. március 28. - 11:34:41 írta DrAkE »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal