GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi

Zamanlayıcı sorunsalı

Başlatan VERITAS, 13 Şubat 2022, 01:11:20

« önceki - sonraki »

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

VERITAS

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?


Hasan Sangrento

Callback edilen fonksiyonu da atarsanız daha sağlıklı cevap verebiliriz, ve bahsettiğiniz gibi 1sec = 1000MS evet.


VERITAS

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


Hasan Sangrento

Buradan baktığımda bir problem göremedim. Konsola de-bug yapmanız daha sağlıklı olacaktır.


VERITAS

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?


Hasan Sangrento

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.


VERITAS

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?


Hasan Sangrento

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.


VERITAS

Dediğiniz üzere 10000ms'ye çekip bir de chate yazı yazdırttım. Görüntüsünü atıyorum hemen.



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?


Vengeance

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.


HasanEfe

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


VERITAS

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?


squarepants

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)


HasanEfe

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.


VERITAS