Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2018-11-04, 19:33


JestemSuperLIKE

Początkujący grafik






Wiek: 27
Na forum: 3694 dni
Posty: 133

Piwa: 6

Respekt: 40

Cze??. Mam problem z vID. W bazie mam vehicle_id. NRG ma vehicle_id = 1, a Elegy = 2, Sultan = 3. A jak r?cznie usuwam z bazy Elegy = 2. To zostaje mi NRG = 1 i Sultan = 3. A na serwerze pokazuje mi ze NRG ma 1 a Sultan 2. Jak wpisuje komend? /dell VID czyli /dell 2 to auto mi si? usuwa a z bazy danych nie usuwa si?. Jak to naprawi??

Pawn

enum vInfo
{
    vID,
    vModel,
    Text3D:vLabel,
};
new VehicleInfo[MAX_VEHICLES][vInfo];
new Veh[MAX_VEHICLES];

SetupVehicleTable()
{
    new query[1024];
    
    strcat(query"CREATE TABLE IF NOT EXISTS `vehicles` (`vehicle_id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY  (`vehicle_id`))");
    mysql_tquery(g_SQLquery);
    return 1;
}

forward LoadVehicle();
public LoadVehicle()
{
    new rows cache_num_rows();
    new idloaded;
    new str[150];
     if(rows)
      {
        while(loaded rows)
        {
              cache_get_value_name_int(loaded"vehicle_id"id);

            VehicleInfo[id][vID] = CreateVehicle(5220.00.00.00.0, -1, -1, -1);
            Veh[VehicleInfo[id][vID]] = id;
            SetVehicleToRespawn(VehicleInfo[id][vID]);

            loaded++;

            format(strsizeof(str), "(UID: %d)"VehicleInfo[id][vID]);
            VehicleInfo[id][vLabel] = Create3DTextLabel(str, -10.00.00.050.00);
            Attach3DTextLabelToVehicle(VehicleInfo[id][vLabel], VehicleInfo[id][vID], 0.00.01.0);
        }
    }
    printf("[Vehicle] %d loaded vehicles."loaded);
    return 1;
}

CreateVehicle_CV(modelpriceFloat:posxFloat:posyFloat:poszFloat:posacolor1color2)
{
    new idquery[300], str[150];

    VehicleInfo[id][vID] = CreateVehicle(5220.00.00.00.0, -1, -1, -1);

    Veh[VehicleInfo[id][vID]] = id;

    SetVehicleToRespawn(VehicleInfo[id][vID]);

    format(querysizeof(query), "INSERT INTO `vehicles` (`vehicle_id`) VALUES ('%d')"id);
    mysql_tquery(g_SQLquery);

    format(strsizeof(str), "(UID: %d)"VehicleInfo[id][vID]);
    VehicleInfo[id][vLabel] = Create3DTextLabel(str, -10.00.00.050.00);
    Attach3DTextLabelToVehicle(VehicleInfo[id][vLabel], VehicleInfo[id][vID], 0.00.01.0);

    return VehicleInfo[id][vID];
}

DeleteVehicle(vehicleID)
{
    new query[100];

    DestroyVehicle(vehicleID);

    mysql_format(g_SQLquerysizeof(query), "DELETE FROM `vehicles` WHERE `vehicle_id` = %d LIMIT 1"VehicleInfo[vehicleID][vID]);
    mysql_tquery(g_SQLquery);
    return 1;
}

SaveVehicle(xvehid)
{
    new query[612];

    mysql_format(g_SQLquerysizeof query"UPDATE `vehicles` SET `vehicle_name` = '%s' WHERE `vehicle_id` = %d LIMIT 1"GetVehicleNameFromModel(VehicleInfo[xvehid][vModel]), xvehid);
    mysql_tquery(g_SQLquery);
    return 1;
}

CMD:dell(playeridparams[])
{
    new v_id;
    if(sscanf(params"d"v_id)) return SendClientMessage(playerid, -1"");

    DeleteVehicle(v_id);
    return 1;
}


