Jump to content

ZCMD + SSCANF.


Guest PlayON

Recommended Posts

Ai postat fix in topicul cu raspuns.

sa-ti explic mai indetaliat ce este ZCMD si SSCANF.

ZCMD

Acest system este total diferit de vechea metoda, adica metoda custrcmp sub OnPlayerCommandText. Vechea metoda consista in a compara ce ai scris in chat ca si comanda cu ce ai insertat tu adica, "/comanda".

Metoda cu ZCMD se foloseste in felu urmator,

tu, prin inserand CMD:comanda( playerid, params[]) automat devine cmd_comanda( playerid, params[]) deoarece CMD: este doar o definite la cuvantul cmd_

si ce vine dupa : este comanda deci CMD: -> cmd_ iar comanda -> cmd_comanda.

tot ce se intampla este sa creeze o functie, sau un public dar este mai degraba o functie deoarece nu are prefixul public.

Acest system tot ce face este sa caute prin functii prin ajutorul prefixului cmd_ pe care il setezi cu CMD: in fata unei comenzi, deoaceea ai nevioie de CMD: .

Dupa ce gaseste, analizeaza parametrii, adica ce este un parametru:

/comanda <id> <value>

id - parametru 1

value - parametru 2

+ faptul ca este mai rapid decat strcmp.

SSCANF

Tot ce face sscanf este sa deformateze un string, adica sa zicem ca avem stirngul "abc 123 2.0"

SSCANF tot ce face este sa preia abc si sa'l stocheze intr-un string, sa preia 123 si sa-l stocheze intr-un integer iar ultimul parametru il ia si il stocheaza intr-un integer de gen float.

string - este un sir de litere si numere la o lalta

integer - este doar numar, gen 12385

float - este tot un numar dar mere folosit si cu virgula, adica 5.3 sau 3.77777

Un exemplu de preluare si deformatare al unui string.

[pawn]

new

string[5], // 5 deoarece abcde are cinci litere

integer,

Float:fInteger // ii dam tagul Float: ca sa fie considerat gen float.

Acum sa deformatam stringul. New de deasupra ajuta la stocarea acelor date.

sscanf( "abcde 2011 9.40", "s[5]df", string, integer, fInteger );

printf(" String:%s Integer:%d Float:%.2f", string, integer, fInteger );

[/pawn]

Acum sa vedeti ce a facut sscanf, a preluat din "abcde 2011 9.40" abcde numarul 2011 si floatul 9.40 si le-a stocat in parametrii corespunzatori.

Sa va explic ce face "s[5]df", s este folosit deoarece primul parametru din acel string este un string, adica abcde si are marimea 5!

d, i inseamna integer, adica numar, si este folosit deoarece, evident este un numar!

f inseamna float desigur, si ca de la sine inteles este flolosit sa preia ultimul parametru adica, 9.40.

acum daca dam compile cu codul dat mai sus, in OnGameModeInit veti vedea ca acele new care le-am creat mai sus vor avea continutul destinat!

Acum nu is acasa, dar sper  ca ti-am dat de inteles.

tine minte, sscanf nu este limitat doar la s i si f, se poate folosi in multe lucruri cu care nu ma complic deoarece esti incepator

Mersi Zhero am inteles eu ceva ceva , deacuma ma pun pe practica sa vad ce iese :D

Link to comment
Share on other sites

  • Replies 107
  • Created
  • Last Reply

Top Posters In This Topic

ce am gresit in acest fs? Cand intru pe server nu imi mai merge nici o comanda , dar cand scot fs-ul merge !

#include <a_samp>
#include <zcmd>

#define FILTERSCRIPT	true
#define COLOR_GREY      0xD7D7D7FF



enum E_INFO
{
    ArenaEventEnabled
}

new EventInfo[E_INFO];

#if FILTERSCRIPT == true
public OnFilterScriptInit()
{
	new h, mins, y, m, d;
	gettime(h,mins);
	getdate(y,m,d);
	print("\n ___________________________________________________");
	print(" 													 ");
    print("                   Mini-Event's                       ");
   	print("                 ---------------						 ");
   	print("                        B.Y                           ");
	print("             	      W.T.F                   		 ");
	print(" ___________________________________________________\n");
	print("                                                    	 ");
    print(" |-> Loaded Successfully!\n						   	 ");
	printf(" Today: %d/%d/%d - Hour: %d:%d", d, m, y, h, mins);
	print(" ___________________________________________________\n");
	EventInfo[ArenaEventEnabled]=0;
	return 1;
}

public OnFilterScriptExit()
{
	print("\n ___________________________________________________");
	print(" 													 ");
    print("                   Mini-Event's                       ");
   	print("                 ---------------						 ");
   	print("                        B.Y                           ");
	print("             	      W.T.F                   		 ");
	print(" ___________________________________________________\n");
	print(" |-> Unloaded!");
	return 1;
}
#endif


CMD:startdevent(playerid, params[])
{
 	EventInfo[ArenaEventEnabled]=1;
  	return SendClientMessageToAll(COLOR_GREY, "[Mini Event]: Event Deagle activat de adminul %s !");
}
CMD:inchidedevent(playerid, params[])
{
 	EventInfo[ArenaEventEnabled]=0;
  	return SendClientMessageToAll(COLOR_GREY, "[Mini Event]: Event Deagle dezactivat de adminul %s !");
}
CMD:joindevent(playerid, params[])
{
	if(EventInfo[ArenaEventEnabled] == 0) return SendClientMessage(playerid, COLOR_GREY, "[ERROR]: {FFFFFF}Eventul deagle este dezactivat de admin");
 	SetPlayerPos(playerid, 1412.639892,-1.787510,1000.924377);
  	SetPlayerInterior(playerid, 1);
  	GivePlayerWeapon(playerid, 24, 300);
  	SetPlayerArmour(playerid, 100);
   	return SendClientMessage(playerid, COLOR_GREY, "[INFO]: {FFFFFF} Bafta la eventul de deagle !");
}

Link to comment
Share on other sites

ce am gresit in acest fs? Cand intru pe server nu imi mai merge nici o comanda , dar cand scot fs-ul merge !

#include <a_samp>
#include <zcmd>

#define FILTERSCRIPT	true
#define COLOR_GREY      0xD7D7D7FF



enum E_INFO
{
    ArenaEventEnabled
}

new EventInfo[E_INFO];

#if FILTERSCRIPT == true
public OnFilterScriptInit()
{
	new h, mins, y, m, d;
	gettime(h,mins);
	getdate(y,m,d);
	print("\n ___________________________________________________");
	print(" 													 ");
    print("                   Mini-Event's                       ");
   	print("                 ---------------						 ");
   	print("                        B.Y                           ");
	print("             	      W.T.F                   		 ");
	print(" ___________________________________________________\n");
	print("                                                    	 ");
    print(" |-> Loaded Successfully!\n						   	 ");
	printf(" Today: %d/%d/%d - Hour: %d:%d", d, m, y, h, mins);
	print(" ___________________________________________________\n");
	EventInfo[ArenaEventEnabled]=0;
	return 1;
}

public OnFilterScriptExit()
{
	print("\n ___________________________________________________");
	print(" 													 ");
    print("                   Mini-Event's                       ");
   	print("                 ---------------						 ");
   	print("                        B.Y                           ");
	print("             	      W.T.F                   		 ");
	print(" ___________________________________________________\n");
	print(" |-> Unloaded!");
	return 1;
}
#endif


CMD:startdevent(playerid, params[])
{
 	EventInfo[ArenaEventEnabled]=1;
  	return SendClientMessageToAll(COLOR_GREY, "[Mini Event]: Event Deagle activat de adminul %s !");
}
CMD:inchidedevent(playerid, params[])
{
 	EventInfo[ArenaEventEnabled]=0;
  	return SendClientMessageToAll(COLOR_GREY, "[Mini Event]: Event Deagle dezactivat de adminul %s !");
}
CMD:joindevent(playerid, params[])
{
	if(EventInfo[ArenaEventEnabled] == 0) return SendClientMessage(playerid, COLOR_GREY, "[ERROR]: {FFFFFF}Eventul deagle este dezactivat de admin");
 	SetPlayerPos(playerid, 1412.639892,-1.787510,1000.924377);
  	SetPlayerInterior(playerid, 1);
  	GivePlayerWeapon(playerid, 24, 300);
  	SetPlayerArmour(playerid, 100);
   	return SendClientMessage(playerid, COLOR_GREY, "[INFO]: {FFFFFF} Bafta la eventul de deagle !");
}

Nu stie nimeni?

Link to comment
Share on other sites

Guest PlayON

Ia adauga aceste doua functii.


public OnPlayerCommandPerformed(playerid, cmdtext[], success) return 1;

public OnPlayerCommandReceived(playerid, cmdtext[]) return 1;

Si...ce incerci sa faci aici ?

SendClientMessageToAll(COLOR_GREY, "[Mini Event]: Event Deagle activat de adminul %s !");

La ce folosesti %s daca nu formatezi inainte?

Link to comment
Share on other sites

Este mult mai rapid asa, dar am adaugat o comanda gen:

[pawn]COMMAND:money(playerid, params[])

