Çözüldü game core

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

enes turan

MT Üye
MT Üye
Mesaj
264
Çözümler
11
Beğeni
88
Puan
464
Ticaret Puanı
0
coreyi pet çağırılı iken oyunan çıkıs yapılırsa veriyor bilgisi olan veya başına gelen varmı daha önce ?


Adsız.png
 

Dosya Eklentileri

  • item_manager.rar
    12 KB · Gösterim: 10
Son düzenleme:
Çözüm
DestroyItem fonksiyonu

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();

    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.�� �������� ������ ���� ��� ����� ������...
Bu hata oyunda ne yaparken tetikleniyor?

Edit: Şimdi farkettim yazıyı kb. item_manager.cpp 573. satırı atıver bi bakayım
 
DestroyItem 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
*/
}
 
DestroyItem 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
*/
}
Sabah deneyip dönüş yapacağım teşekkür ederim
 
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();
 

    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;
            }
    }

}
 
Son düzenleme:
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;
            }
    }

}
Adsız.png


hakkınızı helal edin ugraştırdım baya ama hata verdi build alırken
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst