GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi
17 Kasım 2025, 01:26:47

Şarkı Galerisi

Başlatan takashi, 29 Eylül 2023, 12:46:40

« önceki - sonraki »

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

takashi

Öncelikle herkese Merhaba, platform üzerindeki ilk konum olacak. Eleştirilerinizi bekliyorum...

Öncelikle bunu telefona app olarak eklemek için yazmıştım, olay şu ki sürekli link bularak şarkı açmak yerine bir kere kayıt ediyorsunuz ve aynı şarkıyı tekrar dinlemek istediğizde ise kolayca açabiliyorsunuz. Ben temel olarak vereceğim size kodu isteyen kişiler daha da geliştirebilir.

Sistemin ön izlemesi;

Kayıt işlemini MySQL üzerinden yapıyorum, artı olarak kullandığım kütüphaneler zcmd, easyDialog ve foreach.

Plugin ve Include linkleri.
PAWN Kodu: Seç
zcmd: https://github.com/Southclaws/zcmd
easyDialog: https://github.com/Awsomedude/easyDialog
foreach: https://github.com/karimcambridge/samp-foreach

Ben oyuncu ID'lerini OyuncuBilgi enumunda, ID içerisinde tutuyorum.

SQL içerisine eklemeniz gerekenler.

muzikler adında bir tablo, içerisine MuzikID int, MuzikSahip int, MuzikAdi var, MuzikLink var.

Öncelikle en fazla kaç müzik kayıt edilebilir onu belirliyoruz.
PAWN Kodu: Seç
#define MAX_MUZIK (5000) // Örnek olarak 5000
Ardından şarkı ismi ve linki için iki değişken ekliyoruz.
PAWN Kodu: Seç
new muzikAdi[MAX_PLAYERS], muzikLink[MAX_PLAYERS];
Sonrasında foreach plugini sayesinde bu sayıyı Iteratorun içerisine alıyoruz.
PAWN Kodu: Seç
new Iterator:MuzikSayisi<MAX_MUZIK>;
Ardından Enum oluşturuyoruz, her ID için bir veri tutacağı ve bunları SQL veritabanına ileteceğimiz için Enum kullandık.
PAWN Kodu: Seç
enum MuzikInfo
{
MuzikID, // Muzik ID Iter tarafından verilecek, yani 0 dahil olacak.
MuzikSahip, // Int çünkü oyuncunun ID'si ile tutuyoruz.
MuzikAdi[32],
MuzikLink[1024]
}
new MuzikBilgi[MAX_MUZIK][MuzikInfo];

Şarkılar oyuncu listeye yeni bir tane eklediği zaman kayıt olacak, ama giriş yaptığımızda gözükmeyecek neden? Çünkü şarkıları yüklememiş olacağız bunun için;
PAWN Kodu: Seç
stock MuzikleriYukle()
{
    new sorgu[200], Cache:query;
    mysql_format(sql, sorgu, sizeof sorgu, "SELECT * FROM `muzikler`"); // Verilerimizi muzikler tablosundan alıyoruz.
    query = mysql_query(sql, sorgu);
    new rows = cache_num_rows();
    if(rows) // Eğer muzikler tablosunda veri var ise
    {
new yukle, muzikid;
while(yukle < rows)
{
    cache_get_value_name_int(yukle, "MuzikID", muzikid);
    cache_get_value_name_int(yukle, "MuzikSahip", MuzikBilgi[muzikid][MuzikSahip]);
    cache_get_value_name(yukle, "MuzikAdi", MuzikBilgi[muzikid][MuzikAdi], 32);
    cache_get_value_name(yukle, "MuzikLink", MuzikBilgi[muzikid][MuzikLink], 1024);

            MuzikBilgi[muzikid][MuzikID] = muzikid;

    Iter_Add(MuzikSayisi, muzikid); // Sırası ile iterlere idlerimizi atıyoruz.
    yukle++;
}
printf("%d adet müzik yüklendi.", rows); // Hoş durduğu için sadece bilgilendirme mesajı
    }
    cache_delete(query);
    return 1;
}

Sunucu başlatıldığında şarkıları yüklemek için OnGameModeInit içerisine bunu yazmayı unutmuyoruz.
PAWN Kodu: Seç
MuzikleriYukle();

