oto av modüller ve bazı şeyler [c++]

isthambul1453

Yasaklanmış Üye
Cezalı
Mesaj
354
Çözümler
3
Beğeni
255
Puan
764
Ticaret Puanı
0
7x ile birlikte oto av kullanmak isteyebilirsiniz

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_AUTOMATIC_HUNTING
    if (IsAutoHuntEnabled())
    {
        static DWORD lastAutoHuntTime = 0;
        DWORD currentTime = CTimer::Instance().GetCurrentMillisecond();

        // Attack speed multiplier, where 1.0 = normal speed, 2.0 = twice as fast, etc.
        float attackSpeedMultiplier = 3.0f; // Adjust this value to control attack speed
        DWORD attackInterval = static_cast<DWORD>(1000 / attackSpeedMultiplier);  // Dynamic interval based on multiplier

        if (currentTime - lastAutoHuntTime >= attackInterval)
        {
            // Call SetAutoHuntMode to trigger the attack action
            SetAutoHuntMode(m_attackMode, true, m_isAutoPick, m_attackRange, m_characterOriginX, m_characterOriginY);
            lastAutoHuntTime = currentTime;
        }
    }
#endif

ve oto ava bazı modül kısımları da eklemek isteyebilirsiniz

1753251491058.webp


C++:
Genişlet Daralt Kopyala
instancebase.cpp


#ifdef ENABLE_AUTOMATIC_HUNTING
int CInstanceBase::GetAffectFlags(int affIdx)
{
    if (m_kAffectFlagContainer.IsSet(affIdx))
        return true;
    return false;
}
#endif

instancebase.h

#ifdef ENABLE_AUTOMATIC_HUNTING
        int        GetAffectFlags(int affIdx);
#endif

locale.inc.h

define ENABLE_AUTOMATIC_HUNTING

pythoncharactermodule.cpp

#ifdef ENABLE_AUTOMATIC_HUNTING
PyObject* chrIsAffect(PyObject* poSelf, PyObject* poArgs)
{
    UINT uAffect;
    if (!PyTuple_GetUnsignedInteger(poArgs, 0, &uAffect))
        return Py_BuildException();

    CInstanceBase* pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr();
    if (!pInstance)
        return Py_BuildValue("i", 0);

    return Py_BuildValue("i", pInstance->IsAffect(uAffect));
}

PyObject* chrIsFishing(PyObject* poSelf, PyObject* poArgs)
{
    CInstanceBase* pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr();
    if (!pInstance)
        return Py_BuildValue("i", 0);

    return Py_BuildValue("i", pInstance->IsFishing());
}

PyObject* chrIsDead(PyObject* poSelf, PyObject* poArgs)
{
    int iVirtualID;
    if (!PyTuple_GetInteger(poArgs, 0, &iVirtualID))
        return Py_BuildException();

    CInstanceBase* pInstance = CPythonCharacterManager::Instance().GetInstancePtr(iVirtualID);
    if (!pInstance)
        return Py_BuildValue("i", 0);

    return Py_BuildValue("i", pInstance->IsDead());
}

PyObject* chrGetWeaponType(PyObject* poSelf, PyObject* poArgs)
{
    CInstanceBase* pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr();
    if (!pInstance)
        return Py_BuildNone();

    return Py_BuildValue("i", pInstance->GetWeaponType());
}
#endif

        #ifdef ENABLE_AUTOMATIC_HUNTING
        { "IsAffect",                    chrIsAffect,                        METH_VARARGS },
        { "IsFishing",                    chrIsFishing,                        METH_VARARGS },
        { "IsDead",                        chrIsDead,                            METH_VARARGS },
        { "GetWeaponType",                chrGetWeaponType,                    METH_VARARGS },
        #endif

pythonitem.cpp

#ifdef ENABLE_AUTOMATIC_HUNTING
bool CPythonItem::IsItemNameExist(const std::string& itemName) const
{
    const auto& itemMap = CItemManager::Instance().GetItemMap();

    for (const auto& entry : itemMap) {
        const CItemData* pItemData = entry.second;
        if (pItemData && pItemData->GetName()) {
            std::string itemFullName(pItemData->GetName());
            if (itemFullName.find(itemName) != std::string::npos) {
                return true;
            }
        }
    }
    return false;
}
#endif

pythonitem.h

#ifdef ENABLE_AUTOMATIC_HUNTING
        bool    IsItemNameExist(const std::string& itemName) const;
#endif

pythonitemmodule.cpp

#ifdef ENABLE_AUTOMATIC_HUNTING
PyObject* itemIsItemNameExist(PyObject* poSelf, PyObject* poArgs)
{
    const char* itemName = NULL;

    if (!PyArg_ParseTuple(poArgs, "s", &itemName))
        return Py_BuildException("Invalid argument: expected a string.");

    // Convert C-string to std::string
    std::string itemNameStr(itemName);

    bool found = CPythonItem::Instance().IsItemNameExist(itemNameStr);

    return Py_BuildValue("i", found ? 1 : 0);
}
#endif

        #ifdef ENABLE_AUTOMATIC_HUNTING
        { "IsItemNameExist",                itemIsItemNameExist,                    METH_VARARGS },
#endif

pythonnetworkstreammodule.cpp

#ifdef ENABLE_AUTOMATIC_HUNTING
        { "SaveInfo",                            netSaveInfo,                            METH_VARARGS },
        { "ClearInfo",                            netClearInfo,                            METH_VARARGS },
#endif

pythonplayer.cpp

#ifdef ENABLE_AUTOMATIC_HUNTING
DWORD CPythonPlayer::SkillIndexToAffectIndex(DWORD dwSkillIndex)
{
    // Iterate through the map to find the skill index.
    for (const auto& pair : m_kMap_dwAffectIndexToSkillIndex)
    {
        if (pair.second == dwSkillIndex)  // Check if the skill index matches.
        {
            return pair.first;  // Return the corresponding affect index.
        }
    }

    return DWORD(-1);  // Return an invalid affect index if not found.
}
#endif


#ifdef ENABLE_AUTOMATIC_HUNTING
    /*if (IsAutoHuntEnabled())
    {
        static DWORD lastAutoHuntTime = 0;
        DWORD currentTime = CTimer::Instance().GetCurrentMillisecond();

        if (CTimer::Instance().GetCurrentMillisecond() - lastAutoHuntTime >= 1000) { // 1 second interval
            SetAutoHuntMode(m_attackMode, true, m_attackRange, m_characterOriginX, m_characterOriginY);
            lastAutoHuntTime = currentTime;
        }
    }*/

    if (IsAutoHuntEnabled())
    {
        static DWORD lastAutoHuntTime = 0;
        DWORD currentTime = CTimer::Instance().GetCurrentMillisecond();

        // Attack speed multiplier, where 1.0 = normal speed, 2.0 = twice as fast, etc.
        float attackSpeedMultiplier = 6.0f; // Adjust this value to control attack speed
        DWORD attackInterval = static_cast<DWORD>(1000 / attackSpeedMultiplier);  // Dynamic interval based on multiplier

        if (currentTime - lastAutoHuntTime >= attackInterval) {
            // Call SetAutoHuntMode to trigger the attack action
            SetAutoHuntMode(m_attackMode, true, m_attackRange, m_characterOriginX, m_characterOriginY, m_isAutoPick);
            lastAutoHuntTime = currentTime; // Update the last attack time
        }
    }

#endif

pythonplayer.h

        SetAttackKeyState

#ifdef ENABLE_AUTOMATIC_HUNTING
        void    SetAutoHuntMode(BYTE type, bool state, bool autopickup, int range = 2630, int origin_x = 0, int origin_y = 0);
        static  std::vector<DWORD> GetNearbyPCs(int nDistance);
        bool    IsAutoHuntEnabled();
        bool    IsAutoPickEnabled();
#endif

AffectIndexToSkillIndex
#ifdef ENABLE_AUTOMATIC_HUNTING
        DWORD    SkillIndexToAffectIndex(DWORD dwSkillIndex);
#endif

pythonsystem.cpp

#ifdef ENABLE_AUTOMATIC_HUNTING
void CPythonSystem::SetPickupFilterName(const std::string& itemName)
{
    itemNameFilter[itemName] = true;
}

