lockLocked

[TUTORIAL]Cum sa faci un system de GPS

person DanN - ECILA.RO
schedule Mar 30, 2017
forum 1
visibility 16
Mar 30, 2017 at 11:26 AM
Original Post
#1
Member

Pentru inceput, vom merge undeva la inceputul gamemode-ului si vom adauga urmatoarele linii :


#define DIALOG_GPS 123 // Inregistrezi o variabila pentru dialogul de la GPS .
new GPSCP[MAX_PLAYERS]; // Inregistrezi o variabila care va fii folosita pentru verificarea gps-ului .

La public OnPlayerConnect(playerid) vei adauga urmatoarea linie: 


GPSCP[payerid] = 0; // Setezi player-ului care intra pe server ca GPS-ul sa fie dezactivat.

La public OnPlayerDisconnect(playerid) vei adauga aceeasi linie ca cea de mai sus : 


GPSCP[playerid] = 0; // Setezi player-ului care se deconecteaza ca GPS-ul sa ii fie dezactivat.

Acum, sa mergem sa facem comanda propriu-zisa . Daca ai sistemul de comenzi pe strcmp, mergi la public OnPlayerCommandText(playerid, cmdtext[]) si vei face comanda in felul urmator :


if(strcmp(cmd, "/gps", true) == 0)
{
    if(!IsPlayerInAnyVehicle(playerid)) // Verifici daca player-ul este sau nu este intr-o masina.
            return SendClientMessage(playerid, COLOR_GREY, "Trebuie sa fii intr-o masina pentru a folosii aceasta comanda."); // Trimiti un mesaj in care i se spune ca trebuie sa fie in masina .

    if(GPSCP[playerid] > 0) // Verifici daca are deja gps-ul activat.
            return SendClientMessage(playerid, COLOR_GREY, "Ai deja GPS-ul activat!"); // Trimiti un mesaj in care i se spune ca are deja gps-ul activat .

    ShowPlayerDialog(playerid, DIALOG_GPS, DIALOG_STYLE_LIST, "Alege o locatie", "Locatie 1\nLocatie 2\n Locatie 3\nLocatie 4", "Alege", "Inchide"); // In caz ca nu are gps-ul activat i se va afisa un dialog cu locatiile pe care le poate alege.

    return 1;
}

Daca folosesti procesatorul de comenzi ZCMD, vei face comanda in modul urmator :

Vei adauga comanda undeva in gamemode, numai nu in vreun public :


CMD:gps(playerid, params[])
{
    if(!IsPlayerInAnyVehicle(playerid)) // Verifici daca player-ul este sau nu este intr-o masina.
            return SendClientMessage(playerid, COLOR_GREY, "Trebuie sa fii intr-o masina pentru a folosii aceasta comanda."); // Trimiti un mesaj in care i se spune ca trebuie sa fie in masina .

    if(GPSCP[playerid] > 0) // Verifici daca are deja gps-ul activat.
            return SendClientMessage(playerid, COLOR_GREY, "Ai deja GPS-ul activat!"); // Trimiti un mesaj in care i se spune ca are deja gps-ul activat .

    ShowPlayerDialog(playerid, DIALOG_GPS, DIALOG_STYLE_LIST, "Alege o locatie", "Locatie 1\nLocatie 2\n Locatie 3\nLocatie 4", "Alege", "Inchide"); // In caz ca nu are gps-ul activat i se va afisa un dialog cu locatiile pe care le poate alege.

    return 1;

}

Bun, dupa ce ai facut comanda, vei merge la public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) iar, pentru a face urmatorul pas, trebuie sa ai deja locatiile de la GPS salvate . Daca nu le ai , intra in joc, mergi la locatiile pe care vrei sa le adaugi pe GPS si dai /save acolo .

Apoi vei merge in : Documents ---> GTA San Andreas User Files ----> SAMP iar acolo vei gasii un fisier text numit savedpositions .De acela vei avea nevoie pentru a seta checkpoint-urile , urmareste-ma : 

