Pamoką kūriau gana seniai, 2014.04.13 kitame forume.
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;
}
2015.01.05 - Nežinau dėl ko, bet seniau galvojau jog su bebro variantu nebus galima parašyti įjungimo/išjungimo teksto, bet pasirodo galima, užteks tik paprasto tikrinimo:
if(AoD[playerid] == true) SendClientMessage(playerid, -1, "Įjungiai AoD");
else SendClientMessage(playerid, -1, "Išjungiai AoD");
Žinoma galima ir su switch, bet kaip tai atlikti manau jau ir patys žinote pagal aukštesnį mano variantą.
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 variantu 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 :D
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.
}
Sėkmės MAZE.lt bendruomenės nariai :) Jei kils klausimų susijusių su šia pamoka, parašykite į skype: robis.ltu ;)