Yardım Dali Offshop & Full Yang problemi

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

DeadLyEscaPe

Üye
Üye
Mesaj
441
Çözümler
28
Beğeni
106
Puan
474
Ticaret Puanı
0
Merhabalar.

Dükkandan kazanılan para 2.147.483.647 Yang'ı geçtiğinde ve dükkana bir item koyup itemin fiyatını bu yang tutarından fazla koyduğumda reboot sonrası pazardaki itemin fiyatı ve pazardaki toplam kazanç tutarı 2.147.483.647 Yang'a sabitleniyor. Üzerine çıkmıyor. Muhtemelen game tarafında bir yerde yang ile ilgili bir yer long long değil. (Bayağı incelememe rağmen DWORD tipi yang verisi bulamadım.) Ama işin garibi dükkandaki toplam kazanç ve pazara koyulan itemin fiyatı bu tutarın üzerinde koyulduğunda item.sql ve offline_shop.sql içerisindeki price kısmında doğru görüntüleniyor. Oyun içerisinde de doğru görüntüleniyor. Sadece reboot sonrası iki tabloda da price kısmı 2.147.483.647 Yang'a sabitleniyor ve oyuna girdiğimde bu tutarlarla karşılaşıyorum.

Bu offline shopu kullanıpta FULL_YANG kullanan kişilerde böyle bir sorun var mı?
 
Son düzenleme:
2.147.483.647
maksimum int değeridir.
Emin değilim ama belki DWORD price yerine int price(ya da Yang) şeklinde arama yapman gerekiyor olabilir.

Bununla bağlantılı olarak eğer int türünde bir price varsa, bahsettiğin sorunun nedeni budur büyük ihtimalle. Gönderilen fiyat bilgisi long long ama gelen fiyat bilgisi int olabilir bu yüzden int değerini aşamadığı için bu değerde sabitleniyor olabilir.
 
2.147.483.647
maksimum int değeridir.
Emin değilim ama belki DWORD price yerine int price(ya da Yang) şeklinde arama yapman gerekiyor olabilir.

Bununla bağlantılı olarak eğer int türünde bir price varsa, bahsettiğin sorunun nedeni budur büyük ihtimalle. Gönderilen fiyat bilgisi long long ama gelen fiyat bilgisi int olabilir bu yüzden int değerini aşamadığı için bu değerde sabitleniyor olabilir.

Evet ben de öyle düşünüyorum fakat game tarafında int değerli price veya gold sadece lonca yangı ile ilgili kısımlarda mevcut. Shop ile ilgili geçen tüm kısımlarda long long.
 
Sourceda yang ve gold olarak genel arama yap notepad++ ile büyük ihtimal başka bir yerden kaynaklı. Çünkü pazar sisteminde zaten full yang ve normal yang limiti için tek bir define üzerinden ayar yapılabiliyor oradan long long aktif olduğunda sorunsuz çalışır ama sourceda pazar sistemi ile ilgili olan ama o define dahil olmayan bir kısımda int tarzında bir değer varsa bu şekilde sorunlar yaşanır.
 
Sourceda yang ve gold olarak genel arama yap notepad++ ile büyük ihtimal başka bir yerden kaynaklı. Çünkü pazar sisteminde zaten full yang ve normal yang limiti için tek bir define üzerinden ayar yapılabiliyor oradan long long aktif olduğunda sorunsuz çalışır ama sourceda pazar sistemi ile ilgili olan ama o define dahil olmayan bir kısımda int tarzında bir değer varsa bu şekilde sorunlar yaşanır.

Pazara koyulan eşyalar myshop_pricelist.sql kaydediliyor ise oradaki price int "10" şeklinde.
int elk olarak da arayıp bir bak stersen
Maalesef ondan da bir şey çıkmadı. myshop_pricelist.sql içindeki gold kısmını da bigint yapıp 13 e çektim. Pazara koyunca sıkıntı yok, pazardan item çekince yok, tabloya kaydetmede sıkıntı yok ama ne hikmetse reboot sonrası değişiyor. ClientManagerBoot.cpp kısmını da bir hayli inceledim. Böyle ufacık hatalar (simya süre problemi dahil) bir hayli uğraştırıyor ve işten soğutuyor maalesef.
 
