Szerző Téma: DRCMD - Gyors és egyszerû parancs feldolgozó!  (Megtekintve 4233 alkalommal)

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
DRCMD - Gyors és egyszerû parancs feldolgozó!
« Dátum: 2012. Január 26. - 23:06:59 »
+10
DRCMD 1.3
 
Leírás
Nos szerintem mindenki ismeri a parancs feldolgozókat. Céljuk minél gyorsabban és a legegyszerûbb módon kezelni a scripterek/játékosok számára a parancsokat. Mivel ez a parancs feldolgozó nem használ összehasonlító elemzéseket, hanem egybõl meghívja a funkciót, ezáltal gyors. Használata igen egyszerû, és könnyedén darabolhatjuk fel a paramétereket!
Használat
Nézzünk elõször is egy könyebb példát:
 

DRCMD:teszt(playerid, params[])
{
SendClientMessage(playerid, 0xFFFFFF, \"Ez egy teszt szöveges üzenet!\");
return 1;
}

 
Egy \"bonyolultabb\" pénzadó kódot:
 

DRCMD:teszt(playerid, params[])
{
new penz, jatekos;
if(sscanf(params, \"dd\", jatekos, penz)) return SendClientMessage(playerid, 0xFFFFFF, \"HASZNÁLAT: /givemoney [játékos id] [pénz]\");
else if(penz <= 0) return SendClientMessage(playerid, 0xFFFFFF, \"HIBA: A pénz összeg nem megfelelõ!\");
else if(!IsPlayerConnected(jatekos)) return SendClientMessage(playerid, 0xFFFFFF, \"A játékos nem elérhetõ!\");
else
{
format(string, sizeof(string), \"Sikeresen adtál %d$-t a következõ játékosnak: %dID\", penz, jatekos);
SendClientMessage(playerid, 0xFFFFFF, string);
format(string, sizeof(string), \"Kaptál %d$-t!\", penz);
SendClientMessage(jatekos, 0xFFFFFF, string);
}
return 1;
}

 
Hivatkozás
Ha netán szeretnél a parancsodhoz \"rövidítést\" használni. Akkor azt megteheted az alábbi módon:
 

DRCMD:te(playerid, params[])
{
return drcmd_teszt(playerid, params[]);
}

 
Szinonimái
Ha leakarod cserélni a mostani parancs feldolgozód (például ZCMD), akkor lehetõséged van ezt könnyen megtenni. Csak fogod kiveszed a ZCMD-t és helyette berakod a DRCMD-t. A DRCMD ugyanis tartalmazza a ZCMD-ben található makrókat, így szinte még csak cserélgetned se kell a dolgokat!
Szinonimái:
 

DRCMD:parancs(playerid, params[])
DRCMD_parancs(playerid, params[])
drcmd(parancs, playerid, params[])
CMD:parancs(playerid, params[])
COMMAND:parancs(playerid, params[])

 
Figyelem
Ha leakarod kérdezni a paraméter hosszúságát, azt ne az strlen függvénnyel tedd, hanem használd az isnull függvényt
 

if(isnull(params))

 
Gyorsasága ZCMD-vel szemben
\"speedmk.jpg\"
Letöltés
1.3:
 
« Utoljára szerkesztve: 2012. Március 08. - 15:15:19 írta DrAkE »

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #1 Dátum: 2012. Január 26. - 23:26:25 »
0
Ez gyorsabb mint a ZCMD? Mert ha igen átírom DRCMD-re! :) :O

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #2 Dátum: 2012. Január 27. - 12:39:00 »
0
Idézetet írta: Flash date=1327616785\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"16135\" data-ipsquote-contentclass=\"forums_Topic
Ez gyorsabb mint a ZCMD? Mert ha igen átírom DRCMD-re! :) :O
 
Körülbelül ugyanolyan gyors :)

Nem elérhető Sramm

  • 596
    • Profil megtekintése
DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #3 Dátum: 2012. Január 27. - 12:48:19 »
0
DRCMD:tele valami(playerid,params[])

 
ilyet lehet?

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #4 Dátum: 2012. Január 27. - 12:50:27 »
0
Idézetet írta: Sramm date=1327664899\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"16135\" data-ipsquote-contentclass=\"forums_Topic

DRCMD:tele valami(playerid,params[])

 
ilyet lehet?
 
Szóközt nem hiszem hogy elfogad. Mivel a szóköz utáni szöveget már paraméternek veszi. De sscanf-al szépen fellehet bontani, ahogy azt mutattam a leírásban.
U.I.: Megjelent az 1.1!

Szabina

  • Vendég
DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #5 Dátum: 2012. Január 27. - 13:25:56 »
0
Mibõl gondolod hogy gyors? Nem látom az eredményeket, de az biztos hogy egyszerû.
Feleslegesnek találom a függvénykönyvtár ellenõrzését, és az \'endinput\' irányelvet.
Elég lenne ha a_samp.inc függvénykönyvtár alá helyezzük a drcmd-t.
Másrészt ha használni szeretném az OnPlayerCommandText eljárást akkor ALS is kéne.

DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #6 Dátum: 2012. Január 27. - 13:30:40 »
0
Tetszik nem akarsz összedobni egy konvertálót hozzá? :)  mert sok parancs van a gm embe h átírogassam 1 esével

Szabina

  • Vendég
DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #7 Dátum: 2012. Január 27. - 13:41:39 »
0
Minek a konvertáló?
Nyisd meg a módot, felül találsz egy menüsort, kattints az Edit -> Replace menüpontra,
vagy egyszerûen nyomd be a CTRL + H-t.
Részben hasonlít rá....
\"SearchandReplaceWordsPhrasesinMultipleFileswithReplaceText.jpg\"
Beírod a következõt:
Search For: ZCMD: ( vagy ahogy megadtad )
Replace with: DRCMD:
Másodpercek alatt kész leszel vele.

DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #8 Dátum: 2012. Január 27. - 13:49:05 »
0
igen. azt tudom csak ez egy régi módom amit megint fejlesztek és ebbe nem zcmd van hanem strcmp vagy mi az azt ezzel az eljárással nem lehet.

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #9 Dátum: 2012. Január 27. - 14:07:23 »
0
Idézetet írta: Szabina date=1327667156\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"16135\" data-ipsquote-contentclass=\"forums_Topic
Mibõl gondolod hogy gyors? Nem látom az eredményeket, de az biztos hogy egyszerû.
Feleslegesnek találom a függvénykönyvtár ellenõrzését, és az \'endinput\' irányelvet.
Elég lenne ha a_samp.inc függvénykönyvtár alá helyezzük a drcmd-t.
Másrészt ha használni szeretném az OnPlayerCommandText eljárást akkor ALS is kéne.
 
Hát nem tudom hogy vagy vele. De endinput azért kell hogy ne hívják meg kétszer vagy esetleg többször a függvényt. Illetve az OnPlayerCommandText a DRCMD használata mellet továbbra is ugyanúgy szuperál :)
(http://wiki.sa-mp.com/wiki/Keywords:Directives#.23endinput ha esetleg nem tudnád az endinput jelentését)
Illetve itt a gyorsasága:
\"speedmk.jpg\"
Script:
 

#include <a_samp>
#define DRCMD:%1(%2,%3) \\
forward drcmd_%1(%2,%3); \\
public drcmd_%1(%2,%3)
#define DRCMD_%1(%2,%3) \\
DRCMD:%1(%2,%3)
#define drcmd(%1,%2,%3) \\
DRCMD:%1(%2,%3)
#define CMD:%1(%2,%3) \\
DRCMD:%1(%2,%3)
#define COMMAND:%1(%2,%3) \\
DRCMD:%1(%2,%3)
main() { }
public OnGameModeInit()
{
    #define MAX_TEST (990000)
for(new d; d < 10; ++d) print(\" \");
    new dcmdtest = GetTickCount();
    for(new a; a < MAX_TEST; ++a)
        OnPlayerDraCommandText(0, \"/drcmd teszt\");
    printf(\"# DRCMD in %d\",GetTickCount() - dcmdtest);
    new zcmdtest = GetTickCount();
    for(new a; a < MAX_TEST; ++a)
        OnPlayerCommandText(0, \"/drcmd teszt\");
    printf(\"# ZCMD in %d\",GetTickCount() - zcmdtest);
    return true;
}
forward OnPlayerDraCommandText(playerid, cmdtext[]);
public OnPlayerDraCommandText(playerid, cmdtext[])
{
new
function[32],
szokozmeddig = -1;
while(++szokozmeddig < strlen(cmdtext)) if((cmdtext[szokozmeddig] == \' \')) break;
strmid(function, cmdtext, 1, szokozmeddig);
format(function, sizeof(function), \"drcmd_%s\", function);
while(cmdtext[szokozmeddig] == \' \') szokozmeddig++;
if(funcidx(function) != -1)
{
if(szokozmeddig == strlen(cmdtext))
{
   return CallLocalFunction(function, \"is\", playerid, \"\\1\");
}
return CallLocalFunction(function, \"is\", playerid, cmdtext[szokozmeddig]);
}
return 0;
}
static
bool:zcmd_g_HasOPCS = false,
bool:zcmd_g_HasOPCE = false;
#define MAX_FUNC_NAME (32)
public OnPlayerCommandText(playerid, cmdtext[])
{
    if (zcmd_g_HasOPCS && !CallLocalFunction(\"OnPlayerCommandReceived\", \"is\", playerid, cmdtext))
    {
        return 1;
    }
    new
        pos,
        funcname[MAX_FUNC_NAME];
    while (cmdtext[++pos] > \' \')
{
funcname[pos-1] = tolower(cmdtext[pos]);
}
format(funcname, sizeof(funcname), \"cmd_%s\", funcname);
    while (cmdtext[pos] == \' \') pos++;
if (!cmdtext[pos])
{
if (zcmd_g_HasOPCE)
{
   return CallLocalFunction(\"OnPlayerCommandPerformed\", \"isi\", playerid, cmdtext, CallLocalFunction(funcname, \"is\", playerid, \"\\1\"));
}
return CallLocalFunction(funcname, \"is\", playerid, \"\\1\");
}
if (zcmd_g_HasOPCE)
{
return CallLocalFunction(\"OnPlayerCommandPerformed\", \"isi\", playerid, cmdtext, CallLocalFunction(funcname, \"is\", playerid, cmdtext[pos]));
}
return CallLocalFunction(funcname, \"is\", playerid, cmdtext[pos]);
}

 


U.I.: Kijött az 1.2 link fentebb!
« Utoljára szerkesztve: 2012. Január 27. - 14:36:11 írta DrAkE »

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #10 Dátum: 2012. Március 08. - 15:15:59 »
0
Frissítve!
Aki használja a DRCMD-t (szerintem csekély annak a létszáma), kérem töltse le a legújabb verziót a fenti linkek valamelyikérõl!

Nem elérhető Norby

  • 1575
    • Profil megtekintése
DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #11 Dátum: 2012. Március 08. - 15:49:26 »
0
Jó lett, de attól maradok a ZCMD nél megszoktam már.. :)
Az viszont tetszik benne hogy ilyen egyszerûen meg lehet oldani a rövidítéseket.
Vagy ilyet lehet ZCMD ben is ?

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #12 Dátum: 2012. Március 08. - 15:53:46 »
0
Idézetet írta: Norby date=1331218166\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"16135\" data-ipsquote-contentclass=\"forums_Topic
Jó lett, de attól maradok a ZCMD nél megszoktam már.. :)
Az viszont tetszik benne hogy ilyen egyszerûen meg lehet oldani a rövidítéseket.
Vagy ilyet lehet ZCMD ben is ?
 
Igen.
 

return cmd_parancs(playerid, params);

Nem elérhető Dialog

  • 547
    • Profil megtekintése
DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #13 Dátum: 2012. Március 09. - 08:50:34 »
0
Huha ez nekem már magas  :D de jó lett menne a + ha tudnák adni :D

Nem elérhető Dead

  • 2045
    • Profil megtekintése
DRCMD - Gyors és egyszerû parancs feldolgozó!
« Válasz #14 Dátum: 2012. Március 09. - 13:22:02 »
0
Tetszetõs.
A war módba lehet beteszem.
Ment a Like :D

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal