Çözüldü İtem_shop_price Sorunu.

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

karew1

MT Üye
MT Üye
Mesaj
150
Çözümler
1
Beğeni
92
Puan
689
Ticaret Puanı
0
Merhablar,

Bir sorunum var biliyorum basit birşey ama bir türlü anlayamadım :)

Şimdi @Whistle 'ın paylaştığı Eğitime ait olan bir server files üzerinde çalışmaktayım.
Metin2 Sıfırdan Altyapı Server Files Hazırlama Rehberi

Oyuna bazı özellikler ekledim ve Gold/Silver Barları bu özellikler ile kullanmam gerekiyor.

Fakat İtem satış fiyatlarını ne yaptıysam ayarlayamadım.
Burada item_proto'yu Files'dan çekiliyor.

item_proto_scrnn.png


item_proto.txt dosyasını masaüstüne alıp NotePad++ İle düzenledim :

txtt.png


Sonra Navicat üzerinden de düzenledim.

navi.png


Gördüğünüz gibi Gümüş Bar'ın Alış-Satış Fiyatlarını 50.000 Yang'a Ayarladım.
shop_buy_price = 50.000 Yang yani normalde bu itemi 50.000 yang a npc ye satması gerekiyor...

Ve sunucuya Reboot attıp tekrar oyuna girdim...

Fakat Sıkıntı şurada NPC'ye itemi satmak istediğim zaman 10.000 Yang'a itemi satıyor :(
Acaba nerede hata yapıyorum :)

NPC'ye itemi sattığım bir kısa video ;

Linkleri görebilmek için giriş yap veya kayıt ol.


Dipnot : Oyunda itemin üzerine geldiğimizde Fiyat: 10.000 Yang yazıyor.

fiyat.webp


Acaba buradaki fiyatı nereden alıyor sanırım sıkıntı burada olabilir. :rolleyes:
 
Son düzenleme:
Çözüm
Bu tür soru gelmesi aslında çok iyi oldu. Soruyu özenle hazırladığınız için teşekkür ederim. :)
Kullandığınız filesi belirtiğiniz için o files özelinde anlatacağım. Fakat hemen hemen çoğu fileslerde durum aynı.
Sıfırdan Altyapı Rehberinde oluşturduğumuz fileste item ve mob bilgileri txt üzerinden çekmektedir. Bu yüzden navicat kısmında ayarlama yapmanıza gerek yok. Çünkü serveri açarken güncel verileri txt'den alıp veritabanına da ekleyecek.

Birde alış fiyatı 50k yang yapmışsınız. Eğer npcye geri satarken yine 50k olacaksa. shop_buy_price kısmına bu değeri 5'le çarpıp eklemeniz gerekecek.
50000*5 => 250000
NPC'ye satılan eşyaların fiyatları hep bu yapıda belirlenmiştir.

Şimdi gelelim clientte. locale_tr packında...
Bu tür soru gelmesi aslında çok iyi oldu. Soruyu özenle hazırladığınız için teşekkür ederim. :)
Kullandığınız filesi belirtiğiniz için o files özelinde anlatacağım. Fakat hemen hemen çoğu fileslerde durum aynı.
Sıfırdan Altyapı Rehberinde oluşturduğumuz fileste item ve mob bilgileri txt üzerinden çekmektedir. Bu yüzden navicat kısmında ayarlama yapmanıza gerek yok. Çünkü serveri açarken güncel verileri txt'den alıp veritabanına da ekleyecek.

Birde alış fiyatı 50k yang yapmışsınız. Eğer npcye geri satarken yine 50k olacaksa. shop_buy_price kısmına bu değeri 5'le çarpıp eklemeniz gerekecek.
50000*5 => 250000
NPC'ye satılan eşyaların fiyatları hep bu yapıda belirlenmiştir.

Şimdi gelelim clientte. locale_tr packında item_proto ve mob_proto dosyaları bulunuyor.
Oyun açılırken item ve mob bilgilerini bu yerel dosyalardan alır. Bu yüzden yaptığınız her değişiklikte txt dosyalarınızı dump_proto'dan geçirmeniz lazım. :)

Aslında tüm bunları Metin2 Geliştirici Eğitimi Video Serisi 'nde anlatmıştım. ;)
 
Çözüm
Aslında bu hesaplama işlemini değiştirip yazılan miktar kadar gösterilmeyi sağlasak daha iyi olmaz mı kimse bu kadar zorlanmaz :D
 
@Whistle bilgilendirme için teşekkürler.

