Merhabalar,
Bir dialog listesi hazırlamak istedim ve bu liste kişinin araçları hakkında bir liste.
Öncelikle kişi /araclarim yazarak sahip olduğu araçların listesine ulaşıyor. Bu listeyi hazırlamaya başarabildim fakat şöyle bir şey daha yapmak istiyorum. Atıyorum kişinin araçları sıralandı listede fakat kişi listeden bir tanesini seçerek o aracı yanına spawnlamak istiyor fakat bunun için case kısmına geldiğimde listedeki seçtiği sıranın hangisi olduğu daha doğrusu hangi aracı seçtiğini tam olarak nasıl ayırt edebileceğim?
CMD:araclarim(playerid, params[])
{
new count, bigstring[500], string[100];
for(new idx = 1; idx <= TOTAL_ARAC; idx++)
{
if(!strcmp(Araclar[idx][AracSahibi], Player[playerid][Name], true, 24))
{
count++;
format(string, sizeof(string), "Araç NO:[%d]\t[%s]\t[%s]\n", Araclar[idx][AracID], Araclar[idx][AracSahibi], Araclar[idx][AracPlaka]);
strcat(bigstring, string);
SetPVarInt(playerid, "Arac1", idx);
}
}
if(count > 0) ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", bigstring, "Tamam", "Çıkış");
else SendClientMessage(playerid, -1, "Herhangi bir araca sahip değilsiniz.");
return 1;
}
SetPVarInt ve GetPVarInt kullanmayı denedim ama tam olarak bu iki fonksiyonu kavrayamadığımdan ötürü net bir şeye ulaşamadım. Bu konu hakkında bilgisi olan arkadaşlar yardımcı olursa çok mutlu olurum. Herkese iyi forumlar dilerim.
Araç sahibini neden isimde tuttunuz? Kişi isim değişirse sistemde sorunlara yol açacaktır.
Alıntı yapılan: Buzz - 27 Nisan 2020, 22:31:39Araç sahibini neden isimde tuttunuz? Kişi isim değişirse sistemde sorunlara yol açacaktır.
Haklısınız ama bunun için ayrı bir fonksiyon kullanabiliriz belki;
Mesela kişi isim değiştirdiğinde eğer bir araca sahipse sorgusunu yöneltip ardından eğer varsa bu araçların hepsinin sahibindeki isim kısmının ismini yeni isimle güncelletebiliriz diye düşündüm sonradan. Aslında isimden ziyade sanırsam kullanıcının SQLID'sini kaydetmek daha doğru ve pratik olacaktır.
@Buzz
Şöyle yapabilirsin;
Örnek veriyorum şöyle bir değişken hazırla;
PlayerData[playerid][pAraclar][5]
Sonra bir döngü oluştur;
for(new i = 0, j = 0; i < MAX_ARACLAR; i++)
{
if(CarData[i][carOwner] == PlayerData[playerid][pID])
{
PlayerData[playerid][pAraclar][j] = CarData[i][carVehicle];
j++;
}
}
Burada döngünün içerisinde öncelikle araç oyuncuya ait mi diye arattık oyuncuya ait ise pAraclar'ın içerisine aracın idsini koyduk. j'nin değeri 0 ve pAraclar dizisine göre ayarlanıyor. Her araç bulunduğunda da j'nin değeri artıyor. Böyle bir şey yaparak kendi moduna göre hazırlayabilirsin.
@Metafor yorum için çok teşekkürler hemen moduma göre uyarlayacağım birazdan. Gelişmeleri buraya yazarım. İyi forumlar.
Bu arada dialog listesinde aracı seçtiğinde mesele şöyle yapabilirsin örnek veriyorum aracın vwsini değiştireceksin ya;
SetVehicleVirtualWorld(PlayerData[playerid][pAraclar][listitem], 0);
Şöyle bir hata ile karşılaştım.
(https://cdn.discordapp.com/attachments/585779360888389632/704425028552228894/unknown.png)
CMD:araclarim(playerid, params[])
{
new bigstring[500], string[100];
for(new i = 0, j = 0; i < MAX_ARAC; i++)
{
if(!strcmp(Araclar[i][AracSahibi], Player[playerid][Name], true, 24))
{
format(string, sizeof(string), "Araç NO:[%d]\t[%s]\t[%s]\n", Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
strcat(bigstring, string);
Player[playerid][pAraclar][j] = Araclar[i][AracID];
j++;
}
if(j > 0) ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", bigstring, "Tamam", "Çıkış");
else SendClientMessage(playerid, -1, "Herhangi bir araca sahip değilsiniz.");
}
return 1;
}
Komutu her çalıştırdığımda Server:Unknown Command hatası alıyorum fakat işlevini görüyor fakat bu sefer işlevini görürken de gelen tablistte tabloda sıraya ilkinden başlamıyor ve [] şeklinde yazılar çıkıyor. Tam olarka nerede hata yaptım acaba?
case 230:
{
new id, id2, id3;
if(response)
{
switch(listitem)
{
case 0:
{
id = AddStaticVehicleEx(Araclar[Player[playerid][pAraclar][0]][AracModel], Araclar[Player[playerid][pAraclar][0]][AracX], Araclar[Player[playerid][pAraclar][0]][AracY], Araclar[Player[playerid][pAraclar][0]][AracZ], Araclar[Player[playerid][pAraclar][0]][AracAngle], Araclar[Player[playerid][pAraclar][0]][AracRenk1], Araclar[Player[playerid][pAraclar][0]][AracRenk2], -1);
SetVehicleNumberPlate(Araclar[Player[playerid][pAraclar][0]][AracID], Araclar[Player[playerid][pAraclar][0]][AracPlaka]);
SetVehicleToRespawn(Araclar[Player[playerid][pAraclar][0]][AracID]);
format(String, 128, "Aracınızın id'si %d olarak belirlenmiştir.", id);
SendClientMessage(playerid, -1, String);
}
case 1:
{
id2 = AddStaticVehicleEx(Araclar[Player[playerid][pAraclar][1]][AracModel], Araclar[Player[playerid][pAraclar][1]][AracX], Araclar[Player[playerid][pAraclar][1]][AracY], Araclar[Player[playerid][pAraclar][1]][AracZ], Araclar[Player[playerid][pAraclar][1]][AracAngle], Araclar[Player[playerid][pAraclar][1]][AracRenk1], Araclar[Player[playerid][pAraclar][1]][AracRenk2], -1);
SetVehicleNumberPlate(Araclar[Player[playerid][pAraclar][1]][AracID], Araclar[Player[playerid][pAraclar][1]][AracPlaka]);
SetVehicleToRespawn(Araclar[Player[playerid][pAraclar][1]][AracID]);
format(String, 128, "Aracınızın id'si %d olarak belirlenmiştir.", id2);
SendClientMessage(playerid, -1, String);
}
case 2:
{
id3 = AddStaticVehicleEx(Araclar[Player[playerid][pAraclar][2]][AracModel], Araclar[Player[playerid][pAraclar][2]][AracX], Araclar[Player[playerid][pAraclar][2]][AracY], Araclar[Player[playerid][pAraclar][2]][AracZ], Araclar[Player[playerid][pAraclar][2]][AracAngle], Araclar[Player[playerid][pAraclar][2]][AracRenk1], Araclar[Player[playerid][pAraclar][2]][AracRenk2], -1);
SetVehicleNumberPlate(Araclar[Player[playerid][pAraclar][2]][AracID], Araclar[Player[playerid][pAraclar][2]][AracPlaka]);
SetVehicleToRespawn(Araclar[Player[playerid][pAraclar][2]][AracID]);
format(String, 128, "Aracınızın id'si %d olarak belirlenmiştir.", id3);
SendClientMessage(playerid, -1, String);Bu da hazırladığım dialogun bir başka parçası. Şöyle düşündüm ben. Aracı kişi kendi spawnlasın yani direkt sunucu açıldığında yükletmedim araçları. Tek tek kullanıcının komutuyla spawnlatmasını istedim.
@Metafor
Şu an dediğiniz gibi VW değiştirmesi ile spawnlama yöntemini yapmaya karar verdim. Daha mantıklı geldi. Kodları ona göre düzenleyeceğim fakat komutu kulalndığımda neden hata aldım anlamadım.
string'in boyutunu büyüt ve bigstring'i sil ve yaptığım şeyi dene.
Ek olarak aracı oyuncuların oluşturmasını yapma çünkü araçlar buga girer onun yerine araçların vwsini değiştir. Neden boş değer gösteriyor bilmiyorum yaptığımı deneyebilirsin.
format(string, sizeof(string), "%sAraç NO:[%d]\t[%s]\t[%s]\n",string, Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
Not;
if(j > 0) ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", bigstring, "Tamam", "Çıkış");
else SendClientMessage(playerid, -1, "Herhangi bir araca sahip değilsiniz.");
Bunu döngünün içerisinden çıkart, her döngüde bu işlemi yaptırma.
Alıntı yapılan: Metafor - 27 Nisan 2020, 23:30:56Not;
if(j > 0) ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", bigstring, "Tamam", "Çıkış");
else SendClientMessage(playerid, -1, "Herhangi bir araca sahip değilsiniz.");
Bunu döngünün içerisinden çıkart, her döngüde bu işlemi yaptırma.
Alıntı yapılan: Metafor - 27 Nisan 2020, 23:29:10string'in boyutunu büyüt ve bigstring'i sil ve yaptığım şeyi dene.
Ek olarak aracı oyuncuların oluşturmasını yapma çünkü araçlar buga girer onun yerine araçların vwsini değiştir. Neden boş değer gösteriyor bilmiyorum yaptığımı deneyebilirsin.
format(string, sizeof(string), "%sAraç NO:[%d]\t[%s]\t[%s]\n",string, Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
Şimdi deniyorum hemen.
Alıntı yapılan: VERITAS - 27 Nisan 2020, 23:31:57Alıntı yapılan: Metafor - 27 Nisan 2020, 23:30:56Not;
if(j > 0) ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", bigstring, "Tamam", "Çıkış");
else SendClientMessage(playerid, -1, "Herhangi bir araca sahip değilsiniz.");
Bunu döngünün içerisinden çıkart, her döngüde bu işlemi yaptırma.
Alıntı yapılan: Metafor - 27 Nisan 2020, 23:29:10string'in boyutunu büyüt ve bigstring'i sil ve yaptığım şeyi dene.
Ek olarak aracı oyuncuların oluşturmasını yapma çünkü araçlar buga girer onun yerine araçların vwsini değiştir. Neden boş değer gösteriyor bilmiyorum yaptığımı deneyebilirsin.
format(string, sizeof(string), "%sAraç NO:[%d]\t[%s]\t[%s]\n",string, Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
Şimdi deniyorum hemen.
Dialog'un bigstring değerini de string olarak değiştirmeyi unutma.
@Metafor, sistem güzel çalışmakta fakat her komutu kullandığımda hala Server: Unknown Command hatasını almaktayım.
CMD:araclarim(playerid, params[])
{
new string[500];
for(new i = 0, j = 0; i < MAX_ARAC; i++)
{
if(!strcmp(Araclar[i][AracSahibi], Player[playerid][Name], true, 24))
{
format(string, sizeof(string), "%sAraç NO:[%d]\t[%s]\t[%s]\n",string, Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", string, "Tamam", "Çıkış");
Player[playerid][pAraclar][j] = Araclar[i][AracID];
j++;
}
}
return 1;
}
for döngüsünün içerisinde yani for döngüsünün süslü parantezleri içerisinde dialog göstermeye çalışıyorsun, o süslü parantezler içerisinde dialog göstermeye çalışırsan tabiki hata verir.
CMD:araclarim(playerid, params[])
{
new string[500];
for(new i = 0, j = 0; i < MAX_ARAC; i++)
{
if(!strcmp(Araclar[i][AracSahibi], Player[playerid][Name], true, 24))
{
format(string, sizeof(string), "%sAraç NO:[%d]\t[%s]\t[%s]\n",string, Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
Player[playerid][pAraclar][j] = Araclar[i][AracID];
j++;
}
}
ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", string, "Tamam", "Çıkış");
return 1;
}
For döngüsünün içerisinde dialog göstermemek gerektiğini şimdi öğrendim. :) Teşekkürler.
Saygıdeğer
@Metafor 'a teşekkürler. Gösterdiği yollar ile sorun çözülmüştür. K/A.
Alıntı yapılan: Metafor - 27 Nisan 2020, 23:40:31for döngüsünün içerisinde yani for döngüsünün süslü parantezleri içerisinde dialog göstermeye çalışıyorsun, o süslü parantezler içerisinde dialog göstermeye çalışırsan tabiki hata verir.
CMD:araclarim(playerid, params[])
{
new string[500];
for(new i = 0, j = 0; i < MAX_ARAC; i++)
{
if(!strcmp(Araclar[i][AracSahibi], Player[playerid][Name], true, 24))
{
format(string, sizeof(string), "%sAraç NO:[%d]\t[%s]\t[%s]\n",string, Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
Player[playerid][pAraclar][j] = Araclar[i][AracID];
j++;
}
}
ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", string, "Tamam", "Çıkış");
return 1;
}
Gözümden kaçan bir detay kalmış bunları yapmama rağmen tekrardan Server: Unknown Command hatası aldım.
@Metafor
Loop içerisinde dialog gösterirseniz komut işleyişi bozulmaz sadece dialog loop içerisinde döndüğü kadar kişiye gösterilir. Hata verir düşüncesi yanlış ve kodlama tarzınızda tabsizeye dikkat etmenizi öneririm.
Alıntı yapılan: VERITAS - 28 Nisan 2020, 00:09:02Alıntı yapılan: Metafor - 27 Nisan 2020, 23:40:31for döngüsünün içerisinde yani for döngüsünün süslü parantezleri içerisinde dialog göstermeye çalışıyorsun, o süslü parantezler içerisinde dialog göstermeye çalışırsan tabiki hata verir.
CMD:araclarim(playerid, params[])
{
new string[500];
for(new i = 0, j = 0; i < MAX_ARAC; i++)
{
if(!strcmp(Araclar[i][AracSahibi], Player[playerid][Name], true, 24))
{
format(string, sizeof(string), "%sAraç NO:[%d]\t[%s]\t[%s]\n",string, Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
Player[playerid][pAraclar][j] = Araclar[i][AracID];
j++;
}
}
ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", string, "Tamam", "Çıkış");
return 1;
}
Gözümden kaçan bir detay kalmış bunları yapmama rağmen tekrardan Server: Unknown Command hatası aldım. @Metafor
Komutu girdikten sonra server paneline bir göz at ordan bir hata veriyormu diye.
@Metafor, server panelinden herhangi bir hata vermiyor maalesef.
Pawno klasörü içerisinde pawn.cfg diye bir dosya yaratıp içerisine -d3 yaz ve ardından tekrar compile edip komutu dene. Eğer konsola herhangi bir hata yazdırırsa buraya yolla.
Alıntı yapılan: Amper - 28 Nisan 2020, 01:48:25Pawno klasörü içerisinde pawn.cfg diye bir dosya yaratıp içerisine -d3 yaz ve ardından tekrar compile edip komutu dene. Eğer konsola herhangi bir hata yazdırırsa buraya yolla.
Hayır derleme sonucunda herhangi bir hataya rastlamadım.
Sunucuda komutu deneyin ve o şekilde sunucu konsoluna bakın. Compiler hatalarından bahsetmiyorum.
Alıntı yapılan: Amper - 28 Nisan 2020, 01:52:10Sunucuda komutu deneyin ve o şekilde sunucu konsoluna bakın. Compiler hatalarından bahsetmiyorum.
Aynı şekilde onu da kontrol ettim ve herhangi bir değişiklik olmadı. Durum aynı.
Bilmiyorum belki bundan kaynaklımıdır ama, eğer döngünün içerisindeki arac değeri boş ise array index of bount gibi bir hata verir fakat sen bir hata vermediğini söylüyorsun.
Alıntı yapılan: Metafor - 28 Nisan 2020, 01:59:45Bilmiyorum belki bundan kaynaklımıdır ama, eğer döngünün içerisindeki arac değeri boş ise array index of bount gibi bir hata verir fakat sen bir hata vermediğini söylüyorsun.
Evet hiçbir hata vermemekle beraber sunucu içerisinde komutu kullanınca Server: Unknown Command diyor garip bir şekilde.
CMD:araclarim(playerid, params[])
{
new string[500], i, j;
for(i = 0; i < MAX_ARAC; i++)
{
if(!strcmp(Araclar[i][AracSahibi], Player[playerid][Name]))
{
format(string, sizeof(string), "%sAraç NO:[%d]\t[%s]\t[%s]\n", string, Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
Player[playerid][pAraclar][j] = Araclar[i][AracID];
j++;
}
}
ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", string, "Tamam", "Çıkış");
return 1;
}
Hatada farklılık olmayabilir fakat daha temiz bir kod haline getirdim yine de dene derim.
Alıntı yapılan: Amper - 28 Nisan 2020, 02:05:09CMD:araclarim(playerid, params[])
{
new string[500], i, j;
for(i = 0; i < MAX_ARAC; i++)
{
if(!strcmp(Araclar[i][AracSahibi], Player[playerid][Name]))
{
format(string, sizeof(string), "%sAraç NO:[%d]\t[%s]\t[%s]\n", string, Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
Player[playerid][pAraclar][j] = Araclar[i][AracID];
j++;
}
}
ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", string, "Tamam", "Çıkış");
return 1;
}
Hatada farklılık olmayabilir fakat daha temiz bir kod haline getirdim yine de dene derim.
Hemen deniyorum.
Edit: Bir değişiklik yok hala aynı durum.
@Amper
Alıntı yapılan: VERITAS - 28 Nisan 2020, 02:06:11Alıntı yapılan: Amper - 28 Nisan 2020, 02:05:09CMD:araclarim(playerid, params[])
{
new string[500], i, j;
for(i = 0; i < MAX_ARAC; i++)
{
if(!strcmp(Araclar[i][AracSahibi], Player[playerid][Name]))
{
format(string, sizeof(string), "%sAraç NO:[%d]\t[%s]\t[%s]\n", string, Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
Player[playerid][pAraclar][j] = Araclar[i][AracID];
j++;
}
}
ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", string, "Tamam", "Çıkış");
return 1;
}
Hatada farklılık olmayabilir fakat daha temiz bir kod haline getirdim yine de dene derim.
Hemen deniyorum.
Edit: Bir değişiklik yok hala aynı durum. @Amper
O halde bunu baştan yapılandıralım.
Bir araç yaratıldığında sahip bilgisi gibi şeyler anında veritabanında güncelleniyor öyle değil mi? Eğer böyleyse veritabanında dialog üzerinde görüntülenecek sütünların isimlerini buraya yazar mısın?
Alıntı yapılan: Amper - 28 Nisan 2020, 02:11:38O halde bunu baştan yapılandıralım.
Bir araç yaratıldığında sahip bilgisi gibi şeyler anında veritabanında güncelleniyor öyle değil mi? Eğer böyleyse veritabanında dialog üzerinde görüntülenecek sütünların isimlerini buraya yazar mısın?
AracID, AracSahibi, AracPlaka
Dialog üzerinde gözüken ve veritabanından bulunan sütunlar bunlar.
@AmperBu arada dialog penceresini içeriye alınca yani j++;'nın altına çekince komut hata veriyor ama dialog penceresi açılıyor işlev görüyor. Ve bir garip noktada neden acaba araçların listesini olunca göstermiyorda direkt 5 tane listitem getiriyor normalde olması gereken eğer varsa göster yoksa hiç gösterme burada kendi kendine listitem oluşturup iç değerleri boş gösteriyor acaba onun sebebi neden olabilir?
(https://cdn.discordapp.com/attachments/585779360888389632/704425028552228894/unknown.png)
server_log'u kontrol et
Attempted to read/write array element at negative index -1adında bir hata ile karşılaşırısan bu herhangi bir diziyi negatif bir sayıyı kullanmaya zorluyor olmandan kaynaklanır , 0 ID numarası ile başlayan bir araç , obje vb. yoktur. Eğer bunu denersen sana -1 olarak gönderecektir ve bu hata ile karşılaşırsın. Döngüyü 0'dan değil 1'den başlatmayı dene. İyi forumlar.
Alıntı yapılan: ThePosition - 28 Nisan 2020, 03:57:38server_log'u kontrol et
Attempted to read/write array element at negative index -1adında bir hata ile karşılaşırısan bu herhangi bir diziyi negatif bir sayıyı kullanmaya zorluyor olmandan kaynaklanır , 0 ID numarası ile başlayan bir araç , obje vb. yoktur. Eğer bunu denersen sana -1 olarak gönderecektir ve bu hata ile karşılaşırsın. Döngüyü 0'dan değil 1'den başlatmayı dene. İyi forumlar.
Yorum için teşekkürler. Fakat hala Server: Unknown Command hatasını vermekte ve server_log'u arattığımda belirttiğiniz kodda bir hata bulunamadı.
crashdetect (https://github.com/Zeex/samp-plugin-crashdetect/releases/tag/v4.13) adlı eklentiyi sunucuna kur , server.cfg içerisinde tanımla , oyuna gir , komutu tekrar kullan, server_log'u bizimle tekrar paylaş.
Alıntı yapılan: ThePosition - 28 Nisan 2020, 03:57:38server_log'u kontrol et
Attempted to read/write array element at negative index -1adında bir hata ile karşılaşırısan bu herhangi bir diziyi negatif bir sayıyı kullanmaya zorluyor olmandan kaynaklanır , 0 ID numarası ile başlayan bir araç , obje vb. yoktur. Eğer bunu denersen sana -1 olarak gönderecektir ve bu hata ile karşılaşırsın. Döngüyü 0'dan değil 1'den başlatmayı dene. İyi forumlar.
Döngünün içerisindekiler zaten araç idsi değil, arac bilgilerinin yer aldığı dizi onlar.
Not; komutu yazınca mı hata alıyordun yoksa listede bir yere tıklayınca mı?
Olmaz ise döngüyü 1 değerinden başlatın.
CMD:araclarim(playerid, params[])
{
new string[500];
for(new i = 0, j = 0; i < MAX_ARAC; i++)
{
if(!strcmp(Araclar[i][AracSahibi], Player[playerid][Name], true, 24))
{
format(string, sizeof(string), "%sAraç NO:[%d]\t[%s]\t[%s]\n",string, Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
Player[playerid][pAraclar][j] = Araclar[i][AracID];
j++;
}
}
if(j > 0) ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", string, "Tamam", "Çıkış");
else SendClientMessage(playerid, -1, "Herhangi bir araca sahip değilsiniz.");
return 1;
}
Strtok kullanabilirsin, https://forum.sa-mp.com/showthread.php?t=188617
Alıntı yapılan: Metafor - 28 Nisan 2020, 05:58:10Alıntı yapılan: ThePosition - 28 Nisan 2020, 03:57:38server_log'u kontrol et
Attempted to read/write array element at negative index -1adında bir hata ile karşılaşırısan bu herhangi bir diziyi negatif bir sayıyı kullanmaya zorluyor olmandan kaynaklanır , 0 ID numarası ile başlayan bir araç , obje vb. yoktur. Eğer bunu denersen sana -1 olarak gönderecektir ve bu hata ile karşılaşırsın. Döngüyü 0'dan değil 1'den başlatmayı dene. İyi forumlar.
Döngünün içerisindekiler zaten araç idsi değil, arac bilgilerinin yer aldığı dizi onlar.
Not; komutu yazınca mı hata alıyordun yoksa listede bir yere tıklayınca mı?
Player[playerid][pAraclar][j] = Araclar[i][AracID];
Emin değilim ama sanırım böyle bir şey istiyorsun. Bu arada test etmedim not defterinden yazarak yaptım hata olabilir :D
// Eğer parametreli bir işlem kullanmayacaksanız params[] kısmını eklemeye gerek yoktur.
CMD:araclarim(playerid)
{
// string değişkenimiz
new sz[500];
// dialogdan araç id sini almak için bir değişken oluşturuyoruz
new count = 0;
// TOTAL_ARAC kısmını kaldırıyoruz çünkü samp araç id leri değişkendir
// bunun yerine GetVehiclePoolSize kullanıp en yüksek id de ki değeri alıyoruz (3 tane araç varsa id 3 verir)
for(new i = 1, j = GetVehiclePoolSize(); i <= j; i++)
{
// araç kişinin üstünde mi kontrol ediyoruz
if(!strcmp(Araclar[i][AracSahibi], Player[playerid][Name]))
{
// eğer üstündeyse verileri sz stringin içine kayıt ediyoruz.
format(sz, sizeof(sz), "%sAraç NO:[%d]\t[%s]\t[%s]\n", sz, i, Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
// Aracın id sini araclarim isimli PVar içine alıyoruz ki dialog da tıkladığımızda
// direk aracın id sini alabilelim
new buffer[25];
format(buffer, sizeof(buffer), "araclarim_%d", count);
SetPVarInt(playerid, buffer, i);
// count değerini arttırarak yeni bir araç id si olunca eklemesini sağlıyoruz.
count++;
}
}
// count 0 değilse dialogu gösteriyoruz
if(count != 0) {
ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", sz, "Tamam", "Çıkış");
}else{
SendClientMessage(playerid, -1, "Herhangi bir araca sahip değilsiniz.");
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case 230:
{
if(response)
{
// Bu sefer oluşturduğumuz PVar dan araç id sini çekiyoruz
new buffer[25];
format(buffer, sizeof(buffer), "araclarim_%d", listitem);
// Tıkladığımız aracın id sini alıyoruz
new arac_id = GetPVarInt(playerid, buffer);
// araç bilgilerini mesaj olarak yazdırıyoruz
new sz[148];
format(sz, sizeof(sz), "Araç NO: [%d] - [%s] - [%s]\n", arac_id, Araclar[arac_id][AracSahibi], Araclar[arac_id][AracPlaka]);
SendClientMessage(playerid, -1, sz);
}
}
}
return 0;
}
Alıntı yapılan: Metafor - 28 Nisan 2020, 05:58:10Alıntı yapılan: ThePosition - 28 Nisan 2020, 03:57:38server_log'u kontrol et
Attempted to read/write array element at negative index -1adında bir hata ile karşılaşırısan bu herhangi bir diziyi negatif bir sayıyı kullanmaya zorluyor olmandan kaynaklanır , 0 ID numarası ile başlayan bir araç , obje vb. yoktur. Eğer bunu denersen sana -1 olarak gönderecektir ve bu hata ile karşılaşırsın. Döngüyü 0'dan değil 1'den başlatmayı dene. İyi forumlar.
Döngünün içerisindekiler zaten araç idsi değil, arac bilgilerinin yer aldığı dizi onlar.
Not; komutu yazınca mı hata alıyordun yoksa listede bir yere tıklayınca mı?
Komutu yazınca hata alıyorum.
Alıntı yapılan: Buzz - 28 Nisan 2020, 07:17:22Olmaz ise döngüyü 1 değerinden başlatın.
CMD:araclarim(playerid, params[])
{
new string[500];
for(new i = 0, j = 0; i < MAX_ARAC; i++)
{
if(!strcmp(Araclar[i][AracSahibi], Player[playerid][Name], true, 24))
{
format(string, sizeof(string), "%sAraç NO:[%d]\t[%s]\t[%s]\n",string, Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
Player[playerid][pAraclar][j] = Araclar[i][AracID];
j++;
}
}
if(j > 0) ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", string, "Tamam", "Çıkış");
else SendClientMessage(playerid, -1, "Herhangi bir araca sahip değilsiniz.");
return 1;
}
Çalışmadı. Maalesef.
@Buzz .
Crash detect kurdum fakat hiçbir girdi yok server logda
@ThePosition
Alıntı yapılan: NexoR - 28 Nisan 2020, 13:44:37Emin değilim ama sanırım böyle bir şey istiyorsun. Bu arada test etmedim not defterinden yazarak yaptım hata olabilir :D
// Eğer parametreli bir işlem kullanmayacaksanız params[] kısmını eklemeye gerek yoktur.
CMD:araclarim(playerid)
{
// string değişkenimiz
new sz[500];
// dialogdan araç id sini almak için bir değişken oluşturuyoruz
new count = 0;
// TOTAL_ARAC kısmını kaldırıyoruz çünkü samp araç id leri değişkendir
// bunun yerine GetVehiclePoolSize kullanıp en yüksek id de ki değeri alıyoruz (3 tane araç varsa id 3 verir)
for(new i = 1, j = GetVehiclePoolSize(); i <= j; i++)
{
// araç kişinin üstünde mi kontrol ediyoruz
if(!strcmp(Araclar[i][AracSahibi], Player[playerid][Name]))
{
// eğer üstündeyse verileri sz stringin içine kayıt ediyoruz.
format(sz, sizeof(sz), "%sAraç NO:[%d]\t[%s]\t[%s]\n", sz, i, Araclar[i][AracSahibi], Araclar[i][AracPlaka]);
// Aracın id sini araclarim isimli PVar içine alıyoruz ki dialog da tıkladığımızda
// direk aracın id sini alabilelim
new buffer[25];
format(buffer, sizeof(buffer), "araclarim_%d", count);
SetPVarInt(playerid, buffer, i);
// count değerini arttırarak yeni bir araç id si olunca eklemesini sağlıyoruz.
count++;
}
}
// count 0 değilse dialogu gösteriyoruz
if(count != 0) {
ShowPlayerDialog(playerid, 230, DIALOG_STYLE_TABLIST, "Araç Listesi", sz, "Tamam", "Çıkış");
}else{
SendClientMessage(playerid, -1, "Herhangi bir araca sahip değilsiniz.");
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case 230:
{
if(response)
{
// Bu sefer oluşturduğumuz PVar dan araç id sini çekiyoruz
new buffer[25];
format(buffer, sizeof(buffer), "araclarim_%d", listitem);
// Tıkladığımız aracın id sini alıyoruz
new arac_id = GetPVarInt(playerid, buffer);
// araç bilgilerini mesaj olarak yazdırıyoruz
new sz[148];
format(sz, sizeof(sz), "Araç NO: [%d] - [%s] - [%s]\n", arac_id, Araclar[arac_id][AracSahibi], Araclar[arac_id][AracPlaka]);
SendClientMessage(playerid, -1, sz);
}
}
}
return 0;
}
@NexoR Çok teşekkürler işe yaradı ve mantığını kavramış oldum bilmediğim yeni şeyler gördüm sayenizde. Tekrardan tüm yardımcı olmak isteyen arkadaşlara çok çok teşekkürler. K/A