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.
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
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