Aslında hep verdiğim fiyatın 5 kat az olduğunu farkettim.
Fakat aklımda şu soru belirdi...
Ben bu fiyatları *5 olarak ayarlarım ayarlamasına da sonradan bir sıkıntı olur mu diye düşündüm. :D:D:D

Neyseki bunu çözdük bu güzel oldu.

Evet sizin videolarınızı izledim ve DumpProto olaylarını yaptım :)
Tek bu sorunum vardı aydınlattığınız için teşekkürler :)

Son bir soru madem ki bunu açıkladınız :)

Birde alış fiyatı 50k yang yapmışsınız. Eğer npcye geri satarken yine 50k olacaksa. shop_buy_price kısmına bu değeri 5'le çarpıp eklemeniz gerekecek.
50000*5 => 250000
NPC'ye satılan eşyaların fiyatları hep bu yapıda belirlenmiştir.
Burada ki açıkladığınız kısmı merak ettim. Kısaca bahseder misiniz ? neden böyle tanımlanmış anlamak istiyorum :)
 
Aslında bu hesaplama işlemini değiştirip yazılan miktar kadar gösterilmeyi sağlasak daha iyi olmaz mı kimse bu kadar zorlanmaz :D
Zorlanacak bir durum yok ki. :D Sadece 5 ile çarpacaksın. Bu özelliği kaldırabilirsin ama bu sefer item_proto'dan shop_buy_price kısmını tekrardan ayarlamanız gerekecek. Kaldırmak için game/src/shop_manager.cpp dosyasında void CShopManager::Sell fonksiyonu içindeki şu kodu kaldırabilirsiniz.
C++:
Genişlet Daralt Kopyala
dwPrice /= 5;



Burada ki açıkladığınız kısmı merak ettim. Kısaca bahseder misiniz ? neden böyle tanımlanmış anlamak istiyorum :)
Tam olarak neden böyle bir şey yapılmış bende bilmiyorum. :D
Kaynak kodlarında npcde ki itemlerin fiyatları şu şekilde tanımlanmış.
C++:
Genişlet Daralt Kopyala
    if (IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_SELL))
        return;

    DWORD dwPrice;

    if (bCount == 0 || bCount > item->GetCount())
        bCount = item->GetCount();

    dwPrice = item->GetShopBuyPrice();

    if (IS_SET(item->GetFlag(), ITEM_FLAG_COUNT_PER_1GOLD))
    {
        if (dwPrice == 0)
            dwPrice = bCount;
        else
            dwPrice = bCount / dwPrice;
    }
    else
        dwPrice *= bCount;

    dwPrice /= 5;
  
    //세금 계산
    DWORD dwTax = 0;
    int iVal = 3;
  
    if (LC_IsYMIR() ||  LC_IsKorea())
    {
        dwTax = dwPrice * iVal / 100;
        dwPrice -= dwTax;
    }
    else
    {
        dwTax = dwPrice * iVal/100;
        dwPrice -= dwTax;
    }
 
Araştırmalarım sonucu böyle birşey yaparsak kaldırmış oluyoruz sanırsam zamanın varsa deneybilirsin :D Emin degilim olacağından sadece bir fikir

shop_manager.cpp

Arat
C++:
Genişlet Daralt Kopyala
    dwPrice /= 5;

Degistir
C++:
Genişlet Daralt Kopyala
    //dwPrice /= 5;

Arat

C++:
Genişlet Daralt Kopyala
    if (bCount == 0 || bCount > item->GetCount())
        bCount = item->GetCount();

Degistir

C++:
Genişlet Daralt Kopyala
    //if (bCount == 0 || bCount > item->GetCount())
        //bCount = item->GetCount();
Arat

C++:
Genişlet Daralt Kopyala
    dwPrice = item->GetShopBuyPrice();

Üstüne Ekle

C++:
Genişlet Daralt Kopyala
    bCount = item->GetCount();
 
Sizin dediğiniz şekilde yapınca da olur ama bu sefer shop buy price sütununun işlevi kalmıyor sanırsam. :D :D Bu yüzden itemlerin fiyatlarını tekrar ayarlamasına gerek yok. Eşyanın geri satış fiyatı, alış fiyatı ile eşit olacak kısaca. Bu da şu anlama geliyor. NPC'de satılan bir kılıç 100k yang ise geri sattığında yine 100k yang olacaktır. Yani ben zorlaştırıyım bu geri 25k satılsın şekilde ayar yapılamaz.

Kaldırıp kaldırmamak tamamen tercih meselesi. Daha genele hitap etmek için bu tür konularda varsayılan sistem üzerinden çözüm sunmak daha mantıklı. Kısacası 5'le çarp gitsin. :)
 
