Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Admin lygiai su Y_CMD ir Admin on Duty


Bicas_Biciuks

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3570 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

Sveiki, vis norėdavau parašytį pamoką apie tai, bet taip ir nerasdavau laiko.. Nieko daug nepasakosiu, ir pradėsiu nuo pamokos.

 

Admin lygiams naudosime: paprasta kintamajį(ne string ar boolean tipo), bei Y_CMD komandų procesoriu.

Admin on Duty sistemai mums prireiks: boolean kintamajo.

 

Visų pirma kai kuriems kyla klausimas, kam tie admin lygiai ir kur juos galima panaudoti. Su admin lygiu sistema galime pasidaryti ne tik admin lygius, o ir ant to pačio kintamajo daug daugiau.

 

Visų pirma, mums prireiks pačios admin lygių sistemos pagrindo ar ne? taigi ir pradėkime.

new AdminLvl[MAX_PLAYERS];
new bool:AoD[MAX_PLAYERS];

AdminLvl kintamasis: Šio kintamajo reikšmė visada bus teigiama, kadangi jei norime jog būtu galima daryti daugiau nei vieną admin lygį, teks naudoti šį kintamajį.

AoD kintamasis: Boolean kintamūjų reikšmė visada bus lygi neigiama, nuobent mes ją pakeisime.

 

Abiejų kintamūjų reikšmes galime lengvai pakeisti, tik skirtumas tas jog boolean(bool) kintamajame galėsime naudoti žodelius true(teigiamas) ir false(neigiamas), o paprastame kintamajame, skaičius.

 

Pagrindą jau turime, prieikime prie komandų tikrinimo.

Y_CMD:komandapirmolygio(playerid, params[], help)
{
	#pragma unused params help // nurodom jog nenaudosime šių dviejų argumentų.
	// dabar laikas tikrinti ar žaidėjas nėra administratorius (I lygio).
	if(!AdminLvl[playerid]) return false; // jeigu žaidėjas nėra administratorius, išmetam jam unknown message.
	// jeigu administratorius, judame toliau.
	if(!AoD[playerid]) return SendClientMessage(playerid, -1, "Turite buti admin on duty rezime"); // jei žaidėjas nėra aod režime, tuomet jam pranešam.
	// Jeigu abu tikrinimai neatitinka šioms dvejoms reikšmėms, kažką darome.
	SendClientMessage(playerid, -1, "Šaunuolis, panaudojai admin komandą");
        return true; // kadangi Y_CMD komandos yra kurtos callback pagrindu, reikia visada palikti gale return'ą, kitaip gausime errorą.
}

Prie kekvienos eilutės viską prirašiau, turbūt klausimų apie komandą neturėtu kilti.

 

Taip, vos nepamiršau, komandą padarėme su AoD, o kur pati AoD režimo komanda? :D

Y_CMD:aod(playerid, params[], help)
{
	if(!AdminLvl[playerid]) return false; // jei ne admin, rodom unknown message
	switch(AoD[playerid]) // nurodom switch funkcijai jog dirbsim su AoD[playerid] kintamuoju
	{
		case false: AoD[playerid] = true; // jeigu AoD[playerid] kintamasis false, jį nustatom į true, t.y įjungiam AoD
		case true: AoD[playerid] = false; // jeigu AoD[playerid] kintamasis true, jį nustatom į false, t.y išjungiam AoD
	}
	return true; // kadangi Y_CMD komandos yra kurtos callback pagrindu, reikia visada palikti gale return'ą, kitaip gausime errorą.
}

Bebro AoD variantas: 

Y_CMD:aod(playerid, params[], help)
{
        #pragma unused params help
	AoD[playerid] = !AoD[playerid];
	return true;
}

manau turėsite dar vieną klausimą.. kaip patikrini ar administratorius pvž antro lygio ir kad leistu tą pačia komandą naudoti trečiam lygiui, o pirmam ne?

 

viskas paprasta, tiesiog vietoje if(!AdminLvl[playerid]) return false; įrašome if(AdminLvl[playerid] <2) return false;

 

mano nurodytu varinatu išvertus tikrinimo funkciją, gautusi šitaip: Jeigu AdminLvl kintamasis yra mažesnis nei 2, baigiame funkcija, jei didesnis arba = 2, tęsiame.

 

Y_CMD taip pat turi man labai patinkantį dalyką, komandų rašymas kaip ZCMD, tik skirtumas tas, jog visada reikės argumentuoti params, help argumento naudoti nebereiks, nes jis yra užslėptas, tik nežinau ką jis tuomet viekia skripte :D Taip pat naudojant ZCMD komandų variantą vietoje #pragma unused params help jei nenaudosime params argumento užteks tik tiek: #pragma unused params.

 

AoD komanda su ZCMD variantu Y_CMD bibliotekos pagalba atrodytu maždaug šitaip: 

CMD:aod(playerid, params[]) // params visada argumentuojame, help nebereikia
{
        #pragma unused params // kadangi argumente nebenaudojame HELP, tai jo nereikia ir čia
	AoD[playerid] = !AoD[playerid]; // net neįsivaizduoju kaip šitą pavadinus 
	return true; // užbaigiam return true, jei bus false, komanda suveiks, bet taip pat gausime ir unknown command žinutę, tai ką parašiau apie returną neesu tikras, nes niekad nebandžiau.
}

