Yardım Pazarın açık olup olmadığını veritabanı yerine yerel olarak kaydetmek

  • Konuyu açan Konuyu açan exploytadam
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 14
  • Gösterim Gösterim 463
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

exploytadam

Üye
Üye
Mesaj
89
Çözümler
5
Beğeni
21
Puan
459
Ticaret Puanı
0
Başlık biraz karışık gelmiş olabilir , sadece bilgisi yeterli olan arkadaşlar cevap verirse sevinirim. Yapmayı planladığım şey şu pazar kilitlenince pazara erişim kapanacak pazarı açınca erişim açılacak. Buraya kadar sorun yok , pazarın açılıp kapanması hem veritabanında hem de sunucu tarafında bir değişkende saklanıyor. Pazarın açılıp açılmayacağı ise sunucu tarafındaki değişkenden kontrol ediliyor. Veritabanından kontrol etmek sunucu için çok yorucu olacağı için öyle kullanmak istemiyorum , sunucu tarafındaki değişkende tutunca da sunucuyu açıp kapatınca değişken sıfırlandığı için otomatik pazar açılmış oluyor. Alternatif olarak nasıl bir yapı kullanabilirim acaba ? Bilgili arkadaşlar bi yardım edebilirse sevinirim.
 
Veritabanından kontrol etmek neden yorucu olsun ki? Bu kısmı anlamadım. Eğer great offline shop gibi baştan sona sql kullanan bir shop kullanmıyorsan sadece kilit kontrolü için sql kullanabilirsin rahatlıkla. Sonuçta Metin2, karakterin attığı adımı bile mysqle kaydeden bir yapıya sahip. Ya da düzenleme kilidi yerine paralel kontrol ekleyebilirsin.
Yani satıcı, düzenleme esnasında satılan bir ürünü düzenlerken satıldı diye hata alacak. Alıcı da, fiyatı güncellenmiş/kaldırılmış bir itemi eski fiyattan vs. almaya çalışırken hata alacak.
 
Veritabanından kontrol etmek neden yorucu olsun ki? Bu kısmı anlamadım. Eğer great offline shop gibi baştan sona sql kullanan bir shop kullanmıyorsan sadece kilit kontrolü için sql kullanabilirsin rahatlıkla. Sonuçta Metin2, karakterin attığı adımı bile mysqle kaydeden bir yapıya sahip. Ya da düzenleme kilidi yerine paralel kontrol ekleyebilirsin.
Yani satıcı, düzenleme esnasında satılan bir ürünü düzenlerken satıldı diye hata alacak. Alıcı da, fiyatı güncellenmiş/kaldırılmış bir itemi eski fiyattan vs. almaya çalışırken hata alacak.
Tr tipi yapmak istediğim için paralel kontrol eklemedim , yorucu olacağını düşündüğüm taraf şu ; Ticaret camı sistemi de kullanıyorum bununla beraber ve camda ürünün satıldığı pazarın kilitli olup olmadığı da yazıyor. Her ürün tarandığında örneğin camda 50 ürün çıkacaksa her ürün için pazar kilitli mi değil mi onun için sqlden sorgu yapacak , bunu istemediğim için farklı bir yapı arıyorum.
 
Öncelikle buradaki mantık yanlış. Her ürün için pazar kontrolü yapması gereksiz bir eylem, her pazar için kontrol yapmasi daha iyi olur. Yani o 50 ürünün 20si tek bir pazara ait olabilir sonuçta, dolayısıyla shop_id değerine göre kontrol yapmak daha kullanışlı olur.

Ek olarak bunu yapmanın temelde iki yolu var, biri SQL diğeri ise paket aracılığı ile. Bana sorarsan SQL paketten daha pratik olur. Ancak nasıl sorgulayıp kullandığına bağlı. Her shop_id yi gerçek zamanlı olarak tek tek sorgulatmak yerine, arama esnasında örnek olarak 2 saniye bekletme süresi verip, bütün shop_id leri kontrol eden bir fonksiyon ile ilgili kontrolleri yapıp gerekli aktarımları yapabilirsin.
Ya da dediğim gibi kontrol ekleyebilirsin, ve return subheader ile tek paket aracılığı ile bunu çözebilirsin.
 
Öncelikle buradaki mantık yanlış. Her ürün için pazar kontrolü yapması gereksiz bir eylem, her pazar için kontrol yapmasi daha iyi olur. Yani o 50 ürünün 20si tek bir pazara ait olabilir sonuçta, dolayısıyla shop_id değerine göre kontrol yapmak daha kullanışlı olur.

Ek olarak bunu yapmanın temelde iki yolu var, biri SQL diğeri ise paket aracılığı ile. Bana sorarsan SQL paketten daha pratik olur. Ancak nasıl sorgulayıp kullandığına bağlı. Her shop_id yi gerçek zamanlı olarak tek tek sorgulatmak yerine, arama esnasında örnek olarak 2 saniye bekletme süresi verip, bütün shop_id leri kontrol eden bir fonksiyon ile ilgili kontrolleri yapıp gerekli aktarımları yapabilirsin.
Ya da dediğim gibi kontrol ekleyebilirsin, ve return subheader ile tek paket aracılığı ile bunu çözebilirsin.
Hocam kaçırdığınız bir nokta var , ticaret camında aratma yaparken eşya arıyorum pazar değil. Kontroller her eşya başına , eşya verisine göre yapılıyor bu yüzden ayrı ayrı pazar kontrolü yaptırmam mümkün değil.Sunucu ilk açıldığında sadece bir kez tetiklenen bir fonksiyon yok mu sunucu game tarafında? Her sunucu ilk açıldığında veritabanındaki veri kontrol edilip oradaki shop_id'den playerid'ye ulaşıp her karakter için bir değişken atasam tek seferde sadece açılışta. Mümkün gibi , sadece hangi fonksiyonların tek seferlik çalıştırıldığını bilmem gerekli bi örnek var mı bildiğiniz?
 
Hocam kaçırdığınız bir nokta var , ticaret camında aratma yaparken eşya arıyorum pazar değil. Kontroller her eşya başına , eşya verisine göre yapılıyor bu yüzden ayrı ayrı pazar kontrolü yaptırmam mümkün değil.Sunucu ilk açıldığında sadece bir kez tetiklenen bir fonksiyon yok mu sunucu game tarafında? Her sunucu ilk açıldığında veritabanındaki veri kontrol edilip oradaki shop_id'den playerid'ye ulaşıp her karakter için bir değişken atasam tek seferde sadece açılışta. Mümkün gibi , sadece hangi fonksiyonların tek seferlik çalıştırıldığını bilmem gerekli bi örnek var mı bildiğiniz?
Evet ticaret camının görevini biliyorum, ama sonuçta o itemleri gökten bulup göstermiyor. Her bir itemi, bulunduğu pazarın shop_id değerine göre çekiyor ve listeliyor. Yani itemden önce shop araması yapıyor aslında.

Ayrıca tek seferlik çalışan statik bir kod ile bu işlemi yapamazsın. Dinamik olarak sürekli aktif olan bir fonksiyon ile yapabilirsin.
 
Hocam daha fazla uğraşmak yerine şöyle bir çözüm buldum;

Her pazar arandığında önce değişken kontrol ediliyor eğer değişkende kilitli olduğu söylenmiyorsa ondan sonra sql'den kontrol ediyor eğer sqlde kilitli gözüküyorsa değişkeni kilitli olarak değiştiriyor yoksa aynen bırakıyor, ondan sonra karaktere atadığım başka bir kontroledildi değişkenini 1 yapıyor sonradan tekrar kontrol etmemek için. Bir açığı var mı fikrinizi almak isterim.
 
Hocam daha fazla uğraşmak yerine şöyle bir çözüm buldum;

Her pazar arandığında önce değişken kontrol ediliyor eğer değişkende kilitli olduğu söylenmiyorsa ondan sonra sql'den kontrol ediyor eğer sqlde kilitli gözüküyorsa değişkeni kilitli olarak değiştiriyor yoksa aynen bırakıyor, ondan sonra karaktere atadığım başka bir kontroledildi değişkenini 1 yapıyor sonradan tekrar kontrol etmemek için. Bir açığı var mı fikrinizi almak isterim.
Great offline shop kullaniyorsan net bir şey söylemek zor, onun bugları bitmek bilmiyor. Çok detaya indiğinde farklı farklı sorunlar gösterebiliyor. Ama bunun haricinde işin içine SQL giriyorsa madem, ekstradan değişken kontrolü yapmana gerek yok, sadece SQL sorgusu yapıp gelen sonuca göre bahsettiğin (karaktere atadım dediğin) veriyi güncellersin. Ve eğer great kullanıyorsan, onun kodlarında lock kontrolü yapan bir muhabbet vardı sanırım, onu SQL sonucuna göre düzenleyip shopun kendi paketiyle gönderme yapabilirsin.
 
Great'ın kendi düzenlediğim bi halini kullanıyorum , çok şeyi değişti. SQL'e çok fazla yüklenmek istemememin nedeni başka sistemler de var sql sorgusu ile çalışan. Şuan bununla ilgili tek sorunum sunucu resetlendiğinde değişkenler değiştiği için pazarın kilidinin kalkmasıydı. Şimdi her karakter için sadece bir kere sql sorgusu yapacak şekilde değiştirdim , güzel çalışıyor. Örneğin ticaret camında ilk kez a kişisinin pazarındaki eşya gösteriliyorsa sql'den düzenleme modunun kontrolü yapılıyor ona göre kilit değişkeninde değişiklik yapılıyor veya yapılmıyor , sonrasında tekrardan aratıldığında sql sorgusu değil bu sefer değişkenden bilgi çekiliyor.
 
Great'ın kendi düzenlediğim bi halini kullanıyorum , çok şeyi değişti. SQL'e çok fazla yüklenmek istemememin nedeni başka sistemler de var sql sorgusu ile çalışan. Şuan bununla ilgili tek sorunum sunucu resetlendiğinde değişkenler değiştiği için pazarın kilidinin kalkmasıydı. Şimdi her karakter için sadece bir kere sql sorgusu yapacak şekilde değiştirdim , güzel çalışıyor. Örneğin ticaret camında ilk kez a kişisinin pazarındaki eşya gösteriliyorsa sql'den düzenleme modunun kontrolü yapılıyor ona göre kilit değişkeninde değişiklik yapılıyor veya yapılmıyor , sonrasında tekrardan aratıldığında sql sorgusu değil bu sefer değişkenden bilgi çekiliyor.
Abartılmadığı müddetçe gereken durumlarda SQL gayet de kullanılabilir, evet olabildiğince c++ üzerinden yapmak daha pratik oluyor fakat SQL in şart olduğu durumlarda da kullanmak gerekir. Bunun hiç bir zararı olmaz. Ancak greatin orijinal kodlarında olduğu gibi her işlem için SQL kullanmak tabiki saçma.

Yaptığın işlemler eğer sorunsuz bir şekilde çalışıyorsa ve isteğini karşılıyorsa sorun yoktur. Bir açık olacağını sanmıyorum ama söz konusu great olunca yine de derin bir test yapman daha iyi olur senin için. Greatin bir sürümünde zamanlayıcı sorunu vardı, üst üste düzenleme modunu açınca bir yerden sonra düzenleme bitmeden chatten pazar güncellendi,birazdan aktif olacak diyip kilidi açıyordu. Bunun gibi durumları iyice test et.