void CPythonSystem::ClearPickupFilter()
{
    itemNameFilter.clear();
}
bool CPythonSystem::CheckPickupFilterName(const CItemData* pItem) const
{
    std::string itemName = pItem->GetName();

    // Iterate through the itemNameFilter map to check for substring matches
    for (const auto& filterEntry : itemNameFilter) {
        const std::string& filterName = filterEntry.first;

        // Check if filterName is a substring of itemName
        if (itemName.find(filterName) != std::string::npos) {
            return filterEntry.second;
        }
    }
    return false;
}
bool CPythonSystem::CanPickItem(DWORD dwIID)
{
    CItemData* pItemData;
    if (!CItemManager::Instance().GetItemDataPointer(CPythonItem::Instance().GetVirtualNumberOfGroundItem(dwIID), &pItemData))
    {
        Tracenf("CPickUpFilter::CanPickItem(dwIID=%d) : Non-exist item.", dwIID);
        return true;
    }

    if (!CPythonSystem::Instance().CheckPickupFilterName(pItemData))
        return false;
/*     TraceError("can pick lol"); */
    return true;
}
#endif

pythonsystem.h

#ifdef ENABLE_AUTOMATIC_HUNTING
        bool                            CanPickItem(DWORD dwIID);
        void                            SetPickupFilterName(const std::string& itemName);
        void                            ClearPickupFilter();
        bool                            CheckPickupFilterName(const CItemData* pItem) const;

        std::map<std::string, bool> itemNameFilter;
#endif

pythonsystemmodule.cpp

#ifdef ENABLE_AUTOMATIC_HUNTING
PyObject* systemSetPickUpFilterName(PyObject* poSelf, PyObject* poArgs)
{
    PyObject* pyItemNames;
    if (!PyArg_ParseTuple(poArgs, "O!", &PyList_Type, &pyItemNames)) {
        return Py_BuildException();
    }

    if (PyList_Size(pyItemNames) == 0) {
        CPythonSystem::Instance().ClearPickupFilter();
        return Py_BuildNone();
    }

    CPythonSystem::Instance().ClearPickupFilter();

    for (Py_ssize_t i = 0; i < PyList_Size(pyItemNames); i++) {
        const char* itemName = PyString_AsString(PyList_GetItem(pyItemNames, i));
        if (itemName == nullptr || itemName[0] == '\0') {
            continue;
        }

        CPythonSystem::Instance().SetPickupFilterName(itemName);
    }

    return Py_BuildNone();
}
#endif

        #ifdef ENABLE_AUTOMATIC_HUNTING
        { "SetPickUpFilterName",        systemSetPickUpFilterName,        METH_VARARGS },
#endif

part 2

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_AUTOMATIC_HUNTING
PyObject* netSaveInfo(PyObject* poSelf, PyObject* poArgs)
{
    CInstanceBase* pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr();
    if (!pInstance)
        return Py_BuildException("Main instance not found.");

    pInstance->SaveInfo();
    return Py_BuildNone();
}

PyObject* netClearInfo(PyObject* poSelf, PyObject* poArgs)
{
    CInstanceBase* pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr();
    if (!pInstance)
        return Py_BuildException("Main instance not found.");

    pInstance->ClearInfo();
    return Py_BuildNone();
}
#endif

instancebase.cpp

#ifdef ENABLE_AUTOMATIC_HUNTING

// Otomatik avlanma sırasında bilgileri saklamak için kullanılacak alanlar
static BYTE    s_savedAttackMode = 0;
static bool    s_savedAutoPickup = false;
static int    s_savedRange = 0;
static int    s_savedOriginX = 0;
static int    s_savedOriginY = 0;

void CInstanceBase::SaveInfo()
{
    s_savedAttackMode = m_attackMode;
    s_savedAutoPickup = m_isAutoPick;
    s_savedRange = m_attackRange;
    s_savedOriginX = m_characterOriginX;
    s_savedOriginY = m_characterOriginY;
}

void CInstanceBase::ClearInfo()
{
    s_savedAttackMode = 0;
    s_savedAutoPickup = false;
    s_savedRange = 0;
    s_savedOriginX = 0;
    s_savedOriginY = 0;
}

#endif

bir sonraki paylaşımımda bunu paylaşacağım beklemede kalın :)

1753252000799.webp
 
Uyarı: Bu konu açıldığından bu yana baya zaman geçmiş.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.
Geri
Üst