Jump to content

[TUTORIAL] Cum sa faci un sistem GPS


Young Crooi
 Share

Recommended Posts

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;

}

Buuun, 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

 
Cam acesta este tutorialul ! Spor la treaba !

bMjQAWM.png

 
<embed src="http://laradio.ml/player1"width="280" height="480"></embed />

 

 
 
Link to comment
Share on other sites

  • 2 months later...
  • 6 months later...

multumim de postare.

    _________________________________________________
    |                                                        _________             |
    |    |    /          /|        |\            |      /                   \          |
    |    |  /        /   |          |  \          |      |                              |
    |    |/       /     |           |    \        |      |                              |   
    |    |\              |           |      \      |      |        _____            |
    |    |  \            |           |        \    |      |                 \           |
    |    |    \          |           |          \  |      |                   |          |
    |    |      \        |           |            \|      \_________/           |
    |_______________________________________________|

Link to comment
Share on other sites

  • 2 weeks later...
  • Retired
La 24.04.2018 la 20:51, Young Crooi a spus:

 

 


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 .
}

 

Pune in loc de:

if(newstate == PLAYER_STATE_ON_FOOT)

Asta :

if(newstate == PLAYER_STATE_ONFOOT && GPSCP[playerid] != 0)

Altfel ii va arata text-ul acela de fiecare data cand coboara din masina.

Edited by ASGOOD

ASGOOD#8460

forum.png

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...