Çözüldü Server Taraflı Efsun Botu Otomatik Efsun Alma Kapatma

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

LethalStrikeR

Yardımsever Üye
Yardımsever Üye
Üye
Mesaj
700
Çözümler
41
Beğeni
165
Puan
609
Ticaret Puanı
0
Server taraflı efsun botunda otomatik olarak efsun almayı kapatmak istiyorum. Sanırım bu kod bloğundan oluyor yardımcı olabilir misiniz? Ben pasif etmeme rağmen efsun almadan efsun basıyor.

C++:
oid CSwitchbot::SwitchItems()
{
    for (uint8_t bSlot = 0; bSlot < SWITCHBOT_SLOT_COUNT; ++bSlot)
    {
        if (!m_table.active[bSlot])
        {
            continue;
        }

        m_table.finished[bSlot] = false;

        const uint32_t item_id = m_table.items[bSlot];

        LPITEM pkItem = ITEM_MANAGER::Instance().Find(item_id);
        if (!pkItem)
        {
            continue;
        }

        LPCHARACTER pkOwner = pkItem->GetOwner();
        if (!pkOwner)
        {
            return;
        }

        if (CheckItem(pkItem, bSlot))
        {
            LPDESC desc = pkOwner->GetDesc();
            if (desc)
            {
                char bufs[255];
                int32_t len = snprintf(bufs, sizeof(bufs), LC_TEXT("%s Name %d Slot"), pkItem->GetName(), bSlot + 1);

                TPacketGCWhisper pack;
                pack.bHeader = HEADER_GC_WHISPER;
                pack.bType = WHISPER_TYPE_SYSTEM;
                pack.wSize = sizeof(TPacketGCWhisper) + len;
                strlcpy(pack.szNameFrom, "[Efsun Botu]", sizeof(pack.szNameFrom));
                pkOwner->GetDesc()->BufferedPacket(&pack, sizeof(pack));
                pkOwner->GetDesc()->Packet(bufs, len);
            }

            SetActive(bSlot, false);

            m_table.finished[bSlot] = true;

            if (!HasActiveSlots())
            {
                Stop();
            }
            else
            {
                CSwitchbotManager::Instance().SendSwitchbotUpdate(m_table.player_id);
            }
        }
        else
        {
            bool stop = false;
            if (SWITCHBOT_PRICE_TYPE == 1)
            {
                for (const auto& itemVnum : c_arSwitchingItems)
                {
                    
                    if (pkOwner->CountSpecifyItem(itemVnum) >= 1)
                    {
                        stop = false;
                    }
                    else if (pkOwner->CountSpecifyItem(itemVnum) < 1)
                    {
                        if (pkOwner->GetGold() >= 100000)
                        {
                            pkOwner->PointChange(POINT_GOLD, -100000);
                            pkOwner->AutoGiveItem(71084, 200);
                            stop = false;
                        }
                        else
                        {
                            pkOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("yeterli para yok, efsun alinamadi."));
                            
                        }
                    }
                }
            }
            else if (SWITCHBOT_PRICE_TYPE == 2)
            {
                if (pkOwner->GetGold() >= SWITCHBOT_PRICE_AMOUNT)
                {
                    stop = false;
                }
            }

            if (stop)
            {
                Stop();

                if (SWITCHBOT_PRICE_TYPE == 1)
                {
                    pkOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Switchbot stopped. Out of switchers."));
                }
                else
                {
                    pkOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Switchbot stopped. Not enough money."));
                }

                return;
            }

            if (SWITCHBOT_PRICE_TYPE == 1)
            {
                for (const auto& itemVnum : c_arSwitchingItems)
                {
#ifdef UK_ENABLE_SPECIAL_STORAGE
                    LPITEM pkItem = pkOwner->FindSpecifyItemAttr(itemVnum);
#else
                    LPITEM pkItem = pkOwner->FindSpecifyItem(itemVnum);
#endif
                    if (pkItem)
                    {
                        pkItem->SetCount(pkItem->GetCount() - 1);
                        break;
                    }
                }
            }
            else if (SWITCHBOT_PRICE_TYPE == 2)
            {
                pkOwner->PointChange(POINT_GOLD, -SWITCHBOT_PRICE_AMOUNT);
            }
            pkItem->ChangeAttribute();
            SendItemUpdate(pkOwner, bSlot, pkItem);
        }
    }
}
 
Çözüm
Bu şekilde deneyebilir misin?

C++:
void CSwitchbot::SwitchItems()
{
    for (uint8_t bSlot = 0; bSlot < SWITCHBOT_SLOT_COUNT; ++bSlot)
    {
        if (!m_table.active[bSlot])
        {
            continue;
        }

        m_table.finished[bSlot] = false;

        const uint32_t item_id = m_table.items[bSlot];

        LPITEM pkItem = ITEM_MANAGER::Instance().Find(item_id);
        if (!pkItem)
        {
            continue;
        }

        LPCHARACTER pkOwner = pkItem->GetOwner();
        if (!pkOwner)
        {
            return;
        }

        if (CheckItem(pkItem, bSlot))
        {
            LPDESC desc = pkOwner->GetDesc();
            if (desc)
            {
                char bufs[255];
                int32_t len =...
Bu şekilde deneyebilir misin?

C++:
void CSwitchbot::SwitchItems()
{
    for (uint8_t bSlot = 0; bSlot < SWITCHBOT_SLOT_COUNT; ++bSlot)
    {
        if (!m_table.active[bSlot])
        {
            continue;
        }

        m_table.finished[bSlot] = false;

        const uint32_t item_id = m_table.items[bSlot];

        LPITEM pkItem = ITEM_MANAGER::Instance().Find(item_id);
        if (!pkItem)
        {
            continue;
        }

        LPCHARACTER pkOwner = pkItem->GetOwner();
        if (!pkOwner)
        {
            return;
        }

        if (CheckItem(pkItem, bSlot))
        {
            LPDESC desc = pkOwner->GetDesc();
            if (desc)
            {
                char bufs[255];
                int32_t len = snprintf(bufs, sizeof(bufs), LC_TEXT("%s Name %d Slot"), pkItem->GetName(), bSlot + 1);

                TPacketGCWhisper pack;
                pack.bHeader = HEADER_GC_WHISPER;
                pack.bType = WHISPER_TYPE_SYSTEM;
                pack.wSize = sizeof(TPacketGCWhisper) + len;
                strlcpy(pack.szNameFrom, "[Efsun Botu]", sizeof(pack.szNameFrom));
                pkOwner->GetDesc()->BufferedPacket(&pack, sizeof(pack));
                pkOwner->GetDesc()->Packet(bufs, len);
            }

            SetActive(bSlot, false);

            m_table.finished[bSlot] = true;

            if (!HasActiveSlots())
            {
                Stop();
            }
            else
            {
                CSwitchbotManager::Instance().SendSwitchbotUpdate(m_table.player_id);
            }
        }
        else
        {
            bool stop = true;
            if (SWITCHBOT_PRICE_TYPE == 1)
            {
                if (pkOwner->CountSpecifyItem(71084) >= 1)
                {
                    stop = false;
                }
            }
            else if (SWITCHBOT_PRICE_TYPE == 2)
            {
                if (pkOwner->GetGold() >= SWITCHBOT_PRICE_AMOUNT)
                {
                    stop = false;
                }
            }

            if (stop)
            {
                Stop();

                if (SWITCHBOT_PRICE_TYPE == 1)
                {
                    pkOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Switchbot stopped. Out of switchers."));
                }
                else
                {
                    pkOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Switchbot stopped. Not enough money."));
                }

                return;
            }

            if (SWITCHBOT_PRICE_TYPE == 1)
            {
                for (const auto& itemVnum : c_arSwitchingItems)
                {
#ifdef UK_ENABLE_SPECIAL_STORAGE
                    LPITEM pkItem = pkOwner->FindSpecifyItemAttr(itemVnum);
#else
                    LPITEM pkItem = pkOwner->FindSpecifyItem(itemVnum);
#endif
                    if (pkItem)
                    {
                        pkItem->SetCount(pkItem->GetCount() - SWITCHBOT_PRICE_AMOUNT);
                        break;
                    }
                }
            }
            else if (SWITCHBOT_PRICE_TYPE == 2)
            {
                pkOwner->PointChange(POINT_GOLD, -SWITCHBOT_PRICE_AMOUNT);
            }
            pkItem->ChangeAttribute();
            SendItemUpdate(pkOwner, bSlot, pkItem);
        }
    }
}
 
Çözüm
Bu şekilde deneyebilir misin?

C++:
void CSwitchbot::SwitchItems()
{
    for (uint8_t bSlot = 0; bSlot < SWITCHBOT_SLOT_COUNT; ++bSlot)
    {
        if (!m_table.active[bSlot])
        {
            continue;
        }

        m_table.finished[bSlot] = false;

        const uint32_t item_id = m_table.items[bSlot];

        LPITEM pkItem = ITEM_MANAGER::Instance().Find(item_id);
        if (!pkItem)
        {
            continue;
        }

        LPCHARACTER pkOwner = pkItem->GetOwner();
        if (!pkOwner)
        {
            return;
        }

        if (CheckItem(pkItem, bSlot))
        {
            LPDESC desc = pkOwner->GetDesc();
            if (desc)
            {
                char bufs[255];
                int32_t len = snprintf(bufs, sizeof(bufs), LC_TEXT("%s Name %d Slot"), pkItem->GetName(), bSlot + 1);

                TPacketGCWhisper pack;
                pack.bHeader = HEADER_GC_WHISPER;
                pack.bType = WHISPER_TYPE_SYSTEM;
                pack.wSize = sizeof(TPacketGCWhisper) + len;
                strlcpy(pack.szNameFrom, "[Efsun Botu]", sizeof(pack.szNameFrom));
                pkOwner->GetDesc()->BufferedPacket(&pack, sizeof(pack));
                pkOwner->GetDesc()->Packet(bufs, len);
            }

            SetActive(bSlot, false);

            m_table.finished[bSlot] = true;

            if (!HasActiveSlots())
            {
                Stop();
            }
            else
            {
                CSwitchbotManager::Instance().SendSwitchbotUpdate(m_table.player_id);
            }
        }
        else
        {
            bool stop = true;
            if (SWITCHBOT_PRICE_TYPE == 1)
            {
                if (pkOwner->CountSpecifyItem(71084) >= 1)
                {
                    stop = false;
                }
            }
            else if (SWITCHBOT_PRICE_TYPE == 2)
            {
                if (pkOwner->GetGold() >= SWITCHBOT_PRICE_AMOUNT)
                {
                    stop = false;
                }
            }

            if (stop)
            {
                Stop();

                if (SWITCHBOT_PRICE_TYPE == 1)
                {
                    pkOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Switchbot stopped. Out of switchers."));
                }
                else
                {
                    pkOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Switchbot stopped. Not enough money."));
                }

                return;
            }

            if (SWITCHBOT_PRICE_TYPE == 1)
            {
                for (const auto& itemVnum : c_arSwitchingItems)
                {
#ifdef UK_ENABLE_SPECIAL_STORAGE
                    LPITEM pkItem = pkOwner->FindSpecifyItemAttr(itemVnum);
#else
                    LPITEM pkItem = pkOwner->FindSpecifyItem(itemVnum);
#endif
                    if (pkItem)
                    {
                        pkItem->SetCount(pkItem->GetCount() - SWITCHBOT_PRICE_AMOUNT);
                        break;
                    }
                }
            }
            else if (SWITCHBOT_PRICE_TYPE == 2)
            {
                pkOwner->PointChange(POINT_GOLD, -SWITCHBOT_PRICE_AMOUNT);
            }
            pkItem->ChangeAttribute();
            SendItemUpdate(pkOwner, bSlot, pkItem);
        }
    }
}
Oldu teşekkürler. Bende buna benzer bir şey yapmıştım ama
C++:
                if (pkOwner->CountSpecifyItem(71084) >= 1)

                {

                    stop = false;

                }
bu döngüyü de kaldırmışım :D
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst