Server tabanlı efsun botu hatalarının çözümü

  • Konuyu açan Konuyu açan DeadLyEscaPe
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 13
  • Gösterim Gösterim 2K

DeadLyEscaPe

Yardımsever Üye
Yardımsever Üye
MT Üye
Mesaj
493
Çözümler
31
Beğeni
127
Puan
574
Ticaret Puanı
0
--- Efsun botuna koyulan eşyaların slot boyutuna göre efekt vermemesi ---

Adsız.png


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


--- Efsun Nesnesi bittiğinde dükkan açık olduğu halde Efsun Nesnesi çekmemesi ---

Not: Bu kodu kaldırmak ne kadar sağlıklı bilmiyorum ama sunucu üzerinde syserr almadım. Efsun botunda da herhangi bir problem yok. Yazılan efsun gelene kadar envantere efsun almadan (Sanırım böyle kodlanmış) ve yang eksilmeden efsun atıyor. Ta ki siz durdurana kadar.

new_switchbot.cpp üzerinde aşağıdaki kod bloğunu kaldırın.

C++:
Genişlet Daralt Kopyala
            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;
            }

@Yenicerii
 

Dosya Eklentileri

En son bir moderatör tarafından düzenlenmiş:
Paylaşım için teşekkürler :)
Yanlış anlamadıysam cpp den o kodu kaldırınca Efsun nesnesine ihtiyaç duymadan mi Efsun atıyor?
 
Paylaşım için teşekkürler :)
Yanlış anlamadıysam cpp den o kodu kaldırınca Efsun nesnesine ihtiyaç duymadan mi Efsun atıyor?

Evet öyle. Bu efsun nesnesini metinden veya bosstan düşürten serverlar için sıkıntı aslında ama diğer türlü 2 saat kurcaladım yapamadım.
 
Evet öyle. Bu efsun nesnesini metinden veya bosstan düşürten serverlar için sıkıntı aslında ama diğer türlü 2 saat kurcaladım yapamadım.
Çok tuhaf bir mantık. Bu durumda bu efsun botunun efsun nesnesini kullanması tamamen formalite gibi :D Tek başına her şeyi yapıyor..
 
Ben başından beri efsun botu gibi bir sistemin sunucuya yük bindirmesini mantıklı bulamadım, .py olarak kullanmak kafi server tabanlı ekstra bir yüke gerek yok bence.
 
Efsun botuna koyulan eşyaların slot boyutuna göre efekt vermemesi

Bu sorunun çözüm linki bozuk. Yeniler misiniz?
 
paylaşım için teşekürler
 
Merhaba arkadaşlar,
Efsun botu kullananlar için bilgi paylaşmak istiyorum.
Kullananlar bilir, char_itemden efsun nesnesinin kullanımını kaldırsanız ve hiç silinmese bile efsun botunu kullandığınız zaman gidiyor. Bunun sebebi new_switchbot.cppdeki kodlamadan kaynaklı. Bu konudaki kodlar çalışsa bile bence yanlış.

Doğrusu bu olacak ;

C++:
Genişlet Daralt Kopyala
            if (SWITCHBOT_PRICE_TYPE == 1)
            {
                for (const auto& itemVnum : c_arSwitchingItems)
                {
                    LPITEM pkItem = pkOwner->FindSpecifyItem(itemVnum);
                    if (pkItem)
                    {
                        pkItem->SetCount(pkItem->GetCount() - SWITCHBOT_PRICE_AMOUNT);
                        break;
                    }
                }
            }
            else if (SWITCHBOT_PRICE_TYPE == 2)
            {
                pkOwner->GiveGold(-SWITCHBOT_PRICE_AMOUNT);
            }

Bu kodlarda gördüğünüz gibi, işlevi yapan kısım burası, kodun açıklamasına yapay zeka aracılığı ile ulaşabilirsiniz.
pkItem->SetCount(pkItem->GetCount() - SWITCHBOT_PRICE_AMOUNT);
Bizi ilgilendiren kısım 1.ifteki bu kısım. Gördüğünüz gibi bot kullanılırken, efsun nesnesinden 1 azaltsın demiş. Onuda nereden anlıyoruz.


common/lenght.h:
Genişlet Daralt Kopyala
#ifdef ENABLE_SWITCHBOT

enum SwitchbotValues
{
    SWITCHBOT_SLOT_COUNT = 5,
    SWITCHBOT_ALTERNATIVE_COUNT = 2,
    //1 = Switching Item
    //2 = Yang
    // Lyrion Efsun Botu
    SWITCHBOT_PRICE_TYPE = 1,
    //Amount Swtichting Items the Yang-Price
    SWITCHBOT_PRICE_AMOUNT = 1,
};

const DWORD c_arSwitchingItems[3] =
{
    // Kullanılacak ?temler
    39028,
    71084,
    76014,
};
#endif
burada gördüğünüz gibi SWITCHBOT_PRICE_AMOUNT = 1, 1 değerini alacak şekilde tanımlanmış. Yani işin özeti şu ;
pkItem->SetCount(pkItem->GetCount() - SWITCHBOT_PRICE_AMOUNT);

Bu 2si birbirine eşit. Kodlarda burayı yorum satırına alırsanız. Efsun botunu kullanırken efsun nesnesini kullanır ama 1 tane eksiltmez. char_item.cppde de bu kodu yorum satırına alırsanız. Elinizde hem efsun botunda hemde envanterde sınırsız kullanım hakkına sahip efsun nesnesi elde edersiniz.

Sevgilerle. İyi Forumlar.
 
Elinde efsun olmadığı halde tek tek efsun atılmasının fixi


new_switchbot.cpp:
Genişlet Daralt Kopyala
void CSwitchbotManager::Start(uint32_t player_id, uint8_t slot, std::vector<TSwitchbotAttributeAlternativeTable> vec_alternatives)
{
    if (!ValidPosition(slot))
        return;

    CSwitchbot* pkSwitchbot = FindSwitchbot(player_id);
    if (!pkSwitchbot)
    {
        sys_err("No Switchbot found for player_id %u slot %d", player_id, slot);
        return;
    }

    if (pkSwitchbot->IsActive(slot))
    {
        sys_err("Switchbot slot %d already running for player_id %u", slot, player_id);
        return;
    }

//No Amount Fix
    LPCHARACTER ch = CHARACTER_MANAGER::Instance().FindByPID(player_id);
    if (!ch)
        return;

    {
        if (SWITCHBOT_PRICE_TYPE == 1)
            if (SWITCHBOT_PRICE_AMOUNT > ch->CountSpecifyItem(71084))
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("SWITCH_BOT_STOP_INFO_1"));
                pkSwitchbot->Stop();
                return;
            }
        else
            if (SWITCHBOT_PRICE_AMOUNT > ch->GetGold())
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("SWITCH_BOT_STOP_INFO_2"));
                pkSwitchbot->Stop();
                return;
            }
    }
//No Amount Fix End
 
Elinde efsun olmadığı halde tek tek efsun atılmasının fixi


new_switchbot.cpp:
Genişlet Daralt Kopyala
void CSwitchbotManager::Start(uint32_t player_id, uint8_t slot, std::vector<TSwitchbotAttributeAlternativeTable> vec_alternatives)
{
    if (!ValidPosition(slot))
        return;

    CSwitchbot* pkSwitchbot = FindSwitchbot(player_id);
    if (!pkSwitchbot)
    {
        sys_err("No Switchbot found for player_id %u slot %d", player_id, slot);
        return;
    }

    if (pkSwitchbot->IsActive(slot))
    {
        sys_err("Switchbot slot %d already running for player_id %u", slot, player_id);
        return;
    }

//No Amount Fix
    LPCHARACTER ch = CHARACTER_MANAGER::Instance().FindByPID(player_id);
    if (!ch)
        return;

    {
        if (SWITCHBOT_PRICE_TYPE == 1)
            if (SWITCHBOT_PRICE_AMOUNT > ch->CountSpecifyItem(71084))
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("SWITCH_BOT_STOP_INFO_1"));
                pkSwitchbot->Stop();
                return;
            }
        else
            if (SWITCHBOT_PRICE_AMOUNT > ch->GetGold())
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("SWITCH_BOT_STOP_INFO_2"));
                pkSwitchbot->Stop();
                return;
            }
    }
//No Amount Fix End
Nasıl yani bende öyle birşey olmuyor.
 
Geri
Üst