Witamy na GTAOnline Obecny czas to 2018-09-26, 10:36 Użytkowników: 76242
Strona główna | Użytkownicy | Grupy | Faq | Regulamin | Zaloguj



Poprzedni temat :: Następny temat
System pojazdów pobieranie z mysql
Autor Wiadomość

carl0987 





Informacje
Nick w MP: Lolek
Wiek: 29
Na forum: 2083 dni
Posty: 293
Piwa: 9
Respekt: 50

Wysłany: 2018-08-27, 18:07   System pojazdów pobieranie z mysql



Siema! Myślę nad tym jak zrobić system pojazdów(wszystkich) czytanych z bazy mysql.
I teraz tak:
-Pojazdy ma tworzyć administrator(pozycja administratora)
-Każdy pojazd jest przypisany albo do frakcji albo do konkretnego gracza.
I teraz pytania:
Jest możliwość przypisania UID do konkretnego pojazdu na mapie?
Jak byście to rozkminili w moim przypadku? Jakoś nie mam wizji jak się za to zabrać.


ps. Dobra mam pomysł :) Tworzyć przez zmienna pojazdy, typu UID = CreateVehicle
tylko teraz pojawia się problem :D jak tworzyć zmienną za każdym razem inną o UID :D

_________________
Postaw piwo autorowi tego posta
 

rufijok 





Informacje
Nick w MP: Slasher
Wiek: 19
Na forum: 877 dni
Posty: 33
Piwa: 16
Respekt: 65,3

Wysłany: 2018-08-27, 22:29   



nie zrobisz dynamicznie zmiennych, za to możesz użyć tablicy i z każdym stworzonym pojazdem zwiększać index o 1

Postaw piwo autorowi tego posta
 

carl0987 





Informacje
Nick w MP: Lolek
Wiek: 29
Na forum: 2083 dni
Posty: 293
Piwa: 9
Respekt: 50

Wysłany: 2018-08-28, 08:13   



Popowiesz mi jak to zrobić ?

_________________
Postaw piwo autorowi tego posta
 

rufijok 





Informacje
Nick w MP: Slasher
Wiek: 19
Na forum: 877 dni
Posty: 33
Piwa: 16
Respekt: 65,3

Wysłany: 2018-08-28, 12:10   



Kod:

new IndexPojazdow;

enum E_Pojazdy{
pojazd,
model,
wlasciciel,
Float:PosX,
Float:PosY,
Float:PosZ,
Float:PosR,
kolor1,
kolor2
};
new Pojazdy[][E_Pojazdy];

stock TworzeniePojazdow(){ // to wywolujesz w OnGameModeInit
for(new i; i < IndexPojazdow; i++){
Pojazdy[i][pojazd] = CreateVehicle(Pojazdy[i][model], Pojazdy[i][PosX], Pojazdy[i][PosY], Pojazdy[i][PosZ], Pojazdy[i][PosR], Pojazdy[i][kolor1], Pojazdy[i][kolor2], -1);
}
return 1;
}


tutaj masz samo tworzenie pojazdow bez bazy, musialbys jeszcze przed tym zrobic wypelnianie tej tablicy danymi z mysql, a IndexPojazdow na poczatku oznaczalby ilosc wierszy w tabeli z pojazdami w MySQL.
Przy samej komendzie z dodawaniem auta graczowi/frakcji wypelniasz kolejny index w tablicy, a zmienna IndexPojazdow inkrementujesz (++).
No i na koncu jeszcze tylko zapis, ale to juz sam rozkminisz ;)

Postaw piwo autorowi tego posta
 
Więcej szczegółów
Wystawiono 1 piw(a):
carl0987

carl0987 





Informacje
Nick w MP: Lolek
Wiek: 29
Na forum: 2083 dni
Posty: 293
Piwa: 9
Respekt: 50

Wysłany: 2018-08-28, 19:05   



A więc wartości tabeli wyglądają tak:


teraz na górze mapy stworzyłem:
Pawn

new IndexPojazdow;
enum E_Pojazdy
{
    UID,
    model,
    ovner,
    FloatPosX,
    FloatPosY,
    FloatPosZ,
    FloatPosR,
    kolor1,
    kolor2,
    przebieg
};
new Pojazdy[][E_Pojazdy];