Albo trzeba da? SaveVehicle w OnGameModeExit albo jako? ?eby by?y takie same VID pojazd?w w bazie i na serwerze.

Podpis
By KML
Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-11-05, 00:15


silentus

#define true false






Wiek: 30
Na forum: 5282 dni
Posty: 71
Nick w MP: .silent

Piwa: 1462

Respekt: 116,1
Respekt: 116,1

Kod:


VehicleInfo[id][vID] = CreateVehicle(522, 0.0, 0.0, 0.0, 0.0, -1, -1, -1); // vID = id pojazdu na serwerze (CreateVehicle())
Veh[VehicleInfo[id][vID]] = id; // Veh[vID] = ID pojazdu w bazie danych
SetVehicleToRespawn(VehicleInfo[id][vID]);

loaded++;

format(str, sizeof(str), "(UID: %d)", VehicleInfo[id][vID]); // formatujesz tak by UID by?o r?wne vID, ale vID to ID z CreateVehicle


Zamie? VehicleInfo[id][vID] na Veh[VehicleInfo[id][vID]] lub po prostu na id..ale ca?e to ?adowanie pojazd?w jest ?le napisane. U?ywasz id z bazy danych w tablicy VehicleInfo, ale ID z bazy danych b?d? ci?gle ros?y, mimo ?e stare pojazdy b?d? usuwane. Po jakim? czasie po prostu wielko?? id z bazy przekroczy wielko?? tablicy i wywali Ci invalid memory access.
?eby to zrobi? dobrze, musisz zrobi? tablic? pojazd?w, a przy tworzeniu pojazdu wyszukiwa? w niej wolnego miejsca i tam wsadza? tworzony pojazd, jego ID etc. Wtedy gdy masz tablic? na wszystkie pojazdy serwera (nie tylko te zapisane w bazie), dodajesz w niej np privVehID, kt?re domy?lnie ustawiasz na np. -1 (?eby oznaczy? w ten spos?b normalne pojazdy, nie zapisane w bazie).
Wtedy je?li np. privVehID != -1, to ID z bazy mo?esz wyci?gn?? w taki spos?b: privVeh[Veh[GetPlayerVehicleID(playerid)][privVehID]][ID]

Oczywi?cie to tylko uog?lniony przyk?ad, nie mo?esz bezpo?rednio u?y? GetPlayerVehicleID bez wcze?niejszego upewnienia si?, ?e gracz jest w poje?dzie.

btw nie u?ywaj int(11) tylko po prostu int, przy liczbach to nie ma sensu a wr?cz dodaje zb?dnego nadmiaru, bo zmienia to tylko spos?b prezentowania liczby (11 cyfr).

Podpis


Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-11-05, 02:42


JestemSuperLIKE

Początkujący grafik






Wiek: 27
Na forum: 3694 dni
Posty: 133

Piwa: 6

Respekt: 40

Zamieni?em. Z bazy pojazd o VID 1 wy?wietla Text3D a pojazd o VID 3 nie wy?wietla. Zrobi?em od nowa system tworzenia pojazd?w. Ca?y czas mam problem z tym vID. Nie wiem jak najlepiej to zrobi?. Mo?na by by?o zrobi? takie co? np. w bazie s? pojazdy o VID 1,2 i 4. Jak bym chcia? stworzy? pojazd to by poszuka?o wolne VID czyli 3. I by jeszcze w Text3D wy?wietla?o prawid?owo VID. Mo?na by stworzy? pojazd i zaparkowa? w salonie i potem kupi?. Co do tego kodu co najlepiej zrobi??
Pawn

#include <a_samp>
#include <a_mysql>
#include <Pawn.CMD>
#include <sscanf2>

main(){}

#define        MYSQL_HOST             ""
#define        MYSQL_USER             ""
#define        MYSQL_PASSWORD     ""
#define        MYSQL_DATABASE     ""

new MySQLg_SQL;

enum vInfo
{
    vID,
    vModel,
    Text3D:vLabel
};
new VehicleInfo[MAX_VEHICLES][vInfo];

public OnGameModeInit()
{
    Connect();
    SetupVehicleTable();
    mysql_tquery(g_SQL"SELECT * FROM `veh`""LoadVehicles");
    return 1;
}

public OnGameModeExit()
{
    new saved;
    if(cache_num_rows())
    {
        while(saved cache_num_rows())
        {
            SaveVehicle(saved);

            saved++;
        }
    }
    printf("%d saved vehicles"saved);

    mysql_close(g_SQL);
    return 1;
}

Connect()
{
    new MySQLOptoption_id mysql_init_options();
    
    mysql_set_option(option_idAUTO_RECONNECTtrue);

    g_SQL mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASSWORDMYSQL_DATABASEoption_id);
    if(g_SQL == MYSQL_INVALID_HANDLE || mysql_errno(g_SQL) != 0)
    {
        print("OFF SERVER!");
        SendRconCommand("exit");
        return 1;
    }
    else
    {
        print("ON SERVER!");
    }
    return 1;
}

SetupVehicleTable()
{
    new query[1024];
    
    strcat(query"CREATE TABLE IF NOT EXISTS `veh` (`vehid` int, `vehmodel` int default '0', PRIMARY KEY (`vehid`), UNIQUE KEY `vehid_2` (`vehid`), KEY `vehid` (`vehid`))");
    mysql_tquery(g_SQLquery);
    return 1;
}

CreateVehicle_2(model)
{
    new IDquery[512], str[512];

    VehicleInfo[ID][vID] = CreateVehicle(model, -23.967830.59663.1172324.9064, -1, -1, -1);
    VehicleInfo[ID][vModel] = model;

    SetVehicleToRespawn(VehicleInfo[ID][vID]);

    mysql_format(g_SQLquerysizeof(query), "INSERT INTO `veh` (`vehid`, `vehmodel`) VALUES ('%d', '%d')"VehicleInfo[ID][vID], model);
    mysql_tquery(g_SQLquery);

    format(strsizeof(str), "{0b62ed}VID: {00d820}%d"VehicleInfo[ID][vID]);
    VehicleInfo[ID][vLabel] = Create3DTextLabel(str, -10.00.00.050.00);
    Attach3DTextLabelToVehicle(VehicleInfo[ID][vLabel], VehicleInfo[ID][vID], 0.00.01.0);
    return 1;
}

forward LoadVehicles();
public LoadVehicles()
{
    new loadedIDstr[512];
    if(cache_num_rows())
    {
        while(loaded cache_num_rows())
        {
            cache_get_value_int(loaded"vehid"VehicleInfo[ID][vID]);
            cache_get_value_int(loaded"vehmodel"VehicleInfo[ID][vModel]);

            VehicleInfo[ID][vID] = CreateVehicle(VehicleInfo[ID][vModel], -23.967830.59663.1172324.9064, -1, -1, -1);

            SetVehicleToRespawn(VehicleInfo[ID][vID]);

            loaded++;

            format(strsizeof(str), "{0b62ed}VID: {00d820}%d"VehicleInfo[ID][vID]);
            VehicleInfo[ID][vLabel] = Create3DTextLabel(str, -10.00.00.050.00);
            Attach3DTextLabelToVehicle(VehicleInfo[ID][vLabel], VehicleInfo[ID][vID], 0.00.01.0);
        }
    }
    printf("%d loaded vehicles"loaded);
    return 1;
}

SaveVehicle(S_VID)
{
    new query[512];
    mysql_format(g_SQLquerysizeof(query), "UPDATE `veh` SET `vehid` = %d, `vehmodel` = %d WHERE `vehid` = %d LIMIT 1"VehicleInfo[S_VID][vID], VehicleInfo[S_VID][vModel], VehicleInfo[S_VID][vID]);
    mysql_tquery(g_SQLquery);
    return 1;
}

DeleteVehicle(D_VID)
{
    new query[512], IDVeh[MAX_VEHICLES];

    VehicleInfo[ID][vID] = DestroyVehicle(D_VID);
    Veh[VehicleInfo[ID][vID]] = D_VID;

    mysql_format(g_SQLquerysizeof(query), "DELETE FROM `veh` WHERE `vehid` = %d LIMIT 1"D_VID);
    mysql_tquery(g_SQLquery);
    return 1;
}

CMD:stworz(playeridparams[])
{
    new model;
    if(sscanf(params"d"model)) return SendClientMessage(playerid, -1"/stworz [MODEL ID]");
    CreateVehicle_2(model);
    return 1;
}

CMD:usun(playeridparams[])
{
    new del_vid;
    if(sscanf(params"d"del_vid)) return SendClientMessage(playerid, -1"/usun [VID]");
    DeleteVehicle(del_vid);
    return 1;
}

public OnPlayerSpawn(playerid)
{
    SetPlayerSkin(playerid29);
    SetPlayerPos(playerid, -23.967830.59663.1172);
    SetPlayerFacingAngle(playerid324.9064);
    return 1;
}


Podpis
By KML
Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-11-05, 18:45


silentus

#define true false






Wiek: 30
Na forum: 5282 dni
Posty: 71
Nick w MP: .silent

Piwa: 1462

Respekt: 116,1
Respekt: 116,1

Pawn
#include <a_samp>
#include <a_mysql>
#include <Pawn.CMD>
#include <sscanf2>

main(){}

#define        MYSQL_HOST             ""
#define        MYSQL_USER             ""
#define        MYSQL_PASSWORD     ""
#define        MYSQL_DATABASE     ""

new MySQLg_SQL;

// wielko?? znak?w w enumie (a raczej pierwszego znaku) ma znaczenie - z ma?ej litery to s? tzw. weak enumy kt?re nie wymagaj? podawania tagu, s? "globalne"
// w tym przypadku lepiej miec strong enum kt?ry wymaga poprawnego tagu (E_VEH_INFO:) dzieki czemu nie beda sie klocily inne enumy z tym, np enum od gracza tez moze miec pole UID
enum E_VEH_INFO
{
    UID,
    vModel,
    Text3D:vLabel
};
new VehicleInfo[MAX_VEHICLES+1][E_VEH_INFO]; // +1 bo ID pojazd?w zaczynaj? si? od 1 a nie od 0 i mo?e ich by? MAX_VEHICLES (2000)
new VehiclesCount 0;

//  Lepiej miec jedna glowna duza tablice do formatowania niz tworzyc nowe za kazdym razem, dostep do globalnych zmiennych jest o wiele szybszy
// ja u siebie mam tablice na ponad 2500 znakow zeby byl zapas
new fmtstr[1024];

public OnGameModeInit()
{
    Connect();
    SetupVehicleTable();
    mysql_tquery(g_SQL"SELECT * FROM `veh`""LoadVehicles");
    return 1;
}

public OnGameModeExit()
{
    new saved 1;
    if(VehiclesCount 0)
    {
        while(saved <= VehiclesCount)
        {
            SaveVehicle(saved);

            saved++;
        }
    }
    printf("%d saved vehicles"saved);

    mysql_close(g_SQL);
    return 1;
}

Connect()
{
    new MySQLOptoption_id mysql_init_options();
    
    mysql_set_option(option_idAUTO_RECONNECTtrue);

    g_SQL mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASSWORDMYSQL_DATABASEoption_id);
    if(g_SQL == MYSQL_INVALID_HANDLE || mysql_errno(g_SQL) != 0)
    {
        print("OFF SERVER!");
        SendRconCommand("exit");
        return 1;
    }
    else
    {
        print("ON SERVER!");
    }
    return 1;
}

SetupVehicleTable()
{
    mysql_tquery(g_SQL"CREATE TABLE IF NOT EXISTS `veh` (`vehid` int AUTO_INCREMENT, `vehmodel` int default '0', PRIMARY KEY (`vehid`))");
    return 1;
}

