Auto pickup

Indította szebi1997, 2020-01-03, 21:35:42

Sziasztok!

Találtam egy Auto pickup rendszert viszont mikor fordítanám a klienst ilyen hibát ír ki,  ezt hogyan tudnám megoldani?:)
választok előre is köszi.


Gondolom ezt akartad.
Az baj a képpel ,hogy az elötte lévő void CPythonPlayer::PickCloseItem()-ről van
maga a void CPythonPlayer::PickCloseItemVectorol() küldj és környezetéről.()


[spoiler]

// 1. PythonPlayerInput.cpp
// 1.0.keresd:
void CPythonPlayer::PickCloseItem()
{
    ...
}
// 1.0. Add utána:
void CPythonPlayer::PickCloseItemVector()
{
    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

    TPixelPosition kPPosMain;
    pkInstMain->NEW_GetPixelPosition(&kPPosMain);

    std::vector<DWORD> itemVidList;
   
    CPythonItem& rkItem=CPythonItem::Instance();
    if (!rkItem.GetCloseItemVector(pkInstMain->GetNameString(), kPPosMain, itemVidList))
        return;
   
    if(itemVidList.empty())
        return;
   
    for(int i = 0; i < itemVidList.size(); i++)
        SendClickItemPacket(itemVidList[i]);
}


// 2. PythonItem.cpp
// 2.0. keresd:
bool CPythonItem::GetCloseItem (const std::string& myName, const TPixelPosition& c_rPixelPosition, DWORD* pdwItemID, DWORD dwDistance)
{
    ....
}
// 2.0. Add utána:
bool CPythonItem::GetCloseItemVector(const std::string& myName, const TPixelPosition& c_rPixelPosition, std::vector<DWORD>& itemVidList)
{
    DWORD dwCloseItemDistance = 1000 * 1000;
   
    TGroundItemInstanceMap::iterator i;
    for (i = m_GroundItemInstanceMap.begin(); i != m_GroundItemInstanceMap.end(); ++i)
    {
        TGroundItemInstance * pInstance = i->second;

        DWORD dwxDistance = DWORD(c_rPixelPosition.x - pInstance->v3EndPosition.x);
        DWORD dwyDistance = DWORD(c_rPixelPosition.y - (-pInstance->v3EndPosition.y));
        DWORD dwDistance = DWORD(dwxDistance * dwxDistance + dwyDistance * dwyDistance);

        if (dwDistance < dwCloseItemDistance && (pInstance->stOwnership == "" || pInstance->stOwnership == myName))
        {
            itemVidList.push_back(i->first);
        }
    }

    return true;
}


// 3. PythonItem.h
// 3.0. keresd:
        bool    GetCloseMoney(const TPixelPosition & c_rPixelPosition, DWORD* dwItemID, DWORD dwDistance=300);
// 3.0. add utána:
        bool     GetCloseItemVector(const std::string& myName, const TPixelPosition& c_rPixelPosition, std::vector<DWORD>& itemVidList);
       
       
// 4. PythonPlayer.cpp
// 4.0. keresd cseréld ki:
void CPythonPlayer::SendClickItemPacket(DWORD dwIID)
{
    if (IsObserverMode())
        return;
       
    const char * c_szOwnerName;
    if (!CPythonItem::Instance().GetOwnership(dwIID, &c_szOwnerName))
        return;

    if (strlen(c_szOwnerName) > 0)
    if (0 != strcmp(c_szOwnerName, GetName()))
    {
        CItemData * pItemData;
        if (!CItemManager::Instance().GetItemDataPointer(CPythonItem::Instance().GetVirtualNumberOfGroundItem(dwIID), &pItemData))
        {
            Tracenf("CPythonPlayer::SendClickItemPacket(dwIID=%d) : Non-exist item.", dwIID);
            return;
        }
       
        if (!IsPartyMemberByName(c_szOwnerName) || pItemData->IsAntiFlag(CItemData::ITEM_ANTIFLAG_DROP | CItemData::ITEM_ANTIFLAG_GIVE))
        {
            PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotPickItem", Py_BuildValue("()"));
            return;
        }
    }

    CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
    rkNetStream.SendItemPickUpPacket(dwIID);
}


// 5. PythonPlayerModule.cpp
// 5.0. keresd:
PyObject * playerPickCloseItem(PyObject* poSelf, PyObject* poArgs)
{
    CPythonPlayer::Instance().PickCloseItem();
    return Py_BuildNone();
}
// 5.0. Add utána:
PyObject * playerPickCloseItemVector(PyObject* poSelf, PyObject* poArgs)
{
    CPythonPlayer::Instance().PickCloseItemVector();
    return Py_BuildNone();
}

// 5.1. keresd:
        { "PickCloseItem",                playerPickCloseItem,                METH_VARARGS },
// 5.1.Add utána::
        { "PickCloseItemVector",        playerPickCloseItemVector,            METH_VARARGS },
       
       
       
// 6. PythonPlayer,h
// 6.0. keresd:
        void    PickCloseItem();
// 6.0. Add after:
        void     PickCloseItemVector();
       
       
       
// 7. game.py
// 7. keresd:
    player.PickCloseItem()
// 7. cserléd ki:
    player.PickCloseItemVector()
   

// You can make option for fast pickup or not.

[/spoiler]

Hát igazából ilyen nincs, a leírás alapján a képen látható void CPythonPlayer::PickCloseItem()  kellett cserélni, ami meg is történt.

A képet  jobban elnézve
void CPythonPlayer::PickCloseItem()
{
CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
if (!pkInstMain)
return;

TPixelPosition kPPosMain;
pkInstMain->NEW_GetPixelPosition(&kPPosMain);

DWORD dwItemID;
CPythonItem& rkItem=CPythonItem::Instance();
if (!rkItem.GetCloseItem(kPPosMain, &dwItemID, __GetPickableDistance()))
return;

SendClickItemPacket(dwItemID);
}

Ez után irdbe mert te pickclose itemet irtad át igyse rossz csak mégse jó a neve .. :D
ugy hagytad a void CPythonPlayer::PickCloseItem() és közben ez void CPythonPlayer::PickCloseItemVector()
előző hszbe ott van a leirás.

Lefordult de valamiért nem akart menni a pickup, megoldottam másképpen azért köszi a segítséget :)