Hızlı İtem Toplama Sistemi Sorunsuz

melihalbayrak

Geliştirici
Geliştirici
Yardımsever Üye
Usta Üye
Mesaj
1.241
Çözümler
81
Beğeni
677
Puan
1.109
Ticaret Puanı
0
Sistem kendi kullandığım bir sistemdir paylaşılan sistemlerden farklıdır. Yerde fazla item varsa veya envanteriniz dolu ve item toplamaya çalıştığınızda karakter ekranına atmaz. Şimdiye kadar bir sorununu görmedim eğer sorun yaşayanlar varsa konu altından belirtsinler.

Sistem MMO TUTKUNLARI için paylaşılmıştır. Başka forum sitelerinde paylaşılması yasaktır.

Aşağıdakini yapamazsanız build alamazsınız!
C++:
Genişlet Daralt Kopyala
Aratılır

bool CPythonItem::GetCloseItem(const TPixelPosition & c_rPixelPosition, DWORD * pdwItemID, DWORD dwDistance)
{
...........
}

Kod bloğu altına eklenir.

#ifdef ENABLE_INSTANT_PICKUP_SYSTEM
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;
}
#endif




Linkleri görebilmek için giriş yap veya kayıt ol.
 

Dosya Eklentileri

En son bir moderatör tarafından düzenlenmiş:
yasaklayamazsında adını kullanarak paylaştırabilirsin sanki knk, paylaşım için saol
 
Paylaşım tarihi, ilk nerede ve kim tarafından paylaşıldığının kanıtı olacaktır zaten. Başka yerlerde paylaşılsa bile gerçeği değiştirmez.
Paylaşım için teşekkürler.
 
Video kaydı debug clientte olduğundan kasıntı çıkmış biraz. Distribute derlemede gayet akıcı.
 
Emeğinize sağlık. Benim de düşündüğüm bir yapı var aslında nasıl olabilir bilmiyorum ama çoğu rpg oyununda düşen itemler toplu oluyor. Mesela yerde bir çuval olacak ve onun içinde yanglar ve itemlerin hepsi yer alacak. Hem böylelikle entity fazlalığı düşmüş olur. Sizce bu tarz bir şey Metin2’ye uygun olur mu?
 
Emeğinize sağlık. Benim de düşündüğüm bir yapı var aslında nasıl olabilir bilmiyorum ama çoğu rpg oyununda düşen itemler toplu oluyor. Mesela yerde bir çuval olacak ve onun içinde yanglar ve itemlerin hepsi yer alacak. Hem böylelikle entity fazlalığı düşmüş olur. Sizce bu tarz bir şey Metin2’ye uygun olur mu?
Güzel bir düşünce olabilir neden olmasın. Fakat şöyle ki bu oyunun oyuncuları elbette ondada bir bug yapar item kopyalar core çökertir bişey yapar riskli iş. :) En iyisi tek tek item düşürtmek gibi bence :)
 
Bi ara ciddi ciddi böyle bir şeyi kodlamayı düşündüm hatta sıraya eklemiştim ancak bir türlü fırsat ona gelmedi. :)

Metin2’nin drop olayının güzel yanları var tamam ancak bu şekilde çok fazla lag yapıyor. Yanglar vs.
 
Bi ara ciddi ciddi böyle bir şeyi kodlamayı düşündüm hatta sıraya eklemiştim ancak bir türlü fırsat ona gelmedi. :)

Metin2’nin drop olayının güzel yanları var tamam ancak bu şekilde çok fazla lag yapıyor. Yanglar vs.
Aynen slotlar bir yandan düşen itemlar bir yandan lag yapıyor cidden.
 
1637699298635.webp


bu hata neden olabilir?
 
#include "Locale_inc.h" eklemeyi dene. Büyük ihtimalle makroyu algılamıyordur. Ya da #ifdef kısımlarını silip düz olarak eklemeyi dene.
En basit stdafx.h dosyasına locale_inc.h eklemek. Genel cpp ve h dosyalarında stdafx include edildiğinden otomatik olarak locale_inc de include edilmiş olur.
 
#include "Locale_inc.h" eklemeyi dene. Büyük ihtimalle makroyu algılamıyordur. Ya da #ifdef kısımlarını silip düz olarak eklemeyi dene.

Teşekkürler ancak aynı hata devam ediyor. Stdafx.h dosyasına kaydettim sonra düzenlenen dosyalara baktım stdafx.h include edilmemiş, dosyaya include ettim ancak sonuç aynı.

1637748593796.webp

1637748606741.webp


Hata veren kısım burası;
1637748783546.webp
 
Teşekkürler ancak aynı hata devam ediyor. Stdafx.h dosyasına kaydettim sonra düzenlenen dosyalara baktım stdafx.h include edilmemiş, dosyaya include ettim ancak sonuç aynı.

8463 eklentisini görüntüle
8464 eklentisini görüntüle

Hata veren kısım burası;
8465 eklentisini görüntüle
O zaman aklıma gelen diğer ihtimal, PythonPlayerInput.cpp dosyasında #include "PythonItem.h" olmaması. Eğer bu da olmazsa bilemiyorum sistemin kodlarıma bakmadım hiç ve şu an mobilim.
 
Teşekkürler ancak aynı hata devam ediyor. Stdafx.h dosyasına kaydettim sonra düzenlenen dosyalara baktım stdafx.h include edilmemiş, dosyaya include ettim ancak sonuç aynı.

8463 eklentisini görüntüle
8464 eklentisini görüntüle

Hata veren kısım burası;
8465 eklentisini görüntüle
Sorun include değil

PythonItem.cpp:
Genişlet Daralt Kopyala
Aratılır

bool CPythonItem::GetCloseItem(const TPixelPosition & c_rPixelPosition, DWORD * pdwItemID, DWORD dwDistance)
{
...........
}

Kod bloğu altına eklenir.

#ifdef ENABLE_INSTANT_PICKUP_SYSTEM
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;
}
#endif
 
Sorun include değil

PythonItem.cpp:
Genişlet Daralt Kopyala
Aratılır

bool CPythonItem::GetCloseItem(const TPixelPosition & c_rPixelPosition, DWORD * pdwItemID, DWORD dwDistance)
{
...........
}

Kod bloğu altına eklenir.

#ifdef ENABLE_INSTANT_PICKUP_SYSTEM
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;
}
#endif

Teşekkürler, bu şekilde çözüldü.

Toplama menzili için DWORD dwCloseItemDistance = 1000 * 1000; bu kısımı genişletmem gerek değil mi?
 
Geri
Üst