Ve ayrıca bu işlemi ilk sunucuyu açtığında dene, daha sonra sh ile oyunu kapatıp aç öyle dene
 
Son düzenleme:
Düzenleme modunu sıfırdan yazdım hocam , ilk halinden kalan tek yönü değişkenle kontrol etmesiydi. Hazır alıp kullanılacak bi sistem değil zaten great. Teşekkürler yardımların için.
 
Fikir olur mu bilemem ama olkan41 denen arkadaş zamanında xx forumda nlohmann kütüphanesini kullanarak auto give items "oto başlangıç itemleri" adlı sistemi paylaşmıştı. Yanlış hatırlamıyorsam böyle bir şeydi, lakin txt değil, json olacak şekilde kaydetmek zorundasın dosyanın uzantısını. Kolay gelsin :)
 

Dosya Eklentileri

Veritabanından kontrol etmek neden yorucu olsun ki? Bu kısmı anlamadım. Eğer great offline shop gibi baştan sona sql kullanan bir shop kullanmıyorsan sadece kilit kontrolü için sql kullanabilirsin rahatlıkla. Sonuçta Metin2, karakterin attığı adımı bile mysqle kaydeden bir yapıya sahip. Ya da düzenleme kilidi yerine paralel kontrol ekleyebilirsin.
Yani satıcı, düzenleme esnasında satılan bir ürünü düzenlerken satıldı diye hata alacak. Alıcı da, fiyatı güncellenmiş/kaldırılmış bir itemi eski fiyattan vs. almaya çalışırken hata alacak.
Caching var. Oyunda anlık olarak mysql sorgusu atan bir kaç şey var login gibi, diğer veriler cache de tutuluyor ve 180 saniyede bir kaydediliyor. Oyunu kapatmadan reboot atınca itemlerin silinmesi bundan dolayı. Neyse arkadaş caching olayını sormuş great offshop hariç paylaşılan shoplar caching kullanıyor.
 
Caching var. Oyunda anlık olarak mysql sorgusu atan bir kaç şey var login gibi, diğer veriler cache de tutuluyor ve 180 saniyede bir kaydediliyor. Oyunu kapatmadan reboot atınca itemlerin silinmesi bundan dolayı. Neyse arkadaş caching olayını sormuş great offshop hariç paylaşılan shoplar caching kullanıyor.
Ben run-time olarak anladım soruyu, o yüzden o mantıkta cevap verdim. Halihazırda bunun kontrolünü saklayan veriler mevcut(muş), dolayısıyla sql'e girilen bir verinin oyunu kapatıp açınca değişmemesi lazım. Eğer değişiyorsa başka bir sıkıntı var demektir. Nasıl ki offshop,itemler,fiyatlar falan tutuluyorsa kilit durumu da tutulup tekrar yüklenebilir. Ancak ani reboot durumunda sadece bu mevzu değil, dediğin gibi tüm oyun etkileniyor. Onun için de shutdown kullanması yeterli.
 
Ben run-time olarak anladım soruyu, o yüzden o mantıkta cevap verdim. Halihazırda bunun kontrolünü saklayan veriler mevcut(muş), dolayısıyla sql'e girilen bir verinin oyunu kapatıp açınca değişmemesi lazım. Eğer değişiyorsa başka bir sıkıntı var demektir. Nasıl ki offshop,itemler,fiyatlar falan tutuluyorsa kilit durumu da tutulup tekrar yüklenebilir. Ancak ani reboot durumunda sadece bu mevzu değil, dediğin gibi tüm oyun etkileniyor. Onun için de shutdown kullanması yeterli.
Hocam sqldeki veri silinmiyor zaten, pazarın kilit durumu değişkenden kontrol ediliyordu , kapatıp açınca da o sıfırlandığı için otomatik olarak kilit kalkmış oluyordu. SQL'den değişkene geri çağıracak bi sistem yazdım ona ek olarak sıkıntı kalmadı artık. Teşekkürler.
 
Üst