Eesti SA-MP Kommuun

Full Version: Kuidas kasutada zcmd-i algajale
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2
ÕPETUS KUIDAS TEHA KÄSKLUSI ZCMD-GA

Pole juba mõndaaega teinud õpetusi.. aga viimasel ajal on tekkinud vajadust õpetada kuidas käsklusi teha..
Seega mõtlesin et ei peaks igaleühele eraldi õpetama, teen siis üle pika aja jälle õpetuse.
Ma kül ei oska hästi seletada ja ei oska üelda täpseid nimesi asjadele ning kipun keerukalt seletama ja tegema,
aga seda selleks et võimalikult põhjalikult ja palju õpetada. Loodetavasti saate ikka aru ja selgeks Smile

================================================================================​
NB! Kõiksugused lisa õpetused, info jne on postituse lõpu pool, et kui millegist aru ei saa, mis on mis
või mida panna kuhugile, siis vaata postituse lõpu poole.
================================================================================​

Alustuseks...

Alustuseks tuleb teada kuidas on tehtud sul gm-is mängija infod ja andmed. Kui sul on juba gm kellegi
poolt valmis tehtud siis pead otsima kas teistest käsklustest või gm-ist ülesse. Aga kui sul pole midagi
tehtud veel siis tuleks alustada nendest ennem kui edasi minna.

Kuna ise eelistan ja ka paljud teised eelistavad ja soovitan kasutada kiireima toimega käskluse protsessorit nimega zcmd
ja zcmd-i puhul on ka see hea et igat käsklust saad põhimõtteliselt teha igal pool gm-is või lisada üldse lisa faili.
Kes teavad siis originaal käsklustes pannakse kõik käsklused public OnPlayerCommandText(playerid, cmdtext[]) alla,
siis zcmd-i puhul seda tegema ei pea.

================================================================================​

Vajalikud asjad...

Vajame zcmd-i ja sscanf2 include faile..
sscanf2 originaal postitus on siin, mis on tehtud Y_Less poolt.
ja alla saab tõmmata siit.
zcmd-originaal posritus on siin, mis on tehtud ZeeX poolt.
zcmd-i eestikeelse varjandi saab alla laadida siit, mis on muudetud HP aka Priit poolt.

Lisa info: Eestikeelse versiooni puhul on siis see eelis et saab kasutada skriptis täpitähti.

Skriptis näiteks:
Code:
CMD:n2ide
ja serveris paned käskluse
/näide
et saab ka kasutada täpitähti käskluses.
Skriptis tuleb täpitähed asendada:
Code:
ü - y
õ - 6
ä - 2
ö - 8

================================================================================​

Põhiline...

Lisame faili sscanf.dll kausta plugins ja lisame server.cfg faili rea (kui pole veel plugin rida)
"plugins sscanf"
Siis lisame omakorda sscanf2.inc ja zcmd.inc failid kausta "pawno/include".

Edasi hakkame tegelema juba gm-iga ja lisame gm-i algusesse
Code:
#include <a_samp>     // Sa-mp ise
#include <zcmd>     // Käskluste protsessor
#include <sscanf2>     // Võrdleb / seab / kontrollib käskluses vajalikud andmed

Nüüd oleme seal maal et saame lõpuks alustada käskluste tegemisega.
Üritan siis igat asja ära seletada miks ja kuidas teen.

================================================================================​

Käsklusteni siis...

Esimesena näitan kuidas üldse koostada tavalist zcmd käsklust, siis edasi hakkame asju juurde lisama.

Esmalt tähistame ära et tegu on käsklusega
Code:
CMD:

Seejärel paneme käskluse nime (mida serveris kasutama hakkame.)

ja lõppu lisame parameetrid
Code:
(playerid, params[])

kokku tuleb esimene rida
Code:
CMD:k2sklus(playerid, params[])

Seejärel tulevad juba { } ehk algus ja lõpu märgid. Nende puhul ma ei oska eriti lahti seletada mis on point
neil aga üritan. Siis kui mingi asi läheb toimima / nõuded sobivad siis läheb sealt edasi kus on { algus ja lõppeb seal kus on }
et edasine süsteemi osa on seal vahel. Üritan näilikult seda näitama hakata.

================================================================================​

N 1: Teen näiteks kerge käskluse ilma mingite lisadeta
Code:
// Käsklus siis ise. Serveris siis kasutatakse /proov
CMD:proov(playerid, params[])
// Kui käsklust kasutatakse siis toimib vastavalt nii nagu järgnevast märgist edasi läheb.
{
    // Siia sisse tuleb siis edasi juba käskluse toime (või muud valikud veel)
    SendClientMessage(playerid, -1, "Seda sama kirja näitatakse mängijale chatis kui seda käsklust kasutab!");
    // Anname serverile teada et tegu on õige käsklusega, ehk keerame tagasi algusesse.
    return 1;
// Nüüd kui kõik vajalik on olemas siis lõppeb käskluse osa ja paneme sulud kinni.
}

/*Ilma kommentaarideta näeb välja siuke:*/
CMD:proov(playerid, params[])
{
    SendClientMessage(playerid, -1, "Seda sama kirja näitatakse mängijale chatis kui seda käsklust kasutab!");
    return 1;
}

================================================================================​

N 2: Nüüd lisame käsklusele ka võrdluse / kontrolli, nimetage kuidas tahate.
Ehk kontrollib ära kas mängija on sisse logitud.

Code:
// Teeme siis käskluse
CMD:proov(playerid, params[])
{
    // Kontrollime kas kasutaja on sisse logitud
    if(KasutajaInfo[playerid][SisseLogitud] == true)
    // Kui kasutaja on sisse logitud siis läheb siit edasi
    {
        SendClientMessage(playerid, -1, "Kuna oled sisse logitud siis näed seda teksti");
    }
    // Aga kui kasutaja pole sisse logitud, siis saadama teate talle et ta visatakse välja ja paneme talle KickTaimeri (vaata postituse lõpu poole)
    // mis viskab ta välja serverist.
    else
    {
        // Saadame mängijale teate et ta visatakse serverist välja kuna pole korektselt sisse logitud.
        SendClientMessage(playerid, -1, "Kuna sa pole sisse logitud siis visatakse sind serveris välja");
        // Paneme taimeri et 100 millisekundi pärast mängija välja visataks
        SetTaimer("KickTaimer", 100, false);
    }
    // Anname serverile teada et tegu on õige käsklusega, ehk keerame tagasi algusesse.
    return 1;
}

/*Ilma kommentaarideta näeb välja siuke:*/
CMD:proov(playerid, params[])
{
    if(KasutajaInfo[playerid][SisseLogitud] == true)
    {
        SendClientMessage(playerid, -1, "Kuna oled sisse logitud siis näed seda teksti");
    }
    else
    {
        SendClientMessage(playerid, -1, "Kuna sa pole sisse logitud siis visatakse sind serveris välja");
        SetTaimer("KickTaimer", 100, false);
    }
    return 1;
}

================================================================================​

N 3: Lisame siis natuke veel võrdlusi juurde. Teeme käskluse näiteks adminnidele.

Code:
// Teeme siis käskluse
CMD:proov(playerid, params[])
{
    // Kontrollime kas kasutaja on sisse logitud
    if(KasutajaInfo[playerid][SisseLogitud] == true)
    // Kui kasutaja on sisse logitud siis läheb siit edasi
    {
        // Vaatame nüüd kas kasutaja on adminn või mitte
        // Ehk vaatame kas mängija adminni level on suurem või võrdne 1-ga (võib ka lisada " > 0 " ehk et kas on lihtsalt suurem kui 0
        // või kui tahame teha suuremale adminnile käsklust siis paneme vastava leveli nr järgi, näiteks " > 4 " et peab olema kõrgem adminni
        // level kui 4
        if(KasutajaInfo[playerid][AdminniLvl] >= 1)
        {
            // Kui kasutaja on siiski adminn tuleb talle see tekst
            SendClientMessage(playerid, -1, "Kuna sa oled adminn siis näed seda teksti siin");
        }
        // Aga kui mängija ei ole adminn, siis näeb ta seda hoopis
        else
        {
            // Kuna mängija pole adminn siis saadame talle teate et peab olema adminn et seda käsklust kasutada
            SendClientMessage(playerid, -1, "Selle käskluse kasutamiseks pead sa olema adminn");
        }
    }
    // Aga kui kasutaja pole sisse logitud, siis saadama teate talle et ta visatakse välja ja paneme talle KickTaimeri (vaata postituse lõpu poole)
    // mis viskab ta välja serverist.
    else
    {
        // Saadame mängijale teate et ta visatakse serverist välja kuna pole korektselt sisse logitud.
        SendClientMessage(playerid, -1, "Kuna sa pole sisse logitud siis visatakse sind serveris välja");
        // Paneme taimeri et 100 millisekundi pärast mängija välja visataks
        SetTaimer("KickTaimer", 100, false);
    }
    // Anname serverile teada et tegu on õige käsklusega, ehk keerame tagasi algusesse.
    return 1;
}