Następnie zabrałem się za samo wczytywanie pojazdów z bazy tak będzie dla mnie na ten moment najlepiej :)
W ongamemodeint dałem:
Pawn
    new query;
    mysql_format(SQL_IDquerysizeof query"SELECT * FROM cars");
    mysql_tquery(SQL_IDquery "WczytywaniePojazdow");

i tutaj jest błąd bo coś nie tak sformatowałem możecie mi podpowiedzieć :)
Następnie w calbacku WczytywaniePojazdow dałem:
Pawn
new iloscpojazdow cache_num_rows();
    iloscpojazdow=IndexPojazdow;
    for(new iIndexPojazdowi++){
    Pojazdy[i][UID] = CreateVehicle(Pojazdy[i][model], Pojazdy[i][PosX], Pojazdy[i][PosY], Pojazdy[i][PosZ], Pojazdy[i][PosR], Pojazdy[i][kolor1], Pojazdy[i][kolor2], -1);
    }

I w ten sposób według mnie powinno wczytywać pojazdy potem trzeba bd sprawdzać po UID czy pojazd należy do gracza lub frakcji :)

_________________
Postaw piwo autorowi tego posta
 

Robson04 
Skrypter PAWN





Informacje
Nick w MP: Robson04
Wiek: 14
Na forum: 374 dni
Posty: 35
Piwa: 173
Respekt: 60

Wysłany: 2018-08-28, 23:46   



Nie ma takiego czegoś jak przypisywanie UID do pojazdu.
Nie ma żadnego Streamera pojazdów.
Poza tym kod jest bez sensu.
Pawn

#define MAX_CARS 100
enum E_VEHICLES {

    SAMPID,
    OWNER,
      model,
    Float:XYZ[3],
    Float:ROT,
    Color[2],

    //inne
    PRZEBIEG    
};
new VehData[MAX_CARS][E_VEHICLES];

public OnGameModeInit() {
    ZaladujPojazdy(); //Wczytuje wszystkie pojazdy
    return 1;
}


//Funkcje:
ZaladujPojazdy() {
    //nie musisz formatować query, gdy nie wysyłasz zapytania/aktualizowania do bazy danych z zmiennymi.
    mysql_tquery(TWOJA_BAZA"SELECT * FROM cars""MYSQL_Pojazdy");
    return 1;
}

forward MYSQL_Pojazdy();
public MYSQL_Pojazdy() {
    for(new icache_num_rows(); ji++)
    {
        /*
            WAŻNE, 'i' TO JEST TWOJE UID POJAZDU, TAK WIEC ZBEDNE JEST PISANIE UID W ENUMIE.
        */
            VehData[i][SAMPID] = CreateVehicle(VehData[i][model], VehData[i][XYZ][0], VehData[i][XYZ][1], VehData[i][XYZ][2], VehData[i][ROT], VehData[i][COLOR][0], VehData[i][COLOR][1], -10);
    }
    printf("przykład: załadowano %i pojazdów!"cache_num_rows());
    printf("zostaw piwo Robsonowi jeżeli pomógł! :)");
    return 1;
}


W enumie możesz użyć [], czyli nieskończoność tablic, ale według mnie to jest zbędne i przy sprawdzaniu pętla nie miałaby końca.

//Poza tym, po co od razu po załadowaniu serwera spawnujesz pojazd?
Przypominam, że SAMP ma limit pojazdów. Najlepiej byłoby zrobić to tak, że ładujesz wszystkie dane pojazdów do tablic i potem gracz sobie wybiera czy chce spawnować pojazd czy nie.

Postaw piwo autorowi tego posta
 
Więcej szczegółów
Wystawiono 1 piw(a):
carl0987

carl0987 





Informacje
Nick w MP: Lolek
Wiek: 29
Na forum: 2083 dni
Posty: 293
Piwa: 9
Respekt: 50

Wysłany: 2018-08-29, 16:32   



No tak, a co z pojazdami dla zwykłych graczy albo z pojazdami firmowymi ? Mogę ewentualnie sprawdzić czy pojazd jest firmowy lub dla zwykłego gracza jakimś if'em w ongamemodeinit