Pamoką kartas nuo karto atnaujinsiu, jei turite klausimų, būtų puiku jei juos rašytumėte man į komentarus.. Prašau tik nespaminkit į AŽ, nes ankščiau ar vėliau ateisiu į šią temą ir pamatysiu jūsų komentarą.

Redaguota , nario Bičas
Nuoroda į komentarą
Dalintis per kitą puslapį

Y_CMD:aod(playerid, params[], help)
{
	if(!AdminLvl[playerid]) return false; // jei ne admin, rodom unknown message
	switch(AoD[playerid]) // nurodom switch funkcijai jog dirbsim su AoD[playerid] kintamuoju
	{
		case false: AoD[playerid] = true; // jeigu AoD[playerid] kintamasis false, jį nustatom į true, t.y įjungiam AoD
		case true: AoD[playerid] = false; // jeigu AoD[playerid] kintamasis true, jį nustatom į false, t.y išjungiam AoD
	}
	return true; // kadangi Y_CMD komandos yra kurtos callback pagrindu, reikia visada palikti gale return'ą, kitaip gausime errorą.
}

O jeigu:

Y_CMD:aod(playerid, params[], help)
{
    if(!AdminLvl[playerid]) return false; // jei ne admin, rodom unknown message
    AoD[playerid] = AoD[playerid] ? false : true; 
    return true; // kadangi Y_CMD komandos yra kurtos callback pagrindu, reikia visada palikti gale return'ą, kitaip gausime errorą.
}

?

O gal aš klystu?

Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)
Y_CMD:aod(playerid, params[], help)
{
	if(!AdminLvl[playerid]) return false; // jei ne admin, rodom unknown message
	switch(AoD[playerid]) // nurodom switch funkcijai jog dirbsim su AoD[playerid] kintamuoju
	{
		case false: AoD[playerid] = true; // jeigu AoD[playerid] kintamasis false, jį nustatom į true, t.y įjungiam AoD
		case true: AoD[playerid] = false; // jeigu AoD[playerid] kintamasis true, jį nustatom į false, t.y išjungiam AoD
	}
	return true; // kadangi Y_CMD komandos yra kurtos callback pagrindu, reikia visada palikti gale return'ą, kitaip gausime errorą.
}

O jeigu:

Y_CMD:aod(playerid, params[], help)
{
    if(!AdminLvl[playerid]) return false; // jei ne admin, rodom unknown message
    AoD[playerid] = AoD[playerid] ? false : true; 
    return true; // kadangi Y_CMD komandos yra kurtos callback pagrindu, reikia visada palikti gale return'ą, kitaip gausime errorą.
}

?

O gal aš klystu?

 

AoD[playerid] = AoD[playerid] ? false : true; - dar ir toks egzistuoja? :o

o šeip tai case kiek žinau greičiausias. ir dar gausime errorą jog help niekur nepanaudotas pagal tavo variantą.

Redaguota , nario Bičas
Nuoroda į komentarą
Dalintis per kitą puslapį

AoD[playerid] = AoD[playerid] ? false : true; - dar ir toks egzistuoja? :o

o šeip tai case kiek žinau greičiausias. ir dar gausime errorą jog help niekur nepanaudotas pagal tavo variantą.

Tik neapsimesk, kad nežinai :funny:

Taip, case greitas, mano žiniomis. O help ir pagal tavo ir pagal mano kodą mes errorą. Reikia įdėti:

#pragma unused help
Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

Šiaip gera pamoka. Sėkmės kuriant kitas.

 

Tikrai gera pamoka, pravers daugeliui :) Sekmės kuriant toliau ;)

Ačiū visiems.

 

Tik neapsimesk, kad nežinai :funny:

Taip, case greitas, mano žiniomis. O help ir pagal tavo ir pagal mano kodą mes errorą. Reikia įdėti:

#pragma unused help

Ahh.. pamiršau pragma :D

pataisau: #pragma unused params

 

Na jei kalbam apie Y_CMD:aod komandą, tai mano versija:

AoD[playerid] = !AoD[playerid];

O bendrai apie pamoką: malonu kad kažkas pagaliau ir pamoką parašė, o ne skripto gabalą :)

Malonu iš tavo pusės, panaudosiu ir tavo duotą variantą :)

 

 

gera pamoka sekmės kuriant kitas ;)

Thanks :)

 help

 

Papildžiau: Pridėjau įdomų ir bent man patogų dalyką, Y_CMD komandos su ZCMD naudojamu, plačiau rasite pamokoje.

Redaguota , nario Bičas
Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

AČIŪ.Spaudžiu žalią.

Dėkui :)

 

Man asmeniškia zcmd daug geriau, na bet kiekvienam savo.

Y_CMD už ZCMD yra greitesnis, tik neaišku ant kiek, bet tiksliai žinau jog greitesnis, taip pat YCMD beveik nepajunta greičio skirtumo kai yra daug komandų, priešingai nei ZCMD.

Redaguota , nario Bičas
Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 2 mėnesių...

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3570 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!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

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

Skelbimai


×
×
  • Sukurti naują...