4 Aralık 2013 Çarşamba

Function Get.Time

Yine işinizi kolaylaştıracak kullanımı basit bir fonksiyonla karşınızdayım. Vakti zamanında Ultima Online platformlarında paylaştım fakat artık paylaşımlarımı buradan gerçekleştireceğim için yazmakta fayda var.

Kullanabileceğiniz alanlara sınırsız desem yalan olmaz.

  • Kuluçka sisteminde gün/saat/dk/saniye gösterirken
  • Karakter yaşını hesaplarken
  • Karakterin online süresini hesaplarken
  • Sunucu uptime hesaplarken
  • Kalan stuck süresini hesaplarken
Sistemlerine bağlı olarak zaman dilimlerini yansıtmayı gerek duyduğunuz her yerde kolayca kullanabilirsiniz.

Bununla da kalmayarak göstereceğiniz zaman dilimlerini tek bir harfle belirleyebilirsiniz.
  • Gün
  • Saat
  • Dakika
  • Saniye


[FUNCTION get.time]
local._type = "<strarg <args>>"
local._filter = "<strarg <streat <args>>>"

IF strmatch(min,<local._type>)
  local._value = "1440"
ELSEIF strmatch(sec,<local._type>)
  local._value = "86400"
ELSEIF strmatch(sip,<local._type>)
  local._value = "864000"
ENDIF

args <streat <streat <args>>>,<dlocal._value>,<eval <dlocal._value>/24>,<eval (<dlocal._value>/24)/60>

IF strregex(d,<local._filter>)
  local._d = "<eval <argv[0]>/<argv[1]>>"
  IF (<local._d>)
    local.return .= " <dlocal._d>gn"
  ENDIF
ENDIF

IF strregex(h,<local._filter>)
  local._h = "<eval (<argv[0]>%<argv[1]>)/<argv[2]>>"
  IF (<local._h>)
    local.return .= " <dlocal._h>sa"
  ENDIF
ENDIF

IF strregex(m,<local._filter>)
  local._m = "<eval ((<argv[0]>%<argv[1]>)%<argv[2]>)/<argv[3]>>"
  IF (<local._m>)
    local.return .= " <dlocal._m>dk"
  ELSEIF !strregex(s,<local._filter>)
    IF strmatch(sip,<local._type>)
      local.return .= " <feval <fval ((<argv[0]>%<argv[1]>)%<argv[2]>)%<argv[3]>>>sn"
    ELSE
      local.return .= " <eval ((<argv[0]>%<argv[1]>)%<argv[2]>)%<argv[3]>>sn"
    ENDIF
  ENDIF
ENDIF

IF strregex(s,<local._filter>)
  IF strmatch(sip,<local._type>)
    local.return .= " <feval <fval ((<argv[0]>%<argv[1]>)%<argv[2]>)%<argv[3]>>>sn"
  ELSE
    local.return .= " <eval ((<argv[0]>%<argv[1]>)%<argv[2]>)%<argv[3]>>sn"
  ENDIF
ENDIF

RETURN <streat <local.return>>

Zaman türleri
Sphere de zamanları türlerine göre ayırmak gerekirse, dakika, saniye ve salise cinsinden zamanlama çeşitleri mevcuttur.

  • serv.time salise üzerinden çalışır
  • account.totalconnecttime dakika üzerinden çalışır
  • serv.timeup saniye üzerinden çalışır
  • timerf ve diğer eşyalara verdiğimiz timer saniye üzerinden çalışır

Durum böyle olunca hesaplamayı, hepsine ayrı ayrı formül yazmaktan kurtularak bu ufak fonksiyonla yapabilirsiniz.

Fonksiyonada bu zaman türleri şu şekildedir;
min, sec, sip

Zaman formatları
Geçen veya kalan zamanı hesaplamak, gün, saat, dakika gibi hepsini tek tek formülle göstermek yerine basitleştirilmiş şekilde yararlanabilirsiniz.

Fonksiyonda zaman formatları şu şekildedir;
d, h, m, s

Kullanım örnekleri
Kullanımını göstermek için basit bir fonksiyon yaparak işleme devam edelim

[FUNCTION doit]
say <get.time sec dhms <serv.timeup>>
Gösterilen sonuç: 1gn 6sa 5dk 10sn

İşte bu kadar basit. Fonksiyonu get.time ile çağırıp sec ile neyin zamanını göstermek istiyorsak onun zaman türünü yazıyoruz ve ardından hangi formatta göstermek istediğimizi dhms ile belirtiyoruz.

[FUNCTION doit]
say <get.time sec hms <serv.timeup>>
Gösterilen sonuç: 30sa 5dk 10sn

Bu örnekte hms kullanarak gün gösterimi iptal ettim. Fakat serv.timeup süresi 1 günden fazla olduğu için hepsini saat olarak hesaplayıp gösterdi.

Account.totalconnecttime hesaplarken bu değerin min yani dakika türünden olduğunu belirtmeliyim. Bundan başka min türü varmı bilmiyorum hiç denk gelmedi. Hemen örneğini göstereyim.

[FUNCTION doit]
say <get.time min dhm <account.totalconnecttime>>
Gösterilen sonuç: 10gn 5sa 56dk

Şimdi de serv.time ile bir örnek görelim. Bu zaman türünde, zaman formatına s ekleseniz bile gösterilmeyecektir.
Kendimize bir <tag> alarak, sunucunun şuanki serv.time değerini kaydederek başlayalım.

tag.timer <serv.time>

Ardından şu komutu sürekli tekrarlayalım.

[FUNCTION doit]
say Geride kalan zaman <get.time sip dhms <eval <serv.time>-<tag.timer>>>
Gösterilen sonuç: Geride kalan zaman 1sn
Komutu kullanma sıklığınıza bağlı olarak tekrarında sürekli olarak değer artacaktır.
Gösterilen sonuç: Geride kalan zaman 2sn

Bir nesnenin(item) kalan zamanını göstermek için ise şöyle yapabiliriz.

[ITEMDEF i_doit]
name doit
type t_script
id i_deed

ON=@Create
timer 90

ON=@Timer
remove
return 1

ON=@Click
message <get.time sec dhms <timer>>

Sonuç olarak get.time fonksiyonu
İşinizi kolaylaştırarak temiz bir kodlama yapmanızı sağlayacağından eminim. Kullanımı tarafımdan en basite indirilmiştir. Fonksiyonun rahatlığına çabuk alışacağınızdan eminim.

Hiç yorum yok:

Yorum Gönder