GTAMulti - GTA Türkiye

San Andreas Multiplayer => Yardım Talepleri => PAWN Kodlama => Kilitli Konular => Konuyu başlatan: Adamyageldiadam - 21 Temmuz 2021, 20:33:31

Başlık: Sırayla şarkı oynatma sistemi
Gönderen: Adamyageldiadam - 21 Temmuz 2021, 20:33:31
Merhabalar. Sunucumda bir müzik sistemi var. Müzik açabiliyorum ama bunu şöyle yapmak istiyorum. Örneğin bir müziği sunucumda oynatıyorum ve başka bir müzik isteği var. Oynatılan müzik bitmeden istek müziği sıraya nasıl koyabilirim yani bunun bi sistemi varmı ordan sunucuma uydurayım
Başlık: Ynt: Sırayla şarkı oynatma sistemi
Gönderen: squarepants - 30 Temmuz 2021, 20:12:15
Şu an için biraz meşgulüm ancak aşağıdaki şekilde bir algoritma geliştirmeye çalıştım, derleyicide henüz deneme fırsatı bulamadım ama aşağıdaki uygulama işini görecektir. Sahip olduğun URL adresine ait klibin uzunluğunu dakika ve saniye biçiminde çeken bir eklenti geliştirebilirsen uygulama daha dinamik bir yapı alacaktır. Ancak aşağıdaki şekilde de deneyebilirsin ve hatta duruma göre geliştirebilirsin. Herhangi bir sorun olursa buradan veya özelden iletişime geçebilirsin, iyi forumlar :
new const
        MAX_MUZIK = 10,
        MAX_UZUNLUK = 128,
        DIALOG_MUZIK = 1234
;
enum M_ENUM
{
    M_ADRES[MAX_UZUNLUK],
    M_ISIM[MAX_UZUNLUK / 2],
    M_DAK,
    M_SAN,
    bool:M_DURUM
}
new Muzikal[MAX_MUZIK][M_ENUM] = {{"BOS", "BOS", 0, 0, false}, ...};
forward SiradakiMuzik();
stock MuzikCal(const link[])
{
    for(new i, j = GetMaxPlayers(); i <= j; i++) if(IsPlayerConnected(i))
    {
        PlayAudioStreamForPlayer(i, link);
    }
    return 1;
}
stock MuzikEkle(const mURL[], const mIsim[], dakika, saniye)
{
    for(new i, j = sizeof(Muzikal); i < j; i++)
    {
        if(Muzikal[i][M_ADRES][MAX_UZUNLUK * 0] == EOS)
        {
            Muzikal[i][M_DAK] = dakika;
            Muzikal[i][M_SAN] = saniye;
            if(i == 0)
            {
                Muzikal[i][M_DURUM] = true;
                SetTimer("SiradakiMuzik", mSaniyeCevir(Muzikal[i][M_DAK], Muzikal[i][M_SAN]), false);
            }
            format(Muzikal[i][M_ADRES], MAX_UZUNLUK, "%s", mURL);
            format(Muzikal[i][M_ISIM], MAX_UZUNLUK / 2, "%s", mIsim);
            break;
        }
    }
    return 1;
}
stock mSaniyeCevir(dakika, saniye)
{
    dakika = (dakika * 60) * 1000;
    saniye = saniye * 1000;
    return dakika + saniye;
}
public SiradakiMuzik()
{
    for(new i, j = sizeof(Muzikal); i < j; i++)
    {
        if(Muzikal[i][M_DURUM] == true)
        {
            Muzikal[i][M_DURUM] = false;
            if(Muzikal[i+1][M_ADRES][MAX_UZUNLUK * 0] != EOS)
            {
                Muzikal[i+1][M_DURUM] = true;
                MuzikCal(Muzikal[i+1][M_ADRES]);
                SetTimer("SiradakiMuzik", mSaniyeCevir(Muzikal[i][M_DAK], Muzikal[i][M_SAN]), false);
                break;
            }
        }
    }
    return 1;
}
CMD:mbaslat(playerid, params[])
{
    new mURL[MAX_UZUNLUK], mIsim[MAX_UZUNLUK / 2], mBilgi[MAX_UZUNLUK], Dak, San;
    if(sscanf(params, "s[128]s[64]dd", mURL, mIsim, Dak, San))
        return SendClientMessage(playerid, -1, "Kullanim : /mbaslat [URL] [Isim] [Dakika] [Saniye]");
    if(Muzikal[MAX_MUZIK - 1][M_ISIM][MAX_UZUNLUK * 0] != EOS)
        return SendClientMessage(playerid, -1, "Liste Şu Anda Dolu (!)");
    format(mBilgi, MAX_UZUNLUK, "Şu Anda Çalan Muzik : %s", mIsim);
    SendClientMessageToAll(-1, mBilgi);
    MuzikCal(mURL); MuzikEkle(mURL, mIsim, Dak, San);
    return 1;
}
CMD:mekle(playerid, params[])
{
    new mURL[MAX_UZUNLUK], mIsim[MAX_UZUNLUK / 2] Dak, San;
    if(sscanf(params, "s[128]s[64]", mURL, mIsim))
        return SendClientMessage(playerid, -1, "Kullanim : /mbekle [URL] [Isim] [Dakika] [Saniye]");
    if(Muzikal[MAX_MUZIK - 1][M_ISIM][MAX_UZUNLUK * 0] != EOS)
        return SendClientMessage(playerid, -1, "Liste Şu Anda Dolu (!)");
    format(mBilgi, MAX_UZUNLUK, "Şu Anda Çalan Muzik : %s", mIsim);
    SendClientMessageToAll(-1, mBilgi);
    MuzikEkle(mURL, mIsim, Dak, San);
    return 1;
}
CMD:mliste(playerid)
{
    new listem[MAX_MUZIK * (MAX_UZUNLUK / 2)];
    for(new i, j = sizeof(Muzikal); i < j; i++)
    {
        format(listem, sizeof listem, "%s\n%s", listem, Muzikal[i][M_ISIM]);
    }
    ShowPlayerDialog(playerid, DIALOG_MUZIK, DIALOG_STYLE_LIST, "Muzik Listesi", listem, "Tamam", "");
    return 1;
}
CMD:yerayir(playerid)
{
    if(Muzikal[MAX_MUZIK - 1][M_ISIM][MAX_UZUNLUK * 0] != EOS)
        Muzikal[MAX_MUZIK - 1][M_ISIM][MAX_UZUNLUK * 0] = EOS;
    else
        SendClientMessage(playerid, -1, "Liste Şu Anda Dolu Değil (!)");
    return 1;
}
Başlık: Ynt: Sırayla şarkı oynatma sistemi
Gönderen: Adamyageldiadam - 01 Ağustos 2021, 15:08:27
Hocam yardımın için çok sağol ama benim şarkı sistemim dialoglarla yani bi telefon gibi bir şey var ordan seçip müziği sunucuda çal falan diyorum :d
Başlık: Ynt: Sırayla şarkı oynatma sistemi
Gönderen: squarepants - 01 Ağustos 2021, 17:36:39
Rica ederim, olayın mantığını anladıysan kendi sistemini geliştirebilirsin bu yöntemle. Eğer anlamadıysan özelden yine yardımcı olmaya çalışırım. Zaten çalışan bir sistemin var ise tek yapman gereken klibin uzunluğunu saniye ve dakika cinsinden alıp ufak bir milisaniye hesaplaması yapmak. Daha sonra bir timer yardımı ile klibe ait milisaniye süre sonra diğer klibe geçecek, bu döngü birbirini takip ederek devam edecek ^^
Başlık: Ynt: Sırayla şarkı oynatma sistemi
Gönderen: Coiner - 19 Ağustos 2021, 21:22:38
Alıntı yapılan:  Bölüm kuralları
Açılan taleplerin son iletisi 10 günü geçmesi durumunda; konu kilitlenip, kilitli konular bölümüne taşınacaktır. Sorunu çözülen konularınızı kilitleyip, moderatörlere bildiriniz.
K/A