[ Dodano: 2018-08-29, 17:14 ]
Jeszcze jedno pytanie, jak zapisać kordy do bazy chodzi mi o typ danch bo gdy nam Int to zapisuje mi ale nie w formacie 1111.111

_________________
Postaw piwo autorowi tego posta
 

Robson04 
Skrypter PAWN





Informacje
Nick w MP: Robson04
Wiek: 14
Na forum: 374 dni
Posty: 35
Piwa: 173
Respekt: 60

Wysłany: 2018-09-04, 17:10   



"carl0987" napisał/a:

No tak, a co z pojazdami dla zwykłych graczy albo z pojazdami firmowymi ? Mogę ewentualnie sprawdzić czy pojazd jest firmowy lub dla zwykłego gracza jakimś if'em w ongamemodeinit

[ Dodano: 2018-08-29, 17:14 ]
Jeszcze jedno pytanie, jak zapisać kordy do bazy chodzi mi o typ danch bo gdy nam Int to zapisuje mi ale nie w formacie 1111.111


Dając wartość INT mając wartość zmiennoprzecinkową nie jest to dobry pomysł.
Użyj FLOAT do koordynatów.

Postaw piwo autorowi tego posta
 
Więcej szczegółów
Wystawiono 1 piw(a):
carl0987

carl0987 





Informacje
Nick w MP: Lolek
Wiek: 29
Na forum: 2083 dni
Posty: 293
Piwa: 9
Respekt: 50

Wysłany: 2018-09-05, 19:04   



Okej wszystko mi już działa teraz mam zagwozdkę jak sprawdzić czy pojazd jest gracza który wsiada do pojazdu. Podpowie ktoś ?

[ Dodano: 2018-09-05, 20:02 ]
ps. potrzebuje jeszcze funcji która pobierze rotację gracza(chodzi mi o to że GetPlayerPos daje X Y Z ale nie daje w którą stronę patrzy gracz :D )

_________________
Postaw piwo autorowi tego posta
 

Robson04 
Skrypter PAWN





Informacje
Nick w MP: Robson04
Wiek: 14
Na forum: 374 dni
Posty: 35
Piwa: 173
Respekt: 60

Wysłany: 2018-09-05, 20:29   



"carl0987" napisał/a:

Okej wszystko mi już działa teraz mam zagwozdkę jak sprawdzić czy pojazd jest gracza który wsiada do pojazdu. Podpowie ktoś ?

[ Dodano: 2018-09-05, 20:02 ]
ps. potrzebuje jeszcze funcji która pobierze rotację gracza(chodzi mi o to że GetPlayerPos daje X Y Z ale nie daje w którą stronę patrzy gracz :D )


Funkcja rotacji gracza: KLIK

Aby sprawdzić, czy pojazd jest gracza musimy stworzyć pętle, która przechodzi przez wszystkie tablice, które są wypełnione danymi pojazdów.

Pawn

public OnPlayerEnterVehicle(playeridvehicleidispassenger) {
    //tutaj możemy sobie dodać, czy gracz może wchodzić do nie swojego auta jako pasażer.
    if(!ispassenger) { //jeżeli nie jest pasażerem (czyli jego stan jest jako kierowca, chce wejść do pojazdu)
        for(new iMAX_CARSi++) {
            if(VehData[i][OWNER] != 0) { //Funkcja odpowiadająca za sprawdzanie pojazdów, które są na pewno wpisane do bazy.
                if(VehData[i][SAMPID] == vehicleid) { //sprawdzamy czy pojazd z tablicy jest ten sam, do którego chce wejść gracz.
                    if(VehData[i][OWNER] == DaneGracza[playerid][UID_GRACZA]) {//w drugim argumencie podaj enum z danymi gracza. czyli uid.
                        break; //niszczy pętle, bo pojazd, do którego gracz wsiada jest jego.
                    }
                }
                else { //jeżeli nie, to coś zrób.
                    //zmienne, gdzie zapisujemy dane
                    new Float:pXFloat:pYFloat:pZFloat:pR;

                    //Pobieramy pozycje gracza, x, y, z, rot.
                    GetPlayerPos(playeridpXpYpZ); //pobieramy jego x y z
                    GetPlayerFacingAngle(playeridpR); //pobieramy jego rotacje

                    //ustawiamy dane graczowi
                    SetPlayerPos(playeridpXpYpZ); //ustawiamy jego x y z
                    SetPlayerFacingAngle(playeridpR); //ustawiamy jego rotacje
                    ClearAnimations(playerid0); //usuwamy mu animacje
                    SendClientMessage(playerid, -1"Pojazd nie należy do ciebie. :("); //wysylamy wiadomosci
                    /*
                        Kod został wykonany przez Robson04, zostaw mu piwo! 
                    */
                }
            }
            else
                //jeżeli tablica jest nieprawidlowa, czyli dane są puste, pętla się niszczy.
                break;    
        }
    }
    return 1;
}


