Onforum.net - Web and gaming resource community

Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members .

SaveSingleItem , pay for fix.

Status
Not open for further replies.

Madalinx

New member
Credits
0
i have one big problem about one crash.
if somebody know how i can fix this , please say me in pm or reply with skype/discord id for contact
:D

i pay for this fix (how much you want) . Please , just if you know fix.
1eb7b3cee674c48fd43d26fe1e29ca67.png


item_manager.cpp

void ITEM_MANAGER::DelayedSave(LPITEM item)
{
if (item->GetID() != 0)
m_set_pkItemForDelayedSave.insert(item);
}

void ITEM_MANAGER::FlushDelayedSave(LPITEM item)
{
TR1_NS::unordered_set<LPITEM>::iterator it = m_set_pkItemForDelayedSave.find(item);

if (it == m_set_pkItemForDelayedSave.end())
{
return;
}

m_set_pkItemForDelayedSave.erase(it);
SaveSingleItem(item);
}

void ITEM_MANAGER::SaveSingleItem(LPITEM item)
{
if(!item)
{
sys_err("item from SaveSingleItem is NULL!!!");
//return;
}

//if(!item->GetID())
// return;

if (!item->GetOwner())
//if (!item->GetOwner() || !item->GetCount())
{
DWORD dwID = item->GetID();
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));

sys_log(1, "ITEM_DELETE %s:%u", item->GetName(), dwID);
return;
}

sys_log(1, "ITEM_SAVE %s:%d in %s window %d", item->GetName(), item->GetID(), item->GetOwner()->GetName(), item->GetWindow());

TPlayerItem t;

t.id = item->GetID();
t.window = item->GetWindow();
t.pos = t.window == EQUIPMENT ? item->GetCell() - INVENTORY_MAX_NUM : item->GetCell();
t.count = item->GetCount();
t.vnum = item->GetOriginalVnum();

#ifdef TRANSMUTE_SYSTEM
t.look = item->GetLook();
#endif
t.owner = (t.window == SAFEBOX || t.window == MALL) ? item->GetOwner()->GetDesc()->GetAccountTable().id : item->GetOwner()->GetPlayerID();
thecore_memcpy(t.alSockets, item->GetSockets(), sizeof(t.alSockets));
thecore_memcpy(t.aAttr, item->GetAttributes(), sizeof(t.aAttr));

db_clientdesc->DBPacketHeader(HEADER_GD_ITEM_SAVE, 0, sizeof(TPlayerItem));
db_clientdesc->Packet(&t, sizeof(TPlayerItem));
}

void ITEM_MANAGER::Update()
{
TR1_NS::unordered_set<LPITEM>::iterator it = m_set_pkItemForDelayedSave.begin();
TR1_NS::unordered_set<LPITEM>::iterator this_it;

while (it != m_set_pkItemForDelayedSave.end())
{
this_it = it++;
LPITEM item = *this_it;

// SLOW_QUERY 플래그가 있는 것은 종료시에만 저장한다.
if (item->GetOwner() && IS_SET(item->GetFlag(), ITEM_FLAG_SLOW_QUERY))
continue;

SaveSingleItem(item);

m_set_pkItemForDelayedSave.erase(this_it);
}
}

void ITEM_MANAGER::RemoveItem(LPITEM item, const char * c_pszReason)
{
LPCHARACTER o;

if ((o = item->GetOwner()))
{
#ifdef __NEW_PET_SYSTEM_SCALING__
if(item->GetVnum() >= 53041 && item->GetVnum() <= 53048 && o)
{
CScalingPetSystem* petsys = o->GetScalingPetSystem();
if(petsys->GetScalingPetActor())
{
petsys->Unsummon();
}
}
#endif
char szHint[64];
snprintf(szHint, sizeof(szHint), "%s %u ", item->GetName(), item->GetCount());
LogManager::instance().ItemLog(o, item, c_pszReason ? c_pszReason : "REMOVE", szHint);

if (item->GetWindow() == MALL || item->GetWindow() == SAFEBOX)
{
CSafebox* pSafebox = item->GetWindow() == MALL ? o->GetMall() : o->GetSafebox();
if (pSafebox)
{
pSafebox->Remove(item->GetCell());
}
}
else
{
o->SyncQuickslot(QUICKSLOT_TYPE_ITEM, item->GetCell(), 255);
item->RemoveFromCharacter();
}
}

M2_DESTROY_ITEM(item);
}


item.cpp


DWORD CItem::GetCount()
{
#ifdef ENABLE_CHEQUE_SYSTEM
if (GetType() == ITEM_ELK || GetType() == ITEM_CHEQUE) return MIN(m_dwCount, INT_MAX);
#else
if (GetType() == ITEM_ELK) return MIN(m_dwCount, INT_MAX);
#endif
else
{
return MIN(m_dwCount, 200);
}
}
bool CItem::SetCount(DWORD count)
{
#ifdef ENABLE_CHEQUE_SYSTEM
if (GetType() == ITEM_ELK || GetType() == ITEM_CHEQUE)
#else
if (GetType() == ITEM_ELK)
#endif
{
m_dwCount = MIN(count, INT_MAX);
}
else
{
m_dwCount = MIN(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);
}
else
{
pOwner->SyncQuickslot(QUICKSLOT_TYPE_ITEM, wCell, 255);
}
}
M2_DESTROY_ITEM(this);
}
else
{
if (!IsDragonSoul())
{
m_pOwner->SyncQuickslot(QUICKSLOT_TYPE_ITEM, m_wCell, 255);
}
M2_DESTROY_ITEM(RemoveFromCharacter());
}
return false;
}
UpdatePacket();
Save();
return true;
}


db when crash , appear this item...

2351233e0b6592a85fc24484e4d66b76.png


i don't know when crash or how crash. shop offline from great.
 
Status
Not open for further replies.
Top

Dear User!

We found that you are blocking the display of ads on our site.

Please add it to the exception list or disable AdBlock.

The advertises that you'll see aren't intrusive they just help us to keep the community alive

If you don't want to see those ads just buy an upgrade.

Thank you for understanding!

Baba2

Baba2 Purchase

User upgrade! at

🔥 Upgrade Now

Escanor25 Purchase

User upgrade! at

🔥 Upgrade Now
Tigrex

Tigrex Purchase

User upgrade! at

🔥 Upgrade Now