{

                GivePlayerMoney(playerid, 100000);

}[/pawn]

    Totul merge perfect, dar cand folosesc comanda imi spune Server: Uknown the command , dar comanda functioneaza perfect...de ce?

Link to comment
Share on other sites

E pus, doar ca nu l-am postat aici, imi merge comanda, dar imi da acel mesaj

[pawn]

COMMAND:money(playerid, params[])

{

      #pragma unused params

                GivePlayerMoney(playerid, 100000);

    return 1;

}

[/pawn]

incearca asa.

Link to comment
Share on other sites

Guest PlayON

LifestealeR" post="70567" timestamp="1304536985"]

[pawn]

COMMAND:money(playerid, params[])

{

      #pragma unused params

                GivePlayerMoney(playerid, 100000);

    return 1;

}

[/pawn]

incearca asa.

Bun venit in era ZCMD nu DCMD ba.

Nu ai nevoie de #pragma unused params.

Link to comment
Share on other sites

Cum fac ca aceasta comanda sa poata fi data doar de admin 5+ ?

CMD:startdevent(playerid, params[])
{
 	EventInfo[ArenaEventEnabled]=1;
  	return SendClientMessageToAll(COLOR_GREY, "[Mini Event]: Event Deagle activat de adminul !");
}

Daca se poate sa imi si explicati va rog frumos :D

Link to comment
Share on other sites

Guest PlayON

Cum fac ca aceasta comanda sa poata fi data doar de admin 5+ ?

CMD:startdevent(playerid, params[])
{
 	EventInfo[ArenaEventEnabled]=1;
  	return SendClientMessageToAll(COLOR_GREY, "[Mini Event]: Event Deagle activat de adminul !");
}

Daca se poate sa imi si explicati va rog frumos :D

Sistemele de administrare is bazate pe variabile.

Creeaza variabile, seteaza levelu etc.

Sau foloseste variabila care o ai tu, gen pInfo[playerid][Level]

Link to comment
Share on other sites

Sistemele de administrare is bazate pe variabile. Creeaza variabile, seteaza levelu etc. Sau foloseste variabila care o ai tu, gen pInfo[playerid][Level]
Adica asa:
if (PlayerInfo[playerid][pAdmin] >= 5)

?

Link to comment
Share on other sites

Nu reusesc  , poti sa imi faci un demo pe comanda asta?

CMD:startdevent(playerid, params[])
{
 	   EventInfo[MiniEventEnabled]=1;
  	   return SendClientMessageToAll(COLOR_GREY, "[Mini Event]: Event Deagle activat de adminul !");
}

Link to comment
Share on other sites

Guest PlayON

[pawn]CMD:startdevent(playerid, params[])

{

        if (PlayerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid, ~1, "Nu ai voie sa folosesti comanda!");

EventInfo[MiniEventEnabled]=1;

return SendClientMessageToAll(COLOR_GREY, "[Mini Event]: Event Deagle activat de adminul !");

}[/pawn]

Link to comment
Share on other sites

[pawn]CMD:startdevent(playerid, params[])

{

        if (PlayerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid, ~1, "Nu ai voie sa folosesti comanda!");

EventInfo[MiniEventEnabled]=1;

return SendClientMessageToAll(COLOR_GREY, "[Mini Event]: Event Deagle activat de adminul !");

}[/pawn]

C:\Documents and Settings\dcs.Mihai\Desktop\minievents.pwn(44) : error 001: expected token: ")", but found "&"

C:\Documents and Settings\dcs.Mihai\Desktop\minievents.pwn(44) : error 001: expected token: ";", but found "&"

C:\Documents and Settings\dcs.Mihai\Desktop\minievents.pwn(46) : error 010: invalid function or declaration

C:\Documents and Settings\dcs.Mihai\Desktop\minievents.pwn(48) : error 010: invalid function or declaration

Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

4 Errors.

Link to comment
Share on other sites

Guest PlayON

C:\Documents and Settings\dcs.Mihai\Desktop\minievents.pwn(44) : error 001: expected token: ")", but found "&"

C:\Documents and Settings\dcs.Mihai\Desktop\minievents.pwn(44) : error 001: expected token: ";", but found "&"

C:\Documents and Settings\dcs.Mihai\Desktop\minievents.pwn(46) : error 010: invalid function or declaration

C:\Documents and Settings\dcs.Mihai\Desktop\minievents.pwn(48) : error 010: invalid function or declaration

Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

4 Errors.

Data viitoare nu mai da copy paste!

sterteg params[] si pune params[]

Link to comment
Share on other sites

Este mult mai rapid asa, dar am adaugat o comanda gen:

[pawn]COMMAND:money(playerid, params[])

