Çözüldü WEARABLE arttırma

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ı.

TheAdmin33

Geliştirme günlüğü olmayan adam
Premium Üye
Geliştirici
Yardımsever Üye
Usta Üye
Editör
Mesaj
840
Çözümler
49
Beğeni
1.592
Puan
1.149
Ticaret Puanı
0
common/item_length.h içindeki enum EItemWearableFlag ın içi 32 yi geçti ve build ederken hata veriyor bu 32 sınırını nasıl arttırırım?
 
Çözüm
Muhtemelen (1 << 32) ve üstü 32bit taşmasına neden olduğu için kabul etmiyor olabilir.
Denemedim ancak şu şekilde deneyebilirsin:
C++:
WEAR_MAX_NUM = 64,

ve sonra:
C++:
WEARABLE_DENEME  =  (1 << 29),
WEARABLE_DENEME2  = (1 << 30),
WEARABLE_DENEME3  = (1 << 31),
WEARABLE_DENEME4  = ((uint64_t)1 << 32),
WEARABLE_DENEME5  = ((uint64_t)1 << 33),
WEARABLE_DENEME6  = ((uint64_t)1 << 34),

İlk olarak aklıma bu geldi, belki çözümü farklı olabilir emin değilim.
aynen orası değil sanırım db de mi hata veriyor?
game yi build ederken hata veriyor birçok hata veriyor ama bir birinin aynısı
item_length.h:
../../common/item_length.h:375:42: warning: left shift count >= width of type [-Wshift-count-overflow]
  375 |  WEARABLE_COSTUME_RING_BEKCILER  = (1 << 32),
      |                                          ^~
../../common/item_length.h:375:44: error: enumerator value for 'WEARABLE_COSTUME_RING_BEKCILER' is not an integer constant
  375 |  WEARABLE_COSTUME_RING_BEKCILER  = (1 << 32),
      |                                            ^
../../common/item_length.h:375:39: error: right operand of shift expression '(1 << 32)' is >= than the precision of the left operand [-fpermissive]
  375 |  WEARABLE_COSTUME_RING_BEKCILER  = (1 << 32),
      |                                    ~~~^~~~~~
../../common/item_length.h:375:44: error: enumerator value for 'WEARABLE_COSTUME_RING_BEKCILER' is not an integer constant
  375 |  WEARABLE_COSTUME_RING_BEKCILER  = (1 << 32),
 
Ne kadar ekleme yapılacaksa o kadar arttırın
 
Ne kadar ekleme yapılacaksa o kadar arttırın
yok olmuyor tam 32 tane var ben 33 yapıp deniyorum olmuyor. Ben EWearPositions dan bahsetmiyorum EItemWearableFlag dan bahsediyorum bunların ikisininde sınırı WEAR_MAX_NUM danmı ayarlanıyor?
 
game yi build ederken hata veriyor birçok hata veriyor ama bir birinin aynısı
item_length.h:
../../common/item_length.h:375:42: warning: left shift count >= width of type [-Wshift-count-overflow]
  375 |  WEARABLE_COSTUME_RING_BEKCILER  = (1 << 32),
      |                                          ^~
../../common/item_length.h:375:44: error: enumerator value for 'WEARABLE_COSTUME_RING_BEKCILER' is not an integer constant
  375 |  WEARABLE_COSTUME_RING_BEKCILER  = (1 << 32),
      |                                            ^
../../common/item_length.h:375:39: error: right operand of shift expression '(1 << 32)' is >= than the precision of the left operand [-fpermissive]
  375 |  WEARABLE_COSTUME_RING_BEKCILER  = (1 << 32),
      |                                    ~~~^~~~~~
../../common/item_length.h:375:44: error: enumerator value for 'WEARABLE_COSTUME_RING_BEKCILER' is not an integer constant
  375 |  WEARABLE_COSTUME_RING_BEKCILER  = (1 << 32),
sanırım ben wear ile karıştırıyorum. wearable farklı olabilir. ama src de bunun max değerini göremedim.
 
yeni item_type oluşturmadan bu işi çözmemin bir yolu varmı? her yeni slot için ayrı wearable ekliyorum mesela tılsım sistemi herbiri için ayrı wearable ekli yeni item_type oluşturmadan bunu teke indirmenin bir yolu varmı?
 
Muhtemelen (1 << 32) ve üstü 32bit taşmasına neden olduğu için kabul etmiyor olabilir.
Denemedim ancak şu şekilde deneyebilirsin:
C++:
WEAR_MAX_NUM = 64,

