Çözüldü Client Build Error C2664

  • Konuyu açan Konuyu açan Kaiser
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 27
  • Gösterim Gösterim 2K
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ı.

Kaiser

Admin
Admin
Geliştirici
Yardımsever Üye
Mesaj
3.970
Çözümler
384
Beğeni
4.037
Puan
1.849
Ticaret Puanı
0
Merhabalar, evrim sistemiyle ilgili şu sorunu, tanımları ne kadar kontrol etsem de çözemedim. Ufak bir detayı gözden kaçırıyorum sanırım fakat bulamadım bir türlü.

Adsız.jpg


Visual Studio'nun bildirim olarak gösterdiği yer ise şurası;

PythonTextTail.h:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        void RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner, char* evolutionMergeText = false);
#else
        void RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner);
#endif

PythonTexTatil.cpp dosyasındaki ilgili fonksiyon başlığı ise;
PythonTextTail.cpp:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
void CPythonTextTail::RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner, char * evolutionMergeText)
#else
void CPythonTextTail::RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner)
#endif
 
Çözüm
Sorunu çözdüm sonunda. Gözümüzün önündeki şeyi görmemişiz resmen.

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
    char evolutionMergeText[256]; char evolutionText[6][10] = { "", "Yaygın ", "Seyrek ", "Nadir ", "Efsane ", "Eşsiz " };
    snprintf(evolutionMergeText, sizeof(evolutionMergeText), "%s%s", evolutionText[evolution], pItemData->GetName());

#endif
    rkTextTail.RegisterItemTextTail(
        dwVirtualID,
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        evolutionMergeText,
#endif
        //pItemData->GetName(),
        &pGroundItemInstance->ThingInstance);

Bu kodun üst kısmında (evolutionMergeText) zaten pItemData->GetName(); çağrısı yapılmış. Ayrıca bir de altta çağırdığımızda dolayısıyla uyumsuzluk yapıyor.
Bu yüzden alttaki...
Konuyu tekrar güncelliyorum.
Bu sorun için bir çözüm geliştirmiştim fakat işe yaramamış. Az önce fark ettim ki onu uygulayınca yere atılan/düşen itemlerin isimleri görünmüyor.
Hata veren kısım olarak görünen pItemData->GetName() kısmı sabit değil. Bunun bulunduğu satıra sıralamayı değiştirerek hangisi koyarsam koyayım o satırdan hata veriyor.
 
Konuyu tekrar güncelliyorum.
Bu sorun için bir çözüm geliştirmiştim fakat işe yaramamış. Az önce fark ettim ki onu uygulayınca yere atılan/düşen itemlerin isimleri görünmüyor.
Hata veren kısım olarak görünen pItemData->GetName() kısmı sabit değil. Bunun bulunduğu satıra sıralamayı değiştirerek hangisi koyarsam koyayım o satırdan hata veriyor.

char * evolutionMergeText bunu PythonTexTatil h ve cpp dosyasında VirtualD, yanına alır mısınız?
PythonItem dosyasında rkTextTail.RegisterItemTextTail(dwVirtualID, bunun yanında çünkü. Belki sıralaması uymadığı için vermiş olabilir.
 
char * evolutionMergeText bunu PythonTexTatil h ve cpp dosyasında VirtualD, yanına alır mısınız?
PythonItem dosyasında rkTextTail.RegisterItemTextTail(dwVirtualID, bunun yanında çünkü. Belki sıralaması uymadığı için vermiş olabilir.
Öyle yapınca farklı bir hatayı defalarca kez peş peşe vermeye başladı. Yani işe yaramadı maalesef.
 
C++:
Genişlet Daralt Kopyala
const

Kullanmadan derleyebilir misiniz?

Olmazsa; C++ ayarlarından "multibyte character set" kullanmayı deneyebilirsin.

Eğer o da olmazsa; Dize değişmezleri "buradaki dize" gibi ifade edilir ve sabit olarak tanımlanır. Bunları ilettiğiniz işlev const olmayan bir argüman alırsa, uyumluluk modu AÇIK olarak ayarlanmış gibi sorun yaşarsınız. Bu, izin veren derleyici bayrağını değiştirir. Soruna neden olan budur.

Çözüm;
visual studio ayarlar.png
 
Son düzenleme:
C++:
Genişlet Daralt Kopyala
const

Kullanmadan derleyebilir misiniz?

Olmazsa; C++ ayarlarından "multibyte character set" kullanmayı deneyebilirsin.

Eğer o da olmazsa; Dize değişmezleri "buradaki dize" gibi ifade edilir ve sabit olarak tanımlanır. Bunları ilettiğiniz işlev const olmayan bir argüman alırsa, uyumluluk modu AÇIK olarak ayarlanmış gibi sorun yaşarsınız. Bu, izin veren derleyici bayrağını değiştirir. Soruna neden olan budur.

Çözüm;

const zaten kendinden vardı yani onda bir problem yok. Ben dahil etmedim onu yani.

Multibyte character set seçeneği zaten aktif ve son olarak conformance mode kapalı durumda şu an.
Sistemin ekli olduğu diğer filesten ilgili .cpp ve .h dosyalarına göz attım her şey birebir aynı. Bu hatayı nasıl veriyor anlamadım.

Konuda fotoğrafını eklediğim alandaki makroları kaldırınca yani varsayılan hali ile;

C++:
Genişlet Daralt Kopyala
    rkTextTail.RegisterItemTextTail(
        dwVirtualID,
        pItemData->GetName(),
        &pGroundItemInstance->ThingInstance);

Şeklinde denediğim zaman herhangi bir problem yok. Ancak makroları ekleyince nedense kabul etmiyor.

EDİT:

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
    char evolutionMergeText[100]; char evolutionText[6][10] = { "", "Yaygın ", "Seyrek ", "Nadir ", "Efsane ", "Eşsiz " };
    sprintf(evolutionMergeText, "%s%s", evolutionText[evolution], pItemData->GetName());
#endif
    rkTextTail.RegisterItemTextTail(
        dwVirtualID,
        pItemData->GetName(),
        &pGroundItemInstance->ThingInstance
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        ,evolutionMergeText
#endif
    );

Bu şekilde yapınca sorunsuz build oluyor ancak evrimli silahı yere atınca düz isimde görünüyor. Mesela yere attığımda Yaygın Zehir Kılıcı yazması gerekirken Zehir Kılıcı yazıyor.
 
Son düzenleme:
Dahil etmemiş olabilirsin ama bu sorunlar genellikle const yanlış kullanmaktan dolayı oluyor.

Örneğin; dönüşümde char* kullanman gereken yere, const char* kullanırsan bu hatayı alırsın. wchar_t kullanıp " L"", L"Yaygın ", L"Seyrek ", L"Nadir ", L"Efsane ", L"Eşsiz " " gibi dönüşümlerde denemen gerekebilir.

Normalde söylediğim şekilde sorununun çözülmesi gerekirdi. Diğer bir aklıma gelen sorun ise; Sorunun o hatayı gösterdiği yerde olmadığı, değerleri gönderdiğin yerde olduğu.


C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        void RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner, char* evolutionMergeText = false);
#else
        void RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner);
#endif

Yani üstte ki kod altta ki paylaştığın koda göre doğru.

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
    char evolutionMergeText[100]; char evolutionText[6][10] = { "", "Yaygın ", "Seyrek ", "Nadir ", "Efsane ", "Eşsiz " };
    sprintf(evolutionMergeText, "%s%s", evolutionText[evolution], pItemData->GetName());
#endif
    rkTextTail.RegisterItemTextTail(
        dwVirtualID,
        pItemData->GetName(),
        &pGroundItemInstance->ThingInstance
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        ,evolutionMergeText
#endif
    );

Yalnız değiştirdiğin kısım altta ki paylaştığın kod;

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
    char evolutionMergeText[100]; char evolutionText[6][10] = { "", "Yaygın ", "Seyrek ", "Nadir ", "Efsane ", "Eşsiz " };
    sprintf(evolutionMergeText, "%s%s", evolutionText[evolution], pItemData->GetName());
#endif
    rkTextTail.RegisterItemTextTail(
        dwVirtualID,
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        evolutionMergeText
#endif
        ,pItemData->GetName(),
        &pGroundItemInstance->ThingInstance
    );

Yani üstte ki kodların yerini değiştirdiğinde sonuç olarak bu altta ki kodların sırası da değişmesi gerekmez mi?

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        void RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner, char* evolutionMergeText = false);
#else
        void RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner);
#endif

Yani özet olarak altta ki kod gibi olması gerekmez mi?

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        void RegisterItemTextTail(DWORD VirtualID, char* evolutionMergeText = false, const char* c_szText, CGraphicObjectInstance* pOwner);
#else
        void RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner);
#endif

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
void CPythonTextTail::RegisterItemTextTail(DWORD VirtualID, char* evolutionMergeText, const char* c_szText, CGraphicObjectInstance* pOwner)
#else
void CPythonTextTail::RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner)
#endif
 
Son düzenleme:

Dediğini kullanabilir yalnız bu sadece derleyicinin hata vermesini engeller yani sadece ağzını kapatmak olur. Bu da ileri de sorunlara ve buglara yol açabilir. Düşüncesizce const_cast yani type cast kullanmak genellikle yeni başlayanların ve tip uyumsuzluğunu çözemediklerinde kullandıkları bir yöntem. O yüzden her yerde const_cast yani type cast kullanarak derleyicinin sesini kısarak sorunu çözmek, çözmek sayılmaz. Burada da const_cast kullanımının pek uygun olacağını düşünmüyorum.
 
Dahil etmemiş olabilirsin ama bu sorunlar genellikle const yanlış kullanmaktan dolayı oluyor.

Örneğin; dönüşümde char* kullanman gereken yere, const char* kullanırsan bu hatayı alırsın. wchar_t kullanıp " L"", L"Yaygın ", L"Seyrek ", L"Nadir ", L"Efsane ", L"Eşsiz " " gibi dönüşümlerde denemen gerekebilir.

Normalde söylediğim şekilde sorununun çözülmesi gerekirdi. Diğer bir aklıma gelen sorun ise; Sorunun o hatayı gösterdiği yerde olmadığı, değerleri gönderdiğin yerde olduğu.


C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        void RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner, char* evolutionMergeText = false);
#else
        void RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner);
#endif

Yani üstte ki kod altta ki paylaştığın koda göre doğru.

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
    char evolutionMergeText[100]; char evolutionText[6][10] = { "", "Yaygın ", "Seyrek ", "Nadir ", "Efsane ", "Eşsiz " };
    sprintf(evolutionMergeText, "%s%s", evolutionText[evolution], pItemData->GetName());
#endif
    rkTextTail.RegisterItemTextTail(
        dwVirtualID,
        pItemData->GetName(),
        &pGroundItemInstance->ThingInstance
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        ,evolutionMergeText
#endif
    );

Yalnız değiştirdiğin kısım altta ki paylaştığın kod;

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
    char evolutionMergeText[100]; char evolutionText[6][10] = { "", "Yaygın ", "Seyrek ", "Nadir ", "Efsane ", "Eşsiz " };
    sprintf(evolutionMergeText, "%s%s", evolutionText[evolution], pItemData->GetName());
#endif
    rkTextTail.RegisterItemTextTail(
        dwVirtualID,
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        evolutionMergeText
#endif
        ,pItemData->GetName(),
        &pGroundItemInstance->ThingInstance
    );

Yani üstte ki kodların yerini değiştirdiğinde sonuç olarak bu altta ki kodların sırası da değişmesi gerekmez mi?

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        void RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner, char* evolutionMergeText = false);
#else
        void RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner);
#endif

Yani özet olarak altta ki kod gibi olması gerekmez mi?

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        void RegisterItemTextTail(DWORD VirtualID, char* evolutionMergeText = false, const char* c_szText, CGraphicObjectInstance* pOwner);
#else
        void RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner);
#endif
Evet öyle olması gerekiyor. Fakat öyle yapınca da, bu sıralamaya bağlı diğer dosyalardan hatalar patlıyor doğru sıralamada çağırılamadıkları için.
const char olayına gelince de; verdiğim kodlardaki const char ile ilgili olan kısımlarım tamamı src nin kendinde var olan kısımlar. Yani ben const char ile ilgili bir düzenleme veya ekleme yapmadım. Bu sistemin ekli olduğu diğer filesten de baktım dediğim gibi birebir aynı her şey sıralamasına, eklenme şekline kadar.

Aslında hatada da çelişki var gibi. Benim eklediğim tür char olmasına rağmen, zaten varsayılan olarak var olan const char türünü sorun olarak gösteriyor.

