-
De sokszor kell ide írnom -.-\"
Szoval az lenne a problémám, hogy ZeRo leírása alapján/miatt átírtam az adminscriptem, ohogy használja az SSCANF függvényt.
Az lenne a problémám, hogy akármilyen léptezõ parancsot beírok [/mute, /ban, /kick, stb.] mind egyem némít, banol, kickel, stb.
if(strcmp(cmdtext, \"/ban\", true) == 0) {
if(PlayerInfo[playerid][AdminLevel] < 3) return SendLevelError(playerid, 3);
if(!sscanf(cmdtext, \"ds[100]\", player1, result)) return SendUsageError(playerid, \"/ban [id] [reason]\");
if(!IsPlayerConnected(player1)) return SendCommandError(playerid, 0);
format(string, 256, \"You Are Banned\\n\\nBy Admin, %s\\nReason: %s\\n\\nNext time follow the Rules\\n\\nBye!\", PlayerName(playerid), result);
ShowPlayerDialog(player1, 200, DIALOG_STYLE_MSGBOX, \"You have been Banned\", string, \"Ok\", \"\");
SendCommandMessage(playerid, player1, \"Ban\", result);
Ban(player1);
return 1;
}
-
Szia ! :)
Remélem hogy ilyenre gondoltál , a kód használ sscanf-t illetve ZCMD-t ! :)
Nem tesztelt :D
CMD:ban(playerid, params[])
{
if(PlayerInfo[playerid][AdminLevel] < 3)
{
new pID, message[128];
if(sscanf(params, \"is[128]\", pID, message))
{
SendClientMessage(playerid, VILAGOSKEK, \"Használat: /ban [iD] [indok]\");
}
else if(!IsPlayerConnected(pID) || IsPlayerNPC(pID))
{
SendClientMessage(playerid, PIROS, \"Érvénytelen azonosító!\");
}
else
{
new string[128];
format(string, 256, \"You Are Banned\\n\\nBy Admin, %s\\nReason: %s\\n\\nNext time follow the Rules\\n\\nBye!\", PlayerName(playerid), result);
SendCommandMessage(playerid, player1, \"Ban\", result);
SendClientMessageToAll(PIROS, string);
BanEx(pID, message);
ShowPlayerDialog(player1, 200, DIALOG_STYLE_MSGBOX, \"You have been Banned\", string, \"Ok\", \"\");
}
}
else
{
SendLevelError(playerid, 3);
}
return 1;
}
-
utálom a ZCMD-t szal anélkül :D
-
Benned van a hiba , ha már ezt nem bírod átírni ;)
-
jaboccs xDD
meg ne néztem, csak odáig jutottam, hogy
a kód használ sscanf-t illetve ZCMD-t ! :)[/quote]
köszi, zárok xD
BUMP mert nyitok :D
Az eredmény ugyanaz..
Egyéb 5let?
-
Az iménti parancs nálam tökéletesen mûködik , szóval valahol benned van a hiba ;)
-
strcmp-vel is?
-
Ez nem jó:
if(!sscanf(cmdtext, \"ds[100]\", player1, result)) return SendUsageError(playerid, \"/ban [id] [reason]\");
Helyett:
if ( sscanf ( cmdtext, \"ds[ 100 ]\", player1, result ) ) return SendUsageError ( playerid, \"/ban [id] [reason]\" );
-
Ez már megvan.
De azért köszi.
Most az a bajom, hogy beírom a parancsot, paraméterek nélkül.. Akkor kiírja (mint pl bannál, hogy \"usage: /ban id reason]\").. de ha beírom, hogy pl \"/ban 0 mert\", akkor ezt kapom
SERVER: Unknown Command.[/quote]
-
A sscanf mûködik egyáltalán strcmp-vel?
De talán így:
if ( sscanf ( cmdtext[1], \"ds[ 100 ]\", player1, result ) ) return SendUsageError ( playerid, \"/ban [id] [reason]\" );
De nem tudom,én is zcmd-t használok.
-
Nem igaz mi olyan hogy olyan k...a nehéz átírni zcmd-re !! :)
Nagyon nagy kaland letölteni egy inc-t és beágyazni a módba....
-
megszoktam, könnyebb, stb..
-
Láttom már a fiúk kijavitoták a híbádat, de láttom 1 sorba beszoritsz több mindent is, ezért ne feledd máskor bezárolni hogy ne keveredjen össze, ezt Briskis megfigyelte..
if(!sscanf(cmdtext, \"ds[100]\", player1, result)) return SendUsageError(playerid, \"/ban [id] [reason]\");
Rosszul zároltad, csak erre akartam felhívni a figyelmed, de ha necces neked (de egyártalán nem az), akkor írd külön sorba.
-
Direkt írtam így, és azt nem nagyon bírom, ha külön vannak írva, mert így sokkal rövidebb.
-
Amúgy mibajod a ZCMD-vel ? Sokkal jobb, de csak akkor, ha nem ékezetes parancsokat csinálsz.
-
Spatrik megcsinálta a zcmd-t, hogy lehessen használni ékezeteket a parancsban: Link
-
kb lesz4rom az ékezeteket, nekem az a bajom vele, hogy nincs meg az az alap formája, mint az strtok-nak.. és az is, hogy OnPlayerCommandText alá nem lehet írni..
-
Cserébe sokkal gyorsabb mint a többi parancsfeldolgozó, és a használata is egyszerûbb.
lehet hogy gyorsabb de szerintem sokkal bonyolultabb mint a strtok, legalábbis szerintem.
-
lehet, hogy egyszerûbb, de mivel nekem az strcmp jobban bejön, ezért azt fogom használni.. Ha nem jó hozzá az sscanf, akkor visszaírom az egészet..
-
Ok. Ezzel már megvagyok.. Azt magyarázd el, hogy sscanf + strcmp miért nem mûködik..
-
public OnPlayerCommandText(playerid, cmdtext[])
{
new string[512], player1, result[32];
if(strcmp(cmdtext, \"/ban\", true) == 0) {
if(PlayerInfo[playerid][AdminLevel] < 3) return SendLevelError(playerid, 3);
if(sscanf(cmdtext, \"ds[100]\", player1, result)) return SendUsageError(playerid, \"/ban [id] [reason]\");
if(!IsPlayerConnected(player1)) return SendCommandError(playerid, 0);
format(string, 256, \"You Are Banned\\n\\nBy Admin, %s\\nReason: %s\\n\\nNext time follow the Rules\\n\\nBye!\", PlayerName(playerid), result);
ShowPlayerDialog(player1, 200, DIALOG_STYLE_MSGBOX, \"You have been Banned\", string, \"Ok\", \"\");
SendCommandMessage(playerid, player1, \"Ban\", result);
Ban(player1);
return 1;
}
Ha simán beírom, h \"/ban\", akkor kiírja, hogy \"USAGE: /ban [playerid] [reason]\"
De ha pl beírom, hogy \"/ban 0 mert\", akkor SERVER: Unknown Command
-
azért mert strcmpnél tmp-t is kell használni. (vagyis nállam úgy volt jó:D)
-
ha TMP-t használok, akkor ugyan olyan, mint az strtok, szoval semmi értelme..
-
Ezt mind a 200 parancsnál csináljam meg? o.O
-
Ezt brutálisan nem értem..
-
Meg is érdemled, ha nem szereted az egyszerû és a gyors módszereket...
-
Ez nem épp ehhez kapcsolódik, de szerintem a player integert és a reason stringet nemkell minden parancsban létrehozni. Létrehozod globálisan és kevesebbet is eszik, gyorsabb és egyszerûbb is.
-
Mind1.. DCMD :D Ahoz nem kell Include, és bontani sem kell.
Átírtam az egészet, de most csak félig mûxenek a parancsok..
olyan parancsot tudok használni, amihez nincs reason, vagy result.. [pl /mute, /ummute]
/ban id reason megint Unknown command.
dcmd_ban(playerid, params[]) {
new result[64], player1, string[128];
if(PlayerInfo[playerid][AdminLevel] < 3) return SendLevelError(playerid, 3);
if(sscanf(params, \"ds[100]\", player1, result)) return SendUsageError(playerid, \"/ban [id] [reason]\");
if(!IsPlayerConnected(player1)) return SendCommandError(playerid, 0);
format(string, 256, \"You Are Banned\\n\\nBy Admin, %s\\nReason: %s\\n\\nNext time follow the Rules\\n\\nBye!\", PlayerName(playerid), result);
ShowPlayerDialog(player1, 200, DIALOG_STYLE_MSGBOX, \"You have been Banned\", string, \"Ok\", \"\");
SendCommandMessage(playerid, player1, \"Ban\", result);
Ban(player1);
return 1;
}
-
Nem fogok egy szaros \"gyorsabb\" megoldás miatt többszár parancshoz külön-külön létrehozni változókat, és külön szétbontani a parancsokat, mert \"így gyorsabb, meg jobb, meg f4szom\"
STRTOK 20X JOBB