/*Ilma kommentaarideta näeb välja siuke:*/
CMD:proov(playerid, params[])
{
    if(KasutajaInfo[playerid][SisseLogitud] == true)
    {
        if(KasutajaInfo[playerid][AdminniLvl] >= 1)
        {
            SendClientMessage(playerid, -1, "Kuna sa oled adminn siis näed seda teksti siin");
        }
        else
        {
            SendClientMessage(playerid, -1, "Selle käskluse kasutamiseks pead sa olema adminn");
        }
    }
    else
    {
        SendClientMessage(playerid, -1, "Kuna sa pole sisse logitud siis visatakse sind serveris välja");
        SetTaimer("KickTaimer", 100, false);
    }
    return 1;
}
Info: Käsklusse saab lisada igasugu võrdlusi mis vaja on ja pähe tuleb, näiteks kas on piisavalt skoori või raha (kui midagi osta tahab)jne..

================================================================================​

Nüüd lisame käsklusse sscanf funksiooni...

Milleks siis üldse sscanf.. üritan seda seletada nii kuidas oskan.
Põhimõte on see et saame lisada käsklusele juurde mõningaid lisasi / määrata midagi jne..
Üritan näidetega asja selgeks teha..
Serveris kasutatakse siis sscanf-iga asju näitena nii
Code:
/skoor [skoori summa]

================================================================================​

N 4: sscanf lisamine käsklusele

Code:
// Teeme siis käskluse
CMD:skoor(playerid, params[])
{
    // Kontrollime kas kasutaja on sisse logitud
    if(KasutajaInfo[playerid][SisseLogitud] == true)
    // Kui kasutaja on sisse logitud siis läheb siit edasi
    {
        // Teeme uue muutuja / tähise..
        new Skoor, Teade[125];
        // Nüüd vaatame kas käsklusse on lisatud ka skoor sscanf abil.
        // Kui pole sisestatud õigesti käsklust ehk kasutati lihtsalt "/skoor" siis saadab teate kuidas õigesti kasutada käsklust.
        if (sscanf(params, "i", Skoor)) SendClientMessage(playerid, 0xFF0000AA, "Kasuta: \"/skoor [skoori summa]\"");
        // kui käsklus on õigesti sisestatud N: "/skoor 100" siis läheb edasi
        else
        {
            // Paneme mängijale skoori mida me käskluses sisestasime N: "100"
            KasutajaInfo[playerid][Skoor] = Skoor;
            // Koostame teate vastava summaga mida mängija endale skooriks pani
            format(Teade, sizeof(Teade), "Sa panid endale:%i skoori punkti", Skoor);
            // Saadame koostatud teate mängijale
            SendClientMessage(playerid, -1, Teade);
        }
    }
    // Aga kui kasutaja pole sisse logitud, siis saadama teate talle et ta visatakse välja ja paneme talle KickTaimeri mis viskab ta välja serverist.
    else
    {
        // Saadame mängijale teate et ta visatakse serverist välja kuna pole korektselt sisse logitud.
        SendClientMessage(playerid, -1, "Kuna sa pole sisse logitud siis visatakse sind serveris välja");
        // Paneme taimeri et 100 millisekundi pärast mängija välja visataks
        SetTaimer("KickTaimer", 100, false);
    }
    // Anname serverile teada et tegu on õige käsklusega, ehk keerame tagasi algusesse.
    return 1;
}

/*Ilma kommentaarideta näeb välja siuke:*/
CMD:skoor(playerid, params[])
{
    if(KasutajaInfo[playerid][SisseLogitud] == true)
    {
        new Skoor, Teade[125];
        if (sscanf(params, "i", Skoor)) SendClientMessage(playerid, 0xFF0000AA, "Kasuta: \"/skoor [skoori summa]\"");
        else
        {
            KasutajaInfo[playerid][Skoor] = Skoor;
            format(Teade, sizeof(Teade), "Sa panid endale:%i skoori punkti", Skoor);
            SendClientMessage(playerid, -1, Teade);
        }
    }
    else
    {
        SendClientMessage(playerid, -1, "Kuna sa pole sisse logitud siis visatakse sind serveris välja");
        SetTaimer("KickTaimer", 100, false);
    }
    return 1;
}
NB: See käsklus paneb mängija skoori vastavalt mida käskluses sisestatakse. Kui on soov lisada skoori juurde olemas
olevale skoorile, siis on vaja kasutada:
Code:
KasutajaInfo[playerid][Skoor] = KasutajaInfo[playerid][Skoor] + Skoor;

================================================================================​

N 5: sscanf-is saab ka lisada rohkem määrajaid kui üks...
Teen näiteks siis et peab olema adminn ja paneme teisele kasutajale skoori juurde
Code:
// Teeme siis käskluse
CMD:skoor(playerid, params[])
{
    // Kontrollime kas kasutaja on sisse logitud
    if(KasutajaInfo[playerid][SisseLogitud] == true)
    // Kui kasutaja on sisse logitud siis läheb siit edasi
    {
        // Kas kasutaja on vähemalt lvl 1 adminn
        if(KasutajaInfo[playerid][AdminniLvl] >= 1)
        {
            // Teeme uue muutuja / tähise..
            new Skoor, TeineKasutaja, Teade[125], Teade2[125];
            // Nüüd vaatame kas käsklusse on lisatud ka teise mängija id/nimi skoor sscanf abil.
            // Kui pole sisestatud õigesti käsklust ehk kasutati lihtsalt "/skoor" siis saadab teate kuidas õigesti kasutada käsklust.
            if (sscanf(params, "ui", TeineKasutaja, Skoor)) SendClientMessage(playerid, 0xFF0000AA, "Kasuta: \"/skoor [Nimi/id][skoori summa]\"");
            // kui käsklus on õigesti sisestatud N: "/skoor 1 100" või "/skoor Geto 100" siis läheb edasi
            else
            {
                // Paneme mängijale skoori mida me käskluses sisestasime N: "100"
                KasutajaInfo[playerid][TeineKasutaja] = Skoor;

                // Koostame teate kasutajale kellele skoor pandi
                format(Teade, sizeof(Teade), "Adminn pani sulle:%i skoori punkti", Skoor);
                // Saadame määratud kasutajale teate
                SendClientMessage(TeineKasutaja, -1, Teade);
                
                // Saadame adminnile kes skoori pani et kui palju ta skoori pani
                format(Teade2, sizeof(Teade2), "Sa panid kasutajale:%i skoori punkti", Skoor);
                // Saadame teate adminnile kes käsklust kasutas
                SendClientMessage(playerid, -1, Teade2);
            }
        }
        // Kui mängija ei ole adminn siis saadame talle teate et peab olema adminn selle käskluse kasutamiseks
        else
        {
            SendClientMessage(playerid, -1, "Selle käskluse kasutamiseks pead sa olema adminn");
        }
    }
    // Aga kui kasutaja pole sisse logitud, siis saadama teate talle et ta visatakse välja ja paneme talle KickTaimeri mis viskab ta välja serverist.
    else
    {
        // Saadame mängijale teate et ta visatakse serverist välja kuna pole korektselt sisse logitud.
        SendClientMessage(playerid, -1, "Kuna sa pole sisse logitud siis visatakse sind serveris välja");
        // Paneme taimeri et 100 millisekundi pärast mängija välja visataks
        SetTaimer("KickTaimer", 100, false);
    }
    // Anname serverile teada et tegu on õige käsklusega, ehk keerame tagasi algusesse.
    return 1;
}

/*Ilma kommentaarideta näeb välja siuke:*/
CMD:skoor(playerid, params[])
{
    if(KasutajaInfo[playerid][SisseLogitud] == true)
    {
        if(KasutajaInfo[playerid][AdminniLvl] >= 1)
        {
            new Skoor, TeineKasutaja, Teade[125], Teade2[125];
            if (sscanf(params, "ui", TeineKasutaja, Skoor)) SendClientMessage(playerid, 0xFF0000AA, "Kasuta: \"/skoor [Nimi/id][skoori summa]\"");
            else
            {
                KasutajaInfo[playerid][TeineKasutaja] = Skoor;
                format(Teade, sizeof(Teade), "Adminn pani sulle:%i skoori punkti", Skoor);
                SendClientMessage(TeineKasutaja, -1, Teade);
                format(Teade2, sizeof(Teade2), "Sa panid kasutajale:%i skoori punkti", Skoor);
                SendClientMessage(playerid, -1, Teade2);
            }
        }
        else
        {
            SendClientMessage(playerid, -1, "Selle käskluse kasutamiseks pead sa olema adminn");
        }
    }
    else
    {
        SendClientMessage(playerid, -1, "Kuna sa pole sisse logitud siis visatakse sind serveris välja");
        SetTaimer("KickTaimer", 100, false);
    }
    return 1;
}

