Fethi Polat 1
Fethi Polat
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Best Studio 1
Best Studio
Agora Metin2 1
Agora Metin2
raderde 1
raderde
Cannn6161 1
Cannn6161
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Mt2Hizmet 1
Mt2Hizmet
melankolıa18 1
melankolıa18
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

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

mistikaptal

Mysteriously Stupidity
TM Üye
Katılım
8 Haz 2024
Konular
85
Mesajlar
526
Online süresi
2mo 12d
Reaksiyon Skoru
407
Altın Konu
0
Başarım Puanı
121
MmoLira
3,278
DevLira
189
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ 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