-
Hali
Van egy skin cserélõ parancsom \"/skin <skinID>\" és azt kellene megcsinálni hogy csak 0 és 300 skin ID között mûködjön a parancs. Mert ha beírjuk hogy /skin 500 egybõl crasheli a játékost. Úgy kellene ha valaki beírja pl.: /skin 500 akkor írja ki neki pirossal hogy Rossz skin ID.
Remélem megoldható :)
Íme a parancs:
public OnPlayerCommandText(playerid, cmdtext[]) {
new cmd[256], idx;
cmd = strtok(cmdtext, idx);
if(strcmp(cmd, \"/skin\", true) == 0)
{
new tmp[256], string[128];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, red, \"HASZNÁLAT: /skin [skin ID]\");
new skin = strval(tmp);
if(skin == 271) return SendClientMessage(playerid,red,\"Nem használhatod ezt a skint !\");
if(skin == 86) return SendClientMessage(playerid,red,\"Nem használhatod ezt a skint !\");
format(string, sizeof(string), \"Meg változtattad a skined !\", skin);
SendClientMessage(playerid, COLOR_GREEN, string);
SetPlayerSkin(playerid, skin);
return 1;
}
return 0;
}
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= \' \'))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > \' \') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
Elõre is köszönöm !
-
if( skin < 0 || skin > 500 ) SendClientMessage( playerid, red, \"Rossz skin ID! (0-500)\" );
-
Ebbe be kell beleilleszteni a Zero által leírt kódot és eredetileg jónak kellene lennie, csak nem értek az STRCMP-hez nagyon.
public OnPlayerCommandText(playerid, cmdtext[]) {
new cmd[256], idx;
cmd = strtok(cmdtext, idx);
if(strcmp(cmd, \"/skin\", true) == 0)
{
new tmp[256], string[128];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, red, \"HASZNÁLAT: /skin [skin ID]\");
if( skin < 0 || skin > 300 ) SendClientMessage( playerid, red, \"Rossz skin ID! (0-300)\" );
new skin = strval(tmp);
if(skin == 271) return SendClientMessage(playerid,red,\"Nem használhatod ezt a skint !\");
if(skin == 86) return SendClientMessage(playerid,red,\"Nem használhatod ezt a skint !\");
format(string, sizeof(string), \"Meg változtattad a skined !\", skin);
SendClientMessage(playerid, COLOR_GREEN, string);
SetPlayerSkin(playerid, skin);
return 1;
}
return 0;
}
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= \' \'))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > \' \') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
Teszteld :)
-
Maga a parancs nem ír errort... átlehet futtatni amx-be, de a probléma ugyan úgy megmaradt. Beírok a megengedett értéknél nagyobbat és nem írja ki hogy Rossz Skin ID! hanem ugyan úgy crashel mint eddig.
-
Mert nem tértek vissza a lekérdezésnél hanem csak elkülditek az üzenetet.
if(skin < 0 || skin > 300) return SendClientMessage(playerid, red, \"Rossz skin ID (0-300)\");
-
Szerintem ez így jobb :)
if(skin <= 1 && skin >= 299) return SendClientMessage(playerid, red, \"Rossz skin ID (1-299)\");
-
Szerintem ez így jobb :)
if(skin <= 1 && skin >= 299) return SendClientMessage(playerid, red, \"Rossz skin ID (1-299)\");
<---- NEIN!! NEIN!!! NEIN!!! (megj.: a feltétel sohasem teljesül mivel a skin értéke sose lehet egyszerre 1 vagy kisebb ÉS 299 vagy nagyobb)
Mert nem tértek vissza a lekérdezésnél hanem csak elkülditek az üzenetet.
if(skin < 0 || skin > 300) return SendClientMessage(playerid, red, \"Rossz skin ID (0-300)\");
[/quote]
<----- Nem olvastam végig de gergõét javaslom
-
Szerintem meg a sorrendre oda kellene figyelni.
A rossz:
if( skin < 0 || skin > 300 ) SendClientMessage( playerid, red, \"Rossz skin ID! (0-300)\" );
new skin = strval(tmp);
[/quote]
new skin = strval(tmp);
if(skin < 0 || skin > 300) return SendClientMessage( playerid, red, \"Rossz skin ID! (0-300)\" );
-
Így már mûködik, köszönöm.