================================================================================​

Lisa info:
Käsklustes ja üldse gm-is kasutatavad võrdlused:

Code:
Märk        Milleks kasutatakse             Näide

>             suurem kui..                    if(KasutajaInfo[playerid][AdminnLvl] > 1) // Kui adminni level on suurem kui 1
<             väiksem kui..                   if(KasutajaInfo[playerid][AdminnLvl] < 1) // Kui adminni level on väiksem kui 1
>=             suurem või võrdne kui..            if(KasutajaInfo[playerid][AdminnLvl] >= 1) // Kui adminni level on suurem või võrdne kui 1
<=             väiksem või võrdne kui..        if(KasutajaInfo[playerid][AdminnLvl] <= 1) // Kui adminni level on väiksem või võrdne kui 1
==             võrdne vastega                  if(KasutajaInfo[playerid][AdminnLvl] == 1) // Kui adminni level on 1
&&             ..ja..                          if((KasutajaInfo[playerid][AdminnLvl] > 1) &&  (KasutajaInfo[playerid][Skoor] > 100))
// Kas adminni level on suurem kui 1 JA skoor üle 100
||             ..või..                         if((KasutajaInfo[playerid][AdminnLvl] > 1) ||  (KasutajaInfo[playerid][Skoor] > 100))
// Kas adminni level on suurem kui 1 VÕI skoor üle 100
=           seadmiseks / määramiseks        KasutajaInfo[playerid][Skoor] = 100; // panime mängija skoori 100

================================================================================​

sscanf-is kasutatavad tähenduslikud märgid (kopeeritud originaal postitusest)
Code:
Märk        Kus kasutatakse                 Näited
    
    i, d        Integer                            1, 42, -10
    c            Character                        a, o, *
    l            Logical                            true, false
    b            Binary                            01001, 0b1100
    h, x        Hex                                1A, 0x23
    o            Octal                            045 12
    n            Number                            42, 0b010, 0xAC, 045
    f            Float                            0.7, -99.5
    g            IEEE Float                        0.7, -99.5, INFINITY, -INFINITY, NAN, NAN_E
    u            User name/id (bots and players)    Y_Less, 0
    q            Bot name/id                        ShopBot, 27
    r            Player name/id                    Y_Less, 42

================================================================================​

Lisa õpetus: Kuidas koostada teadet mängijale

Selleks kasutame siukest funktsiooni nagu "format" millega koostame näiteks teate mängijale muutuvate andmetega.

Kuidas teha:
Kõigepealt peame tegema sellele muutuja mis siis lõpuks koosnekski kogu teatest.
Code:
new Teade[125];
new - uus
Teade - muutuja nimi
[125] - kuna tegu on stringiga ehk koosneb tähtedest siis peame panema ka piiraja et mitu tähemärki olla võib maksimaalselt (võib olla ka suurem kui 125,
peast ei mäleta mis see kõige maksimaalsem olla võis, aga olen kasutanud ka 6000 osade suuremate asjade puhul). Parem on kui panete võimalikult täpselt,
kuid arvestage ka sellega et valmis kirjutatud teatele tulevad lisaks ka veel muutuvad andmete tähtede / nr arv. Näiteks kui kasutate teates mõne mängija
nime siis tuleb selle teate tähtede arvule juurde ka mängija nimes olevad tähed.

Edasi koostame siis teate:
Code:
format(Teade, sizeof(Teade), "Teade siis ise on selline. Siia lisame lõppu näiteks skoori %s ja minu raha on %s", Skoor, Raha);

format - koostamine
Teade - mis siis on kogu teade kokku
sizeof(Teade) - maksimaalne tähtede arv (võib ka panna numbritega 125 aga kui tuleb mitu rida siis ei pea sizeof-iga muutma igat numbrit eraldi)
" teade " - teade on " " märkide vahel
%s - on siis muutuvad kohad mis asendatakse pärast vastavalt vajadusele
Skoor - on üks muutuvast andmest
Raha - on teine muutuvast andmest
muutuvaid andmeid võib lisada vastavalt kuidas on vajadust.

