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

DIALOG_STYLE_LIST

Başlatan VERITAS, 27 Nisan 2020, 22:26:54

« önceki - sonraki »

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

VERITAS

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?

PAWN Kodu: Seç
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.


Buzz

Araç sahibini neden isimde tuttunuz? Kişi isim değişirse sistemde sorunlara yol açacaktır.


VERITAS

Alıntı yapılan: Buzz - 27 Nisan 2020, 22:31:39
Araç 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


Eamon

Şöyle yapabilirsin;

Örnek veriyorum şöyle bir değişken hazırla;

PAWN Kodu: Seç
PlayerData[playerid][pAraclar][5]
Sonra bir döngü oluştur;

PAWN Kodu: Seç
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.

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

VERITAS

@Metafor yorum için çok teşekkürler hemen moduma göre uyarlayacağım birazdan. Gelişmeleri buraya yazarım. İyi forumlar.


Eamon

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);

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

VERITAS

Şöyle bir hata ile karşılaştım.



PAWN Kodu: Seç
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?


VERITAS

PAWN Kodu: Seç
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


VERITAS

Ş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.


Eamon

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.

PAWN Kodu: Seç
format(string, sizeof(string), "%sAraç NO:[%d]\t[%s]\t[%s]\n",string, Araclar[i][AracID], Araclar[i][AracSahibi], Araclar[i][AracPlaka]);

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

Eamon

Not;

PAWN Kodu: Seç
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.

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

VERITAS

Alıntı yapılan: Metafor - 27 Nisan 2020, 23:30:56
Not;

PAWN Kodu: Seç
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:10
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.

PAWN Kodu: Seç
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.


Eamon

Alıntı yapılan: VERITAS - 27 Nisan 2020, 23:31:57
Alıntı yapılan: Metafor - 27 Nisan 2020, 23:30:56
Not;

PAWN Kodu: Seç
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:10
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.

PAWN Kodu: Seç
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.

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

VERITAS

@Metafor, sistem güzel çalışmakta fakat her komutu kullandığımda hala Server: Unknown Command hatasını almaktayım.

PAWN Kodu: Seç
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;
}


Eamon

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.


PAWN Kodu: Seç
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;
}

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