Sonrasında şarkılarımızı görebileceğimiz bir komuta ihtiyacımız var, ben bunu telefon sistemi içinde kullanmıştım ama size zcmd includesi ile kullanılmış halini vereceğim.

PAWN Kodu: Seç
CMD:sarkilarim(playerid)
{
    new str[1024], sayi;
    strcat(str, "Müzik Adı\n");
    strcat(str, "{008000}Yeni Müzik ekle\n");
    foreach(new m : MuzikSayisi)
    {
        if (MuzikBilgi[m][MuzikSahip] == OyuncuBilgi[playerid][ID]) // Eğer Şarkı listemizde ki şarkının sahibinin ID'si Oyuncumuz ID'si ile eşitse al.
{
    format(str, sizeof(str), "%s%s\n", str, MuzikBilgi[m][MuzikAdi]); // Burada Şarkıların ismini alıyoruz.
    sayi++; // Eğer şarkı varsa +1 arttır.
}
   }
   if(!sayi) return Dialog_Show(playerid, Muziklerim, DIALOG_STYLE_TABLIST_HEADERS,  "Müziklerim", "Müzik Adı\n{008000}Yeni Müzik Ekle", "Seç", "Geri"); // Eğer şarkı yoksa sadece şarkı ekleme seçeneğini göster.

    Dialog_Show(playerid, Muziklerim, DIALOG_STYLE_TABLIST_HEADERS,  "Müziklerim", str, "Seç", "Geri"); // Eğer şarkı varsa listele.
    return 1;
}

Şimdi Şarkı ekleme nasıl yapılır ona geçelim.
PAWN Kodu: Seç

Dialog:Muziklerim(playerid, response, listitem, inputtext[]) // Az önceki komutda açılan Dialog.
{
if(!response) return 0;
  if(listitem == 0) // Eğer yeni şarkı eklemeyi seçmiş isek;
  {
      Dialog_Show(playerid, MuzikKayitIsim, DIALOG_STYLE_INPUT, "Müzik Ekle", "Müziği kayıt edeceğiniz adı girin.", "Tamam", "Geri"); // Şarkının ismini giriyoruz.
  }
  if(response && listitem != 0) // Eğer seçtiğimiz seçenek Yeni Müzik Ekle değil ve bizim eklediğimiz bir şarkı ise;
  {
    new header[60];
    format(muzikAdi[playerid], 32, inputtext);
    format(header, sizeof(header), "%s", inputtext);
    Dialog_Show(playerid, MuzikSecenek, DIALOG_STYLE_LIST, header, "Oynat\nSil", "Seç", "Geri");
  }
        return 1;
}

Listdeki ilk seçeneği seçtik ve Müziği kayıt edeceğiniz adı girin. mesajını aldık şimdi ismi alma ve linki girme kısmına geçelim.
PAWN Kodu: Seç
Dialog:MuzikKayitIsim(playerid, response, listitem, inputtext[])
{
    if(!response) return 0;
    format(muzikAdi[playerid], 32, inputtext); // Input yani girdiğimiz şarkının adını burada muzikAdi içerisine aldık.
    Dialog_Show(playerid, MuzikKayitLink, DIALOG_STYLE_INPUT, "Müzik Ekle", "Müziğin linkini girin.", "Tamam", "Geri"); // Sonrasında linki almaya geçiyoruz.
    return 1;
}

İsmi aldık ve sırada linki almak bunun için;
PAWN Kodu: Seç
Dialog:MuzikKayitLink(playerid, response, listitem, inputtext[])
{
    if(!response) return 0;
    format(muzikLink[playerid], 1024, inputtext); // Tekrardan input içerisindeki linki muzikLink içerisine attık.

    new id; // Yeni bir değişken bu bizim şarkımızın idsi olacak.

    id = Iter_Free(MuzikSayisi); // Oluşturduğumuz iterin içindeki boş idlere bakıyoruz, 0 dolu 1 boş 2 dolu ise, 3 değil 1. idyi alacaktır.
    new query[256];
    mysql_format(sql, query, sizeof(query), "INSERT INTO `muzikler` (MuzikID, MuzikSahip, MuzikAdi, MuzikLink) VALUES ('%d', '%d', '%s', '%s')", id, OyuncuBilgi[playerid][ID],
    muzikAdi[playerid], muzikLink[playerid]);
    mysql_tquery(sql, query);

       // SQL kullandığımız için direk bu şekilde kayıt ediyoruz.

    SendClientMessage(playerid, -1, "{afafaf}Müzik listenize başarıyla kayıt edili.");

    Iter_Add(MuzikSayisi, id); // Boş olan Iter içine bize verilen idyi attık.
    MuzikBilgi[id][MuzikID] = id;
    MuzikBilgi[id][MuzikSahip] = OyuncuBilgi[playerid][ID];
    format(MuzikBilgi[id][MuzikAdi], 32, muzikAdi[playerid]);
    format(MuzikBilgi[id][MuzikLink], 1024, muzikLink[playerid]);
    return 1;
    // Ve verilerimizi enum içerisinede kayıt ettik.
}