Lõpuks siis saadame kogu teate ka mängijale
Code:
SendClientMessage(playerid, -1, Teade);
SendClientMessage - funksioon mis saadab mängijale teate chatti
playerid - kasutajale kellele läheb (playerid puhul läheb sellele kes seda kasutab parasjagu)
-1 - teate värv
Teade - eelnevalt koostatud teade mis siis kasutajale näitab

Märgid mida kasutame % järgi vastavalt mida meil vaja näidata
Code:
%s - tähed,
%d - numbrid,
%i - hulgim numbreid
%0.f - float ehk kordinaadid / elud (numbrid mis sisaldavad . kohta N: 10.300

Lisa näide:
Code:
new KasutajaSkoor[125];
format(KasutajaSkoor, sizeof(KasutajaSkoor), "Sinu skoor on: %d", KasutajaInfo[playerid][Skoor]);
SendClientMessage(playerid, -1, KasutajaSkoor);

================================================================================​

Neile kes ei tea kuidas mängija andmeid teha/võrrelda...

Kiirelt räägin ära kuidas teha ja kuidas näeb välja siis see mängija info.
Esmalt teeme enum-i kuhu märgime ära mis infot meil mängija kohta hoida on vaja:
Code:
enum KInfo
{
    Nimi[MAX_PLAYER_NAME],
    Parool[35],
    Skoor,
    Raha,
    AdminniLvl,
    Tapmised,
    Surmad,
    bool:SisseLogitud
}
Lisa info: (Nimedel ja paroolidel ning teistel asjadel mis sisaldavad tähti / sõnu,
määrame lõppu [ ] märkide vahele maksimaalse suuruse.
See on siis niiüelda string ingliskeelne tähendus.
Nagu näha ei pannud ma Nimi taha numbrit vaid sõna MAX_PLAYER_NAME see on juba sampi
poolt paika pandud ja ära defineeritud mängija nime maksimaalne pikkus,
milleks on 24, ehk nimi võib olla maksimaalselt pikk 24 tähemärki)
Ja viimases reas näete veel bool:SisseLogitud, mis on siis 2 valikuline valiku viis true ja false (õige ja vale).
Seda kasutame kõigepealt kui sisse logib korrektselt, näiteks paroolid ja kõik on õige ja spawnib siis paneme
Code:
KasutajaInfo[playerid][SisseLogitud] = true; // ehk et mängija sisselogimine on õige. Väljudes paneme
KasutajaInfo[playerid][SisseLogitud] = false; // ehk mängija pole sisse logitud.

Edasi teeme siis uue muutuja mis kõiki neid hoiab
Code:
new KasutajaInfo[MAX_PLAYERS][KInfo];

Edaspidi kasutame gm-is võrdluseks / muutmiseks näiteks:
Code:
KasutajaInfo[playerid][Nimi]
või
Code:
KasutajaInfo[playerid][Raha]
jne...

================================================================================​

LISA ÕPETUS:

Õpetan kuidas teha ühte lihtsat funksiooni mida ise koguaeg kasutan nüüd kuna
0.3x versiooniga muudeti väheke Kick(); funksiooni ning kui seda funksiooni kasutatakse siis ei jõua mängijale
teade kohale kui seda soovite saata.

Teeme funksiooni: Ehk teeme taimeri mis viskab mängija välja serverist seatud aja pärast
Code:
forward KickTaimer(playerid);
public KickTaimer(playerid)
{
    Kick(playerid);
}
Edaspidi kasutame:
Code:
SetTaimer("KickTaimer", 100, false);
ehk:
SetTaimer - paneme taimeri
"KickTaimer" - vastava taimeri nime mis funksiooni ta kasutama peab
100 - aja mille lõppedes funksioon toimima hakkab (hetkel panin 100 millisekundit)
false - ehk et ta ei hakka kordama seda funksioon rohkem (kui paneme true siis ta hakkab iga 100 millisekundi pärast uuesti seda funksiooni panema)

================================================================================​

Lõpp sõna: Õpetus läks nüüd küll jube pikaks aga loodan et saite aru ka õpetusest. Kui keegi märkab et midagi on valesti või puudu, või tekkis mingeid küsimusi
siis kindlasti antke teada kuna vaba aega suht pole, siis tegin selle õpetuse öösel peale tööd ja
kõik käsklused ja asjad kirjutasin peast et võib olla vigu sees ja pole neid ise läbi testinud.
Kindlasti on väga, väga palju kirjavigu ka Big Grin aga see mind eriti ei huvita, sest neid on mul koguaeg sees Big Grin

================================================================================​

Tunnustus siukestele tegelastele nagu:
ZeeX - kes tegi zcmd-i.
HP aka Priit - kes tegi siis muudatused et saaks kasutada täpitähti käskluses.

EDIT: Muutsin ära php code-iks et vähe värvilisem oleks siis ehk koodidest paremini aru saada. Saatke mulle ka PM-is tagasisidet õpetuste kohta, et kas aitas teid ja mis võiks paremini olla et kui edaspidi teen siis saaksin paremini teha.

[THE_BOSS]Geto244

================================================================================​

INFO: Kuna see post läks kaduma, siis otsisin selle ülesse ja panin selle uuesti ülesse.
Muudan ta ilusaks ja korda jälle mõni teine päev kui rohkem aega..


================================================================================
Tähendab, ma muutsin ümber natsa, ehk saada aidata mul problem.

    PAWN Programming
  1. CMD<img src="http://sa-mp.staatus.eu/images/smilies/confused.gif" alt="Confused" title="Confused" class="smilie smilie_13" />koor(playerid, params[])
  2. {
  3. if(PlayerInfo[playerid][Adminlevel] < 1)
  4. {
  5. new Skoor, TeineKasutaja, Teade[125], Teade2[125];
  6. if (sscanf(params, "ui", TeineKasutaja, Skoor)) SendClientMessage(playerid, 0xFF0000AA, "Kasuta: \"/skoor [Nimi/id][skoori summa]\"");
  7. PlayerInfo[playerid][TeineKasutaja] = Skoor;
  8. format(Teade, sizeof(Teade), "Admin pani sulle:%i skoori punkti", Skoor);
  9. SendClientMessage(TeineKasutaja, -1, Teade);
  10. format(Teade2, sizeof(Teade2), "Sa panid kasutajale:%i skoori punkti", Skoor);
  11. SendClientMessage(playerid, -1, Teade2);
  12. }
  13. else
  14. {
  15. SendClientMessage(playerid, -1, "Selle käskluse kasutamiseks pead sa olema admin");
  16. }
  17. return 1;
  18. }



Error:
Code:
C:\Documents and Settings\OhtMany\Desktop\samp\gamemodes\//.pwn(7) : warning 213: tag mismatch
Pawn compiler 3.2.3664              Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.
Vaata sul on 6dal real summa]\""); eemalda tagant topelt " et jäeks summa]\");

