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.
Araç oluşturma fonksiyonunu atar mısın?
Araç oluşturma fonksiyonunu atarsan yardımcı olabilirim.
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:12Araç oluşturma fonksiyonunu atar mısın?
Alıntı yapılan: #Codec - 24 Nisan 2020, 08:32:50Araç 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?
OnGameModeInıt
mysql_tquery(g_SQL, "SELECT * FROM `araclar` ORDER BY `araclar`.`AracID` ASC ", "LoadAraclar", "");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
(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.
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.
Alıntı yapılan: Metafor - 24 Nisan 2020, 17:26:59Eğ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
Alıntı yapılan: VERITAS - 24 Nisan 2020, 18:01:52Alıntı yapılan: Metafor - 24 Nisan 2020, 17:26:59Eğ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.
createveh fonksiyonunu ve /araclarim komutunu atma şansın var mı? Ben sana benimkinin örneğini atarım, ona göre uyarlarsın
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.");
}
}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
araç enumundaki verileri ayarlamıyorsun, şöyle bir örnek atayım sana:
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/
Alıntı yapılan: Wisdom - 24 Nisan 2020, 18:35:20araç enumundaki verileri ayarlamıyorsun, şöyle bir örnek atayım sana:
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.
Teşekkürler, MySQL hakkındaki sorum çözüldü. Kilitlenebilir.
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.
Alıntı yapılan: Metafor - 24 Nisan 2020, 19:03:57Dediğ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.