{

                GivePlayerMoney(playerid, 100000);

}[/pawn]

    Totul merge perfect, dar cand folosesc comanda imi spune Server: Uknown the command , dar comanda functioneaza perfect...de ce?

poti face comanda de o linie

COMMAND:money(playerid, params[]) return GivePlayerMoney(playerid, 100000);

  • www.LcsNet.org
  • 91.233.106.13:7777
  • www.Joc-Miniclip.info

Link to comment
Share on other sites

Cum fac ca atunci cand jucatorul se duce la event sa primeasca freeze pana dau eu /inchideevent , si apoi sa inceapa un countdown cu 5 secunde ... si apoi sa primeasca toti unfreeze pentru a participa la event!

CMD:joindevent(playerid, params[])
{
	if(EventInfo[MiniEventEnabled] == 0) return SendClientMessage(playerid, COLOR_GREY, "{6EF83C}[ERROR]: Nici un event nu este activ!");
 	SetPlayerPos(playerid, 1412.639892,-1.787510,1000.924377);
  	SetPlayerInterior(playerid, 1);
  	GivePlayerWeapon(playerid, 24, 999);
  	SetPlayerArmour(playerid, 100);
   	return SendClientMessage(playerid, COLOR_GREY, "{6EF83C}[Mini Event]: Bafta la eventul de deagle !");
}

Link to comment
Share on other sites

Guest RockStar

Comanda...

[pawn]CMD:joindevent(playerid, params[])

{

if(EventInfo[MiniEventEnabled] == 0) return SendClientMessage(playerid, COLOR_GREY, "{6EF83C}[ERROR]: Nici un event nu este activ!");

SetPlayerPos(playerid, 1412.639892,-1.787510,1000.924377);

  SetPlayerInterior(playerid, 1);

  GivePlayerWeapon(playerid, 24, 999);

  SetPlayerArmour(playerid, 100);

  TogglePlayerControllable(playerid,0);

  SetTimer("UnFreezePlayers", 5000, tue);

  return SendClientMessage(playerid, COLOR_GREY, "{6EF83C}[Mini Event]: Bafta la eventul de deagle !");

}[/pawn]

si asta pune undeva in cod , oricunde inafara oricarui callback

[pawn]forward UnFreezePlayers();

public UnFreezePlayers()

{

    new playerid;

    TogglePlayerControllable(playerid,1);

    SendClientMessage(playerid, COLOR_GREY, "Au trecut 5 secunde , acum te poti misca.");

    return 1;

}[/pawn]

Link to comment
Share on other sites

Comanda...

[pawn]CMD:joindevent(playerid, params[])

{

if(EventInfo[MiniEventEnabled] == 0) return SendClientMessage(playerid, COLOR_GREY, "{6EF83C}[ERROR]: Nici un event nu este activ!");

SetPlayerPos(playerid, 1412.639892,-1.787510,1000.924377);

  SetPlayerInterior(playerid, 1);

  GivePlayerWeapon(playerid, 24, 999);

  SetPlayerArmour(playerid, 100);

  TogglePlayerControllable(playerid,0);

  SetTimer("UnFreezePlayers", 5000, tue);

  return SendClientMessage(playerid, COLOR_GREY, "{6EF83C}[Mini Event]: Bafta la eventul de deagle !");

}[/pawn]

si asta pune undeva in cod , oricunde inafara oricarui callback

[pawn]forward UnFreezePlayers();

public UnFreezePlayers()

{

    new playerid;

    TogglePlayerControllable(playerid,1);

    SendClientMessage(playerid, COLOR_GREY, "Au trecut 5 secunde , acum te poti misca.");

    return 1;

}[/pawn]

Ok am inteles asta si merge , dar vreau sa ii dea drumu la freeze abia dupa ce dau eu comanda /inchidedevent ... si apoi sa fie inca 5 secunde si sa primeasca unfreeze toti jucatorii !

Link to comment
Share on other sites

Ok am inteles asta si merge , dar vreau sa ii dea drumu la freeze abia dupa ce dau eu comanda /inchidedevent ... si apoi sa fie inca 5 secunde si sa primeasca unfreeze toti jucatorii !

new playerid ?!

Iti dai seama ca acel cod va functiona doar pentru playerid 0 ?

Foloseste SetTimerEx.

Link to comment
Share on other sites

Guest RockStar

LaZ" post="71465" timestamp="1304952329"]

new playerid ?!

Iti dai seama ca acel cod va functiona doar pentru playerid 0 ?

Foloseste SetTimerEx.

Da...ma grabeam...am postat de dimineata si trebuia sa plec la scoala si mam grabit...

Oricum @Skizu , posteaza la discutii scripting.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.