Merhabalar, modda kullandığım timerların hiçbiri olması gerektiği gibi değil.
JailTimer[playerid] = SetTimerEx("JailAzalt",60000, true, "d", playerid)
60000 milisaniye normalde 60 saniyeye eşit olması gerekirken sunucuda bu süre 70 - 75 saniye kadar bir süreye kadar çıkıyor. Nedenini anlayamadım. Bilgisi olan açıklayabilir mi?
Callback edilen fonksiyonu da atarsanız daha sağlıklı cevap verebiliriz, ve bahsettiğiniz gibi 1sec = 1000MS evet.
Alıntı yapılan: Hasan Sangrento - 13 Şubat 2022, 01:14:58Callback edilen fonksiyonu da atarsanız daha sağlıklı cevap verebiliriz, ve bahsettiğiniz gibi 1sec = 1000MS evet.
forward JailAzalt(playerid);
public JailAzalt(playerid)
{
new guncelle[128];
Oyuncu[playerid][jailsure]--;
format(guncelle, sizeof(guncelle), "UPDATE players SET `jailsure` = '%d' WHERE `Name` = '%s'", Oyuncu[playerid][jailsure], OyuncuAdiGetir(playerid));
mysql_query(g_SQL,guncelle,false);
JaildenCikart(playerid);
return true;
}
Buradan baktığımda bir problem göremedim. Konsola de-bug yapmanız daha sağlıklı olacaktır.
Alıntı yapılan: Hasan Sangrento - 13 Şubat 2022, 01:28:05Buradan baktığımda bir problem göremedim. Konsola de-bug yapmanız daha sağlıklı olacaktır.
Dediğiniz de-bug tam olarak nasıl yapılıyor acaba?
Mesela örnek veriyorum çağrılan callback'e tek tek saati saydırırsınız, kaç saniyede çıkardığını kendiniz görebilirsiniz. Bu tarz durumlarda de-bug yapmanız daha sağlıklı olacaktır.
Alıntı yapılan: Hasan Sangrento - 13 Şubat 2022, 01:34:06Mesela örnek veriyorum çağrılan callback'e tek tek saati saydırırsınız, kaç saniyede çıkardığını kendiniz görebilirsiniz. Bu tarz durumlarda de-bug yapmanız daha sağlıklı olacaktır.
1 dakikada olması gereken kodu hesaplamıştım 75 saniye kadar bir civarda olmuştu. 1 saati mi hesaplamamı istiyorsunuz?
Hayır yalnız mesela 60000 yerine 10000 değerini girip tekrardan kıyaslayabilirsiniz, ya da chate sürekli kaç saniye kaldığı ile alakalı bir değer yazdırabilir.
Dediğiniz üzere 10000ms'ye çekip bir de chate yazı yazdırttım. Görüntüsünü atıyorum hemen.
(https://cdn.discordapp.com/attachments/767074905639485464/942192236869853305/unknown.png)
Yani her 10 saniye geçmesi gerektiğinde 13 ya da 14 saniye geçiyor. Bunu nasıl çözeceğiz acaba? 10000 yerine daha az bir değer girerek tam kaç saniyeye denk geliyor deneme yanılma yoluyla mı çözmek gerek?
SA-MP default timerlarında maalesef belirttiğiniz değer zamanlayıca uymuyor, daha yakın verilere ulaşmak için y_timer kullanabilirsiniz fakat tam çözüm olmayacaktır.
OnPlayerConnect
JailTimer[playerid] = SetTimerEx("JailAzalt",60000, true, "d", playerid)
OnPlayerDisconnect'e
KillTimer(JailTimer[playerid]);
herhangi bir boş kısıma
forward JailAzalt(playerid);
public JailAzalt(playerid)
{
if(Oyuncu[playerid][jaildemi] == 1)
{
Oyuncu[playerid][jailsure]-60;
}
return 1;
}
birde mysqle kaydetmesini onplayerdisconnect'e ekleyebilirsiniz
Alıntı yapılan: HasanEfe - 13 Şubat 2022, 13:45:03OnPlayerConnect
JailTimer[playerid] = SetTimerEx("JailAzalt",60000, true, "d", playerid)
OnPlayerDisconnect'e
KillTimer(JailTimer[playerid]);
herhangi bir boş kısıma
forward JailAzalt(playerid);
public JailAzalt(playerid)
{
if(Oyuncu[playerid][jaildemi] == 1)
{
Oyuncu[playerid][jailsure]-60;
}
return 1;
}
birde mysqle kaydetmesini onplayerdisconnect'e ekleyebilirsiniz
Kodlarımızda farklılık yok gibi. settimer daki ayarlanan 10.000ms oyunda 13 - 14 saniye olarak geliyor 10 saniye olması gerekirken. Sorunum tam olarak da bu. SetTimer'a yazılan ms değeri oyundaki ile aynı olmuyor daha geç oluyor.
Ayrıca her dakika geçtiğinde mysql'e kaydediyorum onplayerdisconnect kısmında kaydetmek yerine. Bu modu yorar mı yoksa etkisi az mıdır?
SetTimer fonksiyonlarında ortalama %25 ve civarı zaman kayması olabiliyor. Bu nedenle YSI kitaplığında bulunan Y_Timer eklentisini alternatif olarak kullanabilirsiniz, ya da gecikmeyi hesaplayıp mevcut milisaniye biriminden çıkarmayı deneyebilirsiniz. Örneğin
60000 - (75000 - 60000)
Alıntı yapılan: VERITAS - 13 Şubat 2022, 14:04:43Alıntı yapılan: HasanEfe - 13 Şubat 2022, 13:45:03OnPlayerConnect
JailTimer[playerid] = SetTimerEx("JailAzalt",60000, true, "d", playerid)
OnPlayerDisconnect'e
KillTimer(JailTimer[playerid]);
herhangi bir boş kısıma
forward JailAzalt(playerid);
public JailAzalt(playerid)
{
if(Oyuncu[playerid][jaildemi] == 1)
{
Oyuncu[playerid][jailsure]-60;
}
return 1;
}
birde mysqle kaydetmesini onplayerdisconnect'e ekleyebilirsiniz
Kodlarımızda farklılık yok gibi. settimer daki ayarlanan 10.000ms oyunda 13 - 14 saniye olarak geliyor 10 saniye olması gerekirken. Sorunum tam olarak da bu. SetTimer'a yazılan ms değeri oyundaki ile aynı olmuyor daha geç oluyor.
Ayrıca her dakika geçtiğinde mysql'e kaydediyorum onplayerdisconnect kısmında kaydetmek yerine. Bu modu yorar mı yoksa etkisi az mıdır?
Sunucuda kaç kişi olduğuna bağlı olup modun tamamına bağlı, ek olarak modun çalıştığı pcde önemli yani kasabilirde kasmayabilirde tavsiyem onplayerdisconnect'in mysqle kaydetmesidir her dakika kaydederse bence sıkıntı biraz
timer için ThePosition'u dinleyebilirsin, birde her oyuncu için farklı timer oluşturma bence onun yerine 1 tane ongamemodeinit'e koy daha iyi, yoksa sunucuyu yorarsın sunucuda 10 oyuncu olsa 10timer oluşturur buda yorar zaten.
Teşekkürler.
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