Szerző Téma: [Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]  (Megtekintve 6418 alkalommal)

[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Dátum: 2010. április 29. - 16:12:11 »
+2 Show voters
Bemutatás
 
Ez az include az OnPlayerCommandText függvény helyett használható. Mindegyik parancs egy külonálló funkció úgy mint a dcmd-ben. Ez a módszer sokkal gyorsabb, mint amikor a beírt parancsot összehasonlítod az összes létezo paranccsal.
 
Használat
 
Egy parancs hozzáadásához csak készítened kell a függvényt egy elore definiált makróval:
 

COMMAND:parancs(playerid, params[]) // vagy CMD:parancs(playerid, params[])
{
    // Ide jöhet a prancs fo része
    return 1;
}

 
vagy
 

command(parancs, playerid, params[]) // vagy cmd(parancs, playerid, params[])
{
    // A parancs fo része
    return 1;
}

 
A params[] változó tartalmazza a parancs után beírt szöveget, és / vagy számokat.
Megejgyzés #1: Ha a zcmd-t filterscriptben akarod használni akkor az icnlude-ot a
 

#define FILTERSCRIPT

 
alá kell tenned.
Megjegyzés #2: Ha le akarod ellenorizni, hogy a játékos írt be paramétert akkor azt ne egyszeruen a
 

if (!strlen(params))
{
    // nincs paraméter
}

 
vagy a:
 

if (!params[0])

 
 mert enneg a stringnek a hossza sose 0, egyszeruen használd az isnull() függvényt (benne van az include-ban):
 

if (isnull(params))

 
Esetleg, ha használod az sscanf-ot akkor nincs szükséged erre az ellenorzésre.
Itt egy egyszeru példa a zcmd használatára, szükséges hozzá az sscanf is:
 

COMMAND:givemoney(playerid, params[])
{
if (IsPlayerAdmin(playerid))
{
new
   toplayerid, // a játékos akinek a pénzt akarjuk küldeni
   amount;
// a params[] string szétválasztása
if (!sscanf(params, \"ii\", toplayerid, amount))
{
   if (toplayerid != INVALID_PLAYER_ID)
   {
       new
           message[40];
       GivePlayerMoney(toplayerid, amount);
       format(message, sizeof(message), \"Kaptál $%d az admintól!\", amount);
       SendClientMessage(toplayerid, 0x00FF00FF, message);
   }
   else SendClientMessage(playerid, 0xFF0000FF, \"A játékos Offline\");
}
else SendClientMessage(playerid, 0xFFFFFFFF, \"Használat: /givemoney <playerid> <összeg>\");
}
else SendClientMessage(playerid, 0xFF0000FF, \"Csak adminok használhatják ezt a parancsot!\");
return 1;
}

 
Kiegészítés:
Ha nem akarod átírni az összes parancsot zcmd-re akkor írd át az
 

OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext, \"/valami\", true)==0)
    {
        //valami....
        return 1;
    }
    return 0;
}

 


public OnPlayerCommandReceived(playerid, cmdtext[])
{
    if (!strcmp(cmdtext, \"/valami\", true))
    {
        //valami
        return 0;
    }
    return 1;
}

 
Vagy ha nem akarod az összes visszatérést megcserélni akkor az zmcd.inc fileban cseréld le a 48.sort
 
if (zcmd_g_HasOPCS && !CallLocalFunction(\"OnPlayerCommandReceived\", \"is\", playerid, cmdtext))

 

if (zcmd_g_HasOPCS && CallLocalFunction(\"OnPlayerCommandReceived\", \"is\", playerid, cmdtext))

 
erre.
És akkor a parancsokatban maradhatnak a visszatérések így:
 

public OnPlayerCommandReceived(playerid, cmdtext[])
{
    if (!strcmp(cmdtext, \"/valami\", true))
    {
        //valami
        return 1;
    }
    return 0;
}

 

Letöltés
 

/**********************************
*                                *
*   @Author:      ZeeX           *
*   @Version:     0.3.1          *
*   @Released:    31/10/2009     *
*                                *
**********************************/
#if defined _zcmd_included
#endinput
#endif   
#define _zcmd_included
#define MAX_FUNC_NAME (32)
#define COMMAND:%1(%2)          \\
   forward cmd_%1(%2); \\
   public cmd_%1(%2)      
#define CMD:%1(%2) \\
   COMMAND:%1(%2)
#define command(%1,%2,%3) \\
   COMMAND:%1(%2, %3)     
     
#define cmd(%1,%2,%3) \\
   COMMAND:%1(%2, %3)
#if !defined isnull
#define isnull(%1) \\
      ((!(%1[0])) || (((%1[0]) == \'\\1\') && (!(%1[1]))))
#endif
 
forward OnPlayerCommandReceived(playerid, cmdtext[]);
forward OnPlayerCommandPerformed(playerid, cmdtext[], success);
 
static
bool:zcmd_g_HasOPCS = false,
bool:zcmd_g_HasOPCE = false;
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
zcmd_g_HasOPCS = funcidx(\"OnPlayerCommandReceived\") != -1;
zcmd_g_HasOPCE = funcidx(\"OnPlayerCommandPerformed\") != -1;
    return CallLocalFunction(\"zcmd_OnFilterScriptInit\", \"\");
}
#if defined _ALS_OnFilterScriptInit
    #undef OnFilterScriptInit
#else
    #define _ALS_OnFilterScriptInit
#endif
#define OnFilterScriptInit zcmd_OnFilterScriptInit
forward zcmd_OnFilterScriptInit();
#else /*not a filterscript*/
public OnGameModeInit()
{
zcmd_g_HasOPCS = funcidx(\"OnPlayerCommandReceived\") != -1;
zcmd_g_HasOPCE = funcidx(\"OnPlayerCommandPerformed\") != -1;
if (funcidx(\"zcmd_OnGameModeInit\") != -1)
{
return CallLocalFunction(\"zcmd_OnGameModeInit\", \"\");
}   
return 1;
}
#if defined _ALS_OnGameModeInit
    #undef OnGameModeInit
#else
    #define _ALS_OnGameModeInit
#endif
#define OnGameModeInit zcmd_OnGameModeInit
forward zcmd_OnGameModeInit();
#endif /*if defined FILTERSCRIPT*/
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]);
}
#if defined _ALS_OnPlayerCommandText
    #undef OnPlayerCommandText
#else
    #define _ALS_OnPlayerCommandText
#endif
#define OnPlayerCommandText zcmd_OnPlayerCommandText
forward zcmd_OnPlayerCommandText(playerid, cmdtext[]);

 
Az eredeti leírás a forum.sa-mp.com-on található. Készíto: Zeex
« Utoljára szerkesztve: 2012. április 22. - 15:00:34 írta ChuckNorris »

Nem elérhető Csabesz

  • 7827
    • Profil megtekintése
[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Válasz #1 Dátum: 2010. április 29. - 16:18:46 »
0 Show voters
Szép leírás lett. ;)
De illet volna kiírni a készíto nevét + egyéb infót a függvénykönyvárról.  :D

Nem elérhető Mambo

  • 4239
    • Profil megtekintése
[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Válasz #2 Dátum: 2010. április 29. - 18:06:06 »
0 Show voters
jah. jólett

[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Válasz #3 Dátum: 2010. április 29. - 19:51:36 »
0 Show voters
A készíto nevét kiirtam, a több infóban mire gondolsz?

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Válasz #4 Dátum: 2010. április 29. - 20:30:12 »
0 Show voters
Jó leírás, de ezt még írd hozzá mer ez miatt majdnem szétbesztam a gépem XD. Lehet, hogy áttérek én is sscanf re mert elég egyszerunek tunik :D
Ha abba a módba ahol h.a-sználod a  zcmd-t és a rendes parancsokat is akkor át kell alakítani az OnPlayerCommandText -et .Az elejét, és a végét kell átcsinálni ,mert küldömben nem fog rendesen menni:
 
public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if(!success) return 0; // Ha nem jót írt be akkor visszatérünk a 0 val
return 1; // itt 0 val térünk eredetileg vissza, csak ha zcmd vel is 0 a visszatérés akkor nem fog menni a parancs. Ezér kell 1 el visszatérni
}
« Utoljára szerkesztve: 2010. április 29. - 20:32:45 írta kurta999 »

Nem elérhető Csabesz

  • 7827
    • Profil megtekintése
[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Válasz #5 Dátum: 2010. április 29. - 20:33:40 »
0 Show voters
Idézetet írta: donhekus date=1272563496\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1513\" data-ipsquote-contentclass=\"forums_Topic
A készíto nevét kiirtam, a több infóban mire gondolsz?
 
Az elottem hozzá szóló leírta, csak kíváncsi voltam, hogy észre veszed-e..  :D
Az eredeti topiknál leírták, és csodálkoztam, hogy Te ide nem írtad ki.  :)
« Utoljára szerkesztve: 2010. április 29. - 20:36:22 írta Eddy »

[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Válasz #6 Dátum: 2010. április 29. - 20:38:47 »
0 Show voters
Na várj kurta999 most amit te írtál arra kell átalakítani az OnPLayerCOmmandText()-et? Ezt a részt az eredetiben se értettem csak foszlányokat belole és nem akartam hülyeséget írni.:D

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Válasz #7 Dátum: 2010. április 29. - 21:37:21 »
0 Show voters
Idézetet írta: donhekus date=1272566327\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1513\" data-ipsquote-contentclass=\"forums_Topic
Na várj kurta999 most amit te írtál arra kell átalakítani az OnPLayerCOmmandText()-et? Ezt a részt az eredetiben se értettem csak foszlányokat belole és nem akartam hülyeséget írni.:D
 
Igen

[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Válasz #8 Dátum: 2010. április 29. - 21:39:55 »
0 Show voters
Módosítottam!:D

[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Válasz #9 Dátum: 2011. március 01. - 16:29:40 »
0 Show voters
Bocsi, hogy itt kérdezek de nem szeretnék ennek a csekélységnek egy új témát nyitni...

a kérdésem az, hogy ékezetes parancsra van valahogyan mód? Ha igen, hogy?


Elõre is Köszönöm! Üdvözlettel: Vampesz

[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Válasz #10 Dátum: 2011. december 11. - 21:50:13 »
0 Show voters
Egy kérdés az ocmd vagy a zcmd jobb miben miért?

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Válasz #11 Dátum: 2011. december 11. - 22:15:32 »
0 Show voters
ZCMD.
Ocmd-t nem ismerem, de ránézésre tudom, hogy a ZCMD.
Rengeteg parancs feldolgozót láttam, rengeteg közüle gyorsabb is volt, mint ZCMD, csak hosszú távon mégis a ZCMD nyer.
Tehát én mindeképp ezt ajánlom használni.
Egy parancs kezelõ van, ami ezt agyonveri. Az pedig a YCMD.

[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Válasz #12 Dátum: 2012. január 10. - 22:47:43 »
0 Show voters
Értem.
Köszönöm a linket, tegyük fel ha én felszeretném tenni az YCMD-t akkor az elözõ OCMD-s parancsokat át kell írnom vagy hagyhatom?

[Scripting Eszköz] ZCMD by Zeex [Parancs feldolgozó]
« Válasz #13 Dátum: 2012. április 28. - 11:56:41 »
0 Show voters
Idézetet írta: kurta999 date=1323638132\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1513\" data-ipsquote-contentclass=\"forums_Topic
ZCMD.
Ocmd-t nem ismerem, de ránézésre tudom, hogy a ZCMD.
Rengeteg parancs feldolgozót láttam, rengeteg közüle gyorsabb is volt, mint ZCMD, csak hosszú távon mégis a ZCMD nyer.
Tehát én mindeképp ezt ajánlom használni.
Egy parancs kezelõ van, ami ezt agyonveri. Az pedig a YCMD.



remélem ennyi elég, de ha nem akkor menny a linkre és a legalsó ábrát nézd meg.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal