Szerző Téma: Skin cserélõ parancsban limit  (Megtekintve 1034 alkalommal)

Nem elérhető Nátha

  • 1036
    • Profil megtekintése
Skin cserélõ parancsban limit
« Dátum: 2013. április 19. - 14:56:58 »
0 Show voters
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 !

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
Skin cserélõ parancsban limit
« Válasz #1 Dátum: 2013. április 19. - 15:05:39 »
0 Show voters
if( skin < 0 || skin > 500 ) SendClientMessage( playerid, red, \"Rossz skin ID! (0-500)\" );

Skin cserélõ parancsban limit
« Válasz #2 Dátum: 2013. április 19. - 21:27:19 »
0 Show voters
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 :)
« Utoljára szerkesztve: 2013. április 19. - 21:39:58 írta ppatrik2012 »

Nem elérhető Nátha

  • 1036
    • Profil megtekintése
Skin cserélõ parancsban limit
« Válasz #3 Dátum: 2013. április 19. - 23:37:40 »
0 Show voters
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.

Skin cserélõ parancsban limit
« Válasz #4 Dátum: 2013. április 19. - 23:52:45 »
0 Show voters
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)\");

Nem elérhető kos

  • 292
    • Profil megtekintése
Skin cserélõ parancsban limit
« Válasz #5 Dátum: 2013. április 20. - 00:44:27 »
0 Show voters
Szerintem ez így jobb :)
 
if(skin <= 1 && skin >= 299) return SendClientMessage(playerid, red, \"Rossz skin ID (1-299)\");

Skin cserélõ parancsban limit
« Válasz #6 Dátum: 2013. április 20. - 02:51:14 »
0 Show voters
Idézetet írta: kos date=1366411467\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"36314\" data-ipsquote-contentclass=\"forums_Topic
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

Skin cserélõ parancsban limit
« Válasz #7 Dátum: 2013. április 20. - 18:13:08 »
0 Show voters
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)\" );

Nem elérhető Nátha

  • 1036
    • Profil megtekintése
Skin cserélõ parancsban limit
« Válasz #8 Dátum: 2013. április 20. - 23:03:02 »
0 Show voters
Így már mûködik, köszönöm.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal