Çözüldü game core

  • Konuyu açan Konuyu açan enes turan
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 48
  • Gösterim Gösterim 1K
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

Gold Üye
Gold Üye
Yardımsever Üye
Usta Üye
Mesaj
1.110
Çözümler
79
Beğeni
1.636
Puan
1.339
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.webp
 

Dosya Eklentileri

Son düzenleme:
Çözüm
DestroyItem fonksiyonu

C++:
Genişlet Daralt Kopyala
#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++:
Genişlet Daralt Kopyala
#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++:
Genişlet Daralt Kopyala
#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:
Genişlet Daralt Kopyala
#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:
Genişlet Daralt Kopyala
#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.webp


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