Athynas - 01-09-2018 22:55 GMT -
Merhaba, ara ara nasıl dialog ile status bar yapılabileceğini düşünüyordum. Bugün boş vakit bulunca uğraşayım istedim. Sonuç pek fena olmadı gibi, benim gibi kendi halinde ya da arkadaşlarıyla oynayanlar için de kullanılabilir. Sadece hits, stam ve int güncellemesinde kendisini yenilemiyor. Ancak Avatar'ın kendi triggerlarını oluşturduğunu fark etmiştim, bu şekilde o kısım halledilebilir.Sanıyorum ki sunucuda kullanmak namına pek sağlıklı olmaz. Bizim gibi arada maksimum 10 kişiye erişen kişilere uygun gibi. Ben deneme amaçlı yaptığımdan, daha çok geliştirmeyi deneyeceğimden bir iki kısmın üzerinde kafa yormadım. Aslında çok basit ancak benim açımdan epey kafa patlatmam gerekti.
Bu dialog nasıl daha iyi hale getirilebilir?
(Konuyu yanlış yere açmışım, 56b olacaktı, kusura bakmayın)
Not: Gumps içerisinde ilk çekildiğinde çıkan status barı (HP, Stam ve Mana barları olanı) 1x1 piksel olacak şekilde değiştirdim.
Son güncelleme: athynas tarafından 04-09-2018 22:52 GMT tarihinde, önce.
Merhaba, ara ara nasıl dialog ile status bar yapılabileceğini düşünüyordum. Bugün boş vakit bulunca uğraşayım istedim. Sonuç pek fena olmadı gibi, benim gibi kendi halinde ya da arkadaşlarıyla oynayanlar için de kullanılabilir. Sadece hits, stam ve int güncellemesinde kendisini yenilemiyor. Ancak Avatar'ın kendi triggerlarını oluşturduğunu fark etmiştim, bu şekilde o kısım halledilebilir.Sanıyorum ki sunucuda kullanmak namına pek sağlıklı olmaz. Bizim gibi arada maksimum 10 kişiye erişen kişilere uygun gibi. Ben deneme amaçlı yaptığımdan, daha çok geliştirmeyi deneyeceğimden bir iki kısmın üzerinde kafa yormadım. Aslında çok basit ancak benim açımdan epey kafa patlatmam gerekti.
Bu dialog nasıl daha iyi hale getirilebilir?
(Konuyu yanlış yere açmışım, 56b olacaktı, kusura bakmayın)
Not: Gumps içerisinde ilk çekildiğinde çıkan status barı (HP, Stam ve Mana barları olanı) 1x1 piksel olacak şekilde değiştirdim.
Kod:
[DIALOG d_statusbar]
0,0
resizepic 60 60 <var.theme1> 1 1
gumppic 280 220 2050 /Status
dtext 368 258 1153 <src.name>
dtext 365 275 1153 <src.str>
dtext 450 275 1153 <src.hits>
dtext 365 290 1153 <src.dex>
dtext 450 290 1153 <src.stam>
dtext 365 305 1153 <src.int>
dtext 450 305 1153 <src.mana>
dtext 365 325 1153 <src.ar>
dtext 450 325 1153 <EVAL (<src.weight> / 10)>/<EVAL (<src.maxweight> / 10)>
dtext 340 350 1153 <EVAL (<src.gold.amount>)>
[Events e_statusbar]
on=@UserStats
if (<argo> == <uid>)
SRC.DIALOGCLOSE d_statusbar
src.dialog d_statusbar
RETURN 1
elif !(<argo> != <uid>)
RETURN 0
ENDIF
On=@RegenStat
SRC.DIALOGCLOSE d_statusbar
src.dialog d_statusbar
on=@GetHit
SRC.DIALOGCLOSE d_statusbar
src.dialog d_statusbar
on=@StatChange
SRC.DIALOGCLOSE d_statusbar
src.dialog d_statusbar
on=@statchange_hits
SRC.DIALOGCLOSE d_statusbar
src.dialog d_statusbar
on=@statchange_stam
SRC.DIALOGCLOSE d_statusbar
src.dialog d_statusbar
on=@statchange_mana
SRC.DIALOGCLOSE d_statusbar
src.dialog d_statusbar
[function checkstat]
if (<isempty <tag.statchange_hits>>) || (<isempty <tag.statchange_mana>>) || (<isempty <tag.statchange_stam>>)
tag.statchange_hits=<hits>
tag.statchange_mana=<mana>
tag.statchange_stam=<stam>
else
if !(<dtag0.statchange_hits>==<hits>)
trigger @statchange_hits
endif
if !(<dtag0.statchange_mana>==<mana>)
trigger @statchange_mana
endif
if !(<dtag0.statchange_stam>==<stam>)
trigger @statchange_stam
endif
endif
if (<isonline>)
timerf 1, checkstat
else
tag.statchange_hits=
tag.statchange_mana=
tag.statchange_stam=
endif
[EOF]
Son güncelleme: athynas tarafından 04-09-2018 22:52 GMT tarihinde, önce.
Ce-man - 04-09-2018 22:27 GMT -
Bizde böyle birşey arıyordukda , acep tam halini atarmısınız ? böyle can gelince yansıtmıyor
Bizde böyle birşey arıyordukda , acep tam halini atarmısınız ? böyle can gelince yansıtmıyor
Athynas - 04-09-2018 22:39 GMT -
Ekledim, sadece oyuncuya oyuna girişte checkstat functionunu vermek yeterli. Ancak ne kadar sağlıklı oldu bilmiyorum.
Ekledim, sadece oyuncuya oyuna girişte checkstat functionunu vermek yeterli. Ancak ne kadar sağlıklı oldu bilmiyorum.
Slothere - 05-09-2018 12:47 GMT -
Şimdi bir bakalım,
En işlevsel trigger larda anlık sorgulama söz konusu.
Baya bir sorgu, çağırma ve işlem içeren sürekli tetiklenen bir fonksiyon mevcut.
Saniyede bir timerf çalıştırmak söz konusu.
Timerf sırayla çalışan bir fonksiyon. Yani global olarak tüm timerf ler bir sıraya alınıp oradan sırayla işletilirler. Tabi belirli sayıya kadar siz bunu hissetmezsiniz, oldukça hızlı çalışır. Fakat çok verimli olmadığı gibi kaydedilme ve işletilme tarzı yüzünden de mümkün mertebe kullanılmaması gereken bir komuttur. Kaldı ki burada saniyede bir işletme söz konusu. Belki birkaç oyuncuyla fark etmezsiniz ama atıyorum 20-30-40... şeklinde oyuncu aynı anda bunu çalıştırdığı anda sunucunda farklı timerf ler de işlem görüyorsa dar boğaz oluşması söz konusu olacaktır. Ve sonucunda muhtemelen oldukça yavaş ve hantal hatta sebepsizce patlayabilen bir sphere'ınız olacaktır.
Kod başlı başına client ve emülatör düşmanı olmuş. Kısa vadede client çökmeleri ve patlamalar gibi sıkıntılar yaşatacağına kesin gözüyle bakabilirsin.
Şimdi bir bakalım,
En işlevsel trigger larda anlık sorgulama söz konusu.
Baya bir sorgu, çağırma ve işlem içeren sürekli tetiklenen bir fonksiyon mevcut.
Saniyede bir timerf çalıştırmak söz konusu.
Timerf sırayla çalışan bir fonksiyon. Yani global olarak tüm timerf ler bir sıraya alınıp oradan sırayla işletilirler. Tabi belirli sayıya kadar siz bunu hissetmezsiniz, oldukça hızlı çalışır. Fakat çok verimli olmadığı gibi kaydedilme ve işletilme tarzı yüzünden de mümkün mertebe kullanılmaması gereken bir komuttur. Kaldı ki burada saniyede bir işletme söz konusu. Belki birkaç oyuncuyla fark etmezsiniz ama atıyorum 20-30-40... şeklinde oyuncu aynı anda bunu çalıştırdığı anda sunucunda farklı timerf ler de işlem görüyorsa dar boğaz oluşması söz konusu olacaktır. Ve sonucunda muhtemelen oldukça yavaş ve hantal hatta sebepsizce patlayabilen bir sphere'ınız olacaktır.
Kod başlı başına client ve emülatör düşmanı olmuş. Kısa vadede client çökmeleri ve patlamalar gibi sıkıntılar yaşatacağına kesin gözüyle bakabilirsin.
Athynas - 05-09-2018 15:52 GMT -
Kıt bilgiyle, dene yanıl yaparak, bolca Google amcaya sor, ortada kalmayan kaynakları araştır vesaire ancak çıkan bu oldu. Nasıl daha az yoracak hale getirilebilir? Timer yerine nasıl kullanabilirim?
Kıt bilgiyle, dene yanıl yaparak, bolca Google amcaya sor, ortada kalmayan kaynakları araştır vesaire ancak çıkan bu oldu. Nasıl daha az yoracak hale getirilebilir? Timer yerine nasıl kullanabilirim?
xwerswoodx - 07-09-2018 02:44 GMT -
Timerf fonksiyonunu her saniye kullanmak akıl karı değil, çünkü sadece yukardaki sebebi geçtim, 300 kişilik bir sunucu düşünelim, her saniye 300 adet timer, bu denli oyunculu bir sunucunun save süresi ise itemlere bağlı olarak 3 ile 8 saniye arasında değişir, ki bu daha da yüksek olabilir. Bu sadece basit bir örnek ama 8 saniyelik save süresinde 8*300 den 2400 bir de saveden sonra gelecek olan kısa bir ping süresi ile 2700 timerin bir anda devreye girdiğini düşünebiliriz. Bu da sunucunun aşırı girişten doolayı hata verip çökmesine sebep olabilir. O yüzden çok sağlıklı bulmuyorum.
Ancak bu tarz bir sistemi çok kolay bir şekilde hiç timer kullanmadan yapmak gayet basit. On=@GetHit, On=@Spelleffect gibi hasar aldıran, On=@StatChange gibi stam değişince devreye giren triggerler ile kontrol ettirip statusu yenileyebilirsin. Ancak her durumu %100 yansıtabilir misin denemedim. Açıkcası zaten bir çok client için status penceresi için dll yapıldığına göre yapılması imkansız değil gibi, bence dll üzerine yoğunlaşmak veya araştırma yapmak daha mantıklı.
Timerf fonksiyonunu her saniye kullanmak akıl karı değil, çünkü sadece yukardaki sebebi geçtim, 300 kişilik bir sunucu düşünelim, her saniye 300 adet timer, bu denli oyunculu bir sunucunun save süresi ise itemlere bağlı olarak 3 ile 8 saniye arasında değişir, ki bu daha da yüksek olabilir. Bu sadece basit bir örnek ama 8 saniyelik save süresinde 8*300 den 2400 bir de saveden sonra gelecek olan kısa bir ping süresi ile 2700 timerin bir anda devreye girdiğini düşünebiliriz. Bu da sunucunun aşırı girişten doolayı hata verip çökmesine sebep olabilir. O yüzden çok sağlıklı bulmuyorum.
Ancak bu tarz bir sistemi çok kolay bir şekilde hiç timer kullanmadan yapmak gayet basit. On=@GetHit, On=@Spelleffect gibi hasar aldıran, On=@StatChange gibi stam değişince devreye giren triggerler ile kontrol ettirip statusu yenileyebilirsin. Ancak her durumu %100 yansıtabilir misin denemedim. Açıkcası zaten bir çok client için status penceresi için dll yapıldığına göre yapılması imkansız değil gibi, bence dll üzerine yoğunlaşmak veya araştırma yapmak daha mantıklı.