:D Bende sadece bir fikir verdim belki arayan olur denk gelir konuya Pazarda satılacak 40 50 item için komple tüm item fiyatlarını değiştirmekle kim uğraşacak

İtem adeti 1den fazlaysa itemfiyatı*5*itemadeti şeklindemi hesaplanıyor ?
 
Önceki mesajımı düzenledim ve neden yapılmaması gerektiğini açıkladım. Buraya da tekrarını yazıyorum.
Gösterdiğiniz şekilde yaparsa eşyanın geri satış fiyatı, alış fiyatı ile eşit olacak kısaca. Bu da şu anlama geliyor. NPC'de satılan bir kılıç 100k yang ise geri sattığında yine 100k - 100k * (%3 vergi/100) => 97k yang olacaktır. Yani ben zorlaştırıyım bu geri 25k satılsın şekilde ayar yapılamaz.
Yine de tercih meselesi tabii ki de :D :ebebe:

İtem adeti 1den fazlaysa itemfiyatı*5*itemadeti şeklindemi hesaplanıyor ?
Tam olarak öyle değil. İlk önce item fiyatı ile adeti buluyor. Daha sonra 5 ile bölüyor. Birkaç mesaj geriye dönerseniz npcye geri satış fiyatının hesaplamasını yapan kodları ekledim. Oradan bakabilirsiniz.
 
Pekala şöyle düşünelim. Serbest ticaret olarak düşünün. Zırhları geri aldığınızda alınan fiyatın %30 aşağı değer biçtiniz. Bu değer potlarda ise %15 aşağı bir değerde.
Eğer dediğiniz şekilde hesaplama kısmından, itemin satış fiyatı alınırsa bu geri satma fiyatı oranı tüm itemler için aynı olacaktır. Zamanında bu yüzden o düzenlemeyi yapmamıştım. Tamamen tercih meselesi. Eğer aynı oranda geri satış olayı eklenecekse olabilir. Fakat bu seferde barlarda sıkıntı çıkacak. :ebebe:

Bence oyunu yazan kişilerde düşünmüştür bunu enine boyuna. Genelde gördüğümüz bir düzenlemeyi yaparken bunun getirisi veya götürüsü ne olur hiç düşünmüyoruz. Eğer her şeyin farkına vardıktan sonra düzenlemeler yapılırsa daha iyi olur.
 
Barların al sat mantığı ile çalışmasını ben iyi bulmuyorum src ile barları açmayı yapabilirsiniz.
 
Evet o da bir çözüm. Oyunu yapanlar bu mantığı kurmuş ama. Yine de itemlerin geri satış fiyatını istediğimiz şekilde ayarlama meselesi olmuyor maalesef.

Mesajımda belirttiğim gibi sadece 5 ile bölümü kaldırıp diğer yerleri kurcalamazsak ve item_proto'daki shop_buy_price sütununda yer alan fiyatları güncellersek shop_buy_price sütunu işlevini korumaya devam eder ve bir sorun kalmaz. Her türlü de ekstra iş yükü. 5 ile çarpıp istediğimiz itemi düzenlemek daha kolay geliyor bana. :D
Bakalım konu sahibi tüm bu konuşulanlar hakkında ne yazacak
 
Anlaşıldı hiç uğraşmaya gerek yok x5 yaparım gitsin :D

Barların al sat mantığı ile çalışmasını ben iyi bulmuyorum src ile barları açmayı yapabilirsiniz.
Barların açılmaması lazım işte oluşturduğum sistem bar ile çalışıyor farklı durumlar var :)

Neyse yardımlarınız için çok teşekkürler.
Gayet açıklamalı olmuş umarım başkalarınında işine yarar :)

İyi forumlar :)
 
Anlaşıldı hiç uğraşmaya gerek yok x5 yaparım gitsin :D


Barların açılmaması lazım işte oluşturduğum sistem bar ile çalışıyor farklı durumlar var :)

Neyse yardımlarınız için çok teşekkürler.
Gayet açıklamalı olmuş umarım başkalarınında işine yarar :)

İyi forumlar :)
+ basma itemi gibi bar iconlarını kullanarak bir item oluştur daha iyi boşa barları hiç etme :D
 
@Trashy sayesinde bu konu baya verimli oldu ve tüm meseleyi enine boyuna tartıştık. Konuyu çözüldü işaretleyip kilitleme şerefini size bırakıyorum. :D

@karew1 konuda belirttiğiniz sorun kesin olarak çözüldü mü?
 
Konu fazla dağılmadan çözüldü olarak işaretleyip kapatıyorum. Herhangi bir sorunun olduğunda konu açmaktan çekinme! Projende başarılar dilerim.
:disney-is-frozan12:
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst