Çözülemedi Envanter doluyken sandıktan çıkanların yere düşmesi

Ne yazık ki bu konuda sorulara çözüm bulunmuyor. Eğer konuda yorumlar varsa hepsini inceleyebilirsiniz. Belki sizlerin sorununuzu çözmek için için ipuçları bulabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

MEKA

Discord: mekaprojects
Süper Moderatör
Premium Üye
Grafiker
Geliştirici
Yardımsever Üye
Editör
Mesaj
2.746
Çözümler
286
Beğeni
1.989
Puan
1.349
Başlıktada belirttiğim gibi sandık açıyoruz fakat envanter doluyken tüm itemler yere düşüyor bunu nasıl engelleyebilirim ?
 
Oyunun yapısı bu. Sandıktan çıkan eşyalar rasgele olarak çıktığından dolayı gelecek eşyaların envanterde ne kadar yer kaplayacağı belli olmuyor. Bu yüzden çıkan ekstra itemler yere düşer. Kaynak kodlarını da incelerseniz sandıklardan düşen itemler sizin isminiz yazılı şekilde kalır ve eşya silinene kadar isim de silinmez.
Zamanında bu durumun bende hata olduğunu düşündüm ve farklı yollar denemeye karar vermiştim. Baya bi süredir uğraştıktan sonra aklıma rasgelelik geldi. Kısacası düzeltmek için sandık drop algoritmasını baştan ayarlamak lazım lakin nereden düşünsek sonuçta problem %100 oranda çözülmüyor..

Sorduğunuz sorular gerçekten çok güzel. Çoğu da zamanında benim kafama takılan ve günlerce çözmeye çalıştığım şeylerle dolu. :) Ne yazık ki sistemin yapısı bazı şeylerin olmasını engelliyor.
 
Ben bu sistemi birkaç sunucuda görmüştüm. Yere düşecek durumlarda (sandık açımı, cor açımı gibi) "envanterinizde alan yok" diye bir mesaj verip açmıyordu sandığı. Nasıl yapıldığıyla ilgili bir bilgim yok ama uygulandığı sunucuları gördüm.
 
@comos Sandık aynası sisteminde ekranda gösterilen eşyaların hepsini mi veriyordu? Eğer öyleyse envanterde ki boş alan kontrol ettirebilir.
 
@comos Sandık aynası sisteminde ekranda gösterilen eşyaların hepsini mi veriyordu? Eğer öyleyse envanterde ki boş alan kontrol ettirebilir.
hepsini vermesine gerek kalmadan yapılamaz mı mesela bi sandık var içinden max 2 slotluk item çıkıyor her sandığı 2 slottan sayıp açmamasını ayarlayamazmıyız örnek vermek gerekirsa
1 kodlu sandık içinde 10 tane item ekli 1 slotluk 2 slotluk karışık ve 1 tane item veriyor her açışta
bizde bu sandıktan 100 tane olsun sandık aynasından açılacak miktarı 12 yaptık aç dedik 12x2den 24 slotluk boş yer kontrolü yapacak eğer yer varsa açacak yer yoksa hata verecek
 
Ben daha önce de bu özelliği kapatmayı düşündüm ve o zaman ki yarım yamalak bilgilerimle yapmaya çalıştım. Çünkü bug sanmıştım. :D Sonradan orijinalde filan test ettim aynı olduğunu görünce uğraşmayı bıraktım.

Ben bunla ilgili sorunu çözmek için aklımdan algoritma kurmaya çalışıyorum. Aklımda 2 farklı algoritma var. Bunu anlatmadan önce oyunda ki item yapısı ve sandık rate olayını anlatmam gerekiyor.

Oyunda 3 ayrı türde yer kaplayan item mevcut. 1x1, 1x2, 1x3. Açılacak sandık diyelim Lusifer olsun. İçinden 1x2, 1x1 veya 1x3 boyutunda eşyalar rasgele çıkabilir. Bu sandık gene diğerlerinden kolay. 1 tane item atıyor. Bu yüzden şöyle fikir yürütebilirsin ben çıkan her item için 1x3 şeklinde boşluk kontrolü yaptırabilirim ama buda mevcut sistemi saçma bir şekilde çözmek olur.
Bu yüzden aklımda iki tür var. Bunları test etmedim. Çünkü bu tarz kodlarda düzenleme yapmak zaman ve matematik işlemi gerektiriyor. Hatta sırf şu item boyutu hesaba katılmadığı için forumlarda paylaşılan k envanter sistemleri buglu.

Bu bilgileri aklımızda sorunu iyi tespit edebilmek için verdim.

Şimdi gelelim 2 türlü çözüme.
1. Çözüm yolu;
Kaynak kodunda boş yer kontrolü yapan fonksiyon var zaten.
Sandığa sağ tıkladığında çıkacak eşyaları ilk önce envanterda boş alan kontolü olup olmadığını kontrol ettirirsiniz. Varsa eşyaları verir yoksa uyarı verir. Fakat bunda envanter boş uyarısı verdikten sonra oyuncu envanteri boşalttı ve sonra tekrardan sandığa tıkladı diyelim bir önceki verilecek itemler yerine yeniden şansa bağlı olarak itemler verilecek.
Bunun kötü yanı şu. Kullanıcı belki bir öncekinde daha iyi item elde edebilirdi.

2. Çözüm yolu;
Belli yere kadar yukarı da söylediğim gibi devam ettirebilirsiniz daha sonra envanter dolu dedi ve uyarı verdi. Hemen verilecek itemleri bir vector yapısına kayıt ettirirsiniz. Oyuncu envanteri boşaltıp tekrar sandığı açtığında bir önce ki uyarı sebebi ile alamadığı itemleri alabilir.

Bunlar sadece önden yapılan beyin fırtınaları iş kodlama kısmına gelince belki iş planlandığı gibi gitmeyebilir.
 
@Whistle eşya yerini kontrol ettiren fonksiyonu sandık sisteminde kötüye kullanabilirler. Sandıktan şeytan kanadı çakram, zehir kılıcı ve kin kılıcı attığını varsayalım. Envanterimde sadece tek bir yer kaldıysa şeytan kanadı çakram çıkana kadar uyarı verir bu çok sıkıntı ama sandığın içerisinden çıkan eşyanın alt alta 3'lük yer kapladığını varsaydırırsak başarılı olur.
Az önce daha iyi item gelebilirdiye gelirsek, sandık açmak tamamen şans işi. Belki daha iyi item çıkacaktı :D
 
@comos Belli olmaz işte. :) Nereden tutulsa kesin çözüm olmuyor. :( Bu yüzden 2. Çözüm yolu bu söylediğiniz hatayı da engelleyebilir lakin oyuncu çık gir yaparsa hafızaya alınan veri de silineceği için gene aynı yere dönmüş oluyoruz. Bu yüzden bu tarz düzenlemeler yaparken ince eleyip sık dokumak gerek.

Az önce daha iyi item gelebilirdiye gelirsek, sandık açmak tamamen şans işi. Belki daha iyi item çıkacaktı :D
Bunun kötü yanı şu. Kullanıcı belki bir öncekinde daha iyi item elde edebilirdi.
Sandık tamamen şans işi belki sonrasında iyi item çıkabilir yada öncesinde. Ama adaletli düşünürsek uyarı verdiği anda ki itemi verdirmek daha mantıklı. Diğer türlü dediğiniz gibi boş alan ile hançer, zırh vs çıkartma şanslarını arttırabilirler.

Envanterimde sadece tek bir yer kaldıysa şeytan kanadı çakram çıkana kadar uyarı verir bu çok sıkıntı ama sandığın içerisinden çıkan eşyanın alt alta 3'lük yer kapladığını varsaydırırsak başarılı olur.
Bunu mesajda da söyledim ama sorunu %100 çözmez.
Oyunda 3 ayrı türde yer kaplayan item mevcut. 1x1, 1x2, 1x3. Açılacak sandık diyelim Lusifer olsun. İçinden 1x2, 1x1 veya 1x3 boyutunda eşyalar rasgele çıkabilir. Bu sandık gene diğerlerinden kolay. 1 tane item atıyor. Bu yüzden şöyle fikir yürütebilirsin ben çıkan her item için 1x3 şeklinde boşluk kontrolü yaptırabilirim ama buda mevcut sistemi saçma bir şekilde çözmek olur.
Bazı sandıktan 7 tane farklı item çıkabiliyor. Çıkan itemlerin hepsinin birli olduğunu varsayalım. Fakat bu şekilde kontrol mantığı olacağı için 7x3 şeklinde boş alan isteyeceğiz o zaman. Ben oyuncuyum diyelim 8 tane boş alanım var ama benden 7x3 kadar alan istiyor. Sandığı açtım ve 7 tane 1x1 item çıktı buda 7x1 yer kapladı. Geriye kalan 7x2 boş kalmış oluyor. Buda oyuncuya acaba bug mu diye düşünmesine neden olabilir.

Bu konu baya kafa patlatılması ve her yönü ile fikir alışverişi yapılıp düşünülmesi gereken bir konu
 
@Whistle Kodlama kısmında bilgim olmadığı için düz mantık düşünüyorum ben :D yani kısacası çözümü çok fazla kod bilgilsine dayalı bazı yerlerde gördüm tam olarak bilmiyorum saltanatmt2de örneğin 30k stacklenebilir item oluyor bunun hepsini aç dediğinde yere tonlarca item yağacak demek oluyor fakat bunu sanırım çözmüşler öyle okudum servera girip hiç denemedim ama dediğim fikirde(önceki yorumda açıkladığım gibi) düşünürsek fena düşünce değil :D tabi kodlama kısmını siz daha iyi bilirsiniz
 
Kodlama bilgisi belli bir yerde olan bir kişi bile bunu kolay kolay yapamaz. Yani yapmak var yapmak var. Burada önemli olan mümkün olacak tüm olasılıkları değerlendirmek ve sistemin doğru düzgün işlemesi için gerekli algoritmayı kurmak. Hani bazıları programlamada matematik gerek yok diyorlar. Geçenlerde de ekşide böyle başlıklar açılmış ama iş bu tarz düzenlemelere gelince ortada kalıyorlar. Zaten önce ki mesajımda da k envanterde ki sorunu da dile getirmiştim.
Linkleri görebilmek için giriş yap veya kayıt ol.
bakabilirsiniz.

Ben yapabilir miyim bilmiyorum. Daha önce denemelerim oldu ama sonra gerek görmediğim ve mesajımda da yazdığım sorunları göz önünde bulundurarak vazgeçmiştim. Kendinizi geliştirmek için oturup aylarca kafa patlatabilirsiniz. Ben zamanında kafaya koyduğum şeyi yapmak için günlerce/aylarca uğraştığım zaman oldu. Kimisinde çözüme ulaştım kimisinde başarısız oldum ama o süreçte sürekli kodlama olarak ve oyunun kod yapısı hakkında daha fazla bilgiye sahip oluyorsun.

Saltanatmt2'ye gelirsek. Pvp piyasasının başından beri sürekli aktif kalan bir server. Sitelerine girince de firma olduğunu görebilirsiniz. Firma demek arkada alanında uzman ciddi bir ekip var demek. :)
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst