Herkese selam arkadaşlar , görüyoruz ki roleplay sunucuları arttı.Bu artış nedeniyle roleplay sunucularına talep arttı.Dolayısı ile sunucularda oynayan oyuncular meslek kasmaktan sıkılıp afk olanlar ve payday ile para alanlar var.Şimdi sizlere sunucularınızda kullanabileceğiniz temel bir payday sistemi yapmayı anlatacağım.
İlk olarak oyuncu değişkenlerini tanıtıyoruz.
new ToplamOyuncuPayday[MAX_PLAYERS];
new OyuncuPaydaySure[MAX_PLAYERS];
new OyuncuTimer[MAX_PLAYERS]
Değişkenlerimizi tanıttıktan sonra ilk olarak OnPlayerConnect publicine geliyoruz.Oraya OyuncuPaydaySure değişkenindeki değeri 60 saniyede (1 dkda) bir arttıracak timerımızı ekliyoruz
public OnPlayerConnect(playerid)
{
OyuncuTimer[playerid] = SetTimerEx("PaydayTimer",60000,true,"d",playerid);
}
Timerımızdaki mantık 60000 mili saniyede bir PaydayTimer publicindeki kodları tekrar etmesi.Tekrar etmesi için true yazdık.Timer'larda SetTimer ve SetTimerEx vardır.SetTimerEx kullanmamızın bir sebebi de parametre içermesi.Parametreleri içerdiği için playerid parametresini hatasız bir şekilde kullanabiliyoruz.OyuncuTimer değişkeni bir oyuncu değişkenidir çünkü playerid parametresini içermektedir.Oyuncuya bu timerı tanımladık.
Hocam şimdi diyeceksiniz timeri ekledik çalışmadı ? Çünkü PaydayTimer'ı kodlamadık.
forward PaydayTimer(playerid);
public PaydayTimer(playerid)
{
if(OyuncuPaydaySure[playerid] >= 60)
{
OyuncuPaydaySure[playerid] = 0;
ToplamOyuncuPayday[playerid]+= 1;
GivePlayerMoney(playerid,1000);
SendClientMessage(playerid,-1,"Saatlik Maaş Alındı !");
}
else
{
OyuncuPaydaySure[playerid]++;
}
}
Buradaki mantık oyuncunun payday süresinin değeri 60 ve 60 ın üzerindeyse toplam oyuncu payday değişkenine 1 arttırdık , parayı verdirdik ve süreyi 0 layıp baştan başlattık.Eğer 60 ın üzerinde değilse süreyi arttıtmaya devam eder.
Arkadaşlar çok zor bir sistem değil ama geliştirilebilir bir sistem.Ben aslında parayı rastgele verdirip iki kat maaş bonusu özelliği ekleyip gelen parayı 2 ile çarptırıp oyuncuya verdirmek vardı aklımda ama sadece ben temelini kurdum gerisini siz bilgileriniz ile getirin.
Sunucumuz üzerinde oyuncu çıkış yaptığı zaman oyuncuya ait timerın silinmemesi sunucumuzda çökmeler veya laglar yaratabilir.O yüzden sunucumuzun performansı açısından oyuncuya OyuncuTimer[playerid] değişkenine tanımladığımız SetTimerEx'i sileceğiz.Tabi ki bunu da KillTimer kullanarak yapacağız.(Edit - @Ferman Hocam'ın önerisi)
public OnPlayerDisconnect(playerid)
{
KillTimer(OyuncuTimer[playerid]);
return 1;
}
Arkadaşlar konuyu okuduğunuz için teşekkürler iyi - kötü yorumlarınızı unutmayın ve varsa hatam yardımcı olabilirsiniz.İyi günler herkese.NOT : Kodlar alıntı değildir, alıntı diyen arkadaşlar boş yapmayıp konuyu tarayıcısının sekmesinden kapatsın backspace veya geri tuşuna fare ile sol tuşla basarak konudan çıkabilir.
Tşk :pc:
Alıntı yapılan: ByGold - 18 Aralık 2019, 21:00:04Tşk :pc:
Önemli değil , işinize yaraması dileği ile.
60000 saniyede bir yazmışsın istersen o saniyeyi mili saniye olarak düzeltebilirsin ve benim bildiğim yeni bir public oluşturup kullanmak için stock yerine forward kullanmalısın ondan sonra publici kullanabilirsin.
Alıntı yapılan: Radless - 18 Aralık 2019, 22:03:2160000 saniyede bir yazmışsın istersen o saniyeyi mili saniye olarak düzeltebilirsin ve benim bildiğim yeni bir public oluşturup kullanmak için stock yerine forward kullanmalısın ondan sonra publici kullanabilirsin.
Bir an dalgınlıkla forward yerine stock yazmışım saniye kısmını mili saniye olarak düzelttim :)
Oyuncu oyundan çıktığında timer'ı kapatabilirsin bence onun dışında yeni başlayan kişilere yararlı.
Alıntı yapılan: Ferman - 18 Aralık 2019, 23:30:22Oyuncu oyundan çıktığında timer'ı kapatabilirsin bence onun dışında yeni başlayan kişilere yararlı.
@Ferman hocam ekledim konuya öneriniz için teşekkürler.
Payday Sistemi güzel, eline sağlık.
Alıntı yapılan: #Norpes - 02 Nisan 2020, 14:29:50Payday Sistemi güzel, eline sağlık.
Teşekkürler işine yaraması dileği ile.
Yararlı
Paylaşım için teşekkürler, eline sağlık. :helal: