GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: TengeriMalac - 2011. január 06. - 15:27:33

Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 06. - 15:27:33
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;
}
Cím: SSCANF help.
Írta: Popec16 - 2011. január 06. - 15:49:33
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;
}
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 06. - 16:41:37
utálom a ZCMD-t szal anélkül :D
Cím: SSCANF help.
Írta: Popec16 - 2011. január 06. - 20:53:01
Benned van a hiba , ha már ezt nem bírod átírni ;)
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 06. - 21:25:13
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?
Cím: SSCANF help.
Írta: Popec16 - 2011. január 06. - 21:58:46
Az iménti parancs nálam tökéletesen mûködik , szóval valahol benned van a hiba ;)
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 06. - 22:16:50
strcmp-vel is?
Cím: SSCANF help.
Írta: Csabesz - 2011. január 07. - 14:41:20
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]\" );
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 07. - 17:44:26
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]
Cím: SSCANF help.
Írta: ChuckNorris - 2011. január 07. - 19:10:57
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.
Cím: SSCANF help.
Írta: Popec16 - 2011. január 07. - 19:25:40
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....
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 07. - 19:58:49
megszoktam, könnyebb, stb..
Cím: SSCANF help.
Írta: Gabi_Nagy-[INKRP] - 2011. január 07. - 21:48:20
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.
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 07. - 23:46:13
Direkt írtam így, és azt nem nagyon bírom, ha külön vannak írva, mert így sokkal rövidebb.
Cím: SSCANF help.
Írta: kurta999 - 2011. január 08. - 11:06:29
Amúgy mibajod a ZCMD-vel ? Sokkal jobb, de csak akkor, ha nem ékezetes parancsokat csinálsz.
Cím: SSCANF help.
Írta: nyE - 2011. január 08. - 12:53:22
Spatrik megcsinálta a zcmd-t, hogy lehessen használni ékezeteket a parancsban: Link
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 08. - 13:14:02
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..
Cím: SSCANF help.
Írta: Sheet - 2011. január 08. - 13:38:16
Idézetet írta: Spatrik date=1294490152\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"5177\" data-ipsquote-contentclass=\"forums_Topic
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.
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 08. - 13:38:22
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..
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 08. - 13:45:24
Ok. Ezzel már megvagyok.. Azt magyarázd el, hogy sscanf + strcmp miért nem mûködik..
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 08. - 14:14:00
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
Cím: SSCANF help.
Írta: DrAkE - 2011. január 08. - 14:18:39
azért mert strcmpnél tmp-t is kell használni. (vagyis nállam úgy volt jó:D)
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 08. - 14:29:58
ha TMP-t használok, akkor ugyan olyan, mint az strtok, szoval semmi értelme..
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 09. - 00:39:39
Ezt mind a 200 parancsnál csináljam meg? o.O
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 09. - 11:01:33
Ezt brutálisan nem értem..
Cím: SSCANF help.
Írta: bencehalas - 2011. január 09. - 11:49:28
Meg is érdemled, ha nem szereted az egyszerû és a gyors módszereket...
Cím: SSCANF help.
Írta: kurta999 - 2011. január 09. - 12:56:01
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.
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 09. - 14:14:57
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;
}
Cím: SSCANF help.
Írta: TengeriMalac - 2011. január 09. - 20:08:55
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