noisiv 1
noisiv
Manwe Work 1
Manwe Work
farkmt2official 1
farkmt2official
mavzermete 1
mavzermete
dreamstone 1
dreamstone
Fethi Polat 1
Fethi Polat
Bvural41 1
Bvural41
Hikaye Ekle

welberw map aç kapa şeysi

  • Konuyu başlatan Konuyu başlatan mistikaptal
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 25
  • Görüntüleme Görüntüleme 2K

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

welberwden gördüm hoşuma gitti bende neden olmasın ki dedim ama bunu questflagla butona atamalı şekilde yapılabilir gerçi tavsiye etmiyorum zehirli oktur questflag

üşengeç bi insanım şimdi on numara elit bi anlatım çıkarmakla uğraşamiyacam anlayın halimi :(

char.cpp açılır

arat ve bul aşko

if (!CMapLocation::instance().Get(x, y, lMapIndex, lAddr, wPort))
{
sys_err("cannot find map location index %d x %d y %d name %s", lMapIndex, x, y, GetName());
return false;
}

altına şu kodu ekle aşko

if (!IsMapAccessAllowed(lMapIndex))
{
if (GetDesc())
ChatPacket(CHAT_TYPE_INFO, "Bu haritaya giriş şu anda kapalı.");
return false;
}

warpset üstüne bu fonksiyonu ekle aşko

bool IsMapAccessAllowed(long lMapIndex)
{
char query[256];
snprintf(query, sizeof(query), "SELECT access_enabled FROM map_access_control WHERE map_index = %ld", lMapIndex);
std::unique_ptr<SQLMsg> msg(DBManager::instance().DirectQuery(query));
if (msg->Get()->uiNumRows == 0)
return true;
MYSQL_ROW row = mysql_fetch_row(msg->Get()->pSQLResult);
return row && row[0] && atoi(row[0]) != 0;
}

tamamdır aşko şimdi şu query yi okutuyosun aşko

CREATE TABLE IF NOT EXISTS map_access_control (
map_index INT PRIMARY KEY,
access_enabled TINYINT(1) NOT NULL DEFAULT 1
);

1749300761479.png


kanıt from my çokletbar

0 yaparsanız girmez 1 yaparsanız girer anlık çalışır iyi kullanımlar şapşikler <3


C++:
 Aktif sunucuda gereksiz yük oluşturur.
Performans düşüklüğüne sebep olur.
Cache olarak kullanılabilir.

 std::unordered_map<long, bool> g_mapAccessCache;

bool CHARACTER::IsMapAccessAllowed(long lMapIndex)
{
    auto it = g_mapAccessCache.find(lMapIndex);
    if (it != g_mapAccessCache.end())
        return it->second;

    char query[256];
    snprintf(query, sizeof(query), "SELECT access_enabled FROM map_access_control WHERE map_index = %ld", lMapIndex);
    std::unique_ptr<SQLMsg> msg(DBManager::instance().DirectQuery(query));

    bool result = true;
    if (msg->Get()->uiNumRows > 0)
    {
        MYSQL_ROW row = mysql_fetch_row(msg->Get()->pSQLResult);
        result = row && row[0] && atoi(row[0]) != 0;
    }

    g_mapAccessCache[lMapIndex] = result;
    return result;
}

0 = tamamen kapalı
1 = herkes girebilir (default)
2 = sadece GM girebilir

Chat.cpp en üste ekle
#i#includeunordered_map>
static std::unordered_map<long, BYTE> g_mapAccessCache;

Kod:
BYTE CHARACTER::GetMapAccessMode(long lMapIndex)
{
    auto it = g_mapAccessCache.find(lMapIndex);
    if (it != g_mapAccessCache.end())
        return it->second;

    char query[256];
    snprintf(query, sizeof(query), "SELECT access_mode FROM map_access_control WHERE map_index = %ld", lMapIndex);
    std::unique_ptr<SQLMsg> msg(DBManager::instance().DirectQuery(query));

    BYTE accessMode = 1;

    if (msg->Get()->uiNumRows > 0)
    {
        MYSQL_ROW row = mysql_fetch_row(msg->Get()->pSQLResult);
        if (row && row[0])
            accessMode = static_cast<BYTE>(atoi(row[0]));
    }

    g_mapAccessCache[lMapIndex] = accessMode;
    return accessMode;
}


Kod:
bool CHARACTER::IsMapAccessAllowed(long lMapIndex)
{
    BYTE accessMode = GetMapAccessMode(lMapIndex);

    switch (accessMode)
    {
    case 0:
        return false;         // Harita tamamen kapalı
    case 1:
        return true;          // Herkese açık
    case 2:
        return IsGM();        // Sadece GM'ler girebilir
    default:
        return true;
    }
}

Kod:
warpset fonksiyonunun en başına ekleyin.

if (!IsMapAccessAllowed(lMapIndex))
{
    if (GetDesc())
        ChatPacket(CHAT_TYPE_INFO, "Bu haritaya giriş şu anda kapalı.");
    return false;
}

Kod:
void ClearMapAccessCache()
{
    g_mapAccessCache.clear();
}
Bu fonksiyonu bir GM komutuna ya da reload sistemine bağlarsan cache güncellenir.

/map_access set 21 0
Şeklinde gm kodu olarak da yapılabilir
Veya günlük olarak aç kapa otomatik yapacak sistem de yapılabilir.
 
Son düzenleme:

En Çok Reaksiyon Alan Mesajlar

C++:
 Aktif sunucuda gereksiz yük oluşturur.
Performans düşüklüğüne sebep olur.
Cache olarak kullanılabilir.

 std::unordered_map<long, bool> g_mapAccessCache;

bool CHARACTER::IsMapAccessAllowed(long lMapIndex)
{
    auto it = g_mapAccessCache.find(lMapIndex);
    if (it != g_mapAccessCache.end())
        return it->second;

    char query[256];
    snprintf(query, sizeof(query), "SELECT access_enabled FROM map_access_control WHERE map_index = %ld", lMapIndex);
    std::unique_ptr<SQLMsg> msg(DBManager::instance().DirectQuery(query));

    bool result = true;
    if (msg->Get()->uiNumRows > 0)
    {
        MYSQL_ROW row = mysql_fetch_row(msg->Get()->pSQLResult);
        result = row && row[0] && atoi(row[0]) != 0;
    }

    g_mapAccessCache[lMapIndex] = result;
    return result;
}
Paylaşım için teşekkürler.

define isteyenler için. + kod güncellendi sql inj için.


çalışıyor.

Ekran görüntüsü 2025-06-07 170228.png
 
Son düzenleme:

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

Geri
Üst