Sziasztok! Egy parancs nem mûködik és ezt a hibát írja: error 035: argument type mismatch (argument 1)
Mi lehet a baj?
nev -definiálva [MAX_PLAYER_NAME];-ra
CMD:setarmor(playerid,params[])
{
if(IsPlayerConnected(playerid) && Belepve[playerid] == 1)
{
if(JatekosInfo[playerid][AdminSzint] >= 3)
{
new id[MAX_PLAYER_NAME];
new armormennyiseg;
if(armormennyiseg >= 0 && armormennyiseg <= 100)
{
if(sscanf(params,\"ii\",id,armormennyiseg)) return SendClientMessage(playerid,COLOR_LIGHTRED,\"Használata: /setarmor [Játékos neve/id] [armor mennyisége]\");
{
new uzenet[256];
new jatekosneve[MAX_PLAYER_NAME];
GetPlayerName(playerid,nev,sizeof(nev));
GetPlayerName(id,jatekosneve,sizeof(jatekosneve));
SetPlayerArmour(id,armormennyiseg);
format(uzenet,sizeof(uzenet),\"Megváltoztattad %s Armorját %d -ra/re\",jatekosneve,armormennyiseg);
SendClientMessage(playerid,COLOR_LIGHTBLUE,uzenet);
printf(\"%s megáltoztatta %s Armorját %d -ra/re\",nev,jatekosneve,armormennyiseg);
}
}
else SendClientMessage(playerid,COLOR_LIGHTRED,\"Az Armor menyniségnénk 0-100 között kell lenni\");
}
else SendClientMessage(playerid,COLOR_LIGHTRED,\"Nem elegendõ az adminszinted ehhez a parancshoz, vagy nem vagy admin!\");
}
else SendClientMessage(playerid,COLOR_LIGHTRED,\"Nem vagy belépve!\");
return 1;
}
Hibát a :
GetPlayerName(id,jatekosneve,sizeof(jatekosneve));
SetPlayerArmour(id,armormennyiseg);
sorhoz írja
new id[MAX_PLAYER_NAME];
Helyett:
new id;
sscanf(params,\"ii\",id,armormennyiseg)
Helyett:
sscanf(params,\"ui\",id,armormennyiseg)
Dupla hozzászólás automatikusan összefûzve. ( [time]2014. Augusztus 16. 22:35:30[/time] )
Mert ugye a felhasználók ID-je integer típusú, de te string-nek defináltad. Nem csoda, hogy nem fogadta el :)
sscanf(params,\"ui\",id,armormennyiseg)
sscanf-nél pedig mikor felhasználót kell megadni egy parancs paraméteréül, a formátumnál a \"u\" specifikátort kell megadnod. Így a sscanf a felhasználó ID-jét adja vissza a változónak, akkor is, ha a játékos nevét írták a parancs paraméterében. Pl.: tegyük fel, hogy az \"X_Y\" nevû játékos ID-je 21.
Beírod:
/setarmor X_Y 100
vagy
/setarmor 21 100
Mindkét esetben a sscanf az \"id\" nevû változóba 21-et fog visszaadni.
Ha valaki elírta a játékos nevét, vagy ID-jét, vagy a játékos éppen nincs fent a szerveren, a sscanf függvény visszatérési értéke nem 0 lesz. Így lehet ellenõrizni, hogy a játékos megfelelõen használta-e az utasítást. Ha nem 0, akkor kiírjuk neki az utasítás használatát.
new id[MAX_PLAYER_NAME];
Helyett:
new id;
sscanf(params,\"ii\",id,armormennyiseg)
Helyett:
sscanf(params,\"ui\",id,armormennyiseg)
Dupla hozzászólás automatikusan összefûzve. ( [time]2014. Augusztus 16. 22:35:30[/time] )
Mert ugye a felhasználók ID-je integer típusú, de te string-nek defináltad. Nem csoda, hogy nem fogadta el :)
sscanf(params,\"ui\",id,armormennyiseg)
sscanf-nél pedig mikor felhasználót kell megadni egy parancs paraméteréül, a formátumnál a \"u\" specifikátort kell megadnod. Így a sscanf a felhasználó ID-jét adja vissza a változónak, akkor is, ha a játékos nevét írták a parancs paraméterében. Pl.: tegyük fel, hogy az \"X_Y\" nevû játékos ID-je 21.
Beírod:
/setarmor X_Y 100
vagy
/setarmor 21 100
Mindkét esetben a sscanf az \"id\" nevû változóba 21-et fog visszaadni.
Ha valaki elírta a játékos nevét, vagy ID-jét, vagy a játékos éppen nincs fent a szerveren, a sscanf függvény visszatérési értéke nem 0 lesz. Így lehet ellenõrizni, hogy a játékos megfelelõen használta-e az utasítást. Ha nem 0, akkor kiírjuk neki az utasítás használatát.
Nagyon szépen köszönöm! SOkat tanultam belõle! :)