Wszystko zostało dokładnie opisane, liczę na respekt! 8-) :)
Powodzenia!

Autor postu otrzymał respekt pozytywny 1 raz
Postaw piwo autorowi tego posta
 
Więcej szczegółów
Wystawiono 1 piw(a):
carl0987

carl0987 





Informacje
Nick w MP: Lolek
Wiek: 29
Na forum: 2083 dni
Posty: 293
Piwa: 9
Respekt: 50

Wysłany: 2018-09-05, 20:47   



Mam lekki problem wynikający z mojej niewiedzy :D Troszkę zmodyfikowałem kod i chcę w OnPlayerEnterVehicle pobrać Nick gracza poprzez stocka PlayerName(playerid). Wyskakuje taki błąd: error 033: array must be indexed (variable "PlayerName")

_________________
Postaw piwo autorowi tego posta
 

Robson04 
Skrypter PAWN





Informacje
Nick w MP: Robson04
Wiek: 14
Na forum: 374 dni
Posty: 35
Piwa: 173
Respekt: 60

Wysłany: 2018-09-05, 20:57   



"carl0987" napisał/a:

Mam lekki problem wynikający z mojej niewiedzy :D Troszkę zmodyfikowałem kod i chcę w OnPlayerEnterVehicle pobrać Nick gracza poprzez stocka PlayerName(playerid). Wyskakuje taki błąd: error 033: array must be indexed (variable "PlayerName")


Użyj tego:

Pawn

stock pName(playerid) {
    new p_name[MAX_PLAYER_NAME];
    GetPlayerName(playeridp_namesizeof p_name);
    return p_name;
}


Następnie do sformatowanego stringa użyj pName(playerid);
np.

Pawn

new string[128];
format(stringsizeof string"Twoja nazwa to: %s"pName(playerid));
SendClientMessage(playerid, -1string);


EDIT: najlepiej daj kod twojego stocka 'PlayerName' :)

Postaw piwo autorowi tego posta
 
Więcej szczegółów
Wystawiono 1 piw(a):
carl0987

carl0987 





Informacje
Nick w MP: Lolek
Wiek: 29
Na forum: 2083 dni
Posty: 293
Piwa: 9
Respekt: 50

Wysłany: 2018-09-05, 21:00   



mój stock wygląda tak samo :D
Pawn

stock PlayerName(playerid)
{
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playeridnamesizeof name);
    return name;
}


[ Dodano: 2018-09-05, 21:03 ]
z tego co widzę to nawet jak chce jakąś zmienną indexować to też wywala błąd jeśli użyje ją np. w if'ie

[ Dodano: 2018-09-05, 21:08 ]
Dobra poradziłem :D Mój błąd chciałem zmienną o innym typie porównać do innego typu zmiennej xD

_________________
Postaw piwo autorowi tego posta
 
Tagi: system :: pojazdów :: pobieranie :: mysql
Anonymous



Dołaczył: Wczoraj 0:00
Posty: 1
Skad: google.com


Anonymous Koniecznie zajrzyj na:







Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Wersja do druku

Skocz do:  


phpBB by Przemo modified by xXx 2003-2016

Template GTAONLINE created by gtaonline.pl



Strona wygenerowana w 0,29 sekundy. Zapytań do SQL: 18