Çözüldü Sistem Eklerken Yaşadığım Bir Sorun

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

sharap

MT Üye
MT Üye
Arkadaşlar Merhaba Target_Hp Sistemini ekliyorumda yalnız bende ENABLE_PENDANT_SYSTEM sistemi de ekli client source PythonNetworkStreamPhaseGame.cpp dosyasındaki eklemeleri yaparken

Eklemek İstediğim Kodlar:
//ARA :
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoardIfDifferent", Py_BuildValue("(i)", TargetPacket.dwVID));

//DE???T?R :
#ifdef ENABLE_TARGET_HP_SYSTEM
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetPCTargetBoard", Py_BuildValue("(isiii)", TargetPacket.dwVID, pInstTarget->GetNameString(), TargetPacket.bHPPercent, TargetPacket.dwActualHP, TargetPacket.dwMaxHP));
#else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoardIfDifferent", Py_BuildValue("(i)", TargetPacket.dwVID));
#endif

//ARA :
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(ii)", TargetPacket.dwVID, TargetPacket.bHPPercent));

//DE???T?R :
#ifdef ENABLE_TARGET_HP_SYSTEM
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(iiii)", TargetPacket.dwVID, TargetPacket.bHPPercent, TargetPacket.dwActualHP, TargetPacket.dwMaxHP));
#else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(ii)", TargetPacket.dwVID, TargetPacket.bHPPercent));
#endif



Benim Dosyamda Olan Kodlar:
bool CPythonNetworkStream::RecvTargetPacket()
{
    TPacketGCTarget TargetPacket;

    if (!Recv(sizeof(TPacketGCTarget), &TargetPacket))
    {
        Tracen("Recv Target Packet Error");
        return false;
    }

    CInstanceBase * pInstPlayer = CPythonCharacterManager::Instance().GetMainInstancePtr();
    CInstanceBase * pInstTarget = CPythonCharacterManager::Instance().GetInstancePtr(TargetPacket.dwVID);
    if (pInstPlayer && pInstTarget)
    {
        if (!pInstTarget->IsDead())
        {
            if (pInstTarget->IsPC() || pInstTarget->IsBuilding())
            {
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoardIfDifferent", Py_BuildValue("(i)", TargetPacket.dwVID));
            }
            else if (pInstPlayer->CanViewTargetHP(*pInstTarget))
#ifdef ENABLE_PENDANT_SYSTEM
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(iii)", TargetPacket.dwVID, TargetPacket.bHPPercent, TargetPacket.bElement));
#else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(ii)", TargetPacket.dwVID, TargetPacket.bHPPercent));
#endif
            else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoard", Py_BuildValue("()"));

            m_pInstTarget = pInstTarget;
        }
    }
    else
    {
        PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoard", Py_BuildValue("()"));
    }

    return true;
}


Bende ekli olan sistemin bulunduğu yeri değiştir diyor ama bunu değiştirirsem diğer sistem çalışmayacak bir bug çıkacak.
Bu gibi durumları nasıl düzeltirim bilmiyorum öğrenmek için soruyorum şimdiden teşekkür ederim.


Altta bırakacağım şekilde bir düzenleme bir sıkıntı çıkartır mı acaba?

Kendim düzenledim:
bool CPythonNetworkStream::RecvTargetPacket()
{
    TPacketGCTarget TargetPacket;

    if (!Recv(sizeof(TPacketGCTarget), &TargetPacket))
    {
        Tracen("Recv Target Packet Error");
        return false;
    }

    CInstanceBase * pInstPlayer = CPythonCharacterManager::Instance().GetMainInstancePtr();
    CInstanceBase * pInstTarget = CPythonCharacterManager::Instance().GetInstancePtr(TargetPacket.dwVID);
    if (pInstPlayer && pInstTarget)
    {
        if (!pInstTarget->IsDead())
        {
            if (pInstTarget->IsPC() || pInstTarget->IsBuilding())
            {
#ifdef ENABLE_TARGET_HP_SYSTEM
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetPCTargetBoard", Py_BuildValue("(isiii)", TargetPacket.dwVID, pInstTarget->GetNameString(), TargetPacket.bHPPercent, TargetPacket.dwActualHP, TargetPacket.dwMaxHP));
#else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoardIfDifferent", Py_BuildValue("(i)", TargetPacket.dwVID));
#endif            }
            else if (pInstPlayer->CanViewTargetHP(*pInstTarget))
#ifdef ENABLE_PENDANT_SYSTEM
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(iii)", TargetPacket.dwVID, TargetPacket.bHPPercent, TargetPacket.bElement));
#else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(ii)", TargetPacket.dwVID, TargetPacket.bHPPercent));
#endif
            else if (pInstPlayer->CanViewTargetHP(*pInstTarget))
#ifdef ENABLE_TARGET_HP_SYSTEM
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(iiii)", TargetPacket.dwVID, TargetPacket.bHPPercent, TargetPacket.dwActualHP, TargetPacket.dwMaxHP));
#else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(ii)", TargetPacket.dwVID, TargetPacket.bHPPercent));
#endif
            else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoard", Py_BuildValue("()"));

            m_pInstTarget = pInstTarget;
        }
    }
    else
    {
        PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoard", Py_BuildValue("()"));
    }

    return true;
}
 
Çözüm
Benim Kodlarım::
bool CPythonNetworkStream::RecvTargetPacket()
{
    TPacketGCTarget TargetPacket;

    if (!Recv(sizeof(TPacketGCTarget), &TargetPacket))
    {
        Tracen("Recv Target Packet Error");
        return false;
    }

    CInstanceBase * pInstPlayer = CPythonCharacterManager::Instance().GetMainInstancePtr();
    CInstanceBase * pInstTarget = CPythonCharacterManager::Instance().GetInstancePtr(TargetPacket.dwVID);
    if (pInstPlayer && pInstTarget)
    {
        if (!pInstTarget->IsDead())
        {
            if (pInstTarget->IsPC() || pInstTarget->IsBuilding())
            {
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoardIfDifferent", Py_BuildValue("(i)", TargetPacket.dwVID));
            }
            else...
Bu şekilde deneyebilirsin.

C++:
bool CPythonNetworkStream::RecvTargetPacket()
{
    TPacketGCTarget TargetPacket;

    if (!Recv(sizeof(TPacketGCTarget), &TargetPacket))
    {
        Tracen("Recv Target Packet Error");
        return false;
    }

    CInstanceBase * pInstPlayer = CPythonCharacterManager::Instance().GetMainInstancePtr();
    CInstanceBase * pInstTarget = CPythonCharacterManager::Instance().GetInstancePtr(TargetPacket.dwVID);
    if (pInstPlayer && pInstTarget)
    {
        if (!pInstTarget->IsDead())
        {
            if (pInstTarget->IsPC() || pInstTarget->IsBuilding())
            {
#ifdef ENABLE_TARGET_HP_SYSTEM
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetPCTargetBoard", Py_BuildValue("(isiii)", TargetPacket.dwVID, pInstTarget->GetNameString(), TargetPacket.bHPPercent, TargetPacket.dwActualHP, TargetPacket.dwMaxHP));
#else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoardIfDifferent", Py_BuildValue("(i)", TargetPacket.dwVID));
#endif
            }
            else if (pInstPlayer->CanViewTargetHP(*pInstTarget))
#ifdef ENABLE_PENDANT_SYSTEM
#ifdef ENABLE_TARGET_HP_SYSTEM
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(iiiii)", TargetPacket.dwVID, TargetPacket.bHPPercent, TargetPacket.bElement, TargetPacket.dwActualHP, TargetPacket.dwMaxHP));
#else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(iii)", TargetPacket.dwVID, TargetPacket.bHPPercent, TargetPacket.bElement));
#endif
#else
#ifdef ENABLE_TARGET_HP_SYSTEM
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(iiii)", TargetPacket.dwVID, TargetPacket.bHPPercent, TargetPacket.dwActualHP, TargetPacket.dwMaxHP));
#else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(ii)", TargetPacket.dwVID, TargetPacket.bHPPercent));
#endif
#endif
            else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoard", Py_BuildValue("()"));

            m_pInstTarget = pInstTarget;
        }
    }
    else
    {
        PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoard", Py_BuildValue("()"));
    }

    return true;
}

"(iiiii)" kısmında iki sistemin de argümanları birleştirildiği için python tarafında da buna uygun şekilde tanımlama yapman gerek.
Ayrıca PENDANT sisteminin çalışma mantığını bilmediğimden dolayı iki sistem tamamen çakışırsa ekstradan kontrol kodları eklenmesi gerekebilir.
 
Merhaba @sharap
,

İlgili sorununuz devam ediyor mu ? Sorununu çözdüyseniz eğer diğer kullanıcıların da faydalanması için çözüm yolunuzu paylaşır mısınız?.
 
Benim Kodlarım::
bool CPythonNetworkStream::RecvTargetPacket()
{
    TPacketGCTarget TargetPacket;

    if (!Recv(sizeof(TPacketGCTarget), &TargetPacket))
    {
        Tracen("Recv Target Packet Error");
        return false;
    }

    CInstanceBase * pInstPlayer = CPythonCharacterManager::Instance().GetMainInstancePtr();
    CInstanceBase * pInstTarget = CPythonCharacterManager::Instance().GetInstancePtr(TargetPacket.dwVID);
    if (pInstPlayer && pInstTarget)
    {
        if (!pInstTarget->IsDead())
        {
            if (pInstTarget->IsPC() || pInstTarget->IsBuilding())
            {
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoardIfDifferent", Py_BuildValue("(i)", TargetPacket.dwVID));
            }
            else if (pInstPlayer->CanViewTargetHP(*pInstTarget))
#ifdef ENABLE_PENDANT_SYSTEM
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(iii)", TargetPacket.dwVID, TargetPacket.bHPPercent, TargetPacket.bElement));
#else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(ii)", TargetPacket.dwVID, TargetPacket.bHPPercent));
#endif
            else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoard", Py_BuildValue("()"));

            m_pInstTarget = pInstTarget;
        }
    }
    else
    {
        PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoard", Py_BuildValue("()"));
    }

    return true;
}



Son Hali::
bool CPythonNetworkStream::RecvTargetPacket()
{
    TPacketGCTarget TargetPacket;
    if (!Recv(sizeof(TPacketGCTarget), &TargetPacket))
    {
        Tracen("Recv Target Packet Error");
        return false;
    }
   
    CInstanceBase * pInstPlayer = CPythonCharacterManager::Instance().GetMainInstancePtr();
    CInstanceBase * pInstTarget = CPythonCharacterManager::Instance().GetInstancePtr(TargetPacket.dwVID);
    if (pInstPlayer && pInstTarget)
    {
        if (!pInstTarget->IsDead())
        {
#ifdef ENABLE_VIEW_TARGET_PLAYER_HP
            if (pInstTarget->IsBuilding())
#else
            if (pInstTarget->IsPC() || pInstTarget->IsBuilding())
#endif
            {
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoardIfDifferent", Py_BuildValue("(i)", TargetPacket.dwVID));
#ifdef ENABLE_PENDANT_SYSTEM
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetElementImage", Py_BuildValue("(i)", TargetPacket.bElement));
#endif
            }
            else if (pInstPlayer->CanViewTargetHP(*pInstTarget))
#ifdef ENABLE_VIEW_TARGET_DECIMAL_HP
#ifdef ENABLE_PENDANT_SYSTEM
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(iiiii)", TargetPacket.dwVID, TargetPacket.bHPPercent, TargetPacket.iMinHP, TargetPacket.iMaxHP, TargetPacket.bElement));
#else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(iiii)", TargetPacket.dwVID, TargetPacket.bHPPercent, TargetPacket.iMinHP, TargetPacket.iMaxHP));
#endif
#else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(ii)", TargetPacket.dwVID, TargetPacket.bHPPercent));
#endif
            else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoard", Py_BuildValue("()"));

            m_pInstTarget = pInstTarget;
        }
    }
    else
    {
        PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseTargetBoard", Py_BuildValue("()"));
    }
   
    return true;
}


Bu gibi sorun yaşayanlar bu şekilde değiştirebilirler. İlginiz için teşekkür ederim.
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri