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
Ş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;
}
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
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 ^^
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