ve sonra:
C++:
WEARABLE_DENEME  =  (1 << 29),
WEARABLE_DENEME2  = (1 << 30),
WEARABLE_DENEME3  = (1 << 31),
WEARABLE_DENEME4  = ((uint64_t)1 << 32),
WEARABLE_DENEME5  = ((uint64_t)1 << 33),
WEARABLE_DENEME6  = ((uint64_t)1 << 34),

İlk olarak aklıma bu geldi, belki çözümü farklı olabilir emin değilim.
 
Çözüm
Muhtemelen (1 << 32) ve üstü 32bit taşmasına neden olduğu için kabul etmiyor olabilir.
Denemedim ancak şu şekilde deneyebilirsin:
C++:
WEAR_MAX_NUM = 64,

ve sonra:
C++:
WEARABLE_DENEME  =  (1 << 29),
WEARABLE_DENEME2  = (1 << 30),
WEARABLE_DENEME3  = (1 << 31),
WEARABLE_DENEME4  = ((uint64_t)1 << 32),
WEARABLE_DENEME5  = ((uint64_t)1 << 33),
WEARABLE_DENEME6  = ((uint64_t)1 << 34),

İlk olarak aklıma bu geldi, belki çözümü farklı olabilir emin değilim.
aynen 32 bitlik olduğu için hata veriyor onu 64 e çekmek gerekiyor ama nasıl yapacağımı bulamamıştım .deneyip haber vericem
 
Muhtemelen (1 << 32) ve üstü 32bit taşmasına neden olduğu için kabul etmiyor olabilir.
Denemedim ancak şu şekilde deneyebilirsin:
C++:
WEAR_MAX_NUM = 64,

ve sonra:
C++:
WEARABLE_DENEME  =  (1 << 29),
WEARABLE_DENEME2  = (1 << 30),
WEARABLE_DENEME3  = (1 << 31),
WEARABLE_DENEME4  = ((uint64_t)1 << 32),
WEARABLE_DENEME5  = ((uint64_t)1 << 33),
WEARABLE_DENEME6  = ((uint64_t)1 << 34),

İlk olarak aklıma bu geldi, belki çözümü farklı olabilir emin değilim.
yardımcı olduğun için teşekkürler hata almadan build oldu ama 1 tane uyarı verdi bir şeye sebebiyet olurmu acaba?
game build:
compile db.cpp
In file included from char_item.cpp:46:
belt_inventory_helper.h: In member function 'bool CHARACTER::IsEmptyItemGrid(TItemPos, BYTE, int) const':
belt_inventory_helper.h:69:24: warning: array subscript [65280, 65295] is outside array bounds of 'CBeltInventoryHelper::TGradeUnit [16]' {aka 'unsigned char [16]'} [-Warray-bounds]
   69 |   return ruleTable[cell] <= beltGrade;
      |          ~~~~~~~~~~~~~~^
belt_inventory_helper.h:53:21: note: while referencing 'availableRuleByGrade'
   53 |   static TGradeUnit availableRuleByGrade[BELT_INVENTORY_SLOT_COUNT] = {
      |                     ^~~~~~~~~~~~~~~~~~~~
compile desc.cpp
 
yardımcı olduğun için teşekkürler hata almadan build oldu ama 1 tane uyarı verdi bir şeye sebebiyet olurmu acaba?
game build:
compile db.cpp
In file included from char_item.cpp:46:
belt_inventory_helper.h: In member function 'bool CHARACTER::IsEmptyItemGrid(TItemPos, BYTE, int) const':
belt_inventory_helper.h:69:24: warning: array subscript [65280, 65295] is outside array bounds of 'CBeltInventoryHelper::TGradeUnit [16]' {aka 'unsigned char [16]'} [-Warray-bounds]
   69 |   return ruleTable[cell] <= beltGrade;
      |          ~~~~~~~~~~~~~~^
belt_inventory_helper.h:53:21: note: while referencing 'availableRuleByGrade'
   53 |   static TGradeUnit availableRuleByGrade[BELT_INVENTORY_SLOT_COUNT] = {
      |                     ^~~~~~~~~~~~~~~~~~~~
compile desc.cpp
Burada da bir dizinin taştığını söylüyor ancak verdiğim düzenlemeyle alakalı olduğunu pek sanmıyorum. Yinede detaylı incelemek lazım.

Ayrıca verdiğim kodların ne kadar sağlıklı çalışacağını bilemiyorum, uzun vadede test etmek gerek. Bu yüzden olası bir sorunda bunu göz önünde bulundurmanı öneririm.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst