Çözüldü Dolu envanterde item satın alma 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ı.

melihalbayrak

Geliştirici
Geliştirici
Yardımsever Üye
Usta Üye
Mesaj
1.246
Çözümler
81
Beğeni
674
Puan
1.109
Ticaret Puanı
0
Envanter tamamen dolu olduğu halde pazardan ya da npc den item alıyor para karakterden kesiliyor. Kanal syserr bu şekilde bakındım ama bir şey bulamadım. Diğer koşullarda sorun yok mesela yerden item alırken ticaret yaparken falan envanterde yer yok diyor fakat anlam veremediğim bir şekilde npc de pazarlardan item alınabiliyor bundan 3 ay önceki yedeğimde de denedim ondada aynı sorun var. Yakın zamanda yapılmış bir işlem sonucu oluşan bir hata değil.

SYSERR: Jul 3 21:47:10 :: SetItem: CHARACTER::SetItem: invalid item cell 65535
 
Çözüm
Sorun çözüldü. Hatalı veri tipinden kaynaklıymış uint16_t değeri yerine int32_t değerinde olması gerekiyordu. Bu sorun aylar hatta 1 yıl öncesinden kalma bir sorun yüksek ihtimal. Çünkü kaynak dosyasını 64 ile derlemeye 1 sene öncesinde geçiş yapmıştım. O zamandan kalma bir gözden kaçan bir hata olmalı.
Zaten bu şekilde bir kontrolü varki

C++:
int iEmptyPos;
 if (item->IsDragonSoul())
 {
  iEmptyPos = ch->GetEmptyDragonSoulInventory(item);
 }
 else
 {
  iEmptyPos = ch->GetEmptyInventory(item->GetSize());
 }

 if (iEmptyPos < 0)
 {
  if (m_pkPC)
  {
   sys_log(1, "Shop::Buy at PC Shop : Inventory full : %s size %d", ch->GetName(), item->GetSize());
   return SHOP_SUBHEADER_GC_INVENTORY_FULL;
  }
  else
  {
   sys_log(1, "Shop::Buy : Inventory full : %s size %d", ch->GetName(), item->GetSize());
   M2_DESTROY_ITEM(item);
   return SHOP_SUBHEADER_GC_INVENTORY_FULL;
  }
 }
 
Zaten bu şekilde bir kontrolü varki

C++:
int iEmptyPos;
 if (item->IsDragonSoul())
 {
  iEmptyPos = ch->GetEmptyDragonSoulInventory(item);
 }
 else
 {
  iEmptyPos = ch->GetEmptyInventory(item->GetSize());
 }

 if (iEmptyPos < 0)
 {
  if (m_pkPC)
  {
   sys_log(1, "Shop::Buy at PC Shop : Inventory full : %s size %d", ch->GetName(), item->GetSize());
   return SHOP_SUBHEADER_GC_INVENTORY_FULL;
  }
  else
  {
   sys_log(1, "Shop::Buy : Inventory full : %s size %d", ch->GetName(), item->GetSize());
   M2_DESTROY_ITEM(item);
   return SHOP_SUBHEADER_GC_INVENTORY_FULL;
  }
 }
Var zaten shop.cpp ekledim.
 

Dosya Eklentileri

  • shop.zip
    4,9 KB · Gösterim: 8
3 ay önceki yedektede aynısı olduğunu belirttim konuda. Son zamanlarda yapılanlarla alakası yok. Tüm sistemleri kapatıp denemek lazım müsait zamanda deneyeceğim.
Yazdığınızı fark etmiştim işte neyin etkilediğini düşünmek ve düşündürmek üzerine böyle bir yorum yaptım. :) Umarım çözülür.
 
Sanki burada envantere almak yerine direk giydiriyormuş gibi davranmış. acaba enum EWindows da bir karışıklık olmuş olabilir mi?
char_item.cpp:
    switch(window_type)
    {
    case INVENTORY:
    case EQUIPMENT:
        {
            if (wCell >= INVENTORY_AND_EQUIP_SLOT_MAX)
            {
                sys_err("CHARACTER::SetItem: invalid item cell %d", wCell);
                return;
            }
 
Sorun çözüldü. Hatalı veri tipinden kaynaklıymış uint16_t değeri yerine int32_t değerinde olması gerekiyordu. Bu sorun aylar hatta 1 yıl öncesinden kalma bir sorun yüksek ihtimal. Çünkü kaynak dosyasını 64 ile derlemeye 1 sene öncesinde geçiş yapmıştım. O zamandan kalma bir gözden kaçan bir hata olmalı.
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst