Yardım Oto toplama sistemini hızlandırma

  • Konuyu açan Konuyu açan 756902
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 12
  • Gösterim Gösterim 129
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.
belki game.pye import time ekleyerek yapabilirsin if current time last auto pick time tarzı bi şey yapabilirsin ama kesin bir şey demiyorum daha fazla hızlı olması için c++ taraflı yapman lazım sanırım
 
belki game.pye import time ekleyerek yapabilirsin if current time last auto pick time tarzı bi şey yapabilirsin ama kesin bir şey demiyorum daha fazla hızlı olması için c++ taraflı yapman lazım sanırım
game.py tarafından baktım da olmadı hocam valla
 
Hocam, game.py tarafında time ile süre kontrolü eklemek toplama hızını artırmaz, aksine çağrı sıklığını düşürebilir. Paylaştığın kodda PickCloseItem() ve PickCloseMoney() her Update döngüsünde çalışıyor ama her çağrıda yalnızca bir nesne için toplama paketi gönderiliyor.

Bence öncelikle C++ tarafındaki GetCloseItem() ve GetCloseMoney() fonksiyonlarını incelemek lazım. Yakındaki nesneleri bulma işlemi ve sunucunun toplama paketlerini işleme şekli hızı etkiliyor olabilir. Daha hızlı toplamak için yakın nesneleri tek seferde listeleyip işlemek düşünülebilir; ancak bunun gerçekten toplu çalışması için sunucu tarafının da desteklemesi gerekir. Sadece game.py üzerinden süreyi değiştirmek pek çözüm olmaz.
 
Hocam, game.py tarafında time ile süre kontrolü eklemek toplama hızını artırmaz, aksine çağrı sıklığını düşürebilir. Paylaştığın kodda PickCloseItem() ve PickCloseMoney() her Update döngüsünde çalışıyor ama her çağrıda yalnızca bir nesne için toplama paketi gönderiliyor.

Bence öncelikle C++ tarafındaki GetCloseItem() ve GetCloseMoney() fonksiyonlarını incelemek lazım. Yakındaki nesneleri bulma işlemi ve sunucunun toplama paketlerini işleme şekli hızı etkiliyor olabilir. Daha hızlı toplamak için yakın nesneleri tek seferde listeleyip işlemek düşünülebilir; ancak bunun gerçekten toplu çalışması için sunucu tarafının da desteklemesi gerekir. Sadece game.py üzerinden süreyi değiştirmek pek çözüm olmaz.
hocam cevap için sağolun bende aynı şeyi demeye çalışmıştım aslında zaten dediğiniz gibi sadece denesin zarar gelmez amacıyla yazdım c++ daha çok uğraştırıcağından biraz kolay yönteme başvurdum
 
PythonItem.h:
Genişlet Daralt Kopyala
// ARATILIR:
        bool    GetCloseMoney(const TPixelPosition & c_rPixelPosition, DWORD* dwItemID, DWORD dwDistance=300);

// ALTINA EKLENIR:
        void    GetCloseItemList(const TPixelPosition & c_rPixelPosition, DWORD dwDistance, std::vector<DWORD> & rVIDList);
        void    GetCloseMoneyList(const TPixelPosition & c_rPixelPosition, DWORD dwDistance, std::vector<DWORD> & rVIDList);

PythonItem.cpp:
Genişlet Daralt Kopyala
// Arat (GetCloseItem fonksiyonunun içinde):
        TGroundItemInstance * pInstance = i->second;

        DWORD dwxDistance = DWORD(c_rPixelPosition.x)-DWORD(pInstance->v3EndPosition.x); // @fixme022

// Değiştir:
        TGroundItemInstance * pInstance = i->second;

        if (pInstance->dwVirtualNumber==VNUM_MONEY)
            continue;

        DWORD dwxDistance = DWORD(c_rPixelPosition.x)-DWORD(pInstance->v3EndPosition.x); // @fixme022

// Arat:
bool CPythonItem::GetCloseItem(const TPixelPosition & c_rPixelPosition, DWORD * pdwItemID, DWORD dwDistance)