Ning lisaks sul valesti see:

if(PlayerInfo[playerid][Adminlevel] < 1)
< märk tähendab et vasakul pool olev asi on väiksem kui paremal pool.
Ehk
Playerinfo...adminlevel peab olema väiksem kui 1 ehk siis olemattu et saaks seda käsklust kasutada.

Et õige oleks siis

if(PlayerInfo[playerid][Adminlevel] > 1) et kellel vähemalt lvl 2 adminni lvl saab kasutada

Või
if(PlayerInfo[playerid][Adminlevel] >= 1) ehk lvl peab olema suurem või võrdne

Või siis
if(PlayerInfo[playerid][Adminlevel] > 0) ehl lvl peav olema suurem kui 0

Loodane et said aru.. kole kehva on telefonist vastata..
Jah, sain aru. Kuid kas sa saaksid veel ühte linki mulle anda? Nimelt oleks vaja eesti ZCMD, mida ma ei leia *
Ma ei mäleta mis asi mul siin uploadis on aga peaks olema see http://www.upload.ee/files/3256122/zcmd.inc.html
Või siis copy siit
pastebin.com/j7SXv61C
Saaks sscanf2 faili ka uploadi või midagi?
Siit saad kõik vajaliku ja peaks ka olema kõige uuem versioon. Kiiruga googeldasin http://www.forum.sa-mp.com/showthread.php?t=120356
palun tee mulle valmis see ma ei saa midagi aru!

Või tee palun video
Mis käsklust sa tahad? :-D
Lööb errorit kui kuskil " KasutajaInfo " sees on, mis teen?
Pages: 1 2