Dediğini kullanabilir yalnız bu sadece derleyicinin hata vermesini engeller yani sadece ağzını kapatmak olur. Bu da ileri de sorunlara ve buglara yol açabilir. Düşüncesizce const_cast yani type cast kullanmak genellikle yeni başlayanların ve tip uyumsuzluğunu çözemediklerinde kullandıkları bir yöntem. O yüzden her yerde const_cast yani type cast kullanarak derleyicinin sesini kısarak sorunu çözmek, çözmek sayılmaz. Burada da const_cast kullanımının pek uygun olacağını düşünmüyorum.

const_cast'i nasıl kullanabilirim gösterebilir misiniz? Bu üzerinde çalıştığım kod neticede sadece yerdeki itemin(silahın) ismine eğer varsa evrim seviyesini eklemeye yarıyor sanırım. Eğer const_cast kesin bir çözüm olmadığı halde kodun çalışmasını sağlarsa ve item isminin düzgün görünmesini sağlarsa, başka hiç bir yerde sorun yaratacağını sanmıyorum.
 
Dediğim gibi en altta böyle olması gerekmez mi? dediğim şekilde olmalıdır. Sen yerini değiştirdiğinde item isminin yerine, evrim ismini gönderiyorsun. Doğal olarak;

C++:
Genişlet Daralt Kopyala
pItemData->GetName(),

Kısmı hata veriyor.

C++:
Genişlet Daralt Kopyala
char* evolutionMergeText = false

C++:
Genişlet Daralt Kopyala
const char* c_szText

Şimdi dediğin gibi sen char* değiştirmene rağmen, neden const char* hatası aldığını anladın mı? Üstte dediğim gibi "Sen yerini değiştirdiğinde item isminin yerine, evrim ismini gönderiyorsun."

const_cast
kullanımına burada yardımcı olmayacağım çünkü hiçbir işe yaramayıp evrim sistemini daha işlevsiz hale getirecektir. Ayrıca oyun içinde bir çok hataya neden olacaktır.

en altta böyle olması gerekmez mi? dediğim kısımda ki gibi gereken yerleri değiştirip, diğer hata veren yerleri buna göre düzeltmen lazım.

Not: "Eğer const_cast kesin bir çözüm olmadığı halde kodun çalışmasını sağlarsa ve item isminin düzgün görünmesini sağlarsa, başka hiç bir yerde sorun yaratacağını sanmıyorum." -> İşe yaramayacaktır.

Not-2: "Dahil etmemiş olabilirsin ama bu sorunlar genellikle const yanlış kullanmaktan dolayı oluyor." -> Üstte yazdığım yorumu tekrar hatırlatırım.
 
Son düzenleme:
Dediğim gibi en altta böyle olması gerekmez mi? dediğim şekilde olmalıdır. Sen yerini değiştirdiğinde item isminin yerine, evrim ismini gönderiyorsun. Doğal olarak;

C++:
Genişlet Daralt Kopyala
pItemData->GetName(),

Kısmı hata veriyor.

C++:
Genişlet Daralt Kopyala
char* evolutionMergeText = false

C++:
Genişlet Daralt Kopyala
const char* c_szText

Şimdi dediğin gibi sen char* değiştirmene rağmen, neden const char* hatası aldığını anladın mı? Üstte dediğim gibi "Sen yerini değiştirdiğinde item isminin yerine, evrim ismini gönderiyorsun."

const_cast
kullanımına burada yardımcı olmayacağım çünkü hiçbir işe yaramayıp evrim sistemini daha işlevsiz hale getirecektir. Ayrıca oyun içinde bir çok hataya neden olacaktır.

en altta böyle olması gerekmez mi? dediğim kısımda ki gibi gereken yerleri değiştirip, diğer hata veren yerleri buna göre düzeltmen lazım.

Not: "Eğer const_cast kesin bir çözüm olmadığı halde kodun çalışmasını sağlarsa ve item isminin düzgün görünmesini sağlarsa, başka hiç bir yerde sorun yaratacağını sanmıyorum." -> İşe yaramayacaktır.
Maalesef yerlerini değiştirip diğer hata veren yerleri buna göre düzenleyemem çünkü evrim sistemi ile alakası olmayan dosyalardan bile onlarca hata listeleniyor. Yani açıkcası çözümün bu olduğunu ya da bununla alakalı olduğunu sanmıyorum. Çünkü "dediğim şekilde olmalıdır" dediğin yönteme bakınca, "neden diğer fileste öyle ekli değil?" diye düşündürüyor insana.
 
Maalesef yerlerini değiştirip diğer hata veren yerleri buna göre düzenleyemem çünkü evrim sistemi ile alakası olmayan dosyalardan bile onlarca hata listeleniyor. Yani açıkcası çözümün bu olduğunu ya da bununla alakalı olduğunu sanmıyorum. Çünkü "dediğim şekilde olmalıdır" dediğin yönteme bakınca, "neden diğer fileste öyle ekli değil?" diye düşündürüyor insana.

Yanlış sorular sorup, yanlış düşünüyorsun. Diğer filesler de gözden kaçırdığın kod bloğu olduğuna eminim. Item_proto'dan da olabilir, item list name'den de olabilir, MySQL'dan da olabilir yada bu dosyalardan da olabilir. Senin filesinde sadece Zehir Kılıcı tanımlı ve doğal olarak evrim olsa bile, evrimli mi? Eğer evrimliyse ve kademesi neyse item ismini bu şekilde kullan diye bir şey olmadığındandır. Eğer bu şekilde kullan diye bir şey olsa bile bunların isimlerinin eklenmediğinden direk Zehir Kılıcı olarak isim alıyordur. Yani MySQL'da olsun veya envanterde olsun görünse bile sadece yanına bir ek olarak eklendiğinden dolayı görünüyordur. Dikkatini çekerim "EK OLARAK" diyorum.

Oyun yapısıyla ilgili pek bir bilgim olduğunu söyleyemem o yüzden bu dediklerim bir varsayımdır. Yalnız C++ hakkında bahsettiğim şey bir çözümdür ve başka bir şekilde kullanman mümkün değildir.

Özet: Kısacası senin sorunun bu paylaştığın kodlarla ilgili değil diye kesin olarak diyebilirim. Konuyu çözüldü olarak değiştirip, hatayı nerede yaptığın ve nasıl bir yol izleyeceğin belirtilmiştir. Sorunun paylaştığın kodlarla ilgili olmadığı doğrulanmış ve ona rağmen nerede hata yaptığın, hatayı nasıl çözümleyip nasıl kullanabileceğin belirtilmiştir.
 
Son düzenleme:
Yanlış sorular sorup, yanlış düşünüyorsun. Diğer filesler de gözden kaçırdığın kod bloğu olduğuna eminim. Item_proto'dan da olabilir, item list name'den de olabilir, MySQL'dan da olabilir yada bu dosyalardan da olabilir. Senin filesinde sadece Zehir Kılıcı tanımlı ve doğal olarak evrim olsa bile, evrimli mi? Eğer evrimliyse ve kademesi neyse item ismini bu şekilde kullan diye bir şey olmadığındandır. Eğer bu şekilde kullan diye bir şey olsa bile bunların isimlerinin eklenmediğinden direk Zehir Kılıcı olarak isim alıyordur. Yani MySQL'da olsun veya envanterde olsun görünse bile sadece yanına bir ek olarak eklendiğinden dolayı görünüyordur. Dikkatini çekerim "EK OLARAK" diyorum.

Oyun yapısıyla ilgili pek bir bilgim olduğunu söyleyemem o yüzden bu dediklerim bir varsayımdır. Yalnız C++ hakkında bahsettiğim şey bir çözümdür ve başka bir şekilde kullanman mümkün değildir.
Elbette anlıyorum. Şöyle bir açıklık getireyim, evrim sistemi oyun içinde işlevselliği ile beraber efektlerine kadar düzgün çalışıyor. Evrimliyken envanterdeki ismi değişiyor, gücü değişiyor. İlk başta eksikler vardı tabi. Ticaret camında, pazarda,depoda,ticaret ekranında, pazar kurma ekranında(item koyulan), giftboxda aynı sorunu yaşadım. Hepsini uyarlayarak çözdüm. Yani isim kontrolü yapan kodlar zaten mevcut. Bu konuda da mevcut, ama maalesef bu düzenlemeyi, tıpkı diğer bütün dosyalarda olduğu gibi gösterildiği şekilde yapmama rağmen derlenmiyor.
 
Elbette anlıyorum. Şöyle bir açıklık getireyim, evrim sistemi oyun içinde işlevselliği ile beraber efektlerine kadar düzgün çalışıyor. Evrimliyken envanterdeki ismi değişiyor, gücü değişiyor. İlk başta eksikler vardı tabi. Ticaret camında, pazarda,depoda,ticaret ekranında, pazar kurma ekranında(item koyulan), giftboxda aynı sorunu yaşadım. Hepsini uyarlayarak çözdüm. Yani isim kontrolü yapan kodlar zaten mevcut. Bu konuda da mevcut, ama maalesef bu düzenlemeyi, tıpkı diğer bütün dosyalarda olduğu gibi gösterildiği şekilde yapmama rağmen derlenmiyor.

Dediğim gibi C2664'den başka türlü kurtulabileceğini sanmıyorum. const_cast kullandığında, üstte verdiğim şekilde düzenleme yaptığında ki verdiği hataların olduğu yerlerin hepsi patlat verecektir.

- Üstte yazdıklarımı dikkatlice okumanı öneririm. Ezbere kod değiştirmek ile bir yere kadar gidebileceğini biliyorsun. Hatanın nerede olduğunu, neden kaynaklandığını ve nasıl çözeceğini söyledim. Değiştirip işe yaradı dediğin yerleri de bu konu altında detaylıca belirtirsen (kodları paylaşırsan) yarın akşam inceleyebilirim. Sabah işe gideceğim için şuanda daha fazla ilgilenemiyorum, yatmam gerekiyor. Yarın akşam görüşmek dileğiyle.
 
Son düzenleme:
Dediğim gibi C2664'den başka türlü kurtulabileceğini sanmıyorum. const_cast kullandığında, üstte verdiğim şekilde düzenleme yaptığında ki verdiği hataların olduğu yerlerin hepsi patlat verecektir.

- Üstte yazdıklarımı dikkatlice okumanı öneririm. Ezbere kod değiştirmek ile bir yere kadar gidebileceğini biliyorsun. Hatanın nerede olduğunu, neden kaynaklandığını ve nasıl çözeceğini söyledim. Değiştirip işe yaradı dediğin yerleri de bu konu altında detaylıca belirtirsen (kodları paylaşırsan) yarın akşam inceleyebilirim. Sabah işe gideceğim için şuanda daha fazla ilgilenemiyorum, yatmam gerekiyor. Yarın akşam görüşmek dileğiyle.
C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
        void RegisterItemTextTail(DWORD VirtualID, char* evolutionMergeText = false, const char* c_szText, CGraphicObjectInstance* pOwner);
#else
        void RegisterItemTextTail(DWORD VirtualID, const char* c_szText, CGraphicObjectInstance* pOwner);
#endif

Bu şekilde yapınca kabul etmiyor. Varsayılan bağımsız değişken listenin sonunda değil diye hata veriyor ve bağlı olan hiç bir dosyayı derlemiyor.

Adsız.jpg
 
C++:
Genişlet Daralt Kopyala
void RegisterItemTextTail(DWORD VirtualID, char* evolutionMergeText = false, const char* c_szText, CGraphicObjectInstance* pOwner);

Yukarıda ki " char* evolutionMergeText = false " kısmını, " char* evolutionMergeText " olarak değiştirirsek bir sorun kalmayacaktır. Eğer değiştirmek istemezsen diğerlerine de bir değer atamak zorundasın.

Örnek;

C++:
Genişlet Daralt Kopyala
void RegisterItemTextTail(int a, int b = 0, int c, int d);

Üstte ki örnekte C++'nın katı kurallarından dolayı tanımların arasına bir değer atanmışsa hata verir. Altta ki örnekte ki gibi olursa bu hatadan kurtulursun.

Örnek;

C++:
Genişlet Daralt Kopyala
void RegisterItemTextTail(int a, int b = 0, int c = 1, int d = 2);

Yada en başta ki gibi adamın yaptığı şekilde bu değeri en sona atamak gerekir. Altta ki örnekte verildiği gibi.

Örnek;

C++:
Genişlet Daralt Kopyala
void RegisterItemTextTail(int a, int b, int c, int d = 0);
 
C++:
Genişlet Daralt Kopyala
void RegisterItemTextTail(DWORD VirtualID, char* evolutionMergeText = false, const char* c_szText, CGraphicObjectInstance* pOwner);

Yukarıda ki " char* evolutionMergeText = false " kısmını, " char* evolutionMergeText " olarak değiştirirsek bir sorun kalmayacaktır. Eğer değiştirmek istemezsen diğerlerine de bir değer atamak zorundasın.

Örnek;

C++:
Genişlet Daralt Kopyala
void RegisterItemTextTail(int a, int b = 0, int c, int d);

Üstte ki örnekte C++'nın katı kurallarından dolayı tanımların arasına bir değer atanmışsa hata verir. Altta ki örnekte ki gibi olursa bu hatadan kurtulursun.

Örnek;

C++:
Genişlet Daralt Kopyala
void RegisterItemTextTail(int a, int b = 0, int c = 1, int d = 2);

Yada en başta ki gibi adamın yaptığı şekilde bu değeri en sona atamak gerekir. Altta ki örnekte verildiği gibi.

Örnek;

C++:
Genişlet Daralt Kopyala
void RegisterItemTextTail(int a, int b, int c, int d = 0);
False kısmını kaldıramam çünkü orda false döndürmesi şart. Aksi halde build olsa bile oyun içinde çalışmayacaktır. Sadece çağırıldığında true döndürmesi gerek.
En sona koyduğum zaman ise zaten konuda belirttiğim sorunu yaşıyorum.
Son olarak (int a = 0, char* evolutionMergeText = false, int b = 0 int c = 0) şeklinde tanımladım ve build oldu. Ancak oyun içinde işlevselliği yok.
Hala itemin ismi normal olarak görünüyor. İtemi yansıttığımda üzerine tıklanınca evrimli olduğu falan görünüyor ancak isim olarak düz görünüyor hala.

Ayrıca ezbere kod değiştirmeyle bir yere kadar gidilebileceğinin farkındayım elbette. Ancak ben işin perde arkasını da merak ediyorum tamamen sebebini öğrenmek için. Bu yüzden diğer bahsettiğim fileste, konuda gösterdiğim şekilde ekli olduğu halde neden sorunsuz çalışıyor da, ben aynı şekilde ekleyince neden kabul etmiyor anlamış değilim.
 
False kısmını kaldıramam çünkü orda false döndürmesi şart. Aksi halde build olsa bile oyun içinde çalışmayacaktır. Sadece çağırıldığında true döndürmesi gerek.
En sona koyduğum zaman ise zaten konuda belirttiğim sorunu yaşıyorum.
Son olarak (int a = 0, char* evolutionMergeText = false, int b = 0 int c = 0) şeklinde tanımladım ve build oldu. Ancak oyun içinde işlevselliği yok.
Hala itemin ismi normal olarak görünüyor. İtemi yansıttığımda üzerine tıklanınca evrimli olduğu falan görünüyor ancak isim olarak düz görünüyor hala.

Ayrıca ezbere kod değiştirmeyle bir yere kadar gidilebileceğinin farkındayım elbette. Ancak ben işin perde arkasını da merak ediyorum tamamen sebebini öğrenmek için. Bu yüzden diğer bahsettiğim fileste, konuda gösterdiğim şekilde ekli olduğu halde neden sorunsuz çalışıyor da, ben aynı şekilde ekleyince neden kabul etmiyor anlamış değilim.

Kardeşim açık konuşmak gerekirse kafam çok güzel. İşin perde arkasını sunucu sahipleriyle görüşerek source üstünde yaptıkları değişikleri öğrenebilirsin. Yalnız dediğim gibi C++'da kullanman gereken ve hata almayacağın şekilde paylaştığın kodları, açıkladım. Bunları değiştirmek yada ek bir koşul getirmek sana kalmış. Senin gördüğün sadece cllient tabanlı kodlar olduğunu düşünüyorum, bunların source tabanlı kodlara da ulaşman/öğrenmen yada deneyimlemen lazım.
 
Son düzenleme:
asd.jpg


Client-Server arasında herhangi bir eksiklik veya yanlışlık yok. Bağırma bölümünden item yansıtırken de aynı sorun mevcuttu. Seyrek Zehir Kılıcı yazması gerekirken Zehir Kılıcı olarak yazıyordu. Az önce itibariyle bunun düzenlemesini client tarafındaki ilgili .cpp den yaptım ve şu an çalışıyor. Ancak fotoğrafta da görüldüğü üzere yere atıldığı zaman hala düz olarak yazıyor. Bunu bir türlü çözemedim ve maalesef söylediklerine ek olarak da bir çok yöntem denedim bir türlü yediremedim.

Fotoğraftaki [Seyrek Zehir Kılıcı] evrimli zehir kılıcı, [Zehir Kılıcı] yazan ise düz boş zehir kılıcı.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst