- Mesaj
- 278
- Çözümler
- 11
- Beğeni
- 95
- Puan
- 464
- Ticaret Puanı
- 0
#ifndef DEBUG_ALLOC
void ITEM_MANAGER::DestroyItem(LPITEM item)
#else
void ITEM_MANAGER::DestroyItem(LPITEM item, const char* file, size_t line)
#endif
{
if (item->GetSectree())
item->RemoveFromGround();
DWORD dwID = item->GetID();
DWORD dwOwnerID = item->GetLastOwnerPID();
LPCHARACTER o;
TPlayerItem t;
t.window = item->GetWindow();
t.count = item->GetCount();
t.vnum = item->GetOriginalVnum();
t.pos = t.window == EQUIPMENT ? item->GetCell() - INVENTORY_MAX_NUM : item->GetCell();
if (item->GetWindow() == MALL || item->GetWindow() == SAFEBOX || item->GetWindow() == INVENTORY_MAX_NUM)
{
// 20050613.ipkn.�� �������� ������ ���� ��� ����� ������...
Dosyayı ekli ama konuya tekrar mı atayımBu hata oyunda ne yaparken tetikleniyor?
Edit: Şimdi farkettim yazıyı kb. item_manager.cpp 573. satırı atıver bi bakayım
GörmemişimDosyayı ekli ama konuya tekrar mı atayım
#ifndef DEBUG_ALLOC
void ITEM_MANAGER::DestroyItem(LPITEM item)
#else
void ITEM_MANAGER::DestroyItem(LPITEM item, const char* file, size_t line)
#endif
{
if (item->GetSectree())
item->RemoveFromGround();
if (item->GetOwner())
{
if (CHARACTER_MANAGER::instance().Find(item->GetOwner()->GetPlayerID()) != NULL)
{
sys_err("DestroyItem: GetOwner %s %s!!", item->GetName(), item->GetOwner()->GetName());
item->RemoveFromCharacter();
}
else
{
sys_err ("WTH! Invalid item owner. owner pointer : %p", item->GetOwner());
}
}
TR1_NS::unordered_set<LPITEM>::iterator it = m_set_pkItemForDelayedSave.find(item);
if (it != m_set_pkItemForDelayedSave.end())
m_set_pkItemForDelayedSave.erase(it);
DWORD dwID = item->GetID();
sys_log(2, "ITEM_DESTROY %s:%u", item->GetName(), dwID);
if (!item->GetSkipSave() && dwID)
{
DWORD dwOwnerID = item->GetLastOwnerPID();
db_clientdesc->DBPacketHeader(HEADER_GD_ITEM_DESTROY, 0, sizeof(DWORD) + sizeof(DWORD));
db_clientdesc->Packet(&dwID, sizeof(DWORD));
db_clientdesc->Packet(&dwOwnerID, sizeof(DWORD));
}
else
{
sys_log(2, "ITEM_DESTROY_SKIP %s:%u (skip=%d)", item->GetName(), dwID, item->GetSkipSave());
}
M2_DESTROY_ITEM(it->second);
m_VIDMap.clear();
/*
#ifdef M2_USE_POOL
pool_.Destroy(item);
#else
#ifndef DEBUG_ALLOC
M2_DELETE(item);
#else
M2_DELETE_EX(item, file, line);
#endif
#endif
*/
}
Sabah deneyip dönüş yapacağım teşekkür ederimDestroyItem Kod bloğunu bu şekilde değiştirip deneyip bilgilendirirmisin
C++:#ifndef DEBUG_ALLOC void ITEM_MANAGER::DestroyItem(LPITEM item) #else void ITEM_MANAGER::DestroyItem(LPITEM item, const char* file, size_t line) #endif { if (item->GetSectree()) item->RemoveFromGround(); if (item->GetOwner()) { if (CHARACTER_MANAGER::instance().Find(item->GetOwner()->GetPlayerID()) != NULL) { sys_err("DestroyItem: GetOwner %s %s!!", item->GetName(), item->GetOwner()->GetName()); item->RemoveFromCharacter(); } else { sys_err ("WTH! Invalid item owner. owner pointer : %p", item->GetOwner()); } } TR1_NS::unordered_set<LPITEM>::iterator it = m_set_pkItemForDelayedSave.find(item); if (it != m_set_pkItemForDelayedSave.end()) m_set_pkItemForDelayedSave.erase(it); DWORD dwID = item->GetID(); sys_log(2, "ITEM_DESTROY %s:%u", item->GetName(), dwID); if (!item->GetSkipSave() && dwID) { DWORD dwOwnerID = item->GetLastOwnerPID(); db_clientdesc->DBPacketHeader(HEADER_GD_ITEM_DESTROY, 0, sizeof(DWORD) + sizeof(DWORD)); db_clientdesc->Packet(&dwID, sizeof(DWORD)); db_clientdesc->Packet(&dwOwnerID, sizeof(DWORD)); } else { sys_log(2, "ITEM_DESTROY_SKIP %s:%u (skip=%d)", item->GetName(), dwID, item->GetSkipSave()); } M2_DESTROY_ITEM(it->second); m_VIDMap.clear(); /* #ifdef M2_USE_POOL pool_.Destroy(item); #else #ifndef DEBUG_ALLOC M2_DELETE(item); #else M2_DELETE_EX(item, file, line); #endif #endif */ }
Tamamdır olumlu/olumsuz cevabınızı bekliyorum rica ederim.Sabah deneyip dönüş yapacağım teşekkür ederim
merhabalar şöyle bir hata verdiTamamdır olumlu/olumsuz cevabınızı bekliyorum rica ederim.
M2_DESTROY_ITEM(item); olarak değiştirip build al
deniyorum şimdiM2_DESTROY_ITEM(item); olarak değiştirip build al
build aldım sorun yok oyunu açıp pet çağırılı iken cıkış yaptım yine core verdiM2_DESTROY_ITEM(item); olarak değiştirip build al
yok bu singleton ile alakalı değil item_manager.cppden bir şey deniyecem 1 snbuild aldım sorun yok oyunu açıp pet çağırılı iken cıkış yaptım yine core verdi
16622 eklentisini görüntüle
#ifndef DEBUG_ALLOC
void ITEM_MANAGER::DestroyItem(LPITEM item)
#else
void ITEM_MANAGER::DestroyItem(LPITEM item, const char* file, size_t line)
#endif
{
if (item->GetSectree())
item->RemoveFromGround();
LPCHARACTER o;
DWORD dwID = item->GetID();
TPlayerItem t;
t.window = item->GetWindow();
t.count = item->GetCount();
t.vnum = item->GetOriginalVnum();
t.pos = t.window == EQUIPMENT ? item->GetCell() - INVENTORY_MAX_NUM : item->GetCell();
if (item->GetWindow() == MALL || item->GetWindow() == SAFEBOX || item->GetWindow() == INVENTORY_MAX_NUM)
{
// 20050613.ipkn.�ð��� �������� ������ ���� ��� �ð������ ������ �ٿ�ȴ�.
CSafebox* pSafebox = item->GetWindow() == MALL ? o->GetMall() : o->GetSafebox();
if (pSafebox)
{
pSafebox->Remove(item->GetCell());
}
}
if (item->GetOwner())
{
if (CHARACTER_MANAGER::instance().Find(item->GetOwner()->GetPlayerID()) != NULL)
{
sys_err("DestroyItem: GetOwner %s %s!!", item->GetName(), item->GetOwner()->GetName());
item->RemoveFromCharacter();
}
else
{
sys_err ("WTH! Invalid item owner. owner pointer : %p", item->GetOwner());
}
}
if (!item->GetSkipSave() && dwID)
{
TR1_NS::unordered_set<LPITEM>::iterator it = m_set_pkItemForDelayedSave.find(item);
if (it != m_set_pkItemForDelayedSave.end())
m_set_pkItemForDelayedSave.erase(it);
if (!item->GetOwner())
{
m_map_pkItemByID.erase(dwID);
m_VIDMap.erase(item->GetVID());
}
else{
return;
}
}
}
DestroyItem bununla değiştir:#ifndef DEBUG_ALLOC void ITEM_MANAGER::DestroyItem(LPITEM item) #else void ITEM_MANAGER::DestroyItem(LPITEM item, const char* file, size_t line) #endif { if (item->GetSectree()) item->RemoveFromGround(); TPlayerItem t; t.id = DWORD dwID; t.window = item->GetWindow(); t.count = item->GetCount(); t.vnum = item->GetOriginalVnum(); t.pos = t.window == EQUIPMENT ? item->GetCell() - INVENTORY_MAX_NUM : item->GetCell(); if (item->GetWindow() == MALL || item->GetWindow() == SAFEBOX || item->GetWindow() == INVENTORY_MAX_NUM) { // 20050613.ipkn.�ð��� �������� ������ ���� ��� �ð������ ������ �ٿ�ȴ�. CSafebox* pSafebox = item->GetWindow() == MALL ? o->GetMall() : o->GetSafebox(); if (pSafebox) { pSafebox->Remove(item->GetCell()); } } if (item->GetOwner()) { if (CHARACTER_MANAGER::instance().Find(item->GetOwner()->GetPlayerID()) != NULL) { sys_err("DestroyItem: GetOwner %s %s!!", item->GetName(), item->GetOwner()->GetName()); item->RemoveFromCharacter(); } else { sys_err ("WTH! Invalid item owner. owner pointer : %p", item->GetOwner()); } } if (!item->GetSkipSave() && dwID) { TR1_NS::unordered_set<LPITEM>::iterator it = m_set_pkItemForDelayedSave.find(item); if (it != m_set_pkItemForDelayedSave.end()) m_set_pkItemForDelayedSave.erase(it); if (!item->GetOwner()) { m_map_pkItemByID.erase(dwID); m_VIDMap.erase(item->GetVID()); } else{ return false; } } }
yukarıda güncelledim dene bakalım (senin o tatlı canın sağolsun )
yukarıda güncelledim dene bakalım (senin o tatlı canın sağolsun )
tekrar güncelledim