farkmt2official 1
farkmt2official
Mt2Hizmet 1
Mt2Hizmet
Bvural41 1
Bvural41
berzahx 1
berzahx
mavzermete 1
mavzermete
Hikaye Ekle

SQL Fixleyenler Lonca Bugunu Kapatmalı...

  • Konuyu başlatan Konuyu başlatan selim990
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 11
  • Görüntüleme Görüntüleme 4K

Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!

Buda olabilir name değerini unique yapmissin yani tabanda bundan 1 tane olacak baska olmayacak bunu yapinca evet veritabani ayni ismi birdaha yazmaz fakat oyun içerisinde yinede lonca acildi mesajını verebilir bunu bir test etmek gerekiyor.

Bunu ben yapmadım, Orjinal veritabanı tablolarında bu indexler zaten var yok ise eklemelisiniz çünkü unique olması gereken tablo kolonları var player.player tablosunda name kolonu account.account tablosunda login kolonu bunlar orjinalinde olması gereken indexler 2009 da ilk sızdırılan dosyalardaki veritabanını yüklerseniz onun içerisinde var bu indexler
 
Bunu ben yapmadım, Orjinal veritabanı tablolarında bu indexler zaten var yok ise eklemelisiniz çünkü unique olması gereken tablo kolonları var player.player tablosunda name kolonu account.account tablosunda login kolonu bunlar orjinalinde olması gereken indexler 2009 da ilk sızdırılan dosyalardaki veritabanını yüklerseniz onun içerisinde var bu indexler

Test ettim fakat bu tam olarak çözüm değil bu seferde şöyle oluyor başka karakter o lonca isminde lonca açıyor oyunda açıldı diyor yang vs. gerekeni alıyor ama guild.name unique olduğu için aynı isimden yazmıyor o loncadan 1 tane oluyor ve oyunda en son kim o isimde lonca açtıysa onu lider yapıyor ve diğer liderleri siliyor. Sanırım en iyi çözüm orjinal kodlarını kullanmak

92VmpO.jpg


Ayrıca başarılı bir kodlamacı Ken' den mesaj

You don't have to implement the second fix in your source files because there is no potential SQL Injection for MakeGuild. The system is already checking the alpha characters 1 or 2 time(s).
 
Son düzenleme:
Sql açığını fixlemek için girdiğiniz kodlar lonca buguna sebep olmaktadır bug aynı lonca isminden herkes açabilir bunu fixlemek için lonca kodunu hiç değiştirmenize gerek yok orjinalini kullanın sql açığı sadece messenger de mevcuttu loncada yok

guild_manager.cpp içerisinde kod satırını orjinal ile değiştirin.

Kod:
DWORD CGuildManager::CreateGuild(TGuildCreateParameter& gcp)
{
    if (!gcp.master)
        return 0;

    if (!check_name(gcp.name))
    {
        gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드 이름이 ì í•©í•˜ì§€ 않습니다."));
        return 0;
    }

    std::auto_ptr<SQLMsg> pmsg(DBManager::instance().DirectQuery("SELECT COUNT(*) FROM guild%s WHERE name = '%s'",
                get_table_postfix(), gcp.name));

    if (pmsg->Get()->uiNumRows > 0)
    {
        MYSQL_ROW row = mysql_fetch_row(pmsg->Get()->pSQLResult);

        if (!(row[0] && row[0][0] == '0'))
        {
            gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 이미 같은 이름의 길드가 있습니다."));
            return 0;
        }
    }
    else
    {
        gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드를 ìƒì„±í•  수 없습니다."));
        return 0;
    }

    // new CGuild(gcp) queries guild tables and tell dbcache to notice other game servers.
    // other game server calls CGuildManager::LoadGuild to load guild.
    CGuild * pg = M2_NEW CGuild(gcp);
    m_mapGuild.insert(std::make_pair(pg->GetID(), pg));
    return pg->GetID();
}

Bugtan ss
kNsAh.png

Ben şimdi fixlemiştim SQL Açıgını tekrar hangi eski dosyayı atayım ?
 
en saglam çözüm budur
______________________________________

DWORD CGuildManager::CreateGuild(TGuildCreateParameter& gcp)
{
if (!gcp.master)
return 0;


if (!check_name(gcp.name))
{
gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드 이름이 ì í•©í•˜ì§€ 않습니다."));
return 0;
}
static char __escape_name[GUILD_NAME_MAX_LEN * 2 + 1];
DBManager::instance().EscapeString(__escape_name, sizeof(__escape_name), static_cast<const char *>(gcp.name),
sizeof(gcp.name));
std::auto_ptr<SQLMsg> pmsg(DBManager::instance().DirectQuery("SELECT COUNT(*) FROM guild%s WHERE name = '%s'",
get_table_postfix(), __escape_name));


if (pmsg->Get()->uiNumRows > 0)
{
MYSQL_ROW row = mysql_fetch_row(pmsg->Get()->pSQLResult);


if (!(row[0] && row[0][0] == '0'))
{
gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 이미 같은 이름의 길드가 있습니다."));
return 0;
}
}
else
{
gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드를 ìƒì„±í• ìˆ˜ 없습니다."));
return 0;
}


// new CGuild(gcp) queries guild tables and tell dbcache to notice other game servers.
// other game server calls CGuildManager::LoadGuild to load guild.
CGuild * pg = M2_NEW CGuild(gcp);
m_mapGuild.insert(std::make_pair(pg->GetID(), pg));
return pg->GetID();
}
 
Ben şimdi fixlemiştim SQL Açıgını tekrar hangi eski dosyayı atayım ?

fixlerken 2 dosya üzerinde oynama yapmıştın messenger kalsın açık messengerde idi guild de sorun yok o yüzden guild_manager içerisinde kod bloğunu eski haline getir bunda açık yok zaten eski haline getirmezsen oyunda lonca bugu oluşur
 

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

Geri
Üst