Evet kayıt ettik ama nasıl oynatacağız değil mi? Şimdi Oynatma ve Silme işlemini yapalım.
PAWN Kodu: Seç
Dialog:MuzikSecenek(playerid, response, listitem, inputtext[]) // Şarkıyı seçtiğimizde açılan dialog.
{
    if(!response) return 0;
    if(listitem == 0) // Oynatı seçtik.
    {
        new link[1024], str[128];
        foreach(new m : MuzikSayisi) // Iterimizin içersindeki idleri m değişkenine topluyoruz.
        {
    if(MuzikBilgi[m][MuzikAdi] == muzikAdi[playerid]) format(link, 1024, MuzikBilgi[m][MuzikLink]); // Eğer şarkı Iter içerisindeki idden gelen şarkı ismi tıkladığımız şarkı ismine eşitse.
        }
        if(IsPlayerInAnyVehicle(playerid)) // Oyuncu araç içerisindeyse
        {
            StopAudioStreamForPlayer(playerid);
    PlayAudioStreamForPlayer(playerid, link);
    foreach (new i : Player) if (GetPlayerVehicleID(i) == GetPlayerVehicleID(playerid) && i != playerid) // Araçta diğer oyuncularında şarkıyı duyabilmesi içindir.
    {
StopAudioStreamForPlayer(i);
    PlayAudioStreamForPlayer(i, link);
    }
SendClientMessage(playerid, -1, "{afafaf}[!] Bluetooth ile araçta bir şarkı açtınız.");
    }
else // Eğer araçta değilse.
    {
          StopAudioStreamForPlayer(playerid);
      PlayAudioStreamForPlayer(playerid, link);
      format(str, sizeof(str), "{afafaf}Müzik listenizden %s isimli parça oynatılıyor.", muzikAdi[playerid]);
      SendClientMessage(playerid, -1, str);
      }
    }
    if(listitem == 1) // Oynat değilde şarkıyı silmek istiyoruz.
    {
        new id, query[256], str[128];
        foreach(new m : MuzikSayisi)
        {
    if(MuzikBilgi[m][MuzikAdi] == muzikAdi[playerid]) id = MuzikBilgi[m][MuzikID]; // Tekrardan tıkladığımız şarkıyı kontrol ediyoruz ve idsini alıyoruz.
        }
    mysql_format(sql, query, sizeof query, "DELETE FROM `muzikler` WHERE `MuzikID` = '%d'", id); // Veritabanından siliyoruz.
mysql_tquery (sql, query);
StopAudioStreamForPlayer(playerid);

Iter_Remove(MuzikSayisi, id); // Iter içerisinden de sildik.
format(str, sizeof(str), "{afafaf}%s isimli müzik başarıyla listenizden silindi.", MuzikBilgi[id][MuzikAdi]);
SendClientMessage(playerid, -1, str);
    }
    return 1;
}

Bu kadardı iyi kullanımlar dilerim, amatörlüğüm için kusura bakmayın. Teşekkür ederim.
Son düzenlenme: 05 Kasım 2024, 21:06:25 takashi

beratmethe

Eline sağlık, paylaşım için teşekkürler. Çalışır gibi görünüyor.


takashi

Alıntı yapılan: Zwen - 30 Eylül 2023, 19:24:47
Eline sağlık, paylaşım için teşekkürler. Çalışır gibi görünüyor.

Değerli yorumun için ben teşekkür ederim :)


Dyternal

Eline sağlık, güzel sistem olmuş.


takashi

Alıntı yapılan: Dyternal - 01 Ekim 2023, 13:26:39
Eline sağlık, güzel sistem olmuş.

Teşekkür ederim.


Vodkazerss

Eline sağlık


takashi


Sønez