Pazara koyulan eşyalar myshop_pricelist.sql kaydediliyor ise oradaki price int "10" şeklinde.

Maalesef ondan da bir şey çıkmadı. myshop_pricelist.sql içindeki gold kısmını da bigint yapıp 13 e çektim. Pazara koyunca sıkıntı yok, pazardan item çekince yok, tabloya kaydetmede sıkıntı yok ama ne hikmetse reboot sonrası değişiyor. ClientManagerBoot.cpp kısmını da bir hayli inceledim. Böyle ufacık hatalar (simya süre problemi dahil) bir hayli uğraştırıyor ve işten soğutuyor maalesef.
Tamam o int değeri bigint olarak değiştirip tekrar dene ayrıca mysql de ne kadar gold varsa onlarıda bigint yapmalısın.
 
Cache.cpp içinde şöyle bir yer dikkatimi çekti;

C++:
Genişlet Daralt Kopyala
char szQuery[512];
    if (p->byChannel)
        sprintf(szQuery, "REPLACE INTO offline_shop VALUES (%u, '%s', '%s', %d, %ld, %ld, %ld, "UGOLD_FORMAT", %u, %u)",
            p->dwOwnerID, szOwnerName, szSign, p->byChannel, p->lMapIndex, p->lPosX, p->lPosY, p->gold, p->bLocked, p->dwTimeLeft);
    else
        sprintf(szQuery, "DELETE FROM offline_shop WHERE owner_id = %u", p->dwOwnerID);

UGOLD_FORMAT kısmı sabit bir değişken değil gibi, çünkü sadece cache.cpp de mevcut ve 3 tane var sadece.
Yani tür belirtimini bize bırakmış sanırım.
UGOLD_FORMAT yazan yerleri %lld şeklinde değiştirmeyi dene bakalım
 
Cache.cpp içinde şöyle bir yer dikkatimi çekti;

C++:
Genişlet Daralt Kopyala
char szQuery[512];
    if (p->byChannel)
        sprintf(szQuery, "REPLACE INTO offline_shop VALUES (%u, '%s', '%s', %d, %ld, %ld, %ld, "UGOLD_FORMAT", %u, %u)",
            p->dwOwnerID, szOwnerName, szSign, p->byChannel, p->lMapIndex, p->lPosX, p->lPosY, p->gold, p->bLocked, p->dwTimeLeft);
    else
        sprintf(szQuery, "DELETE FROM offline_shop WHERE owner_id = %u", p->dwOwnerID);

UGOLD_FORMAT kısmı sabit bir değişken değil gibi, çünkü sadece cache.cpp de mevcut ve 3 tane var sadece.
Yani tür belirtimini bize bırakmış sanırım.
UGOLD_FORMAT yazan yerleri %lld şeklinde değiştirmeyi dene bakalım

Onu da denemiştim. %lld şeklinde de aynı maalesef.
 
Cache.cpp içinde şöyle bir yer dikkatimi çekti;

C++:
Genişlet Daralt Kopyala
char szQuery[512];
    if (p->byChannel)
        sprintf(szQuery, "REPLACE INTO offline_shop VALUES (%u, '%s', '%s', %d, %ld, %ld, %ld, "UGOLD_FORMAT", %u, %u)",
            p->dwOwnerID, szOwnerName, szSign, p->byChannel, p->lMapIndex, p->lPosX, p->lPosY, p->gold, p->bLocked, p->dwTimeLeft);
    else
        sprintf(szQuery, "DELETE FROM offline_shop WHERE owner_id = %u", p->dwOwnerID);

UGOLD_FORMAT kısmı sabit bir değişken değil gibi, çünkü sadece cache.cpp de mevcut ve 3 tane var sadece.
Yani tür belirtimini bize bırakmış sanırım.
UGOLD_FORMAT yazan yerleri %lld şeklinde değiştirmeyi dene bakalım
UGOLD_FORMAT tanımı service.h kısmında eklenen define ile int veya long long yang yani full yang mı normal mi kolay bir şekilde değiştirmek için sistemi yazan kişi kısa bir yol eklemiş.
 
Üst