// Ekle:
static void __GetCloseGroundItemList(CPythonItem::TGroundItemInstanceMap & rMap, const TPixelPosition & c_rPixelPosition, DWORD dwDistance, bool bMoney, std::vector<DWORD> & rVIDList)
{
    const float fMaxDistance = float(dwDistance)*float(dwDistance);

    CPythonItem::TGroundItemInstanceMap::iterator i;
    for (i = rMap.begin(); i != rMap.end(); ++i)
    {
        CPythonItem::TGroundItemInstance * pInstance = i->second;

        const bool bIsMoney = (pInstance->dwVirtualNumber == CPythonItem::VNUM_MONEY);
        if (bIsMoney != bMoney)
            continue;

        float fx = c_rPixelPosition.x - pInstance->v3EndPosition.x;
        float fy = c_rPixelPosition.y - (-pInstance->v3EndPosition.y);

        if (fx*fx + fy*fy <= fMaxDistance)
            rVIDList.push_back(i->first);
    }
}

void CPythonItem::GetCloseItemList(const TPixelPosition & c_rPixelPosition, DWORD dwDistance, std::vector<DWORD> & rVIDList)
{
    __GetCloseGroundItemList(m_GroundItemInstanceMap, c_rPixelPosition, dwDistance, false, rVIDList);
}

void CPythonItem::GetCloseMoneyList(const TPixelPosition & c_rPixelPosition, DWORD dwDistance, std::vector<DWORD> & rVIDList)
{
    __GetCloseGroundItemList(m_GroundItemInstanceMap, c_rPixelPosition, dwDistance, true, rVIDList);
}

PythonPlayerInput.cpp:
Genişlet Daralt Kopyala
// Arat:
void CPythonPlayer::PickCloseMoney()
{
    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

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

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

    SendClickItemPacket(dwItemID);
}

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

// Değiştir:
void CPythonPlayer::PickCloseMoney()
{
    static DWORD s_dwLastTime = 0;
    DWORD dwNow = ELTimer_GetMSec();
    if (dwNow - s_dwLastTime < 150)
        return;

    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

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

    std::vector<DWORD> vidList;
    CPythonItem::Instance().GetCloseMoneyList(kPPosMain, __GetPickableDistance(), vidList);
    if (vidList.empty())
        return;

    s_dwLastTime = dwNow;

    for (size_t i = 0; i < vidList.size(); ++i)
        SendClickItemPacket(vidList[i]);
}

void CPythonPlayer::PickCloseItem()
{
    static DWORD s_dwLastTime = 0;
    DWORD dwNow = ELTimer_GetMSec();
    if (dwNow - s_dwLastTime < 150)
        return;

    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

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

    std::vector<DWORD> vidList;
    CPythonItem::Instance().GetCloseItemList(kPPosMain, __GetPickableDistance(), vidList);
    if (vidList.empty())
        return;

    s_dwLastTime = dwNow;

    for (size_t i = 0; i < vidList.size(); ++i)
        SendClickItemPacket(vidList[i]);
}

kaldırmadıysan test eder misin?
 
PythonItem.h:
Genişlet Daralt Kopyala
// ARATILIR:
        bool    GetCloseMoney(const TPixelPosition & c_rPixelPosition, DWORD* dwItemID, DWORD dwDistance=300);

// ALTINA EKLENIR:
        void    GetCloseItemList(const TPixelPosition & c_rPixelPosition, DWORD dwDistance, std::vector<DWORD> & rVIDList);
        void    GetCloseMoneyList(const TPixelPosition & c_rPixelPosition, DWORD dwDistance, std::vector<DWORD> & rVIDList);

PythonItem.cpp:
Genişlet Daralt Kopyala
// Arat (GetCloseItem fonksiyonunun içinde):
        TGroundItemInstance * pInstance = i->second;

        DWORD dwxDistance = DWORD(c_rPixelPosition.x)-DWORD(pInstance->v3EndPosition.x); // @fixme022

// Değiştir:
        TGroundItemInstance * pInstance = i->second;

        if (pInstance->dwVirtualNumber==VNUM_MONEY)
            continue;

        DWORD dwxDistance = DWORD(c_rPixelPosition.x)-DWORD(pInstance->v3EndPosition.x); // @fixme022

// Arat:
bool CPythonItem::GetCloseItem(const TPixelPosition & c_rPixelPosition, DWORD * pdwItemID, DWORD dwDistance)

// Ekle:
static void __GetCloseGroundItemList(CPythonItem::TGroundItemInstanceMap & rMap, const TPixelPosition & c_rPixelPosition, DWORD dwDistance, bool bMoney, std::vector<DWORD> & rVIDList)
{
    const float fMaxDistance = float(dwDistance)*float(dwDistance);

    CPythonItem::TGroundItemInstanceMap::iterator i;
    for (i = rMap.begin(); i != rMap.end(); ++i)
    {
        CPythonItem::TGroundItemInstance * pInstance = i->second;

        const bool bIsMoney = (pInstance->dwVirtualNumber == CPythonItem::VNUM_MONEY);
        if (bIsMoney != bMoney)
            continue;

        float fx = c_rPixelPosition.x - pInstance->v3EndPosition.x;
        float fy = c_rPixelPosition.y - (-pInstance->v3EndPosition.y);

        if (fx*fx + fy*fy <= fMaxDistance)
            rVIDList.push_back(i->first);
    }
}

void CPythonItem::GetCloseItemList(const TPixelPosition & c_rPixelPosition, DWORD dwDistance, std::vector<DWORD> & rVIDList)
{
    __GetCloseGroundItemList(m_GroundItemInstanceMap, c_rPixelPosition, dwDistance, false, rVIDList);
}

void CPythonItem::GetCloseMoneyList(const TPixelPosition & c_rPixelPosition, DWORD dwDistance, std::vector<DWORD> & rVIDList)
{
    __GetCloseGroundItemList(m_GroundItemInstanceMap, c_rPixelPosition, dwDistance, true, rVIDList);
}

PythonPlayerInput.cpp:
Genişlet Daralt Kopyala
// Arat:
void CPythonPlayer::PickCloseMoney()
{
    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

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

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

    SendClickItemPacket(dwItemID);
}

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

// Değiştir:
void CPythonPlayer::PickCloseMoney()
{
    static DWORD s_dwLastTime = 0;
    DWORD dwNow = ELTimer_GetMSec();
    if (dwNow - s_dwLastTime < 150)
        return;

    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

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

    std::vector<DWORD> vidList;
    CPythonItem::Instance().GetCloseMoneyList(kPPosMain, __GetPickableDistance(), vidList);
    if (vidList.empty())
        return;

    s_dwLastTime = dwNow;

    for (size_t i = 0; i < vidList.size(); ++i)
        SendClickItemPacket(vidList[i]);
}

void CPythonPlayer::PickCloseItem()
{
    static DWORD s_dwLastTime = 0;
    DWORD dwNow = ELTimer_GetMSec();
    if (dwNow - s_dwLastTime < 150)
        return;

    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

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

    std::vector<DWORD> vidList;
    CPythonItem::Instance().GetCloseItemList(kPPosMain, __GetPickableDistance(), vidList);
    if (vidList.empty())
        return;

    s_dwLastTime = dwNow;

    for (size_t i = 0; i < vidList.size(); ++i)
        SendClickItemPacket(vidList[i]);
}

kaldırmadıysan test eder misin?
edeyim hocam
 
PythonItem.h:
Genişlet Daralt Kopyala
// ARATILIR:
        bool    GetCloseMoney(const TPixelPosition & c_rPixelPosition, DWORD* dwItemID, DWORD dwDistance=300);

// ALTINA EKLENIR:
        void    GetCloseItemList(const TPixelPosition & c_rPixelPosition, DWORD dwDistance, std::vector<DWORD> & rVIDList);
        void    GetCloseMoneyList(const TPixelPosition & c_rPixelPosition, DWORD dwDistance, std::vector<DWORD> & rVIDList);

PythonItem.cpp:
Genişlet Daralt Kopyala
// Arat (GetCloseItem fonksiyonunun içinde):
        TGroundItemInstance * pInstance = i->second;

        DWORD dwxDistance = DWORD(c_rPixelPosition.x)-DWORD(pInstance->v3EndPosition.x); // @fixme022

// Değiştir:
        TGroundItemInstance * pInstance = i->second;

        if (pInstance->dwVirtualNumber==VNUM_MONEY)
            continue;

        DWORD dwxDistance = DWORD(c_rPixelPosition.x)-DWORD(pInstance->v3EndPosition.x); // @fixme022

// Arat:
bool CPythonItem::GetCloseItem(const TPixelPosition & c_rPixelPosition, DWORD * pdwItemID, DWORD dwDistance)

// Ekle:
static void __GetCloseGroundItemList(CPythonItem::TGroundItemInstanceMap & rMap, const TPixelPosition & c_rPixelPosition, DWORD dwDistance, bool bMoney, std::vector<DWORD> & rVIDList)
{
    const float fMaxDistance = float(dwDistance)*float(dwDistance);

    CPythonItem::TGroundItemInstanceMap::iterator i;
    for (i = rMap.begin(); i != rMap.end(); ++i)
    {
        CPythonItem::TGroundItemInstance * pInstance = i->second;

        const bool bIsMoney = (pInstance->dwVirtualNumber == CPythonItem::VNUM_MONEY);
        if (bIsMoney != bMoney)
            continue;

        float fx = c_rPixelPosition.x - pInstance->v3EndPosition.x;
        float fy = c_rPixelPosition.y - (-pInstance->v3EndPosition.y);

        if (fx*fx + fy*fy <= fMaxDistance)
            rVIDList.push_back(i->first);
    }
}

void CPythonItem::GetCloseItemList(const TPixelPosition & c_rPixelPosition, DWORD dwDistance, std::vector<DWORD> & rVIDList)
{
    __GetCloseGroundItemList(m_GroundItemInstanceMap, c_rPixelPosition, dwDistance, false, rVIDList);
}

void CPythonItem::GetCloseMoneyList(const TPixelPosition & c_rPixelPosition, DWORD dwDistance, std::vector<DWORD> & rVIDList)
{
    __GetCloseGroundItemList(m_GroundItemInstanceMap, c_rPixelPosition, dwDistance, true, rVIDList);
}

PythonPlayerInput.cpp:
Genişlet Daralt Kopyala
// Arat:
void CPythonPlayer::PickCloseMoney()
{
    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

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

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

    SendClickItemPacket(dwItemID);
}

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

// Değiştir:
void CPythonPlayer::PickCloseMoney()
{
    static DWORD s_dwLastTime = 0;
    DWORD dwNow = ELTimer_GetMSec();
    if (dwNow - s_dwLastTime < 150)
        return;

    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

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

    std::vector<DWORD> vidList;
    CPythonItem::Instance().GetCloseMoneyList(kPPosMain, __GetPickableDistance(), vidList);
    if (vidList.empty())
        return;

    s_dwLastTime = dwNow;

    for (size_t i = 0; i < vidList.size(); ++i)
        SendClickItemPacket(vidList[i]);
}

void CPythonPlayer::PickCloseItem()
{
    static DWORD s_dwLastTime = 0;
    DWORD dwNow = ELTimer_GetMSec();
    if (dwNow - s_dwLastTime < 150)
        return;

    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

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

    std::vector<DWORD> vidList;
    CPythonItem::Instance().GetCloseItemList(kPPosMain, __GetPickableDistance(), vidList);
    if (vidList.empty())
        return;

    s_dwLastTime = dwNow;

    for (size_t i = 0; i < vidList.size(); ++i)
        SendClickItemPacket(vidList[i]);
}

kaldırmadıysan test eder misin?
Hocam, mantık olarak hızlandırabilir ama bu kod gerçek toplu paket göndermiyor; yakınındaki tüm itemlerin VID'lerini listeleyip her biri için ayrı SendClickItemPacket() çağırıyor. Bir de s_dwLastTime değerini boş liste kontrolünden önce güncellemek gerekiyor; aksi hâlde yerde item yokken her Update'te tarama yapılır. Daha sağlıklı bir çözüm için gönderilen paket sayısını sınırlandırmak ve mümkünse sunucu tarafında toplu toplama desteği eklemek gerekir. m2devde örnek var toplu için
 
Hocam, mantık olarak hızlandırabilir ama bu kod gerçek toplu paket göndermiyor; yakınındaki tüm itemlerin VID'lerini listeleyip her biri için ayrı SendClickItemPacket() çağırıyor. Bir de s_dwLastTime değerini boş liste kontrolünden önce güncellemek gerekiyor; aksi hâlde yerde item yokken her Update'te tarama yapılır. Daha sağlıklı bir çözüm için gönderilen paket sayısını sınırlandırmak ve mümkünse sunucu tarafında toplu toplama desteği eklemek gerekir. m2devde örnek var toplu için
Hmm peki bu?

PythonPlayerInput.cpp:
Genişlet Daralt Kopyala
#include <map>

static void __SendPickupVIDs(const std::vector<DWORD> & vidList)
{
    static std::map<DWORD, DWORD> s_mapSent;
    const DWORD dwNow = ELTimer_GetMSec();
    const size_t kMaxPerTick = 5;
    size_t sent = 0;

    for (std::map<DWORD, DWORD>::iterator it = s_mapSent.begin(); it != s_mapSent.end(); )
    {
        if (dwNow - it->second > 2000)
            s_mapSent.erase(it++);
        else
            ++it;
    }

    for (size_t i = 0; i < vidList.size() && sent < kMaxPerTick; ++i)
    {
        std::map<DWORD, DWORD>::iterator it = s_mapSent.find(vidList[i]);
        if (it != s_mapSent.end() && dwNow - it->second < 500)
            continue;

        s_mapSent[vidList[i]] = dwNow;
        SendClickItemPacket(vidList[i]);
        ++sent;
    }
}

// Değiştirilecek kısımlar:
void CPythonPlayer::PickCloseItem()
{
    static DWORD s_dwLastTime = 0;
    DWORD dwNow = ELTimer_GetMSec();
    if (dwNow - s_dwLastTime < 150)
        return;
    s_dwLastTime = dwNow;

    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

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

    std::vector<DWORD> vidList;
    CPythonItem::Instance().GetCloseItemList(kPPosMain, __GetPickableDistance(), vidList);
    __SendPickupVIDs(vidList);
}

void CPythonPlayer::PickCloseMoney()
{
    static DWORD s_dwLastTime = 0;
    DWORD dwNow = ELTimer_GetMSec();
    if (dwNow - s_dwLastTime < 150)
        return;
    s_dwLastTime = dwNow;

    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

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

    std::vector<DWORD> vidList;
    CPythonItem::Instance().GetCloseMoneyList(kPPosMain, __GetPickableDistance(), vidList);
    __SendPickupVIDs(vidList);
}
 
Hmm peki bu?

PythonPlayerInput.cpp:
Genişlet Daralt Kopyala
#include <map>

static void __SendPickupVIDs(const std::vector<DWORD> & vidList)
{
    static std::map<DWORD, DWORD> s_mapSent;
    const DWORD dwNow = ELTimer_GetMSec();
    const size_t kMaxPerTick = 5;
    size_t sent = 0;

    for (std::map<DWORD, DWORD>::iterator it = s_mapSent.begin(); it != s_mapSent.end(); )
    {
        if (dwNow - it->second > 2000)
            s_mapSent.erase(it++);
        else
            ++it;
    }

    for (size_t i = 0; i < vidList.size() && sent < kMaxPerTick; ++i)
    {
        std::map<DWORD, DWORD>::iterator it = s_mapSent.find(vidList[i]);
        if (it != s_mapSent.end() && dwNow - it->second < 500)
            continue;

        s_mapSent[vidList[i]] = dwNow;
        SendClickItemPacket(vidList[i]);
        ++sent;
    }
}

// Değiştirilecek kısımlar:
void CPythonPlayer::PickCloseItem()
{
    static DWORD s_dwLastTime = 0;
    DWORD dwNow = ELTimer_GetMSec();
    if (dwNow - s_dwLastTime < 150)
        return;
    s_dwLastTime = dwNow;

    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

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

    std::vector<DWORD> vidList;
    CPythonItem::Instance().GetCloseItemList(kPPosMain, __GetPickableDistance(), vidList);
    __SendPickupVIDs(vidList);
}

void CPythonPlayer::PickCloseMoney()
{
    static DWORD s_dwLastTime = 0;
    DWORD dwNow = ELTimer_GetMSec();
    if (dwNow - s_dwLastTime < 150)
        return;
    s_dwLastTime = dwNow;

    CInstanceBase * pkInstMain = NEW_GetMainActorPtr();
    if (!pkInstMain)
        return;

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

    std::vector<DWORD> vidList;
    CPythonItem::Instance().GetCloseMoneyList(kPPosMain, __GetPickableDistance(), vidList);
    __SendPickupVIDs(vidList);
}
Bu sürüm daha mantıklı görünüyor hocam. Özellikle çağrı başına 5 paket sınırı ve aynı VID'ye kısa sürede tekrar istek gönderilmesini engellemesi güzel olmuş. Yine de gerçek toplu paket değil, her item için ayrı istek gönderiyor. Deneyip sonuçları görmek lazım, elinize sağlık paylaşım için.
 
Geri
Üst