[Fix] ShopEx Renewal Game Core

  • Konuyu açan Konuyu açan Kaiser
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 5
  • Gösterim Gösterim 2K

Kaiser

Admin
Admin
Geliştirici
Yardımsever Üye
Mesaj
4.043
Çözümler
392
Beğeni
4.168
Puan
1.849
Ticaret Puanı
0
Merhaba, dün @Mali ' nin paylaşmış olduğu shopex renewal sistemini kurmuştum ancak npc ye tıklandığı anda ch1 core veriyordu ve hiç bir syserr yoktu.

Core:
coree.webp

shopEx.cpp:125 diyor fakat 125.satırda } işaretinden başka bir şey yoktu.


Bu sorunun sebebi anlatım dosyasındaki küçük bir yanlışlıktır. Anlatım dosyasında şu şekilde gösterilmiş:
C++:
Genişlet Daralt Kopyala
//Bul
            switch (shop_tab.coinType)
            {
            case SHOP_COIN_TYPE_GOLD:
                if (bOtherEmpire) // no empire price penalty for pc shop
                    pack_tab.items[i].price = shop_tab.items[i].price * 3;
                else
                    pack_tab.items[i].price = shop_tab.items[i].price;
                break;
            case SHOP_COIN_TYPE_SECONDARY_COIN:
                pack_tab.items[i].price = shop_tab.items[i].price;
                break;
            }
            memset(pack_tab.items[i].aAttr, 0, sizeof(pack_tab.items[i].aAttr));
            memset(pack_tab.items[i].alSockets, 0, sizeof(pack_tab.items[i].alSockets));
            
//Değiştir
#if defined(ENABLE_RENEWAL_SHOPEX)
            pack_tab.items[i].price_type = shop_tab.items[i].price_type;
            pack_tab.items[i].price_vnum = shop_tab.items[i].price_vnum;
            pack_tab.items[i].price = shop_tab.items[i].price;
            if (bOtherEmpire && pack_tab.items[i].price_type == SHOPEX_GOLD)
                pack_tab.items[i].price *= 3;
            thecore_memcpy(pack_tab.items[i].aAttr, shop_tab.items[i].aAttr, sizeof(pack_tab.items[i].aAttr));
            thecore_memcpy(pack_tab.items[i].alSockets, shop_tab.items[i].alSockets, sizeof(pack_tab.items[i].alSockets));
#else
            switch (shop_tab.coinType)
            {
            case SHOP_COIN_TYPE_GOLD:
                if (bOtherEmpire) // no empire price penalty for pc shop
                    pack_tab.items[i].price = shop_tab.items[i].price * 3;
                else
                    pack_tab.items[i].price = shop_tab.items[i].price;
                break;
            case SHOP_COIN_TYPE_SECONDARY_COIN:
                pack_tab.items[i].price = shop_tab.items[i].price;
                break;
            }
            memset(pack_tab.items[i].aAttr, 0, sizeof(pack_tab.items[i].aAttr));
            memset(pack_tab.items[i].alSockets, 0, sizeof(pack_tab.items[i].alSockets));
#endif

Bu şekilde yaptığımızda core veriyor. Olması gereken, gösterdiği yeri komple değiştirmek değil.
Yukarıda verdiğim koddan sadece şu kısmı değiştirmemiz gerekiyor:

C++:
Genişlet Daralt Kopyala
            memset(pack_tab.items[i].aAttr, 0, sizeof(pack_tab.items[i].aAttr));
            memset(pack_tab.items[i].alSockets, 0, sizeof(pack_tab.items[i].alSockets));

Şöyle:
C++:
Genişlet Daralt Kopyala
#if defined(ENABLE_RENEWAL_SHOPEX)
            pack_tab.items[i].price_type = shop_tab.items[i].price_type;
            pack_tab.items[i].price_vnum = shop_tab.items[i].price_vnum;
            pack_tab.items[i].price = shop_tab.items[i].price;
            if (bOtherEmpire && pack_tab.items[i].price_type == SHOPEX_GOLD)
                pack_tab.items[i].price *= 3;
            thecore_memcpy(pack_tab.items[i].aAttr, shop_tab.items[i].aAttr, sizeof(pack_tab.items[i].aAttr));
            thecore_memcpy(pack_tab.items[i].alSockets, shop_tab.items[i].alSockets, sizeof(pack_tab.items[i].alSockets));
#else
            memset(pack_tab.items[i].aAttr, 0, sizeof(pack_tab.items[i].aAttr));
            memset(pack_tab.items[i].alSockets, 0, sizeof(pack_tab.items[i].alSockets));
#endif

Ek olarak bu kodların biraz yukarısında şunu bulup:
C++:
Genişlet Daralt Kopyala
    char temp[8096]; // ÃÖ´ë 1728 * 3

Şu şekilde değiştirmeniz gerekiyor:
C++:
Genişlet Daralt Kopyala
#if defined(ENABLE_RENEWAL_SHOPEX)
    char temp[8096 * 3];
#else
    char temp[8096]; // ÃÖ´ë 1728 * 3
#endif

Bu düzenleme sonrasında core hatasından kurtulmuş olacaksınız.
 
if (bOtherEmpire && pack_tab.items.price_type == SHOPEX_GOLD)

Buradaki SHOPEX_GOLD'u görmüyor. Bende bu tanımlı değil. Rica etsem tanımlı olmayan kişiler için konuya ilave edebilir misiniz?
 
Screenshot_1.webp


Bu kullanımda core vermez
Core vermesinin sebebi char temp den kaynaklı
char temp[8096]; -> char temp[8096 * 3];
Konuda sadece bu yazarsa daha sağlıklı olur yanlış bilgi vermemek adına
 
9343 eklentisini görüntüle

Bu kullanımda core vermez
Core vermesinin sebebi char temp den kaynaklı
char temp[8096]; -> char temp[8096 * 3];
Konuda sadece bu yazarsa daha sağlıklı olur yanlış bilgi vermemek adına
İkisi arasında tek tek deneme yapmadım, dediğin doğru olabilir. Sadece sorunsuz çalışan bir filesten burayı fark edip olduğu gibi çektim ve düzelince de bu haliyle paylaşmak istedim. Bilgilendirme için teşekkürler.
 
Geri
Üst