• 02-10-2008, 23:31:26
    #1
    Travian veya ogame'deki gibi zaman bazlı bir oyun yazmayı düşünüyorum ve bu zaman olayı için söyle birşey düşündüm.

    Traviandaki madenler saniyelik olarak geldiğinden, kişinin sayfayı son yeniledi tarih ve şimdiki tarih arasında kaç saniye varsa ona göre çarpım yapacak ve sonucu belirleyecek. Bunun sorun yaratacağını düşünmüyorum ama bundan daha değişik birşey yapılabilir mi?
  • 02-10-2008, 23:41:53
    #2
    Bundan daha değişik bişi yapabilirmiyiz derken mesela nasıl farklı birşey ?
    Alıntı
    <?
    session_start();
    if($_SESSION['time'])
    $second=time()-$_SESSION['time'];
    else
    $second=0;
    $_SESSION['time']=time();
    ?>
  • 03-10-2008, 10:44:05
    #3
    Üyeliği durduruldu
    cron tab ı her saniye çalıştırırsa sorun olur. Dediği mantıklı geldi bana.
  • 03-10-2008, 11:55:47
    #4
    Serkan adlı üyeden alıntı: mesajı görüntüle
    cron tabe ( zamanlanmış görevler ) araştırırsan dediğinin saçma olduğunu çok basit bi şekilde yapılabildiğini göreceksin
    Dediğini bende düşünmüştüm ama her saniye bir sql sorgusunu çalıştırmak, çok daha saçma geldi :S Şimdi en mantıklısı kullanıcının son girdiği tarih ve şimdiki tarih arasındaki farka göre mi yapmak? (kullanıcının şimdi oturum açtığını varsayalım)

    Edit :
    mustafa90 adlı üyeden alıntı: mesajı görüntüle
    Bundan daha değişik bişi yapabilirmiyiz derken mesela nasıl farklı birşey ?
    Değişik birşeyden kastım Serkan dediği gibi benim fikrimden farklı birşey. Daha değişik, basik ve kullanışlı bir yoldan yapmak.
  • 03-10-2008, 13:01:55
    #5
    Üyeliği durduruldu
    Pencereyi kapattığı anda çıkış yapmasını sağlaman gerek ama.
  • 03-10-2008, 13:17:27
    #6
    Tam olarak anlayamadım şunu mu yapmak istiyorsun?;

    Adam diyelim bir yerle savaştı. Tekrar savaşa bilmesi için 15 dakika bekleyecek. Bunu mu yapmak istiyorsun?
  • 03-10-2008, 13:44:35
    #7
    Youngwe adlı üyeden alıntı: mesajı görüntüle
    Tam olarak anlayamadım şunu mu yapmak istiyorsun?;
    Adam diyelim bir yerle savaştı. Tekrar savaşa bilmesi için 15 dakika bekleyecek. Bunu mu yapmak istiyorsun?
    Hayır. Mesela Kışla'nın seviyesini yükselteceksin. Bunun içinde 00:15:00 (sa:dk:sn) zaman geçmesi gerekiyor. Yükselt'e tıklayınca bu geri sayım başlıyacak. Bitincede seviye yükselecek.
    theapeiron adlı üyeden alıntı: mesajı görüntüle
    Pencereyi kapattığı anda çıkış yapmasını sağlaman gerek ama.
    Bence gerek yok. İlk tarih dediğim şey, olayın başlama tarihi. Yani Kışla'nın seviye yükseltmesinin başlama tarihi. O tarihte veritabanında kayıtlı olur. Sonuçta 1 gün veya daha uzun süreli upgrade'lerde olacak
  • 03-10-2008, 14:13:20
    #8
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Basitçe şöyle olur üye giriş yaptığı zaman en son giriş zamanına bakarsın misal saat
    15:30 da çıkış yapmış ve sende bunu db'ye kaydetmişsin üye offline
    Üyenin offline olduğu süre zarfında bişey çalıştırmana filan gerek yok.Üye giriş yaptığında şimdiki zamandan son giriş zamanını çıkarırsın ne kadar süre geçmiş misal üye 14:30'da giriş yaptı 1 saat geçmiş hesaplarsın 1 saat'te ne kadar mağden geliyor diye onu eklersin mağdenine sonra son giriş zamanını 14:30 yaparsın üye her mağden sayfasına baktığında aynı şeyi tekrarlarsın şimdiki zamandan son giriş zamanı yada işte upgrade zamanı diyelim ondan çıkarırsın süre ne kadarsa mağdeni arttırırsın üyeye gösterirsin.
    Bu zamanlanmış görevler içinde aynı mantığı kullanırsın misal mağden binası diye bir tablo olur
    id uyeno bitis_suresi
    üye mağden seviyesini bir yükseltti misal yükseltme 1 saat sürecek
    şimdiki zaman + 1 saat'i hesaplarsın ve bitis_suresi olarak eklersin db ye üye mağden yükseltme sayfasına baktığında bitis_suresinden şimdiki zamanı çıkarırsın bakarsın işte kaç dakika kalmış onu yazarsın oraya javascript ile timer eklemek zor değil.Eğer zaman süre - ise mağden banası tablosundan veriyi silersin mağden binasının seviyesini bir arttırırsın.
    Yani sonuç olarak verileri üyeye göstereceksin son upgrade zamanını alacaksın.
    Ogame'de mesela 5 dakikada bir sıralamalar değişiyor sende cron ile 5 dakikamı 1 saattemi ne kadar sürede istersen o kadar sürede bir kod çalıştırırsın bu kod işte şimdiki zamandan son upgrade zamanını çıkarırsın tüm üyeler'in mağdenini arttırırsın.
  • 03-10-2008, 14:36:01
    #9
    S4l1h adlı üyeden alıntı: mesajı görüntüle
    Basitçe şöyle olur üye giriş yaptığı zaman en son giriş zamanına bakarsın misal saat
    15:30 da çıkış yapmış ve sende bunu db'ye kaydetmişsin üye offline
    Üyenin offline olduğu süre zarfında bişey çalıştırmana filan gerek yok.Üye giriş yaptığında şimdiki zamandan son giriş zamanını çıkarırsın ne kadar süre geçmiş misal üye 14:30'da giriş yaptı 1 saat geçmiş hesaplarsın 1 saat'te ne kadar mağden geliyor diye onu eklersin mağdenine sonra son giriş zamanını 14:30 yaparsın üye her mağden sayfasına baktığında aynı şeyi tekrarlarsın şimdiki zamandan son giriş zamanı yada işte upgrade zamanı diyelim ondan çıkarırsın süre ne kadarsa mağdeni arttırırsın üyeye gösterirsin.
    Bu zamanlanmış görevler içinde aynı mantığı kullanırsın misal mağden binası diye bir tablo olur
    id uyeno bitis_suresi
    üye mağden seviyesini bir yükseltti misal yükseltme 1 saat sürecek
    şimdiki zaman + 1 saat'i hesaplarsın ve bitis_suresi olarak eklersin db ye üye mağden yükseltme sayfasına baktığında bitis_suresinden şimdiki zamanı çıkarırsın bakarsın işte kaç dakika kalmış onu yazarsın oraya javascript ile timer eklemek zor değil.Eğer zaman süre - ise mağden banası tablosundan veriyi silersin mağden binasının seviyesini bir arttırırsın.
    Yani sonuç olarak verileri üyeye göstereceksin son upgrade zamanını alacaksın.
    Ogame'de mesela 5 dakikada bir sıralamalar değişiyor sende cron ile 5 dakikamı 1 saattemi ne kadar sürede istersen o kadar sürede bir kod çalıştırırsın bu kod işte şimdiki zamandan son upgrade zamanını çıkarırsın tüm üyeler'in mağdenini arttırırsın.
    Üye 2 gün oyuna girmemişse ve bu süre zarfında biri saldırmışsa alacağı maden sayısı normalden az olacak. Ama dediğin gibi cronjob ile bir kod çalıştırırsak bu kayıp en aza indirilir.