CreateVehicle_2(model)
{
    new ID;

    ID CreateVehicle(model, -23.967830.59663.1172324.9064, -1, -1, -1);
    if(ID || ID == INVALID_VEHICLE_ID)
        return 0;
    VehicleInfo[ID][vModel] = model;

    SetVehicleToRespawn(ID);

    mysql_format(g_SQLfmtstrsizeof(fmtstr), "INSERT INTO `veh` (`vehmodel`) VALUES (%d)"model);
    // lokalne query wykonujace sie w tym samym watku (blokuje watek), nie chcialo mi sie dorabiac do tego callbacka
    new Cache:ch mysql_query(g_SQLfmtstr);
    VehicleInfo[ID][UID] = cache_insert_id();
    cache_delete(ch);
    VehiclesCount++;

    format(fmtstrsizeof(str), "{0b62ed}UID: {00d820}%d"VehicleInfo[ID][UID]);
    VehicleInfo[ID][vLabel] = Create3DTextLabel(str, -10.00.00.050.00);
    Attach3DTextLabelToVehicle(VehicleInfo[ID][vLabel], ID0.00.01.0);
    return 1;
}

forward LoadVehicles();
public LoadVehicles()
{
    new loadedIDmodel;
    if(cache_num_rows())
    {
        while(loaded cache_num_rows())
        {
            cache_get_value_int(loaded"vehmodel"model);

            ID CreateVehicle(model, -23.967830.59663.1172324.9064, -1, -1, -1);

            cache_get_value_int(loaded"vehid"VehicleInfo[ID][UID]);
            VehicleInfo[ID][vModel] = model;
            SetVehicleToRespawn(ID); // ID jest indeksem tablicy VehicleInfo i jednoczesnie ID sampowego pojazdu, [UID] to unikalne id z bazy danych

            loaded++;

            format(fmtstrsizeof(fmtstr), "{0b62ed}UID: {00d820}%d"VehicleInfo[ID][UID]);
            VehicleInfo[ID][vLabel] = Create3DTextLabel(fmtstr, -10.00.00.050.00);
            Attach3DTextLabelToVehicle(VehicleInfo[ID][vLabel], ID0.00.01.0);
        }
    }
    printf("%d loaded vehicles"loaded);
    return 1;
}

// SaveVehicle uzywa sampowego ID (1-2000)
SaveVehicle(S_VID)
{
    mysql_format(g_SQLfmtstrsizeof(fmtstr), "UPDATE `veh` SET `vehmodel` = %d WHERE `vehid` = %d LIMIT 1;"VehicleInfo[S_VID][vModel], VehicleInfo[S_VID][UID]);
    mysql_tquery(g_SQLfmtstr);
    return 1;
}

// DeleteVehicle uzywa UID z bazy danych
DeleteVehicle(D_UID)
{
    new ID = -1// Tu by?a niezla sieczka, po co ta tablica Veh[MAX_VEHICLES]?

    // GetVehiclePoolSize() zwraca najwieksze ID pojazdu, dalej nie musimy sprawdzac bo wiadomo ze nie ma wiecej pojazdow
    for(new 1GetVehiclePoolSize(); <= ji++)
    {
        if(VehicleInfo[i][UID] == D_UID)
        {
            ID i;
            break;
        }
    }
    if(ID == -1// nie znaleziono pojazdu o takim UID
        return 0;

    DestroyVehicle(ID);
    mysql_format(g_SQLfmtstrsizeof(fmtstr), "DELETE FROM `veh` WHERE `vehid` = %d LIMIT 1"D_UID);
    mysql_tquery(g_SQLfmtstr);
    VehicleInfo[ID][UID] = -1;
    return 1;
}

CMD:stworz(playeridparams[])
{
    new model;
    if(sscanf(params"d"model)) return SendClientMessage(playerid, -1"/stworz [MODEL ID]");
    CreateVehicle_2(model);
    return 1;
}

CMD:usun(playeridparams[])
{
    new del_uid;
    if(sscanf(params"d"del_uid)) return SendClientMessage(playerid, -1"/usun [UID]");
    DeleteVehicle(del_uid);
    return 1;
}

public OnPlayerSpawn(playerid)
{
    SetPlayerSkin(playerid29);
    SetPlayerPos(playerid, -23.967830.59663.1172);
    SetPlayerFacingAngle(playerid324.9064);
    return 1;
}


Podpis


Postaw piwo autorowi tego posta
 

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


JestemSuperLIKE

Początkujący grafik






Wiek: 27
Na forum: 3694 dni
Posty: 133

Piwa: 6

Respekt: 40

Okej, dzia?a. Dzi?ki. A gdybym chcia? ?eby by?o maksymalnie np. 50 pojazd?w.
Mam to zamieni?
Pawn
new VehicleInfo[MAX_VEHICLES+1][E_VEH_INFO];

na
Pawn
]new VehicleInfo[49+1][E_VEH_INFO];

Tak? I jeszcze jedno pytanie. Po co jest break?
Pawn

    for(new 1GetVehiclePoolSize(); <= ji++)
    {
        if(VehicleInfo[i][UID] == D_UID)
        {
            ID i;
            break;
        }
    }


Podpis
By KML
Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-11-05, 22:55


silentus

#define true false






Wiek: 30
Na forum: 5282 dni
Posty: 71
Nick w MP: .silent

Piwa: 1462

Respekt: 116,1
Respekt: 116,1

Break "?amie" p?tle po prostu z niej wychodz?c, w tym momencie znale?li?my pojazd wi?c nie ma po co dalej sprawdza?.

Jak chcesz zrobi? okre?lon? liczb? prywatnych pojazd?w to trzeba to przerobi?.
Pawn
#include <a_samp>
#include <a_mysql>
#include <Pawn.CMD>
#include <sscanf2>

main(){}

#define        MYSQL_HOST             ""
#define        MYSQL_USER             ""
#define        MYSQL_PASSWORD     ""
#define        MYSQL_DATABASE     ""

new MySQLg_SQL;

#define MAX_PVEHS 50
enum E_PVEH_INFO
{
    UID,
    vID,
    vModel,
    Text3D:vLabel
};
new pvehInfo[MAX_PVEHS+1][E_PVEH_INFO]; // tu zastosujemy ten sam patent, czyli ID priv?w zaczynaja si? od 1. Dzieki temu nie musimy ustawiac pvehID w VehicleInfo na -1 (bo nie kazdy pojazd moze byc privem)
new pvehsCount 0;

// makro do sprawdzania czy priv istnieje
#define pvehExists(%0) (%0 > 0 && %0 < MAX_PVEHS+1 && pvehInfo[%0][UID] > 0)

// dane wszystkich pojazd?w na serwerze, je?li pojazd jest prywatny to w pvehID ma sw?j indeks w tablicy pvehInfo
enum E_VEHICLE_INFO
{
    pvehID
};
new VehicleInfo[MAX_VEHICLES+1][E_VEHICLE_INFO];

//  Lepiej miec jedna glowna duza tablice do formatowania niz tworzyc nowe za kazdym razem, dostep do globalnych zmiennych jest o wiele szybszy
// ja u siebie mam tablice na ponad 2500 znakow zeby byl zapas
new fmtstr[1024];

public OnGameModeInit()
{
    Connect();
    SetupVehicleTable();
    mysql_tquery(g_SQL"SELECT * FROM `veh`""LoadVehicles");
    return 1;
}

public OnGameModeExit()
{
    new saved 1;
    if(pvehsCount 0)
    {
        while(saved <= pvehsCount)
        {
            SaveVehicle(saved);

            saved++;
        }
    }
    printf("%d saved vehicles"saved);

    mysql_close(g_SQL);
    return 1;
}

Connect()
{
    new MySQLOptoption_id mysql_init_options();
    
    mysql_set_option(option_idAUTO_RECONNECTtrue);

    g_SQL mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASSWORDMYSQL_DATABASEoption_id);
    if(g_SQL == MYSQL_INVALID_HANDLE || mysql_errno(g_SQL) != 0)
    {
        print("OFF SERVER!");
        SendRconCommand("exit");
        return 1;
    }
    else
    {
        print("ON SERVER!");
    }
    return 1;
}

SetupVehicleTable()
{
    mysql_tquery(g_SQL"CREATE TABLE IF NOT EXISTS `veh` (`vehid` int AUTO_INCREMENT, `vehmodel` int default '0', PRIMARY KEY (`vehid`))");
    return 1;
}

CreateVehicle_2(model)
{
    new vid=-ID=-1;

    vid CreateVehicle(model, -23.967830.59663.1172324.9064, -1, -1, -1);
    if(vid || vid == INVALID_VEHICLE_ID)
        return 0;
    // trzeba znalezc wolny slot na prywatny pojazd
    for(new 1sizeof pvehInfoi++)
    {
        if(!pvehExists(i))
        {
            ID i;
            break;
        }
    }
    if(ID == -1)
    {
        printf("ERROR brak miejsca na kolejne pojazdy, zwi?ksz MAX_PVEHS");
        return 0;
    }
    pvehInfo[ID][vModel] = model;
    pvehInfo[ID][vID] = vid// id sampowego pojazdu
    VehicleInfo[vid][pvehID] = ID// "relacja" miedzy sampowym pojazdem a danymi prywatnego pojazdu



    SetVehicleToRespawn(vid);

    mysql_format(g_SQLfmtstrsizeof(fmtstr), "INSERT INTO `veh` (`vehmodel`) VALUES (%d)"model);
    // lokalne query wykonujace sie w tym samym watku (blokuje watek), nie chcialo mi sie dorabiac do tego callbacka
    new Cache:ch mysql_query(g_SQLfmtstr);
    pvehInfo[ID][UID] = cache_insert_id();
    cache_delete(ch);
    pvehsCount++;

    format(fmtstrsizeof(str), "{0b62ed}UID: {00d820}%d"pvehInfo[ID][UID]);
    pvehInfo[ID][vLabel] = Create3DTextLabel(str, -10.00.00.050.00);
    Attach3DTextLabelToVehicle(VehicleInfo[ID][vLabel], vid0.00.01.0);
    return 1;
}

forward LoadVehicles();
public LoadVehicles()
{
    new loadedvidIDmodel;
    if(cache_num_rows())
    {
        while(loaded cache_num_rows())
        {
            cache_get_value_int(loaded"vehmodel"model);

            vid CreateVehicle(model, -23.967830.59663.1172324.9064, -1, -1, -1);

            // ladujemy pojazdy na starcie serwera wiec nie trzeba szukac wolnego id w tablicy pvehInfo tylko po prostu dodawac po kolei
            cache_get_value_int(loaded"vehid"pvehInfo[loaded][UID]);
            pvehInfo[loaded][vModel] = model;
            pvehInfo[loaded][vID] = vid;
            VehicleInfo[vid][pvehID] = loaded;
            SetVehicleToRespawn(vid);

            loaded++;

            format(fmtstrsizeof(fmtstr), "{0b62ed}UID: {00d820}%d"pvehInfo[loaded][UID]);
            pvehInfo[loaded][vLabel] = Create3DTextLabel(fmtstr, -10.00.00.050.00);
            Attach3DTextLabelToVehicle(pvehInfo[ID][vLabel], ID0.00.01.0);
        }
    }
    printf("%d loaded vehicles"loaded);
    return 1;
}

// SaveVehicle uzywa ID prywatnego pojazdu (indeks pvehInfo)
SaveVehicle(pvehid)
{
    if(!pvehExists(pvehid))
        return 0;
    mysql_format(g_SQLfmtstrsizeof(fmtstr), "UPDATE `veh` SET `vehmodel` = %d WHERE `vehid` = %d LIMIT 1;"pvehInfo[pvehid][vModel], pvehInfo[pvehid][UID]);
    mysql_tquery(g_SQLfmtstr);
    return 1;
}

// DeleteVehicle uzywa ID prywatnego pojazdu
DeleteVehicle(pvehid)
{
    if(!pvehExists(pvehid))
        return 0;

    DestroyVehicle(pvehInfo[pvehid][vID]);
    mysql_format(g_SQLfmtstrsizeof(fmtstr), "DELETE FROM `veh` WHERE `vehid` = %d LIMIT 1"pvehInfo[pvehid][UID]);
    mysql_tquery(g_SQLfmtstr);
    pvehInfo[pvehid][UID] = -1;
    VehicleInfo[pvehInfo[pvehid][vID]][pvehID] = -1;
    return 1;
}

CMD:stworz(playeridparams[])
{
    new model;
    if(sscanf(params"d"model)) return SendClientMessage(playerid, -1"/stworz [MODEL ID]");
    CreateVehicle_2(model);
    return 1;
}

CMD:usun(playeridparams[])
{
    new uiddel_uid=-1;
    if(sscanf(params"d"uid)) return SendClientMessage(playerid, -1"/usun [UID]");
    // najpierw trzeba znalezc id priva po jego UID
    for(new 1sizeof pvehInfoi++)
    {
        if(pvehExists(i) && pvehInfo[i][UID] == del_uid)
        {
            del_uid i;
            break;
        }
    }
    if(del_uid == -1)
        return SendClientMessage(playerid, -1"Nie odnaleziono takiego pojazdu");
    DeleteVehicle(del_uid);
    return 1;
}

public OnPlayerSpawn(playerid)
{
    SetPlayerSkin(playerid29);
    SetPlayerPos(playerid, -23.967830.59663.1172);
    SetPlayerFacingAngle(playerid324.9064);
    return 1;
}


Podpis


Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-11-05, 23:39


JestemSuperLIKE

Początkujący grafik






Wiek: 27
Na forum: 3694 dni
Posty: 133

Piwa: 6

Respekt: 40

Jak to naprawi??
Kod:


(130) : warning 213: tag mismatch
(130) : error 032: array index out of bounds (variable "VehicleInfo")

Mam jedno pytanie. Czy to jest dobry pomys? tworzy? to samo co np. VehicleInfo to b?d? pojazdy do kupienia a PrivInfo to b?d? prywatne pojazdy. Po kupnie pojazdu wysy?a zapytanie INSERT INTO ze to jest prywatny pojazd czyli UID, do kogo nale?y ten pojazd, modelid.

EDIT: Jeszcze mam taki problem. Po wpisaniu w dialogu model, price, color1 i color2,. pojazd Elegy si? tworzy ale mnie wsiada do pojazdu VID 1. I tak przez ca?y czas jak tworz? nast?pny pojazd.
Pawn

                new tmp_var[3], Float:ppos[4], vehxid;

                tmp_var[0] = GetPVarInt(playerid"xv_ao_model");
                tmp_var[1] = GetPVarInt(playerid"xv_ao_col1");
                tmp_var[2] = GetPVarInt(playerid"xv_ao_col2");

                GetPlayerPos(playeridppos[0], ppos[1], ppos[2]);
                GetPlayerFacingAngle(playeridppos[3]);

                veh StworzPojazd(tmp_var[0], strval(inputtext), ppos[0], ppos[1], ppos[2], ppos[3], tmp_var[1], tmp_var[2]);
                xid Veh[veh];

                PutPlayerInVehicle(playeridveh0);

                new str[256]; 

                format(strsizeof(str), "Pojazd %s (%d) zosta? utworzony z kolorami %d, %d"GetVehicleNameFromModel(VehicleInfo[xid][vModel]), VehicleInfo[xid][vModel], VehicleInfo[xid][vColor1], VehicleInfo[xid][vColor2]);
                SendClientMessage(playerid, -1str);

                format(strsizeof(str), "Identyfikator pojazdu: %d, Cena: $%d"VehicleInfo[xid][UID], VehicleInfo[xid][vPrice]);
                SendClientMessage(playerid, -1str);

                DeletePVar(playerid"xv_ao_model");
                DeletePVar(playerid"xv_ao_col1");
                DeletePVar(playerid"xv_ao_col2");


Podpis
By KML
Postaw piwo autorowi tego posta
 

 
Tagi: mysql :: vid
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » PAWN » MySQL VID Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

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
Dodaj temat do Ulubionych
Wersja do druku