[Fix] ShopEx Renewal Game Core

Kaiser

⋞ 〈 ☪ 〉 ⋟
Site yetkilisi
Admin
Premium Üye
Geliştirici
Yardımsever Üye
Mesaj
3.697
Çözümler
346
Beğeni
3.591
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.jpg

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++:
//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++:
            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++:
#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++:
    char temp[8096]; // ÃÖ´ë 1728 * 3

Şu şekilde değiştirmeniz gerekiyor:
C++:
#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.png


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