Jump to content

DuTzUuBv

Members
  • Content Count

    276
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by DuTzUuBv


  1. Astazi va voi arata cum sa creati comanda de /update pe dialog pentru servarul vostru .

    Quote

     

    1.Vom avea nevoie de un dialog care il puneti la inceput:

    Quote

    #define    DIALOG_UPDATES 830

     

    2.Vom adauga la inceput :

    Quote

    new updateversiune[100][128];
    new updatedata[100][128];
    new updatetext[40][100][1000];

     

    3.O sa adaugam comanda /updates pentru pleyeri :

    Quote

    CMD:updates(playerid, params[])
    {
        if(gPlayerLogged[playerid] == 0) return SCM(playerid, COLOR_ERROR, "Nu esti loagat.");
        new query[1000],versiune[128],updateid,vizionari,text[40][1000],rezultat[1000],query2[256],textafisare[2000],data[128], updateid2 = 0;
        mysql_format(SQL, query, sizeof(query), "SELECT * FROM `updates` WHERE `ID` > '0'");
        new Cache: cache = mysql_query(SQL, query);
        if(cache_get_row_count() < 1) return SCM(playerid, COLOR_ERROR, "Nu exista updateuri adaugate in lista.");
        for(new i, j = cache_get_row_count(); i != j; i++)
        {
            updateid = cache_get_field_content_int(i, "ID");
            vizionari = cache_get_field_content_int(i, "Vizionari");
            cache_get_field_content(i, "Versiune", rezultat); format(versiune, 128, rezultat);
            cache_get_field_content(i, "Data", rezultat); format(data, 128, rezultat);
            for(new a = 0; a < 40; a++)
            {
                format(query2, sizeof(query2), "Text%d",a);
                cache_get_field_content(i, query2,rezultat); format(text[a], 1000, rezultat);
                strcpy(updatetext[a][updateid2], text[a], 1000);
            }
            strcpy(updatedata[updateid2], data, 128);
            strcpy(updateversiune[updateid2], versiune, 128);
            updateid2++;
            if(updateid == 1) format(textafisare, sizeof(textafisare), "{0066FF}ID\t{FFFFFF}Versiune\t{0066FF}Data\t{FFFFFF}Vizionari\n{FFFFFF}Update {0066FF}# %d\t{FFFFFF}%s\t{0066FF}%s{FFFFFF}\t%d",updateid, versiune,data, vizionari);
            if(updateid > 1) format(textafisare, sizeof(textafisare), "%s\n{FFFFFF}Update {0066FF}# %d\t{FFFFFF}%s\t{0066FF}%s{FFFFFF}\t%d",textafisare,updateid,versiune,data, vizionari);
        }
        ShowPlayerDialog(playerid, DIALOG_UPDATES, DIALOG_STYLE_TABLIST_HEADERS, "SERVER: Updates", textafisare, "Seleteaza","Anuleaza");
        cache_delete(cache);
        return 1;
    }

     

    4.Comanda pentru admin:

    Quote

    CMD:au(playerid, params[])
    {
        if(gPlayerLogged[playerid] == 0) return SCM(playerid, COLOR_GRAD2, "DENIED: {FFFFFF}You are not authorized to use that command.");
        if(PlayerInfo[playerid][pAdmin] >= 1)
        {
            new versiune[128],data[128],query[1000];
            if(sscanf(params, "s[128]", versiune)) return SCM(playerid, COLOR_WHITE, "USAGE: /addupdate [nume versiune]");
            new year, month,day;
            getdate(year, month, day);
            format(data, sizeof(data), "%02d.%02d.%d",day,month,year);
            mysql_format(SQL, query, sizeof(query), "INSERT INTO `updates` (`Versiune`,`Data`) VALUES ('%s','%s')",versiune,data);
            mysql_tquery(SQL, query, "", "");
            SCM(playerid, COLOR_GRAD2, "[UPDATE]: {FFFFFF}Versiunea a fos adaugata cu succes.");
        }
        return 1;
    }

     

    5.Comanda pentru admin pentru a adauga versiunea:

    Quote

    CMD:aul(playerid, params[])
    {
        if(gPlayerLogged[playerid] == 0) return SCM(playerid, COLOR_GRAD2, "DENIED: {FFFFFF}You are not authorized to use that command.");
        if(PlayerInfo[playerid][pAdmin] >= 1)
        {
            new versiune[512],query[1000],linie,id;
            if(sscanf(params, "iis[128]", linie,id,versiune)) return SCM(playerid, COLOR_WHITE, "USAGE: /addupdateline [linie (0-40)] [id] [descriere]");
            mysql_format(SQL, query, sizeof(query), "UPDATE `updates` SET `Text%d`='%s' WHERE `ID`='%d'",linie,versiune,id);
            mysql_tquery(SQL, query, "", "");
            SCM(playerid, COLOR_GRAD2, "[UPDATE]: {FFFFFF}Linia a fos adaugata cu succes.");
        }
        return 1;
    }

     

    6.Ne ducem la public OnDialogResponse si adaugam dialogul mai in jos:

    Quote

    if(dialogid == DIALOG_UPDATES)
        {
            if(!response) return 1;
            new setat = 0;
            new textafisare[2800];
            for(new a = 0; a < 40; a++)
            {
                if(strlen(updatetext[a][listitem]) > 4)
                {
                    if(setat == 0) setat = 1, format(textafisare, sizeof(textafisare), "{FFFFFF}Server Update {0066FF}# %d{FFFFFF}\nVersiune {0066FF}%s\n{FFFFFF}Creat in data %s\n{0066FF}> {FFFFFF}%s\n",listitem+1, updateversiune[listitem],updatedata[listitem],updatetext[a][listitem]);
                    else if(setat > 0) format(textafisare, sizeof(textafisare), "%s\n{0066FF}> {FFFFFF}%s\n",textafisare,updatetext[a][listitem]);
                }
            }
            new sqlupdate[1000];
            mysql_format(SQL, sqlupdate, sizeof(sqlupdate), "SELECT * FROM `users` WHERE `LikeUpdate%d`='1'",listitem+1);
            new Cache: aprecieri = mysql_query(SQL, sqlupdate);
            new aprecierii = cache_get_row_count();
            cache_delete(aprecieri);
            idupdate[playerid] = listitem+1;
            format(textafisare, sizeof(textafisare), "%s\n\n\t{0066FF}%d{FFFFFF} jucatori au apreciat acest update.",textafisare,aprecierii);
            mysql_format(SQL, sqlupdate, sizeof(sqlupdate), "UPDATE `updates` SET `Vizionari`=Vizionari+1 WHERE `ID`='%d'",listitem+1);
            mysql_tquery(SQL, sqlupdate, "", "");
            if(setat > 0) ShowPlayerDialog(playerid, DIALOG_UPDATES+1, DIALOG_STYLE_MSGBOX, "SERVER: UPDATES", textafisare, "Apreciaza","Inchide");
        }
        if(dialogid ==  DIALOG_UPDATES+1)
        {
            if(response)
            {
                new sqlupdate[1000],aapreciat = -1;
                mysql_format(SQL, sqlupdate, sizeof(sqlupdate), "SELECT * FROM `users` WHERE `LikeUpdate%d`='0' AND `id`='%d'",idupdate[playerid],PlayerInfo[playerid][pSQLID]);
                new Cache: aprecieri = mysql_query(SQL, sqlupdate);
                if(cache_get_row_count() > 0) aapreciat = 0;
                cache_delete(aprecieri);
                if(aapreciat == 0)
                {
                    mysql_format(SQL, sqlupdate, sizeof(sqlupdate), "UPDATE `users` SET `LikeUpdate%d`='1' WHERE `ID`='%d'",idupdate[playerid],PlayerInfo[playerid][pSQLID]);
                    mysql_tquery(SQL, sqlupdate, "", "");
                    SCM(playerid, COLOR_LIGHTBLUE, "Ai apreciat acest update!");
                }
                else return SCM(playerid, COLOR_LIGHTBLUE, "Ai apreciat deja acest update!");
            }
        }

     

    Voi trebuie doar sa creeati in baza voastra de date numit "updates" dupa comanda /au 

     

    Pentru nelamuriri asteptun PM

    • Love 1

  2. Am vazut ca este foarte cautat acest sistem deoarece cand cineva adauga ceva nou se iau cam toti dupa el asa ca m-am gandit sa va postez acest tutorial, desigur el va trebui configurat pe gmul vostru si "calibrat" pentru baza voastra de date si variabilele voastre de case.

    Sa incepem.
    In baza voastra de date veti crea un tabel nou numit garages, cu 2 variabile de tip integer si 3 de tip float cum este in imaginea de mai jos

    Quote

    Acum in gm vom defini variabilele necesare:

    Quote

    enum gInfo
    {
        gID,
        Float: gX,
        Float: gY,
        Float: gZ,
        gHouse
    }
    new GarageVariable[100][gInfo];//100 trebuie inlocuit cu numarul de case din joc
    new GarageNum;//numarul total de garaje care vor fi pe server
    new Text3D:GarageLabel[sizeof(GarageVariable)];//Textul pentru fiecare garaj in parte

     

    Acum vom crea publicul pentru incarcarea datelor din baza de date.

    Quote

    forward OnLoadGarages();
    public OnLoadGarages()
    {
         new Cache:resul = mysql_query(SQL,"SELECT * FROM `garages` ORDER BY `garages`.`ID` ASC");
        new x,temp[144];
         for(new i,j=cache_get_row_count();i!=j;++i)
        {
            x++;
            GarageNum++;
            cache_get_field_content(i,"ID", temp);                GarageVariable[x][gID] = strval(temp);
               cache_get_field_content(i,"X", temp);                GarageVariable[x][gX] = floatstr(temp);
            cache_get_field_content(i,"Y", temp);                GarageVariable[x][gY] = floatstr(temp);
            cache_get_field_content(i,"Z", temp);                GarageVariable[x][gZ] = floatstr(temp);
            cache_get_field_content(i,"House", temp);            GarageVariable[x][gHouse] = strval(temp);
        }
        cache_delete(result);
        printf("%d Garages Loaded", GarageNum);
        return 1;
    }

     

    Iar la OnGameModeInit vom adauga simplu 

       

    Quote

    LoadGarages(); //iar sub el vom crea textul
        new textg[144];
        for(new g=1; g<=GarageNum; g++)
        {
            DestroyDynamic3DTextLabel(GarageLabel[g]
            format(textg, sizeof(textg),"{FFFFFF}Garaj nr. %d\nOwner %s",g,HouseInfo[GarageVariable[g][gHouse]][hOwner]);//hOwner si HouseInfo va reprezante numele variabilelor din gamemodeul vostru
            GarageLabel[h] = CreateDynamic3DTextLabel(textg ,0x0066FFFF,GarageVariable[g][gX], GarageVariable[g][gY], GarageVariable[g][gZ],25, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100.0);
        }


        
    Pana aici am creat tabelul am incarcat datele din baza de date in variabilele din gm si am creat textul la fiecare garaj in parte. Mai departe vom crea comenzileComanda de intrat si iesit din garaj

    Quote

     

    CMD:garage(playerid, params[])
    {
        new g=-1;
        new house = PlayerInfo[playerid][pHouse];// variabila playerului de casa pentur a putea folosi comanda
        if(house == 0) return SCM(playerid, COLOR_LIGHTRED, "You don t have a house.");
        for(new h = 1; h <= GarageNum; h++)// vom face o verificare peste toate garajele de pe server si vom vedea daca playerul se afla la intrarea acestuia
        {
            if(PlayerToPoint(5.0, playerid, GarageVariable[h][gX],GarageVariable[h][gY],GarageVariable[h][gZ]))
            g = h;// vom seta variaibla idul garqjului la care se afla playerul
        }
        if(GetPlayerVirtualWorld(playerid)==0)
         {
            if(g==-1) return 1;//daca variabila este -1 adica default inseamna ca nu este langa un garaj
            if(GarageVariable[g][gHouse] != house) return SCM(playerid,COLOR_LIGHTRED,"This garage is not yours");// verificam daca garajul apartine casei playerului
             if (GetPlayerState(playerid) == 2)//daca playerul este in masina
            {
                    new tmpcar = GetPlayerVehicleID(playerid);
                    SetVehiclePos(tmpcar, 1302.519897,-1.787510,1001.028259);//pozitia de garaj care am gasito eu
                    SetPlayerInterior(playerid,1);// interiorul grajului
                    LinkVehicleToInterior(tmpcar,1);//setam interiorul masinii
                    SetVehicleVirtualWorld(tmpcar, g);//setam virtual worldul garajului pentru a sti unde sa iesim
                    SetPlayerVirtualWorld(playerid,g);//la fel si pentru masina pentru a putea fi vazuta de playeri
                    PutPlayerInVehicle(playerid, tmpcar, 0);//punem playerul inapoi ca sofer in masina
                    SCM(playerid, COLOR_GRAD1, "Bun venit in garaj.");//trimitem un mesaj de bun venit

            }
            else//daca playerul este pe jos
            {
                SetPlayerPos(playerid, 1302.519897,-1.787510,1001.028259);
                SetPlayerVirtualWorld(playerid,g);
                SetPlayerInterior(playerid,1);// interiorul grajului
                SCM(playerid, COLOR_GRAD1, "Bun venit in garaj.");
              }
        }
        else
        {
            if(IsPlayerInRangeOfPoint(playerid,20,1302.519897,-1.787510,1001.028259))//coordonatele interiorului
              {
                if (GetPlayerState(playerid) == 2)
                {
                    new tmpcar = GetPlayerVehicleID(playerid);
                    SetVehiclePos(tmpcar, GarageVariable[GetPlayerVirtualWorld(playerid)][gX],GarageVariable[GetPlayerVirtualWorld(playerid)][gY],GarageVariable[GetPlayerVirtualWorld(playerid)][gZ]);// setam pozitia la coordonatele garajului care are idul egal cu virtual worldul playerului
                    SetVehicleVirtualWorld(tmpcar, 0);
                    LinkVehicleToInterior(tmpcar,0);
                    SetPlayerInterior(playerid,0);
                    SetPlayerVirtualWorld(playerid,0);
                    PutPlayerInVehicle(playerid, tmpcar, 0);
                }
                else
                {
                    SetPlayerPos(playerid, GarageVariable[GetPlayerVirtualWorld(playerid)][gX],GarageVariable[GetPlayerVirtualWorld(playerid)][gY],GarageVariable[GetPlayerVirtualWorld(playerid)][gZ]);
                    SetPlayerVirtualWorld(playerid,0);
                    SetPlayerInterior(playerid,0);
                }
            }
        }
        return 1;
    }

     

     

    Comanda de creat

    Quote

    CMD:gcreate(playerid, params[])
    {
        if(PlayerInfo[playerid][pAdmin] < 😎 SCM(playerid, -1,"You don t have acces");// restrictia pentru admini daca aveti diferit veti schimba cum aveti voi in gm
        new house;
        if(sscanf(params, "d", house)) return SCM(playerid,COLOR_WHITE,"Folosire: /gcreate <houseid>");//se va scrie gcreate si idul casei care va fi asociat garajului
                                            
        new Query[256],Float:X,Float:Y,Float:Z;
        GetPlayerPos(playerid,X,Y,Z);// vom crea garagul la pozitia curenta de unde sa foloseste comanda
        mysql_format(SQL, Query, sizeof(Query), "INSERT INTO `garages` (`X`, `Y`, `Z`,`House`) VALUES ('%f', '%f', '%f', '%d')",
        X,Y,Z,house);
        new Cache:result = mysql_query(SQL, Query);
        GarageNum++;// vom creste numarul de garaje pe server
                                            new i = cache_insert_id();// acum vom genera idul din baza de date care nu este important in joc si nu afecteaza cu nimic, este doar pentru baza de date pentru a crea o ordine
        cache_delete(result);
        GarageVariable[gID] = i;
        GarageVariable[gX] = X;
        GarageVariable[gY] = Y;
        GarageVariable[gZ] = Z;
        GarageVariable[gHouse] = house;
        DestroyDynamic3DTextLabel(GarageLabel);
        format(Query, sizeof(Query),"{FFFFFF}Garaj nr. %d\nOwner %s",i,HouseInfo[GarageVariable[gHouse]][hOwner]);
        GarageLabel = CreateDynamic3DTextLabel(Query ,0x0066FFFF,GarageVariable[gX], GarageVariable[gY], GarageVariable[gZ],25, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100.0);
        
        
        format(Query, sizeof(Query), "Garaj creat cu succes. ID %d, coordonate (%f, %f, %f), casa %d.", i, X,Y,Z, house);
        SCM(playerid, COLOR_WHITE, Query);
        return 1;
    }


    Comanda pentru distrus garajul

    Quote

     

    CMD:destroygarage(playerid, params[])
    {
        if(PlayerInfo[playerid][pAdmin] < 7) SCM(playerid, -1,"Admin to low");
        new i;
        if(sscanf(params, "d", i)) return SCM(playerid,COLOR_WHITE,"folosire /destroygarage <id>");
        new Query[200];
        GarageVariable[gX] = 0;
        GarageVariable[gY] = 0;
        GarageVariable[gZ] = 0;
        GarageVariable[gHouse] = 0;

        format(Query, sizeof(Query), "DELETE FROM  `garages` WHERE `ID`='%d'", i);
        mysql_query(SQL ,Query);
        DestroyDynamic3DTextLabel(GarageLabel);
        SCM(playerid, COLOR_GOLD, "Garage destroyed");
        return 1;
    }

     

     

    Comanda pentru mutat garajul

    Quote

    CMD:movegarage(playerid, params[])
    {
        if(PlayerInfo[playerid][pAdmin] < 7) SCM(playerid, -1,"Admin to low");
        new i;
        if(sscanf(params, "d", i)) return SCM(playerid,COLOR_WHITE,"folosire: /garagepos <id>");
        new Query[200],Float:X,Float:Y,Float:Z;
        GetPlayerPos(playerid,X,Y,Z);
        GarageVariable[gX] = X;
        GarageVariable[gY] = Y;
        GarageVariable[gZ] = Z;
        format(Query, sizeof(Query), "UPDATE `garages` SET `X`='%f',`Y`='%f',`Z`='%f' WHERE `ID`='%d'",GarageVariable[gX],GarageVariable[gY],GarageVariable[gZ], i);
        mysql_query(SQL ,Query);
        DestroyDynamic3DTextLabel(GarageLabel);
        format(Query, sizeof(Query),"{FFFFFF}Garaj nr. %d\nOwner %s",i,HouseInfo[GarageVariable[gHouse]][hOwner]);
        GarageLabel = CreateDynamic3DTextLabel(Query ,0x0066FFFF,GarageVariable[gX], GarageVariable[gY], GarageVariable[gZ],25, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100.0);
        SCM(playerid, COLOR_GOLD, "Garage moved");
        return 1;
    }

     

    Si mai sunt 2 scripturi de adaugat la comenzile de cumparat si vandut casa

    Quote

    for(new g=1; g<= GarageNum; g++)
                {
                    if(GarageVariable[g][gHouse]==house)
                    {
                        DestroyDynamic3DTextLabel(GarageLabel[g]);
                        format(Query, sizeof(Query),"{FFFFFF}Garaj nr. %d\nOwner %s",g,HouseInfo[GarageVariable[g][gHouse]][hOwner]);
                        GarageLabel[g] = CreateDynamic3DTextLabel(Query ,0x0066FFFF,GarageVariable[g][gX], GarageVariable[g][gY], GarageVariable[g][gZ],25, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100.0);
                    }
                }


                
     Pentru ori ce nelamurire astept un PM .

    Atentie tutorial creat 100% de DuTzUuBv. 

    • Love 1

  3. Salutare, azi am sa va prezint cum sa faceti un tutorial register/login mysql R39.
    Mai intai o sa va trebuiasca pluginul si includeul mysql care ip puteti gasi http://www.girlshare.ro/3769849578!
    Mai intai o sa punem la inceputul GM-ului include-ul mysql.

     

    Quote

    #include <a_mysql>

     

    * Acum o sa definim datele de conectare

    Quote

    #define mysql_host "localhost" // aici punem ip hostului. Daca folosim in PC GM lasam localhost
    #define mysql_db "bazadate"// aici punem numele bazei de date.
    #define mysql_user "root"// aici punem numele userului de la host. Daca folositi PC lasati root.
    #define mysql_pass ""//Aici puneti parola de la host(de la phpmyadmin al hostului). In caz de folositi PC lasati asa.

     

    *  Vom crea 2 Enum-uri. Unul cu dialogurile de register/login si altul cu datele pe care le va avea playerul

    Quote

     

    enum
    {
        DIALOG_LOGIN, // dialogul de login
        DIALOG_REGISTER// dialogul de register
    };

    enum pInfo //numele enumului este pInfo. in el vom pune datele playerului gen Admin/Level/ Money/Experianta si altele.
    {
        pParola,//cu pParola vom lua parola din baza de date a playerului
        pID// cu pID vom lua ID-ul din baza de date a playerului
    };

    new P_Data[MAX_PLAYERS][pInfo];// Aceasta variabila este array. cu ea vom verifica 2 lucruri. id playerului si datele lui gen P_Data[playerid][pID] == 1;

     

     

    *  Vom crea acum un new care ne va ajuta sa conectam datele de conectarea cu baza de date

    Quote

    new handle; // handle(mâner) este cea de care ne vom folosi sa facem lagatura intre baza de date si server 

     

    * Acum vom crea legatura intre baza de date si server.

    Quote

     

    forward MySQLConnect();// se creaza un nou callback cu forward
    public MySQLConnect()// se face callback-ul
    {
        handle = mysql_connect(mysql_host, mysql_user, mysql_db, mysql_pass);// definim handle(manerul) ca fiind conectarea mysql la host, baza de date, parola si user-ul
        if(mysql_errno() != 0)// in caz ca aceasta va fi diferita de 0(0 inseamna ca e conectat, 1 inseamna ca nu e conectat , fiind un vector)
        {
            printf("Conexiunea la baza de date %s a esuat ---> Server Inchis ~~~", mysql_db);// va trimite un mesaj in consola
            SendRconCommand("exit");// se inchide serverul
        }
        else// altfel daca este 0(daca se face legatura)
        {
            printf("Conexiunea la baza de date '%s' cu user-ul '%s' a reusit!!!", mysql_db, mysql_user);// ne va da acest mesaj in consola
        }
        return 1;
    }

    Callback-ul MySQLConnect se va pune la OnGameModeInit pentru a fi finalizata conectarea la baza de date.

    public OnGameModeInit()
    {
        MySQLConnect();
        return 1;
    }

     

     

    *  Se va crea un stock simplu cu care vom selecta numele playerului

    Quote

     

    stock GetName(playerid)
    {
        new Name[MAX_PLAYER_NAME];

        GetPlayerName(playerid, Name, sizeof(Name));
        return Name;
    }

     

     

    * Acum vom se va crea un nou callback , la care vom apela cand playerul se conecteaza. El va arata daca are cont sau nu.

    Quote

    forward OnPlayerLogin(playerid);// se creaza callbac-ul
    public OnPlayerLogin(playerid)//Se creaza publicul
    {
        new rows, fields;// definim rows(randurile)si fields(domeniile)
        cache_get_data(rows, fields);//cache_get_data interogheaza date din baza de date. acele date sunt rows si fields
        if(rows)// atunci cand playerul se inregistreaza i se va crea niste randuri. Daca i se gasesc atunci cand se va conecta ii va da:
        {
            ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logheaza-te!", "Te rog sa-ti introduci parola contuului mai jos!", "Logare", "Exit");// dialogul register
        }
        else// daca nu i se gasesc randuri, adica daca contul nu exista, atunci i se va da urmatorul dialog
        {
            ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Inregistrare", "Trebuie sa iti creezi un cont ca sa joci pe server. nTasteaza mai jos o parola, pentru a te inregistra!", "Inregistreaza", "Exit");// dialogul register
        }
        return 1;
    }

     

    * Acum vom se va crea un nou callback , la care vom apela cand playerul se conecteaza. El va arata daca are cont sau nu.

    Quote

    public OnPlayerConnect(playerid)
    {
        new query[100];// definim query(interogare)
        mysql_format(handle, query, sizeof(query), "SELECT * FROM conturi WHERE Nume = '%s'", GetName(playerid));// mysql format face interogarile/setarile/obtiunile/updateurile la baza de date
        //handle reprezinta conectarea la mysql, query si sizeof(queri) reprezinta interogarea
        //"SELECT * FROM conturi WHERE Nume = '%s'"- Selecteaza de la tabelul cu conturi, unde numele este %s(de exemplu eu am numele Widualk pe sa-mp. Mi se va extrage numele si
        mysql_tquery(handle, query, "OnPlayerLogin", "i", playerid);// se va interoga OnPlayerLogin. Adica mai pe scurt , cand se conecteaza se va verifica daca are cont sau nu acel player.
        return 1;
    }

     

    * Acum ca am terminat cu callback-urile de la conectare, vom crea dialogurile.

    Quote

     

    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
        new query[128], ip[25];// se creaza interogarea si ip.
        switch(dialogid)// se va folosi switch pentru a selecta dialogul
        {
            case DIALOG_REGISTER:// daca se va selecta dialogul register
            {
                if(!response)
                        return Kick(playerid);// daca se va apasa pe butonul Exit ii va da kick
                if(response)// daca se apasa pe Butonul inregistrare se vor face urmatoarele verificari
                {
                    if(!strlen(inputtext))// daca nu e scris nimic la parola
                            return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Introdu-ti o parola pentru a te inregistra pe server! n", "Inregistreaza", "Exit");// ii va da din nou dialogul register cu mesajul specific

                    GetPlayerIp(playerid, ip, sizeof(ip));// definim ip-ul de mai sus
                    mysql_format(handle, query, sizeof(query), "INSERT INTO conturi (Nume, Parola, IP) VALUES ('%s', '%e', '%s')", GetName(playerid), inputtext, ip);// se insereaza in tabelul cu conturi numele playerului, parola pe care a scris-o si ip pe care il are
                    mysql_query(handle, query);// se va trimite setarile si se va interoga callback-ul OnRegistration
                    SpawnPlayer(playerid); // ii da spawn
                }
                return 1;
            }
            case DIALOG_LOGIN:// daca se va selecta dialogul de login
            {
                if(!response) return Kick(playerid);// si se va apasa pe butonul exit ii va da kick
                if(response)//daca se apasa pe butonul LOGARE se va face urmatoarele verificari
                {
                    if(!strlen(inputtext))// daca nu a scris nimic la parola
                            return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Te rog sa iti introduci parola corecta, pentru a te loga pe server.", "Logare", "Exit");// ii va da dialogul cu login cu mesajul specific
                    // daca se va trece peste aceasta verificare se vor face urmatoarele:
                    mysql_format(handle, query, sizeof(query), "SELECT * FROM `conturi` WHERE `Nume`='%e' AND `Parola` = '%e'", GetName(playerid),inputtext);// va fi selectata parola de la tabelul cu conturi
    mysql_tquery(handle, query, "OnLogin", "i", playerid);// se va face apel la baza si se va interoga CallBackUl OnLogin (Tquery = take query sau ia interogare in romana)
                }
                return 1;
            }
        }
        return 1;
    }

     

     

    * Acum , ca am facut dialogurile , vom crea calback-urile care se interogheaza la dialogurile de mai sus.
    Vom crea callback-ul pentrul dialogul de register.
     
    * Acum , vom crea callback-ul la care apeleaza dialogul de login

    Quote

     

    forward OnLogin(playerid);// definim callback ul
    public OnLogin(playerid)// facem publicul
    {
        new rows, fields,temporar[200];// definim randurile si domeniile, iar temporar se va folosi la extragerea stringurilor
        cache_get_data(rows, fields);// facem interogarea lor
        if(rows)// daca playerul are randuri(adica daca are cont creat, odata cu contul se creeaza randurile)
        {
            //deci daca are randuri
            cache_get_field_content(0, "Parola",temporar), format(P_Data[playerid][pParola], 25, temporar);// i se vaextrage parola si i se verifica daca coincide cu numele. Se foloseste new-ul temporar pentru extragerea parolei, ea retinandu-se temporar(pana cand se deconecteaza jucatorul)
            P_Data[playerid][pID] = cache_get_field_content_int(0, "ID");// i se vaextrage ip-ul
            //un exemplu ar fi , daca are Admin , va fi ceva de genu P_Data[playerid][pAdmin] = cache_get_field_content_int(0,"Admin)"; i se va extrage din baza de date levelul de admin si i se va returna pe server, mai precis, cand se conecteaza are levelul de admin , care i-a fost setat de owner
            SpawnPlayer(playerid);// si se va da spawn
        }
        else// altfel , daca parola este gresita
        {
            ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Te rog sa iti introduci parola corecta, pentru a te loga pe server.", "Logare", "Exit");// ii va da dialogul cu mesajul specific.
        }
        return 1;
    }

    Iar la final punem la OnGameModeExit();

    public OnGameModeExit()
    {
        mysql_close( handle ) ;// deconectam serverul de la baza de date, daca se inchide
        return 1;
    }

     

     

    * Acum , o sa recapitulam.
    Playerul are nevoie de ID, Nume, Parola si IP, deci 4 coloane in tabel.
    * Tabelul se numeste "conturi", deoarece interogarea se face acolo "mysql_format(handle, query, sizeof(query), "SELECT * FROM conturi"-conturi este tabelul unde vor aparea ID ,Nume, Parola, IP
    * Baza de date se numeste "bazadate" din: #define mysql_db "bazadate"
     
    * O sa va arat acum cum se creaza tabelul.
    Pasul 1. Definim baza de date cu numele "basedate":

     

    Quote

     

    Pasul 2: Se selecteaza noua baza

     

    Quote

     

    Pasul 3: Se creaza tabelul cu cele 4 coloane:

     

    Quote

     

    La tip    INT = intenger= numar de cifre.
                 Varchar = string = sir de caractere(litere)
    la Lungimea / setare se selecteaza cat spatiu se acorda, adica cate caractere incap maxim in acel tabel
     la id va fi maxim 9999999999(sun 10 cifre consecutive de "9", adica acel numar va fi maximul de playeri care pot avea cont)
     la nume, se va putea salva doar numele care contine doar 25 de caractere(adica daca numele depaseste 25 litere, doar primele 25 se vor salva)
    la interclasare la Varchar , mereu sa puneti latin1_sweadich_ci, de ce, asta nu pot spune nici eu , dar , stiu ca asa trebuie
    La ID tot timpul sa bifati casuta "A_I(auto Increment)" care va genera singur id-ul, altfel nu va merge tabelul conturi
     
    Asa ar trebui sa va arata , atunci cand va inregistrati:
    nRYTl9R.jpg?1%5C

     

     Pentru ori ce nelamurire astept un PM .

     

    Atentie tutorial creat 100% de DuTzUuBv. Nerespectarea creditelor va duce la sanctiuni!

    • Love 1

  4. Salutare tuturor, astazi o sa va arat cum se creeaza un sistem de pin.Am creeat acest sistem si la-m testat singur si cred ca ar ajuta pe alti membri sa il foloseasca.

     

    Pasul I: Structura

    -Prima data va trebuie sa punem variabila pinului:

    Quote

    pPin//Aceasta este o variabila la fel ca celelalte : pAdmin,pHelper etc.

    Apasam tasta CTRL+F si cautam pAdmin sau orice altceva care face parte din PlayerData/PlayerInfo sau cum aveti voi.
    Unii folosesc direct metoda de update in baza de date:

    Quote

    //Pun sub enum-ul de la PlayerInfo:
    enum
    {
        pPinu// ATENTIE!!Nu este pPin ci este pPinu, trebuie sa difere de variabila de la PlayerInfo.Mai puteti pune si pPinx, cum doriti.
    };
    //Apoi punem la inceputul gm-ului:
    forward Update(playerid, type);
    //Mergem oriunde in gm si punem:
    public Update(playerid, type)//de Update(); ne vom folosi mai tarziu, v-eti intelege.
    {
        if(IsPlayerConnected(playerid))
        {
            new string[256];//aici creem un string, sau putem pune query in loc de string.
            new playerName[MAX_PLAYER_NAME];
            GetPlayerName(playerid, playerName, sizeof(playerName));//Aici cautam numele playerului in cauza.
            {
                switch(type)
                {
                    case pPinu:
                    {
                        mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `Pin`='%d' WHERE `Nume`='%s'", PlayerData[playerid][pPin],playerName);//Aici se va face introducerea in baza de date.
                        mysql_query(handle, string);
                    }
                }
            }
        }
    }

    Acum cand vom avea nevoie sa facem update la pin(sa facem introducerea in baza de date pentru cei care nu inteleg)vom pune:

    Quote

    Update(playerid, pPinu);//Se actioneaza collback-ul si se face update in baza de date, fara sa mai scriem altceva in plus

    -Bun, apoi va trebui sa facem extragerea Pinului din baza de date:-Mergem la public OnLogin/OnPlayerLogin/WhenPlayerLogin depinde cum aveti voi si punem:

    Quote

    PlayerData[playerid][pPin] = cache_get_field_content_int(0, "Pin");//Aici vom extrage din baza de date pin-ul playerului in cauza.

    -Bun acum structura este gata.

    Pasul II: Textdraw-urile

    -Eu am deja facute textdraw-urile, dar daca voi vreti altele puteti face cu ipleomax./

    Quote

     

    /Astea trebuie puse la inceputul Gm-ului, definim textdraw-urile.
    new Text:PinBox[3][MAX_PLAYERS];
    new Text:PinClose[2][MAX_PLAYERS];
    new Text:PinVerde[MAX_PLAYERS];
    new Text:PinRosu[MAX_PLAYERS];
    new Text:PinCifra[10][MAX_PLAYERS];
    new Text:PinText[MAX_PLAYERS];
    new numberab[MAX_PLAYERS][5];//asta va fi pentru cifre
    //Apoi, mergem la publicul OnPlayerConnect si punem textdraw-urile:
        PinBox[0][playerid] = TextDrawCreate(393.999969, 132.913330, "usebox");
        TextDrawLetterSize(PinBox[0][playerid], 0.000000, 26.618642);
        TextDrawTextSize(PinBox[0][playerid], 235.777816, 0.000000);
        TextDrawAlignment(PinBox[0][playerid], 1);
        TextDrawColor(PinBox[0][playerid], 0);
        TextDrawUseBox(PinBox[0][playerid], true);
        TextDrawBoxColor(PinBox[0][playerid], 102);
        TextDrawSetShadow(PinBox[0][playerid], 0);
        TextDrawSetOutline(PinBox[0][playerid], 0);
        TextDrawFont(PinBox[0][playerid], 0);

        PinBox[1][playerid] = TextDrawCreate(386.444427, 141.375549, "usebox");
        TextDrawLetterSize(PinBox[1][playerid], 0.000000, 24.904077);
        TextDrawTextSize(PinBox[1][playerid], 242.000000, 0.000000);
        TextDrawAlignment(PinBox[1][playerid], 1);
        TextDrawColor(PinBox[1][playerid], 0);
        TextDrawUseBox(PinBox[1][playerid], true);
        TextDrawBoxColor(PinBox[1][playerid], 102);
        TextDrawSetShadow(PinBox[1][playerid], 0);
        TextDrawSetOutline(PinBox[1][playerid], 0);
        TextDrawFont(PinBox[1][playerid], 0);

        PinBox[2][playerid] = TextDrawCreate(386.000000, 141.375549, "usebox");
        TextDrawLetterSize(PinBox[2][playerid], 0.000000, 5.767285);
        TextDrawTextSize(PinBox[2][playerid], 242.444442, 0.000000);
        TextDrawAlignment(PinBox[2][playerid], 1);
        TextDrawColor(PinBox[2][playerid], 0);
        TextDrawUseBox(PinBox[2][playerid], true);
        TextDrawBoxColor(PinBox[2][playerid], -2139094785);
        TextDrawSetShadow(PinBox[2][playerid], 0);
        TextDrawSetOutline(PinBox[2][playerid], 0);
        TextDrawFont(PinBox[2][playerid], 0);

        PinClose[0][playerid] = TextDrawCreate(376.888885, 130.915557, "LD_POOL:BALL");
        TextDrawLetterSize(PinClose[0][playerid], 0.000000, 0.000000);
        TextDrawTextSize(PinClose[0][playerid], 15.111114, 16.924453);
        TextDrawAlignment(PinClose[0][playerid], 1);
        TextDrawColor(PinClose[0][playerid], -1);
        TextDrawSetShadow(PinClose[0][playerid], 0);
        TextDrawSetOutline(PinClose[0][playerid], 0);
        TextDrawFont(PinClose[0][playerid], 4);

        PinClose[1][playerid] = TextDrawCreate(385.333374, 131.911132, "X");
        TextDrawLetterSize(PinClose[1][playerid], 0.454444, 1.624888);
        TextDrawTextSize(PinClose[1][playerid], 10.000000, 10.000000);
        TextDrawAlignment(PinClose[1][playerid], 2);
        TextDrawColor(PinClose[1][playerid], -2147483393);
        TextDrawSetShadow(PinClose[1][playerid], 0);
        TextDrawSetOutline(PinClose[1][playerid], 1);
        TextDrawBackgroundColor(PinClose[1][playerid], 51);
        TextDrawFont(PinClose[1][playerid], 2);
        TextDrawSetProportional(PinClose[1][playerid], 1);
        TextDrawSetSelectable(PinClose[1][playerid], true);

        PinVerde[playerid] = TextDrawCreate(272.888916, 341.475646, "OK");
        TextDrawLetterSize(PinVerde[playerid], 0.501111, 1.500444);
        TextDrawTextSize(PinVerde[playerid], 10.000000, 10.000000);
        TextDrawAlignment(PinVerde[playerid], 2);
        TextDrawColor(PinVerde[playerid], 16711935);
        TextDrawSetShadow(PinVerde[playerid], 0);
        TextDrawSetOutline(PinVerde[playerid], 1);
        TextDrawBackgroundColor(PinVerde[playerid], 51);
        TextDrawFont(PinVerde[playerid], 3);
        TextDrawSetProportional(PinVerde[playerid], 1);
        TextDrawSetSelectable(PinVerde[playerid], true);

        PinRosu[playerid] = TextDrawCreate(355.555572, 341.475646, "DEL");
        TextDrawLetterSize(PinRosu[playerid], 0.345555, 1.600000);
        TextDrawTextSize(PinRosu[playerid], 10.000000, 10.000000);
        TextDrawAlignment(PinRosu[playerid], 2);
        TextDrawColor(PinRosu[playerid], -16776961);
        TextDrawSetShadow(PinRosu[playerid], 0);
        TextDrawSetOutline(PinRosu[playerid], 1);
        TextDrawBackgroundColor(PinRosu[playerid], 51);
        TextDrawFont(PinRosu[playerid], 3);
        TextDrawSetProportional(PinRosu[playerid], 1);
        TextDrawSetSelectable(PinRosu[playerid], true);    PinCifra[0][playerid] = TextDrawCreate(315.999908, 341.475646, "0");
        TextDrawLetterSize(PinCifra[0][playerid], 0.449999, 1.600000);
        TextDrawTextSize(PinCifra[0][playerid], 10.000000, 10.000000);
        TextDrawAlignment(PinCifra[0][playerid], 2);
        TextDrawColor(PinCifra[0][playerid], -1);
        TextDrawSetShadow(PinCifra[0][playerid], 0);
        TextDrawSetOutlin

    dColor(PinCifra[0][playerid], 51);
        TextDrawFont(PinCifra[0][playerid], 3);
        TextDrawSetProportional(PinCifra[0][playerid], 1);
        TextDrawSetSelectable(PinCifra[0][playerid], true);

        PinCifra[1][playerid]

    e(PinCifra[0][playerid], 1);
        TextDrawBackgroun= TextDrawCreate(264.444335, 207.573303, "1");
        TextDrawLetterSize(PinCifra[1][playerid], 0.449999, 1.600000);
        TextDrawTextSize(PinCifra[1][playerid], 10.000000, 10.000000);
        TextDrawAlignment(PinCifra[1][playerid], 2);
        TextDrawColor(PinCifra[1][playerid], -1);
        TextDrawSetShadow(PinCifra[1][playerid], 0);
        TextDrawSetOutline(PinCifra[1][playerid], 1);
        TextDrawBackgroundColor(PinCifra[1][playerid], 51);
        TextDrawFont(PinCifra[1][playerid], 3);
        TextDrawSetProportional(PinCifra[1][playerid], 1);
        TextDrawSetSelectable(PinCifra[1][playerid], true);

        PinCifra[2][playerid] = TextDrawCreate(316.444396, 207.573318, "2");
        TextDrawLetterSize(PinCifra[2][playerid], 0.449999, 1.600000);
        TextDrawTextSize(PinCifra[2][playerid], 10.000000, 10.000000);
        TextDrawAlignment(PinCifra[2][playerid], 2);
        TextDrawColor(PinCifra[2][playerid], -1);
        TextDrawSetShadow(PinCifra[2][playerid], 0);
        TextDrawSetOutline(PinCifra[2][playerid], 1);
        TextDrawBackgroundColor(PinCifra[2][playerid], 51);
        TextDrawFont(PinCifra[2][playerid], 3);
        TextDrawSetProportional(PinCifra[2][playerid], 1);
        TextDrawSetSelectable(PinCifra[2][playerid], true);

        PinCifra[3][playerid] = TextDrawCreate(359.999908, 209.066650, "3");
        TextDrawLetterSize(PinCifra[3][playerid], 0.449999, 1.600000);
        TextDrawTextSize(PinCifra[3][playerid], 10.000000, 10.000000);
        TextDrawAlignment(PinCifra[3][playerid], 2);
        TextDrawColor(PinCifra[3][playerid], -1);
        TextDrawSetShadow(PinCifra[3][playerid], 0);
        TextDrawSetOutline(PinCifra[3][playerid], 1);
        TextDrawBackgroundColor(PinCifra[3][playerid], 51);
        TextDrawFont(PinCifra[3][playerid], 3);
        TextDrawSetProportional(PinCifra[3][playerid], 1);
        TextDrawSetSelectable(PinCifra[3][playerid], true);

        PinCifra[4][playerid] = TextDrawCreate(264.888824, 249.386657, "4");
        TextDrawLetterSize(PinCifra[4][playerid], 0.449999, 1.600000);
        TextDrawTextSize(PinCifra[4][playerid], 10.000000, 10.000000);
        TextDrawAlignment(PinCifra[4][playerid], 2);
        TextDrawColor(PinCifra[4][playerid], -1);
        TextDrawSetShadow(PinCifra[4][playerid], 0);
        TextDrawSetOutline(PinCifra[4][playerid], 1);
        TextDrawBackgroundColor(PinCifra[4][playerid], 51);
        TextDrawFont(PinCifra[4][playerid], 3);
        TextDrawSetProportional(PinCifra[4][playerid], 1);
        TextDrawSetSelectable(PinCifra[4][playerid], true);

        PinCifra[5][playerid] = TextDrawCreate(315.111053, 249.386627, "5");
        TextDrawLetterSize(PinCifra[5][playerid], 0.449999, 1.600000);
        TextDrawTextSize(PinCifra[5][playerid], 10.000000, 10.000000);
        TextDrawAlignment(PinCifra[5][playerid], 2);
        TextDrawColor(PinCifra[5][playerid], -1);
        TextDrawSetShadow(PinCifra[5][playerid], 0);
        TextDrawSetOutline(PinCifra[5][playerid], 1);
        TextDrawBackgroundColor(PinCifra[5][playerid], 51);
        TextDrawFont(PinCifra[5][playerid], 3);
        TextDrawSetProportional(PinCifra[5][playerid], 1);
        TextDrawSetSelectable(PinCifra[5][playerid], true);

        PinCifra[6][playerid] = TextDrawCreate(360.888793, 249.884399, "6");
        TextDrawLetterSize(PinCifra[6][playerid], 0.449999, 1.600000);
        TextDrawTextSize(PinCifra[6][playerid], 10.000000, 10.000000);
        TextDrawAlignment(PinCifra[6][playerid], 2);
        TextDrawColor(PinCifra[6][playerid], -1);
        TextDrawSetShadow(PinCifra[6][playerid], 0);
        TextDrawSetOutline(PinCifra[6][playerid], 1);
        TextDrawBackgroundColor(PinCifra[6][playerid], 51);
        TextDrawFont(PinCifra[6][playerid], 3);
        TextDrawSetProportional(PinCifra[6][playerid], 1);
        TextDrawSetSelectable(PinCifra[6][playerid], true);

        PinCifra[7][playerid] = TextDrawCreate(264.888824, 291.697784, "7");
        TextDrawLetterSize(PinCifra[7][playerid], 0.449999, 1.600000);
        TextDrawTextSize(PinCifra[7][playerid], 10.000000, 10.000000);
        TextDrawAlignment(PinCifra[7][playerid], 2);
        TextDrawColor(PinCifra[7][playerid], -1);
        TextDrawSetShadow(PinCifra[7][playerid], 0);
        TextDrawSetOutline(PinCifra[7][playerid], 1);
        TextDrawBackgroundColor(PinCifra[7][playerid], 51);
        TextDrawFont(PinCifra[7][playerid], 3);
        TextDrawSetProportional(PinCifra[7][playerid], 1);
        TextDrawSetSelectable(PinCifra[7][playerid], true);

        PinCifra[8][playerid] = TextDrawCreate(313.777709, 291.697723, "8");
        TextDrawLetterSize(PinCifra[8][playerid], 0.449999, 1.600000);
        TextDrawTextSize(PinCifra[8][playerid], 10.000000, 10.000000);
        TextDrawAlignment(PinCifra[8][playerid], 2);
        TextDrawColor(PinCifra[8][playerid], -1);
        TextDrawSetShadow(PinCifra[8][playerid], 0);
        TextDrawSetOutline(PinCifra[8][playerid], 1);
        TextDrawBackgroundColor(PinCifra[8][playerid], 51);
        TextDrawFont(PinCifra[8][playerid], 3);
        TextDrawSetProportional(PinCifra[8][playerid], 1);
        TextDrawSetSelectable(PinCifra[8][playerid], true);

        PinCifra[9][playerid] = TextDrawCreate(361.333251, 291.199951, "9");
        TextDrawLetterSize(PinCifra[9][playerid], 0.449999, 1.600000);
        TextDrawTextSize(PinCifra[9][playerid], 10.000000, 10.000000);
        TextDrawAlignment(PinCifra[9][playerid], 2);
        TextDrawColor(PinCifra[9][playerid], -1);
        TextDrawSetShadow(PinCifra[9][playerid], 0);
        TextDrawSetOutline(PinCifra[9][playerid], 1);
        TextDrawBackgroundColor(PinCifra[9][playerid], 51);
        TextDrawFont(PinCifra[9][playerid], 3);
        TextDrawSetProportional(PinCifra[9][playerid], 1);
        TextDrawSetSelectable(PinCifra[9][playerid], true);

        PinText[playerid] = TextDrawCreate(310.222320, 159.288879, "_");
        TextDrawLetterSize(PinText[playerid], 0.449999, 1.600000);
        TextDrawAlignment(PinText[playerid], 2);
        TextDrawColor(PinText[playerid], -1378294017);
        TextDrawSetShadow(PinText[playerid], 0);
        TextDrawSetOutline(PinText[playerid], 0);
        TextDrawBackgroundColor(PinText[playerid], 51);
        TextDrawFont(PinText[playerid], 1);
        TextDrawSetProportional(PinText[playerid], 1);

     


    -Am create structura, am introdus textdra-urile acum ce face?

    -Le facem functionale://Cautam publicul OnPlayerClickTextDraw, este posibil sa nu il aveti dar il copiati:

    Quote

     

    public OnPlayerClickTextDraw(playerid, Text:clickedid)
    {
        if(clickedid == PinClose[1][playerid])
        {
               TextDrawHideForPlayer(playerid,PinBox[0][playerid]);
            TextDrawHideForPlayer(playerid,PinBox[1][playerid]);
            TextDrawHideForPlayer(playerid,PinBox[2][playerid]);
            TextDrawHideForPlayer(playerid,PinVerde[playerid]);
            TextDrawHideForPlayer(playerid,PinRosu[playerid]);
            TextDrawHideForPlayer(playerid,PinCifra[0][playerid]);
            TextDrawHideForPlayer(playerid,PinCifra[1][playerid]);
            TextDrawHideForPlayer(playerid,PinCifra[2][playerid]);
            TextDrawHideForPlayer(playerid,PinCifra[3][playerid]);
            TextDrawHideForPlayer(playerid,PinCifra[4][playerid]);
            TextDrawHideForPlayer(playerid,PinCifra[5][playerid]);
            TextDrawHideForPlayer(playerid,PinCifra[6][playerid]);
            TextDrawHideForPlayer(playerid,PinCifra[7][playerid]);
            TextDrawHideForPlayer(playerid,PinCifra[8][playerid]);
            TextDrawHideForPlayer(playerid,PinCifra[9][playerid]);
            TextDrawHideForPlayer(playerid,PinClose[0][playerid]);
            TextDrawHideForPlayer(playerid,PinClose[1][playerid]);
            TextDrawHideForPlayer(playerid,PinText[playerid]);
            CancelSelectTextDraw(playerid);
            TogglePlayerControllable(playerid, 1);
            new string[12];
            format(string, 32,"____");
            TextDrawSetString(PinText[playerid], string);
        }
        if(clickedid == PinCifra[0][playerid])
        {
            strcat(numberab[playerid],"0");//aici se adauga pe rand cate o cifra la fel si la restul.
            TextDrawSetString(PinText[playerid],numberab[playerid]);
        }
        if(clickedid == PinCifra[1][playerid])
        {
            strcat(numberab[playerid],"1");
            TextDrawSetString(PinText[playerid],numberab[playerid]);
        }
        if(clickedid == PinCifra[2][playerid])
        {
            strcat(numberab[playerid],"2");
            TextDrawSetString(PinText[playerid],numberab[playerid]);
        }
        if(clickedid == PinCifra[3][playerid])
        {
            strcat(numberab[playerid],"3");
            TextDrawSetString(PinText[playerid],numberab[playerid]);
        }
        if(clickedid == PinCifra[4][playerid])
        {
            strcat(numberab[playerid],"4");
            TextDrawSetString(PinText[playerid],numberab[playerid]);
        }
        if(clickedid == PinCifra[5][playerid])
        {
            strcat(numberab[playerid],"5");
            TextDrawSetString(PinText[playerid],numberab[playerid]);
        }
        if(clickedid == PinCifra[6][playerid])
        {
            strcat(numberab[playerid],"6");
            TextDrawSetString(PinText[playerid],numberab[playerid]);
        }
        if(clickedid == PinCifra[7][playerid])
        {
            strcat(numberab[playerid],"7");
            TextDrawSetString(PinText[playerid],numberab[playerid]);
        }
        if(clickedid == PinCifra[8][playerid])
        {
            strcat(numberab[playerid],"8");
            TextDrawSetString(PinText[playerid],numberab[playerid]);
        }
        if(clickedid == PinCifra[9][playerid])
        {
            strcat(numberab[playerid],"9");
            TextDrawSetString(PinText[playerid],numberab[playerid]);
        }
        if(clickedid == PinVerde[playerid])
        {
            if(PlayerData[playerid][pPin] == 0)//aici verificam daca playerul nu are niciun pin in baza de date
            {
                new string[200];
                new addpin = strval(numberab[playerid]);
                PlayerData[playerid][pPin] = addpin;
                format(string, sizeof(string), Bot"Contul tau este acum securizat.Codul pin este: %d.Nu uita sa fac printscreen in caz ca il vei uita(F8).", addpin);
                SCM(playerid, -1, string);
                Update(playerid,pPinu);
                AccountLock[playerid] = 1;
                TextDrawHideForPlayer(playerid,PinBox[0][playerid]);
                TextDrawHideForPlayer(playerid,PinBox[1][playerid]);
                TextDrawHideForPlayer(playerid,PinBox[2][playerid]);
                TextDrawHideForPlayer(playerid,PinVerde[playerid]);
                TextDrawHideForPlayer(playerid,PinRosu[playerid]);
                TextDrawHideForPlayer(playerid,PinCifra[0][playerid]);
                TextDrawHideForPlayer(playerid,PinCifra[1][playerid]);
                TextDrawHideForPlayer(playerid,PinCifra[2][playerid]);
                TextDrawHideForPlayer(playerid,PinCifra[3][playerid]);
                TextDrawHideForPlayer(playerid,PinCifra[4][playerid]);
                TextDrawHideForPlayer(playerid,PinCifra[5][playerid]);
                TextDrawHideForPlayer(playerid,PinCifra[6][playerid]);
                TextDrawHideForPlayer(playerid,PinCifra[7][playerid]);
                TextDrawHideForPlayer(playerid,PinCifra[8][playerid]);
                TextDrawHideForPlayer(playerid,PinCifra[9][playerid]);
                TextDrawHideForPlayer(playerid,PinClose[0][playerid]);
                TextDrawHideForPlayer(playerid,PinClose[1][playerid]);
                TextDrawHideForPlayer(playerid,PinText[playerid]);
                TogglePlayerControllable(playerid, 1);
                CancelSelectTextDraw(playerid);
                format(string, 32,"_");
                TextDrawSetString(PinText[playerid], string);

            }
            else
            {
                if(PlayerData[playerid][pPin] == strval(numberab[playerid]))//aici verificam daca, codul din baza de date este identic cu cel introdus
                {
                    new string[32];
                    SCM(playerid, -1, Bot"Contul tau a fost deblocat cu succes!");
                    TextDrawHideForPlayer(playerid,PinBox[0][playerid]);
                    TextDrawHideForPlayer(playerid,PinBox[1][playerid]);
                    TextDrawHideForPlayer(playerid,PinBox[2][playerid]);
                    TextDrawHideForPlayer(playerid,PinVerde[playerid]);
                    TextDrawHideForPlayer(playerid,PinRosu[playerid]);
                    TextDrawHideForPlayer(playerid,PinCifra[0][playerid]);
                    TextDrawHideForPlayer(playerid,PinCifra[1][playerid]);
                    TextDrawHideForPlayer(playerid,PinCifra[2][playerid]);
                    TextDrawHideForPlayer(playerid,PinCifra[3][playerid]);
                    TextDrawHideForPlayer(playerid,PinCifra[4][playerid]);
                    TextDrawHideForPlayer(playerid,PinCifra[5][playerid]);
                    TextDrawHideForPlayer(playerid,PinCifra[6][playerid]);
                    TextDrawHideForPlayer(playerid,PinCifra[7][playerid]);
                    TextDrawHideForPlayer(playerid,PinCifra[8][playerid]);
                    TextDrawHideForPlayer(playerid,PinCifra[9][playerid]);
                    TextDrawHideForPlayer(playerid,PinClose[0][playerid]);
                    TextDrawHideForPlayer(playerid,PinClose[1][playerid]);
                    TextDrawHideForPlayer(playerid,PinText[playerid]);
                    TogglePlayerControllable(playerid, 1);
                    CancelSelectTextDraw(playerid);
                    format(string, 32,"_");
                    TextDrawSetString(PinText[playerid], string);
                }
                else{SCM(playerid,-1,"{f24848}Cod pin gresit!");}
            }
        }
        if(clickedid == PinRosu[playerid])
        {
            strdel(numberab[playerid], 0,strval(numberab[playerid]));//aici stergem codul introdus
        }
        return 1;
    }

     

    -Bun deci structura a fost facuta, textdraw-urile puse, butoanele functionale, urmatorul pas comenzile.

    Pasul III: Comenzile

    Quote

     

    CMD:setpin(playerid, params[])
    {
        if(PlayerData[playerid][pPin] == 0)//verificam daca playerul nu are pin
        {
            TextDrawShowForPlayer(playerid,PinBox[0][playerid]);
            TextDrawShowForPlayer(playerid,PinBox[1][playerid]);
            TextDrawShowForPlayer(playerid,PinBox[2][playerid]);
            TextDrawShowForPlayer(playerid,PinVerde[playerid]);
            TextDrawShowForPlayer(playerid,PinRosu[playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[0][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[1][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[2][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[3][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[4][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[5][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[6][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[7][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[8][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[9][playerid]);
            TextDrawShowForPlayer(playerid,PinClose[0][playerid]);
            TextDrawShowForPlayer(playerid,PinClose[1][playerid]);
            TextDrawShowForPlayer(playerid,PinText[playerid]);
            SelectTextDraw(playerid, 0xFFFFFF33);
            TogglePlayerControllable(playerid, 0);
        }
        else
        {
            SCM(playerid, COLOR_RED, Bot"Contul tau este deja securizat cu un cod pin tasteaza [/loginpin] pentru a debloca contul!");
        }
        return 1;
    }
    CMD:loginpin(playerid, params[])
    {
        if(PlayerData[playerid][pPin] > 0)//Verificam daca playerul are pin
        {
            TextDrawShowForPlayer(playerid,PinBox[0][playerid]);
            TextDrawShowForPlayer(playerid,PinBox[1][playerid]);
            TextDrawShowForPlayer(playerid,PinBox[2][playerid]);
            TextDrawShowForPlayer(playerid,PinVerde[playerid]);
            TextDrawShowForPlayer(playerid,PinRosu[playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[0][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[1][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[2][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[3][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[4][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[5][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[6][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[7][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[8][playerid]);
            TextDrawShowForPlayer(playerid,PinCifra[9][playerid]);
            TextDrawShowForPlayer(playerid,PinClose[0][playerid]);
            TextDrawShowForPlayer(playerid,PinClose[1][playerid]);
            TextDrawShowForPlayer(playerid,PinText[playerid]);
            SelectTextDraw(playerid, 0xFFFFFF66);
            TogglePlayerControllable(playerid, 0);
            return 1;
        }
        else
        {
            SCM(playerid, COLOR_RED, Bot"Contul tau nu este securizat cu un cod pin!Tasteaza [/setpin] pentru a seta unul!");
        }
        return 1;
    }
    CMD:pin(playerid, params[])
    {
        return cmd::loginpin(playerid, params);//creem o scurtatura pentru comanda /Loginpin
    }

    !!!Atentie!!!Eu am folosit procesorul de comenzi LIFE-CMD, comenzile sunt la fel dar scurtatura acea difera, deci daca folositi zcmd veti pune:

    CMD:pin(playerid, params[])
    {
        return cmd_loginpin(playerid, params);
    }

     

    Pasul IV: Tabelul in baza de date

    Quote

    3.Noul rand va fi de timp int(intreg)cu lungimea de 4, si va avea valoarea 0 pana ce aceasta se va schimba.

     

    Bun, acesta a fost tutorialul, sper ca ati inteles.
    !!!Atentie!!! LIKE daca ti-a fost de folos.

    • Love 1

  5. Salut eGaming !!!

    Am venit cu ideia asta de a schimba infatisarea la grade pe forum . Va intrebati dece? Ok . dupa mine ar prinde foarte bine la ori ce nume de exemplu noi avem asa https://imgur.com/a/agdDwsl  si sa facem la fiecare grad ceva de genu :

    https:/

    poze din topic https://imgur.com/a/044X5Mj

     

    Daca va placut gradele astept un like! ;)

    Daca sunteti deacord cu schimbarea asta astept un PM si va dau eu ce va trebuie.


  6. Nick: DuTzUu
    Rank: 1 
    Data: 22.03-24.03
    Invoire sedinta / antrenament: Invoire

    Motiv: avand in vedere ca sunt schimbu 2 la munca nu pot intra pe samp 😐 sa va ajut la rw saptamana asta. Imi pare rau pentru inactivitatea mea in cadrul factiuni,  sper ca dupa 24.03 o sa incerc cat pot sa intru in joc. Multumesc! 


  7. Salut eGaming ! Va prezint un mic Tutoreal azi cum adaugi icon pe harta.
    Nu este greu si m-am gandit sa fac un tutorial

     

    1.Cauti in gm linia:

    Quote

    public OnPlayerConnect(playerid)

    si dupa { adaugi

     

    Quote

    SetPlayerMapIcon( playerid, 1, coordonateX,coordonateY,coordonateZ,id icon, 0 );// icon car

     

    Pentru a vedea ID cu iconuri intrati aici:

    http://wiki.sa-mp.com/wiki/MapIcons

     

    Sper ca accest tutoreal este la indemana pentru cei care cautau .

    Multumesc!

    • Like 1

  8. Nick server: DuTzUu

    Descriere: Salut eGaming !  Avand in vedere servar-ul nostru de RPG care din pacate multi dintre noi  stau AFK pentru payday mare si multi pleyeri noi intra si ies pentru ca se plictisesc , am venit cu ideia asta poate ar ajuta servar-ul la populatie .

    1. Sa se faca un nou biz numit "Tuning Hack " , unde iti poti pune neoane la masini pe diferite culori .

    2. Ca tot exista comanda /startlotto la admin 1 si nimeni nu face asta 

    Quote

    In fiecare Duminica intre ora 20:00 si 21:00 sunt cinci extrageri Lotto pe server.
    Pentru a participa la extragere, trebuie sa scrieti in chat : /lotto [numar] (ex : /lotto 12).
    Daca suma pusa in joc nu este castigata de nimeni, premiul este raportat pentru urmatoarea extragere.

    Mult Succes !

    Edited 21 January, 2016 by Rakku

    am zis sa fie ceva fanny si distractiv cum ar fii:

    • Sa facem 2-3 biz-uri in LV-LS-SF cu numele "Superbet"
    • unde te poti duce sa pui la pariuri si acolo poti pune un bilet la /lotto in care extragerea va avea loc duminica seara la ora 20:00 cu un dialog
    • sa mai facem inca o comanda pe time de ex: /bet unde poti pune un bilet pe o cursa de cai maxim 4 cai la curse  , unde ar putea fii din 15/15 minute extragerea . exemplu 

    3 . Un job nou numit "Miner" :

    • Job-ul sa fie pe Muntele Chilliad 
    • un tunel in munte in care sa fie blocat drumu cu pietre , ca sa le spargi iti trebuie sa cumperi o bomba sa treci de pietre 
    • dupa ce treci de pietre trebuie sa te urci intr-un trail sa cobori sub munte , odata ajuns jos trebuie sa sapi pana gasesti un diamant ce cantareste X KG , unde va trebui sa pui pe un utilaj (obiect) sa il sparga
    • la plata se va face pe kg prin random + skill

    4. Un event global numit "MoroCros" 

    - unde cursa se va tine in padure cu checkpoint

    - odata inscris la event automat iti da motocros 

    - premiu va fii prin random

    5. Sistemu de RW sa fie ca pe vremuri cu aliante 

    - la un kill o sa primesti o inima cu +25hp  plus un pistol

     

    Multumesc!


  9. eu unu am vb cu kawa si a gasit un yt si am zis ca il ajut la platire ... e vorba ca avem sisteme poate unice sau ma rog dar nu cred ca un wipe ar rezolva problema asta . Hai sa nu gandim asa la rece , multi au plecat din cauza asta eu ce-l putin am deschis comunitate cu un servar cat de cat . hai sa facem inafara de lvl 3 plus masina care iti da la inregistrare ,  hai sa punem si o prima de intrare ( ma refer la kk ). Asta e parerea mea 


  10. Un nou WIPE iar ... pe bune baton parca gandesti cu picioarele :)) scz dar asta e absurd . abia ce ma-m reintors pe egaming si iar ... Hai sa facem in asa fel sa ne fie noua bine . propun sa creem o mapa cu anumite obiecte din MTA ceva gen curse FMA cu Cp-uri si in loc de masini sa fie o mapa cu karting-uri + o mapa cu un interior diferit si anume o mapa de gen cs 1.6 cs_hp (cu lame) sau he_grenade ( unde te lupti cu grenadele) . Ceva de gen FAN


  11. Salut tuturor!

    M-am gândit să propun ceva foarte frumos in legatura cu activitatea la Cop . Va intrebati ce inseamna asta ? E simplu , multi membri din factiunea PD,F.B.I stau afk si inchisi in case, si daca tot sa creat sistemu de rob acum e mult mai greu sa prinzi un cop sa dai rob,asa ca vin cu propunerea asta :

     

    - Pentru sistemu asta avem nevoie de 2 comenzi : /radar [KM] ( aici se trece limita de viteze ) si /stopradar

    - Sa se creeze pe diferite zone din Los Santos, ca un cop sa aiba voie sa stea la panda cu radaru 

    - Sa se faca sistemu pe diferite ore de ex: de la ora 10:00-20:00 sa aiba voie sa stea cu radaru ,asta ar insemna " Activitate in factiune "

    - Cand un cop tasteaza comanda /radar [KM] , sa apara un anunt global precum *Politistu X sta cu radaru in zona X cu limita de viteze 100Km/h*

    Sa se implementeze la /stats Penalizare [0/3] ce contine asta + comanda /penalizeaza [ playerid/playername]

    - daca un politist te prinde cu radaru cu limita peste X KM/h el are dreptu sa iti deie :

    Pentru prima si a doua abatere :

    • Incalcarea limitei de viteze : 30.000$ amenda 

     

    Pentru a treia abatere :

    * daca pleyeru se opune pentru neplata politistului , el are drept de a da comanda /penalizeaza (cu 1 punct ), la 3 puncte de penalizeaza se va da :

    Wanted 2 se da pentru : Furtul unei masini , Atacarea unui Civil(Civ atk)* , Patrunderea pe proprietate Guvernamentala , Neplata unei amenzi , Detinere de Droguri, Steal (Furt din buzunar)

     

    Am venit cu ideia asta pentru membri din PD si sa fie servar-ul putin mai real fata de acum .

    Multumesc !

    • Like 1
×
×
  • Create New...