[CODE title="s" highlight="s"] if (inv_item->GetSocket(0) == item->GetSocket(0) &&
inv_item->GetSocket(1) == item->GetSocket(1) &&
inv_item->GetSocket(2) == item->GetSocket(2) &&
inv_item->GetCount() < g_bItemCountLimit)
[/CODE]
bazı fileslerde bu sekilde ve bende de bu sekilde
inv_item->GetSocket(1) == item->GetSocket(1) &&
inv_item->GetSocket(2) == item->GetSocket(2) &&
inv_item->GetCount() < g_bItemCountLimit)
[/CODE]
bazı fileslerde bu sekilde ve bende de bu sekilde
Bu blog autogiveitem, count ile birlikte kullanıldığında, blend olma ön koşuluyla çalışıyor. Autogiveitem genellikle ödüllendirme de çalışıyor.(yere düşürmeden direkt envantere ekleme.)
Blend(şebnem) ise oyunda genellikle cube yada başlangıç ödülü yoluyla alınıyor. Çözüm doğru ancak bu hatanın gerçekleşmesini olası görmedim.
Blend(şebnem) ise oyunda genellikle cube yada başlangıç ödülü yoluyla alınıyor. Çözüm doğru ancak bu hatanın gerçekleşmesini olası görmedim.
inv_item->SetCount(inv_item->GetCount() + item->GetCount());
arat
altına ekle
M2_DESTROY_ITEM(item);
memory leak fix
Silinen birşeyi tekrar silmeye çalışıyorsun. Bunu Eklersen Null Değer Döndürürsün. Setcount fonksiyonunu attım gördüğün gibi zaten siliyor.
C++:
bool CItem::SetCount(DWORD count)
{
if (GetType() == ITEM_ELK)
{
m_dwCount = std::min<DWORD>(count, INT_MAX);
}
else
{
m_dwCount = std::min<DWORD>(count, ITEM_MAX_COUNT);
}
if (count == 0 && m_pOwner)
{
if (GetSubType() == USE_ABILITY_UP || GetSubType() == USE_POTION || GetVnum() == 70020)
{
LPCHARACTER pOwner = GetOwner();
WORD wCell = GetCell();
RemoveFromCharacter();
if (!IsDragonSoul())
{
LPITEM pItem = pOwner->FindSpecifyItem(GetVnum());
if (NULL != pItem)
{
pOwner->ChainQuickslotItem(pItem, QUICKSLOT_TYPE_ITEM, wCell);
#ifdef __ENABLE_NEW_QUICK_SLOT_SYSTEM__
pOwner->ChainNewQuickslotItem(pItem, QUICKSLOT_TYPE_ITEM, wCell);
#endif
}
else
{
pOwner->SyncQuickslot(QUICKSLOT_TYPE_ITEM, wCell, 1000);
}
}
M2_DESTROY_ITEM(this);// burda
}
else
{
if (!IsDragonSoul())
{
m_pOwner->SyncQuickslot(QUICKSLOT_TYPE_ITEM, m_wCell, 1000);
}
M2_DESTROY_ITEM(RemoveFromCharacter());//burda
}
return false;
}
UpdatePacket();
Save();
return true;
}
Setcount un çağırıldığı obje, inv_item objesi.Silinen birşeyi tekrar silmeye çalışıyorsun. Bunu Eklersen Null Değer Döndürürsün. Setcount fonksiyonunu attım gördüğün gibi zaten siliyor.
C++:bool CItem::SetCount(DWORD count) { if (GetType() == ITEM_ELK) { m_dwCount = std::min<DWORD>(count, INT_MAX); } else { m_dwCount = std::min<DWORD>(count, ITEM_MAX_COUNT); } if (count == 0 && m_pOwner) { if (GetSubType() == USE_ABILITY_UP || GetSubType() == USE_POTION || GetVnum() == 70020) { LPCHARACTER pOwner = GetOwner(); WORD wCell = GetCell(); RemoveFromCharacter(); if (!IsDragonSoul()) { LPITEM pItem = pOwner->FindSpecifyItem(GetVnum()); if (NULL != pItem) { pOwner->ChainQuickslotItem(pItem, QUICKSLOT_TYPE_ITEM, wCell); #ifdef __ENABLE_NEW_QUICK_SLOT_SYSTEM__ pOwner->ChainNewQuickslotItem(pItem, QUICKSLOT_TYPE_ITEM, wCell); #endif } else { pOwner->SyncQuickslot(QUICKSLOT_TYPE_ITEM, wCell, 1000); } } M2_DESTROY_ITEM(this);// burda } else { if (!IsDragonSoul()) { m_pOwner->SyncQuickslot(QUICKSLOT_TYPE_ITEM, m_wCell, 1000); } M2_DESTROY_ITEM(RemoveFromCharacter());//burda } return false; } UpdatePacket(); Save(); return true; }
Dolayısıyla item objesi bellekte durmaya devam eder.
Evet hata bende oraya dikkat etmedim :s item->setcount zannettim :sSetcount un çağırıldığı obje, inv_item objesi.
Dolayısıyla item objesi bellekte durmaya devam eder.
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 7
- Görüntüleme
- 474
- Cevaplar
- 3
- Görüntüleme
- 175
- Cevaplar
- 13
- Görüntüleme
- 908