Peršokti į turinį
Su šv. Velykomis! 🐣 🐇 Linkėjimai nuo SuperGames.lt komandos! ×
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

[PAMOKA]zcmd naudojimas


Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 5049 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Ikeliau ta paoka nes ce nemaciau

Visų pirma - kas tas zcmd?

- Na tai komandų vykdytojas išvertus pažodžiau, realiai tai iš tikrųjų tas ir yra. Detaliau aiškinant, tai toks dalykas, kuris iškviečia komandą pagal naudojamą komandos tekstą iš karto, nerinkdamas tarp daugelio kitų komandų taip taupydamas procesoriaus sunaudojimą. Na ir aišku mažina lagą serveryje.

Kaip pradėti naudotis?

- Priklausomai nuo to kokio tipo komandos yra sudėtos jūsų serveryje. Jeigu tai dcmd, tai viskas labai paprasta, jeigu paprastojo tipo naudojant strcmp, tada sudėtingiau. Na tai gal pradėsiu nuo paprastesnio būdo.

Tarkim turime dcmd tipo komandą:

dcmd_labas( playerid, params[ ] )

{

#pragma unused params

SendClientMessage( playerid, 0x000000FF, "Labas" );

return true;

}

Panaikiname '#pragma unused params', 'dcmd_labas' pakeičiame į 'COMMAND:labas'.

Komanda atrodys taip:

COMMAND:labas( playerid, params[ ] )

{

SendClientMessage( playerid, 0x000000FF, "Labas" );

return true;

}

Na vat ir perdarėm. Nesvarbu kokio ilgio bus dcmd komanda, visos persidaro taip pat.

Dabar pereisime prie sudėtingesnės perdarymo dalies, kai naudojama paprastojo tipo komandos naudojant 'strcmp' ( playginimas ).

Tarkim turime tokią komandą OnPlayerCommandText funkcijoje:

if ( strcmp( cmdtext, "/labas", true ) == 0 )

{

SendClientMessage( playerid, 0x000000FF, "Labas" );

return true;

}

'if ( strcmp( cmdtext, "/labas", true ) == 0 )' - ši dalis gali būti parašyta dar keliais būdais:

if ( !strcmp( cmdtext, "/labas", true ) )

if ( strcmp( cmdtext, "/labas", true ) == 0 )

if ( strcmp( cmdtext, "/labas", true, 6 ) == 0 )

if ( !strcmp( cmdtext, "/labas", true, 6 ) )

ir iš tikrųjų nėra skirtumo kaip ji parašyta, t.y.: kuriuo iš šitų būdu.

Visų pirma šią dalį ir panaikiname, ją pakeičiame zcmd dalimi:

COMMAND:labas( playerid, params[ ] )

{

SendClientMessage( playerid, 0x000000FF, "Labas" );

return true;

}

Na komanda be abejo veiks. Tačiau ne visos komandos būna tokios. Paimkime komandą su parametrais:

if(!strcmp(cmdtext,"/aswap",true,6))

{

if(!IsPlayerAdmin(playerid)) SendClientMessage(playerid, AAD_COLOR_GREY, "You need to be admin to do that");

else if(!strlen(cmdtext[7])) SendClientMessage(playerid, AAD_COLOR_GREY, "USAGE: /aswap [playerid]");

else {

new swapid = strval(cmdtext[7]);

if(!IsPlayerConnected(swapid)) SendClientMessage(playerid, AAD_COLOR_GREY, "That player isnt connected");

else {

SendClientMessage(swapid, AAD_COLOR_RED, "An admin has changed your team");

SpawnPlayer(swapid);

}

}

return 1;

}

Šitoje komandoje naudojamas tik vienas parametras. Na tai reiškia reikės sscanf su vienu kintamuoju. Na kaip jau minėjau pirmiausia pakeičiame komandos pradžią, tai taip ir su šita:

COMMAND:aswap( playerid, params[ ] )

{

if(!IsPlayerAdmin(playerid)) SendClientMessage(playerid, AAD_COLOR_GREY, "You need to be admin to do that");

else if(!strlen(cmdtext[7])) SendClientMessage(playerid, AAD_COLOR_GREY, "USAGE: /aswap [playerid]");

else {

new swapid = strval(cmdtext[7]);

if(!IsPlayerConnected(swapid)) SendClientMessage(playerid, AAD_COLOR_GREY, "That player isnt connected");

else {

SendClientMessage(swapid, AAD_COLOR_RED, "An admin has changed your team");

SpawnPlayer(swapid);

}

}

return 1;

}

Dabar panaikiname paprastuosius parametrus atrenkamus pagal eilę:

COMMAND:aswap( playerid, params[ ] )

{

if(!IsPlayerAdmin(playerid)) SendClientMessage(playerid, AAD_COLOR_GREY, "You need to be admin to do that");

else {

if(!IsPlayerConnected(swapid)) SendClientMessage(playerid, AAD_COLOR_GREY, "That player isnt connected");

else {

SendClientMessage(swapid, AAD_COLOR_RED, "An admin has changed your team");

SpawnPlayer(swapid);

}

}

return 1;

}

Vietoj jų, naudosime sukuriamus su sscanf. Taigi, sukursime kintamuosius ir juos apibūdinsime naudodami sscanf:

COMMAND:aswap( playerid, params[ ] )

{

new swapid;

if(!IsPlayerAdmin(playerid)) SendClientMessage(playerid, AAD_COLOR_GREY, "You need to be admin to do that");

else if ( sscanf( params, "i", swapid ) ) SendClientMessage(playerid, AAD_COLOR_GREY, "USAGE: /aswap [playerid]");

else {

if(!IsPlayerConnected(swapid)) SendClientMessage(playerid, AAD_COLOR_GREY, "That player isnt connected");

else {

SendClientMessage(swapid, AAD_COLOR_RED, "An admin has changed your team");

SpawnPlayer(swapid);

}

}

return 1;

}

Na vat ir perkelta komanda.

Na bet vien su perkeltom komandos neveiks, reikalinga zcmd include.

Ji prisegta prie temos, apačioje.

Jeigu scriptas yra naudojamas filterscriptuose, viršuje scripto rašome:

#define FILTERSCRIPT

ir po to:

#include

Jeigu tai ne filterscriptas, pakanka viršuje parašyti:

#include

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 5049 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai



×
×
  • Sukurti naują...