GTAMulti - GTA Türkiye

San Andreas Multiplayer => Yardım Talepleri => PAWN Kodlama => Kilitli Konular => Konuyu başlatan: VERITAS - 13 Şubat 2022, 01:11:20

Başlık: Zamanlayıcı sorunsalı
Gönderen: VERITAS - 13 Şubat 2022, 01:11:20
Merhabalar, modda kullandığım timerların hiçbiri olması gerektiği gibi değil.

PAWN Kodu: Seç
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?
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: Hasan Sangrento - 13 Şubat 2022, 01:14:58
Callback edilen fonksiyonu da atarsanız daha sağlıklı cevap verebiliriz, ve bahsettiğiniz gibi 1sec = 1000MS evet.
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: VERITAS - 13 Şubat 2022, 01:22:36
Alıntı yapılan: Hasan Sangrento - 13 Şubat 2022, 01:14:58
Callback edilen fonksiyonu da atarsanız daha sağlıklı cevap verebiliriz, ve bahsettiğiniz gibi 1sec = 1000MS evet.

PAWN Kodu: Seç
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;
}
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: Hasan Sangrento - 13 Şubat 2022, 01:28:05
Buradan baktığımda bir problem göremedim. Konsola de-bug yapmanız daha sağlıklı olacaktır.
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: VERITAS - 13 Şubat 2022, 01:29:11
Alıntı yapılan: Hasan Sangrento - 13 Şubat 2022, 01:28:05
Buradan 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?
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: Hasan Sangrento - 13 Şubat 2022, 01:34:06
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.
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: VERITAS - 13 Şubat 2022, 01:44:38
Alıntı yapılan: Hasan Sangrento - 13 Şubat 2022, 01:34:06
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.

1 dakikada olması gereken kodu  hesaplamıştım 75 saniye kadar bir civarda olmuştu. 1 saati mi hesaplamamı istiyorsunuz?
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: Hasan Sangrento - 13 Şubat 2022, 01:48:23
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.
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: VERITAS - 13 Şubat 2022, 01:56:41
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?
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: Vengeance - 13 Şubat 2022, 04:48:41
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.
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: HasanEfe - 13 Şubat 2022, 13:45:03
OnPlayerConnect
PAWN Kodu: Seç
JailTimer[playerid] = SetTimerEx("JailAzalt",60000, true, "d", playerid)
OnPlayerDisconnect'e
PAWN Kodu: Seç
KillTimer(JailTimer[playerid]);
herhangi bir boş kısıma
PAWN Kodu: Seç
forward JailAzalt(playerid);
public JailAzalt(playerid)
{
   if(Oyuncu[playerid][jaildemi] == 1)
   {
    Oyuncu[playerid][jailsure]-60;
   }
   return 1;
}

birde mysqle kaydetmesini onplayerdisconnect'e ekleyebilirsiniz
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: VERITAS - 13 Şubat 2022, 14:04:43
Alıntı yapılan: HasanEfe - 13 Şubat 2022, 13:45:03
OnPlayerConnect
PAWN Kodu: Seç
JailTimer[playerid] = SetTimerEx("JailAzalt",60000, true, "d", playerid)
OnPlayerDisconnect'e
PAWN Kodu: Seç
KillTimer(JailTimer[playerid]);
herhangi bir boş kısıma
PAWN Kodu: Seç
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?
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: squarepants - 13 Şubat 2022, 14:49:15
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)
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: HasanEfe - 13 Şubat 2022, 15:06:38
Alıntı yapılan: VERITAS - 13 Şubat 2022, 14:04:43
Alıntı yapılan: HasanEfe - 13 Şubat 2022, 13:45:03
OnPlayerConnect
PAWN Kodu: Seç
JailTimer[playerid] = SetTimerEx("JailAzalt",60000, true, "d", playerid)
OnPlayerDisconnect'e
PAWN Kodu: Seç
KillTimer(JailTimer[playerid]);
herhangi bir boş kısıma
PAWN Kodu: Seç
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.
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: VERITAS - 13 Şubat 2022, 15:24:07
Teşekkürler.
Başlık: Ynt: Zamanlayıcı sorunsalı
Gönderen: Jate - 01 Mart 2022, 17:40:52
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