Balık Tutarken ( İstediğiniz item'de Duyuru ) C++

Eline sağlık
 
Db ye taşıyorum her seferinde build almaya gerek yok

Kod:
CREATE TABLE IF NOT EXISTS rare_fish_items (
    item_vnum INT PRIMARY KEY
);

Kod:
#include "DBManager.h"
#include <unordered_set>

std::unordered_set<DWORD> g_setRareFishItems;

bool LoadRareFishItems()
{
    g_setRareFishItems.clear();

    std::unique_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery("SELECT item_vnum FROM rare_fish_items"));
    if (pMsg->Get()->uiNumRows == 0)
        return true;

    MYSQL_ROW row;
    while ((row = mysql_fetch_row(pMsg->Get()->pSQLResult)))
    {
        DWORD vnum = strtoul(row[0], nullptr, 10);
        g_setRareFishItems.insert(vnum);
    }

    sys_log(0, " Yüklenen nadir balık eşyası sayısı: %zu", g_setRareFishItems.size());
    return true;
}

bool LoadRareFishItems();
extern std::unordered_set<DWORD> g_setRareFishItems;


Fisihing cpp
Kod:
LPITEM item = ch->AutoGiveItem(item_vnum, 1, -1, false);
if (item)
{
    if (g_setRareFishItems.count(item_vnum))
    {
        const TItemTable* pItemTable = ITEM_MANAGER::instance().GetTable(item_vnum);
        if (pItemTable)
        {
            char szNotice[256];
            snprintf(szNotice, sizeof(szNotice), "[Balık] %s nadir eşyayı yakaladı: %s!", ch->GetName(), pItemTable->szLocaleName);
            BroadcastNotice(szNotice, true);
        }
    }
}

Ekstra bonus olarak reload komuduna uyarlim

Kod:
ACMD(do_reload_fish)
{
    if (!ch->IsGM())
        return;

    if (LoadRareFishItems())
        ch->ChatPacket(CHAT_TYPE_INFO, "Nadir balık eşyaları başarıyla yeniden yüklendi.");
    else
        ch->ChatPacket(CHAT_TYPE_INFO, "Nadir balık eşyaları yüklenirken hata oluştu.");
}

{ "reload_fish", do_reload_fish, 0, POS_DEAD, GM_LOW_WIZARD },
 

eline sağlık.
 

Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)