GTAMulti - GTA Türkiye

San Andreas Multiplayer => Yardım Talepleri => PAWN Kodlama => Kilitli Konular => Konuyu başlatan: VERITAS - 24 Nisan 2020, 06:20:15

Başlık: MySQL' sorunsalı
Gönderen: VERITAS - 24 Nisan 2020, 06:20:15
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.
Başlık: Ynt: MySQL' sorunsalı
Gönderen: Buzz - 24 Nisan 2020, 06:24:12
Araç oluşturma fonksiyonunu atar mısın?
Başlık: Ynt: MySQL' sorunsalı
Gönderen: #Codec - 24 Nisan 2020, 08:32:50
Araç oluşturma fonksiyonunu atarsan yardımcı olabilirim.
Başlık: Ynt: MySQL' sorunsalı
Gönderen: VERITAS - 24 Nisan 2020, 14:44:55
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?
Başlık: Ynt: MySQL' sorunsalı
Gönderen: VERITAS - 24 Nisan 2020, 14:48:18
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
Başlık: Ynt: MySQL' sorunsalı
Gönderen: VERITAS - 24 Nisan 2020, 17:01:42
(https://cdn.discordapp.com/attachments/703240621875396639/703243358721671228/1.png)
(https://cdn.discordapp.com/attachments/703240621875396639/703243367731036300/2.png)

Gördüğünüz üzere yani sunucuyu aç kapa yapmazsam gözükmüyor nedense.
Başlık: Ynt: MySQL' sorunsalı
Gönderen: Eamon - 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.
Başlık: Ynt: MySQL' sorunsalı
Gönderen: 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
Başlık: Ynt: MySQL' sorunsalı
Gönderen: Eamon - 24 Nisan 2020, 18:29:09
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.
Başlık: Ynt: MySQL' sorunsalı
Gönderen: Wisdom - 24 Nisan 2020, 18:30:37
createveh fonksiyonunu ve /araclarim komutunu atma şansın var mı? Ben sana benimkinin örneğini atarım, ona göre uyarlarsın
Başlık: Ynt: MySQL' sorunsalı
Gönderen: VERITAS - 24 Nisan 2020, 18:31:44
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
Başlık: Ynt: MySQL' sorunsalı
Gönderen: 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.

edit: Iterator kullanımını öğrenmek için incele: https://www.gtamulti.com/forum/anlatimlar/foreach-kullanimi/
Başlık: Ynt: MySQL' sorunsalı
Gönderen: VERITAS - 24 Nisan 2020, 18:36:41
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.
Başlık: Ynt: MySQL' sorunsalı
Gönderen: VERITAS - 24 Nisan 2020, 18:54:19
Teşekkürler, MySQL hakkındaki sorum çözüldü. Kilitlenebilir.
Başlık: Ynt: MySQL' sorunsalı
Gönderen: Eamon - 24 Nisan 2020, 19:03:57
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.
Başlık: Ynt: MySQL' sorunsalı
Gönderen: VERITAS - 24 Nisan 2020, 19:05:09
Alıntı yapılan: Metafor - 24 Nisan 2020, 19:03:57
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.

Öneriniz için teşekkür ederim.