GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi

MySQL' sorunsalı

Başlatan VERITAS, 24 Nisan 2020, 06:20:15

« önceki - sonraki »

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

VERITAS

Selamlar,

Araç sistemleri ve MySQL hakkında araştırmalar yaptım ve kendime göre bir sistem kodladım. Sistemde her şey çok güzel işliyor fakat şöyle bir durum var;

Kullanıcı araç satın aldığında MySQL'e aracın sahibini aracın modelini spawn koordinatlarını vs vs. direkt olarak kaydediyor. Fakat /araclarim gibi bir komut ayarladığımda ise kullanıcının araçları gözükmüyor fakat sunucuyu kapatıp tekrardan açınca sanırsam MySQL sunucuya bilgileri yüklüyor o arada tam bilmiyorum bu durumu nasıl işliyor. Her neyse tekrar sunucuyu açtıktan sonra tekrardan /araclarim yazıyor bu sefer karaktere kayıtlı olan araçlar gözüküyor. Yani anlamadığım şey neden sunucuyu aç-kapa yapmam gerekiyor MySQL tabandaki verilere kullanıcının erişebilmesi için? Oysaki  MySQL'e kayıtlı bilgiler.

Cevaplar için şimdiden teşekkürler, herkese iyi forumlar dilerim.


Buzz

Araç oluşturma fonksiyonunu atar mısın?


#Codec

Araç oluşturma fonksiyonunu atarsan yardımcı olabilirim.

"Hayat zordu ama güzeldi"

VERITAS

Yanıtınız için teşekkürler birazdan bilgisayara geçeceğim. Kodu yazacağım.

Alıntı yapılan: Buzz - 24 Nisan 2020, 06:24:12
Araç oluşturma fonksiyonunu atar mısın?

Alıntı yapılan: #Codec - 24 Nisan 2020, 08:32:50
Araç oluşturma fonksiyonunu atarsan yardımcı olabilirim.

Arkadaşlar tam olarak istediğiniz araç yaratma fonksiyonu kullanıcı aracı satın alınca olan mı yoksa sunucu açılıp kapandıktan sonra sql tabandan veriyi alıp aracı yaratan fonksiyon mu hangisinden bahsediyorsunuz?
Son düzenlenme: 24 Nisan 2020, 14:46:11 Enkei Sebep: Flood iletiler birleştirilmiştir.

VERITAS

OnGameModeInıt

PAWN Kodu: Seç
mysql_tquery(g_SQL, "SELECT * FROM `araclar` ORDER BY  `araclar`.`AracID` ASC ", "LoadAraclar", "");
PAWN Kodu: Seç
forward public LoadAraclar();
public LoadAraclar()
{
static rows;
cache_get_row_count(rows);
if(rows)
{
for(new idx = 1; idx <= rows; idx++)
{
            cache_get_value_name_int(idx-1, "AracID", Araclar[idx][AracID]);
            cache_get_value_name_int(idx-1, "AracModel", Araclar[idx][AracModel]);
cache_get_value_name_float(idx-1, "AracAngle", Araclar[idx][AracAngle]);
cache_get_value_name_int(idx-1, "AracRenk1", Araclar[idx][AracRenk1]);
cache_get_value_name_int(idx-1, "AracRenk2", Araclar[idx][AracRenk2]);
cache_get_value_name(idx-1, "AracSahibi", Araclar[idx][AracSahibi], 255);
cache_get_value_name(idx-1, "AracPlaka", Araclar[idx][AracPlaka], 255);
cache_get_value_name_float(idx-1, "AracX", Araclar[idx][AracX]);
cache_get_value_name_float(idx-1, "AracY", Araclar[idx][AracY]);
cache_get_value_name_float(idx-1, "AracY", Araclar[idx][AracY]);

      Araclar[idx][AracID] = CreateVehicle(Araclar[idx][AracModel], Araclar[idx][AracX], Araclar[idx][AracY], Araclar[idx][AracZ], Araclar[idx][AracAngle], Araclar[idx][AracRenk1], Araclar[idx][AracRenk2], -1);
      SetVehicleNumberPlate(Araclar[idx][AracID], Araclar[idx][AracPlaka]);
      SetVehicleToRespawn(Araclar[idx][AracID]);

TOTAL_ARAC++;

}
}
printf( "[Sunucu] %d tane arac yüklendi", TOTAL_ARAC);
return 1;
}

@#Codec @Buzz
Son düzenlenme: 24 Nisan 2020, 14:51:34 Enkei Sebep: Flood iletiler birleştirilmiştir.

VERITAS




Gördüğünüz üzere yani sunucuyu aç kapa yapmazsam gözükmüyor nedense.


Eamon

Eğer araç oluşturduğunda bilgileri yazmıyorsa, araç oluşturma fonksiyonunda bazı araç verileri tanımlanmıyordur. Oyunu sen kapatıp açtığında araç verileri tamamen yüklendiği içinde aracın tam bilgilerini büyük ihtimal görüyorsundur.

Bugünün güzel zamanları, yarının üzücü düşünceleridir.

VERITAS

Alıntı yapılan: Metafor - 24 Nisan 2020, 17:26:59
Eğer araç oluşturduğunda bilgileri yazmıyorsa, araç oluşturma fonksiyonunda bazı araç verileri tanımlanmıyordur. Oyunu sen kapatıp açtığında araç verileri tamamen yüklendiği içinde aracın tam bilgilerini büyük ihtimal görüyorsundur.

Yani kullanıcı aracı satın aldığında araç oluşturuluyor o fonkisyonda mı bir sorun olduğunu söylüyorsunuz?

@Metafor


Eamon

Alıntı yapılan: VERITAS - 24 Nisan 2020, 18:01:52
Alıntı yapılan: Metafor - 24 Nisan 2020, 17:26:59
Eğer araç oluşturduğunda bilgileri yazmıyorsa, araç oluşturma fonksiyonunda bazı araç verileri tanımlanmıyordur. Oyunu sen kapatıp açtığında araç verileri tamamen yüklendiği içinde aracın tam bilgilerini büyük ihtimal görüyorsundur.

Yani kullanıcı aracı satın aldığında araç oluşturuluyor o fonkisyonda mı bir sorun olduğunu söylüyorsunuz?

@Metafor

Öyle düşünüyorum evet, kodları felan atarsan inceleriz.

Bugünün güzel zamanları, yarının üzücü düşünceleridir.

Wisdom

createveh fonksiyonunu ve /araclarim komutunu atma şansın var mı? Ben sana benimkinin örneğini atarım, ona göre uyarlarsın


VERITAS

PAWN Kodu: Seç
case 52:
{
if(!response)
{
format(String, 128, "Landstalker: 20.000$");
ShowPlayerDialog(playerid, 50, DIALOG_STYLE_LIST, String, "Satın Al\nVazgeç", "Tamam", "İptal");
}
if(response)
{
                new ilkrenk, ikincirenk;
                if(sscanf(inputtext,"p<,>dd", ilkrenk, ikincirenk))
                {
                new String1[100];
                strcat(String1,"\
                Kullanım: İlkrenk, İkincirenk\n\n\
                    Örneğin: 0, 0\n\n");
                        return ShowPlayerDialog(playerid, 52, DIALOG_STYLE_INPUT, "Landstaler: 20.000$", "Aracın ilk rengini ve ikinci rengini değerler arasına (,) virgül işareti koyarak yazınız.", "Satın Al", "Vazgeç");
        }
                    if(ilkrenk < 0 || ilkrenk > 255) return SendErrorMessage(playerid, COLOR_GREY, "İlk renk değeri 0 - 250 olmalıdır.");
                    if(ikincirenk < 0 || ikincirenk > 255) return SendErrorMessage(playerid, COLOR_GREY, "İkinci renk değeri 0 - 250 olmalıdır.");
if(Player[playerid][Money] >= 20000)
{
                        new Float: X, Float: Y, Float: Z;
                        GetPlayerPos(playerid, X, Y, Z);
                        new vehID = CreateVehicle(400, X, Y, Z, 0.0, ilkrenk, ikincirenk, -1);
                        SetVehicleVirtualWorld(vehID, GetPlayerVirtualWorld(playerid));
                        PutPlayerInVehicle(playerid, vehID, 0);
                        TOTAL_ARAC++;
                        //vehID = GetPlayerVehicleID(playerid);
                        new rand1 = 1000 + random(8999);
                        new rand2 = random(99);
                        format(String, 128, "FC-%d-%d", rand1, rand2);
                        SetVehicleNumberPlate(vehID, String);
                        SetVehicleToRespawn(vehID);
    GiveMoney(playerid, -20000);
    SendClientMessage(playerid, -1, "Landstalker model aracı 20.000$'a satın aldınız.");
    SendClientMessage(playerid, -1, "Aracınızı /park yazarak park etmeyi unutmayınız.");
    new queryString[255];
                        format(queryString, sizeof(queryString), "INSERT INTO araclar (AracID,AracModel,AracX,AracY,AracZ,AracAngle,AracRenk1,AracRenk2,AracSahibi,AracPlaka)\
                        VALUES('%d', '400', '%f', '%f', '%f', '0', '%d', '%d', '%s', '%s')",
                        TOTAL_ARAC,
                        X,
                        Y,
Z,
ilkrenk,
ikincirenk,
Player[playerid][Name],
String);
                        mysql_query(g_SQL, queryString);
                       
                    }
                    else return SendClientMessage(playerid, -1, "Bu aracı alabilmek için yeterli paranız bulunmamaktadır.");
}
}


PAWN Kodu: Seç
CMD:araclarim(playerid, params[])
{
for(new idx = 1; idx <= TOTAL_ARAC; idx++)
{
if(!strcmp(Araclar[idx][AracSahibi], Player[playerid][Name], true, 24))
{

format(String, 270, "Araç NO: [%d], Araç Sahibi: [%s], Araç Plakası: [%s]", Araclar[idx][AracID], Araclar[idx][AracSahibi], Araclar[idx][AracPlaka]);
SendClientMessage(playerid, -1, String);
}
}
return 1;
}

@Metafor


Wisdom

araç enumundaki verileri ayarlamıyorsun, şöyle bir örnek atayım sana:
PAWN Kodu: Seç
       new vid = Iter_Free(Vehicles);



VehicleInfo[vid][vModel] = model;
VehicleInfo[vid][vOwner] = PlayerInfo[owner][pSQLID];
VehicleInfo[vid][vPrice] = price;
VehicleInfo[vid][vColor1] = vc1;
VehicleInfo[vid][vColor2] = vc2;
VehicleInfo[vid][vX] = x;
VehicleInfo[vid][vY] = y;
VehicleInfo[vid][vZ] = z;



format(query, sizeof(query), "INSERT INTO `vehicles`(vmodel, vowner, vprice, vc1, vc2, vx, vy, vz) VALUES('%i', '%i', '%i', '%i', '%i', '%f', '%f', '%f')",
VehicleInfo[vid][vModel],
  VehicleInfo[vid][vOwner],
  VehicleInfo[vid][vPrice],
  VehicleInfo[vid][vColor1],
  VehicleInfo[vid][vColor2],
  VehicleInfo[vid][vX],
  VehicleInfo[vid][vY],
  VehicleInfo[vid][vZ]
);
mysql_query(sqlC, query);
  VehicleInfo[vid][vSQLID] = cache_insert_id();
Buradaki gibi aracı satın aldıktan sonra araç enumuna yeni veri eklemen lazım. Bunu iterator kullanarak yapabilirsin.

edit: Iterator kullanımını öğrenmek için incele: https://www.gtamulti.com/forum/anlatimlar/foreach-kullanimi/
Son düzenlenme: 24 Nisan 2020, 18:38:10 Wisdom

VERITAS

Alıntı yapılan: Wisdom - 24 Nisan 2020, 18:35:20
araç enumundaki verileri ayarlamıyorsun, şöyle bir örnek atayım sana:
PAWN Kodu: Seç
       new vid = Iter_Free(Vehicles);



VehicleInfo[vid][vModel] = model;
VehicleInfo[vid][vOwner] = PlayerInfo[owner][pSQLID];
VehicleInfo[vid][vPrice] = price;
VehicleInfo[vid][vColor1] = vc1;
VehicleInfo[vid][vColor2] = vc2;
VehicleInfo[vid][vX] = x;
VehicleInfo[vid][vY] = y;
VehicleInfo[vid][vZ] = z;



format(query, sizeof(query), "INSERT INTO `vehicles`(vmodel, vowner, vprice, vc1, vc2, vx, vy, vz) VALUES('%i', '%i', '%i', '%i', '%i', '%f', '%f', '%f')",
VehicleInfo[vid][vModel],
  VehicleInfo[vid][vOwner],
  VehicleInfo[vid][vPrice],
  VehicleInfo[vid][vColor1],
  VehicleInfo[vid][vColor2],
  VehicleInfo[vid][vX],
  VehicleInfo[vid][vY],
  VehicleInfo[vid][vZ]
);
mysql_query(sqlC, query);
  VehicleInfo[vid][vSQLID] = cache_insert_id();
Buradaki gibi aracı satın aldıktan sonra araç enumuna yeni veri eklemen lazım. Bunu iterator kullanarak yapabilirsin.

Çok teşekkür ederim şimdi anladım yaptığım eksikliği. Şimdi tekrardan düzenleyeceğim.


VERITAS

Teşekkürler, MySQL hakkındaki sorum çözüldü. Kilitlenebilir.


Eamon

Dediğim gibi aracın verilerini tanımlamamışsın. Araç oluştururken veri tabanına verileri aktarmışsın bunda bir sorun yok. Araclarım komutunu yazdığında arac verileri mevcut olmadığı için bilgiler yansımamış. Oyun kapatıp açtığında verileri yüklüyorsun çünkü araç oluştururken verileri veri tabanına aktarmıştın. Ek olarak şöyle bir şey yapmışsın, döngünün içerisinde idx'in değerini 1 yapmışsın sonra tekrar idx'den 1 çıkarmışsın. Bu tür şeyler insanın kafasını karıştırır, o yüzden 0 dan başlatmak daha kolay olur senin için.

Bugünün güzel zamanları, yarının üzücü düşünceleridir.