Vei adauga undeva la OnDialogResponse cate o linie pentru fiecare locatie, in modul acesta :


if(dialogid == DIALOG_GPS) // Aici verifici daca id-ul dialogului este dialog-ul de la gps .
{
    if(response) // Aici verifici daca a raspuns la dialog
    {
        if(listitem == 0) // Aici verifici daca player-ul a ales varianta 1 , adica prima locatie
        {
            SetPlayerCheckpoint(playerid, 0.0, 0.0, 0.0, 3.0) // Aici vei seta checkpoint-ul pentru player . 0.0, 0.0, 0.0 sunt coordonatele pe care tu le vei lua din fisierul mentionat mai sus !

            SendClientMessage(playerid, COLOR_WHITE, "Ai activat GPS-ul, mergi la punctul rosu !"); // Aici trimiti un mesaj player-ului precum ca a activat GPS-u .

            DMVCP[playerid] = 1; // Setezi ca player-ul are GPS-ul activat .
        }

        if(listitem == 1) // Aici verifici daca player-ul a ales varianta 2 , adica a doua locatie
        {
            SetPlayerCheckpoint(playerid, 0.0, 0.0, 0.0, 3.0) // Aici vei seta checkpoint-ul pentru player . 0.0, 0.0, 0.0 sunt coordonatele pe care tu le vei lua din fisierul mentionat mai sus !

            SendClientMessage(playerid, COLOR_WHITE, "Ai activat GPS-ul, mergi la punctul rosu !"); // Aici trimiti un mesaj player-ului precum ca a activat GPS-u .

            DMVCP[playerid] = 1; // Setezi ca player-ul are GPS-ul activat .
        }
    }
}

Liniile acestea le vei face si tu la tine la OnDialogResponse, le vei aseza asa cum trebuie, si il vei face in asa fel incat sa se potriveasca cu gps-ul tau . De exemplu, eu ti-am facut acum doar un model cum vei face tu, pentru fiecare locatie , un listitem trebuie sa ai ! Daca ai 8 locatii la dialog, va trebuii sa ajungi la if(listitem == 7) .

 

Acum, ca sa dezactivezi checkpoint-ul cand player-ul ajunge la destinatie vei merge la public OnPlayerEnterCheckpoint(playerid) si vei adauga linia urmatoare :


if(GPSCP[playerid] == 1) // Verifici daca are GPS-ul activat .
{
    SendClientMessage(playerid, COLOR_WHITE, "Ai ajuns la destinatie, GPS-ul a fost dezactivat!"); // Ii trimiti un mesaj precum ca a ajuns la destinatie si s-a dezactivat gps-ul .

    GPSCP[playerid] = 0; // Opresti GPS-ul, adica ii setezi functiei GPSCP valoarea 0 .
}

Si , daca vrei ca GPS-ul sa mearga numai cand esti intr-o masina, sau sa se opreasca atunci cand player-ul se da jos, vei face in felul urmator : mergi la public OnPlayerStateChange(playerid, oldstate, newstate) si vei adauga linia urmatoare :


if(newstate == PLAYER_STATE_ON_FOOT) // Verifici daca player-ul este in picioare
{
    GPSCP[playerid] = 0; // Setezi variabilei GPSCP valoarea 0 , adica opresti gps-ul .

    SendClientMessage(playerid, COLOR_GREY, "Te-ai dat jos din masina! GPS-ul a fost dezactivat."); // Trimiti un mesaj precum ca GPS-ul a fost oprit .
}

Adaugati undeva la inceputul gamemode-ului :


#define COLOR_WHITE 0xFFFFFFFF
#define COLOR_GREY 0xAFAFAFAA

 

 

May 14, 2017 at 6:14 PM
#2
Member

"9. Fiecare topic va fii  deschis timp de 72 ore , dupa care se poate inchide."

T/C

Join the Discussion

You need to be logged in to post a reply.

loginLogin to Reply