Szerző Téma: DRCMD - Gyors és egyszerû parancs feldolgozó!  (Megtekintve 4580 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 Show voters
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 Show voters
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 Show voters
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 Show voters
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 Show voters
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 Show voters
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 Show voters
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 Show voters
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 Show voters
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 Show voters
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 Show voters
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 Show voters
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 Show voters
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 Show voters
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 Show voters
Tetszetõs.
A war módba lehet beteszem.
Ment a Like :D

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal